Get bitbucket to work with git-bash on Windows

Add public key to bitbucket account setting SSH keys.

On Windows, add a System environment variable:

GIT_SSH -> C:\Program Files\PuTTY\plink.exe

Run peagent.exe, load the private key.

At the first time, run putty, enter git@bitbucket.org, then open, cache the key.

Now key is cached, we can run git clone from git-bash without problem.

更改MySQL的root的密码

升级了MySQL, root的密码被升没了。

先把mysql关掉:

sudo service mysql stop

在一个terminal里启动:

sudo -u mysql mysqld --skip-grant-tables --skip-networking

在另一个terminal里运行mysql客户:

mysql

在客户里:

mysql> flush privileges;
mysql> use mysql;
mysql> update user set authentication_string=PASSWORD("新密码") where User='root';
mysql> update user set plugin="mysql_native_password";
mysql> flush privileges;
mysql> quit

这样就行了。

找到mysql服务器pid把它kill掉,重新启动:

sudo service mysql start

重设CPAN镜像

现在还是有人在用Perl的,比如我们。

用Perl多数时候都会用cpan,用cpan时一般是从一个cpan镜像下载软件包,有的cpan镜像有时好用有时不好用,没有能力让服务器持续在线的组织(比如:华中科技大学)最好不要做公告镜像,那不是帮人,是害人。

好在改变cpan所用镜像也很容易。

进入cpan:

cpan

列出现在的镜像:

o conf urllist

我的输出是:

urllist
    0 [http://mirrors.hust.edu.cn/CPAN/]
    1 [http://ftp.neowiz.com/CPAN/]
    2 [http://cpan.sarang.net/]

华中科技大学的镜像排在第一个,但当时mirrors.hust.edu.cn是宕掉的。

把第一个shift掉:

o conf urlist shift

再确认:

o conf commit

就行了。

如果要加镜像:

o conf urllist push http://cpan.sarang.net/

push也可用unshift代替,push是加到后面,unshift是加到前面。

如果要用其他镜像代替现有镜像,则不要push或unshift就可以了。

编译安装PHP7和Slim

以前说过怎样从ppa安装php7,这次是怎样编译源码并安装PHP7和Slim框架

##首先一些准备工作

在命令行:

sudo apt-get install libcurl4-openssl-dev libgmp-dev libmhash-dev libmcrypt-dev
sudo ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

这个连接也许不用做,在Ubuntu14.04上,gmp头文件不在/usr/include/gmp.h以至于configure找不到。

##下载解压configure、编译安装

下载解压:

wget http://cn2.php.net/get/php-7.0.11.tar.xz/from/this/mirror -O php.tar.xz
tar xfJ php.tar.xz 
cd php-7.0.11/

configure:

./configure --prefix=/usr/local \
--enable-fpm \
--with-fpm-user=nobody \
--with-fpm-group=nogroup \
--with-config-file-path=/usr/local/etc \
--with-config-file-scan-dir=/usr/local/etc/php.d \
--with-pcre-regex \
--with-zlib \
--with-openssl \
--enable-bcmath \
--with-curl \
--with-gd \
--enable-gd-native-ttf \
--with-gmp \
--with-mhash \
--enable-mbstring \
--with-mcrypt \
--with-pdo-mysql \
--with-readline \
--with-openssl-dir \
--with-xmlrpc \
--with-xsl \
--enable-zip \
--enable-mysqlnd \
--with-pear

如果用postgres, 可以加:

--with-pgsql \
--with-pdo-pgsql \

Fedora和Ubuntu16.04用Systemd,可以加:

--with-fpm-systemd \

编译安装:

make
sudo make install

最好把最后sudo make install的输出保存下来,特别是Installing shared extensions:位置。

##安装composer

wget https://getcomposer.org/installer -O composer-setup.php
sudo php composer-setup.php
sudo mv composer.phar /usr/local/bin/composer
sudo chown -R $USER:$USER ~/.composer/

##安装使用Slim和slim-skeleton

composer config -g repo.packagist composer https://packagist.phpcomposer.com  # 用国内镜像
composer create-project slim/slim-skeleton myproj
cd myproj/
php -S 0.0.0.0:8003 -t public public/index.php

在浏览器上打开http://ip:8003,可以看到slim的初步页面

页面的源码在src/,渲染的模板是templates/index.phtml。

升级 MySQL 到 5.7

MySQL 5.7 有了JSON数据类型,对我们很有用,但Ubuntu 12.04和14.04上是5.5和5.6,所以我们决定升级。

卸载MySQL旧版本

    sudo apt-get remove mysql-client-5.5 mysql-server-5.5  # 如果是5.6就把5.5换成5.6
    sudo apt-get autoremove

准备apt

这里 点击”Download”按钮,进去后拷贝No thanks, just start my download.连接:

https://dev.mysql.com/get/mysql-apt-config_0.8.0-1_all.deb

可能最新的版本会不一样。

下载这个文件:

wget https://dev.mysql.com/get/mysql-apt-config_0.8.0-1_all.deb

加入apt源:

sudo dpkg -i mysql-apt-config_0.8.0-1_all.deb

运行时会出现选项,让mysql 5.7高亮,回车即可。

安装 MySQL 5.7

    sudo apt-get update
    sudo apt-get install mysql-server-5.7

升级原有数据库

    sudo mysql_upgrade -u root -p --force

安装Bugzilla

Bugzilla是个很老的bug跟踪系统,但现在还是可以用的。

准备

我们用Apache cgi运行Buzilla,这样速度和效率会降低,但我们用户量并不多,这样安装配置都很简单,也足够用。

sudo apt-get install apache2 libgd-dev libyaml-perl

libgd-dev是可选的。

Bugzilla是Perl写的,一般系统里都有Perl,所以不需另外安装。

下载解压

Bugzilla官网得到下载连接。

选择一个目录位置,比如/var/www,把bugzilla加压到这里。

wget https://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-5.0.3.tar.gz
tar xfz bugzilla-5.0.3.tar.gz -C /var/www/

安装Bugzilla

下列操作最好用root用户进行。

sudo su
cd /var/www/bugzilla-5.0.3/
vi localconfig

在localconfig里,把

$webservergroup = 'apache';

改为:

$webservergroup = 'www-data';

因为在Ubuntu上,apache的默认用户是www-data。

再把:

$db_driver = 'mysql';

改为:

$db_driver = 'sqlite';

如果用户量不多,sqlite数据库就足够了,也省得我们再去配置MySQL了。

运行:

unset PERL_MB_OPT  # 保证不被安装到/root
unset PERL_MM_OPT  # 保证不被安装到/root
./checksetup.pl
./install-module.pl DateTime
./install-module.pl DateTime::TimeZone
./install-module.pl GD

再运行./checksetup.pl,看还有什么需要安装的用./install-module.pl安装。

配置Apache

还是做为root用户

cd /etc/apache2/mods-enabled/
ln -s ../mods-available/cgi.load .
ln -s ../mods-available/rewrite.load .
vi /etc/apache2/sites-enabled/000-default.conf

/etc/apache2/sites-enabled/000-default.conf的VirtualHost里,加入:

DocumentRoot /var/www/bugzilla-5.0.3

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

<Directory /var/www/bugzilla-5.0.3/>
    AddHandler cgi-script .cgi
    Options +ExecCGI
    DirectoryIndex index.cgi index.html
    AllowOverride Limit FileInfo Indexes Options AuthConfig
</Directory>

重启Apache:

service apache2 restart

如果有错误就去/var/log/apache2里看error.log。

自建内部pypi镜像

如果你需要部署内部开发的python软件库,或者你的外网访问不稳定,你可以考虑自建pypi镜像。

安装pypiserver服务器

你的镜像服务器一定要和外网连接,要不然你无从下载软件库(除非你只提供内部开发的软件库,这情况是很少见的)。

选一个合适的位置,如你自己~/pypiserver下, 如果你要让镜像服务器运行在80端口,则需要以root运行,安装位置则可以选择例如/opt/pypiserver

下面以机器IP(192.168.5.13),用户目录下pypiserver为例,在venv环境安装pypiserver:

cd
mkdir -p pypiserver/packages
cd pypiserver
pyvenv .venv
.venv/bin/pip install pypiserver

运行pypiserver:

.venv/bin/pypi-server -p 8081 packages/

在其他机器的浏览器打开地址: http://192.168.5.13:8081/simple, 你会看到Simple Index字样,没有其他任何内容,这是因为你还没有任何package。

在服务器(192.168.5.13)上保持pypiserver继续运行,打开另一个terminal,下载packages:

先下载一个pytest最新版本:

cd pypiserver
pip install pytest -d packages

你需要什么库什么版本就下载什么版本,如SQLAlchemy 0.9.10和lxml 3.6.3:

pip install sqlalchemy==0.9.10 lxml==3.6.3 -d packages

现在如果在浏览器上刷新http://192.168.5.13:8081/simple,你会发现上面有了packages的名字。

使用pypiserver服务器

现在你的pypiserver服务器可以作为一个pypi镜像使用了,就像pypi.douban.com/simple和mirrors.aliyun.com/pypi/simple一样,使用方法也一样。和公共镜像不同的是:公共镜像(豆瓣阿里等)有所有软件package的所有版本,而你的私有镜像只有你放上去的packages和版本。

如果你的用户机不能访问外网,你只能用内部私有镜像,则将你的~/.pip/pip.conf设为:

[global]
index-url=http://192.168.5.13:8081/simple
trusted-host=192.168.5.13

当你要安装的一个package你私有镜像里没有,它会自动转向官方服务器(http://pypi.python.org/simple)从那里下载。你如果希望转向国内的镜像服务器,则你启动pypiserver里要加fallback-url,如:

.venv/bin/pypi-server --fullback-url http://pypi.douban.com/simple -p 8081 packages/

注意只要你的镜像里有一个package的版本,即使官方或者公共镜像上有其他版本,你pip客户也拿不到,比如:你镜像里lxml 只有3.6.3或者你有多个版本但最新版是3.6.3,你在客户机上安装:

pip3 install lxml

就会获得3.6.3。就算你知道官方最新版是3.6.4,你也是无法安装的:

pip install lxml --upgradepip install lxml==3.6.4 都不会成功。

但是如果你的用户机可以访问外网,你也可以在用户机加公共镜像以补充私有镜像,你的~/.pip/pip.conf设为:

[global]
index-url=http://192.168.5.13:8081/simple
extra-index-url=http://pypi.douban.com/simple
trusted-host=192.168.5.13 pypi.douban.com

这样,pip install lxml --upgradepip install lxml==3.6.4 都会成功。

pip使用pypi的国内镜像

我们用pip安装Python软件库时有时会特别慢,这是因为从国内访问缺省的国外pypi服务器非常慢,幸亏国内有pypi镜像,访问这些镜像服务器就快得多了。

根据我们经验豆瓣和阿里的镜像速度、稳定性、更新频率算好的,地址分别是:

http://pypi.douban.com/simple
http://mirrors.aliyun.com/pypi/simple

用pip时可以直接使用这些镜像,比如安装selenium,版本2.52.0:

pip3 install selenium==2.52.0 -i http://pypi.douban.com/simple
pip3 install selenium==2.52.0 -i http://mirrors.aliyun.com/pypi/simple

如果你pip版本较新,访问非https必须加trusted-host:

pip3 install selenium==2.52.0 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 install selenium==2.52.0 -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

如果要让pip以后都用国内镜像,而省去每次打那么多字,可以修改pip配置文件:

mkdir -p ~/.pip
vi ~/.pip/pip.conf  # vi可用emacs, pico其他文本编辑器代替

文本内容:

[global]
index-url=http://pypi.douban.com/simple
trusted-host=pypi.douban.com

或者用阿里:

[global]
index-url=http://mirrors.aliyun.com/pypi/simple
trusted-host=mirrors.aliyun.com

如果你需要更高的速度和稳定性,你可以选择自己建Pypi镜像,请看相关文章。

Ubuntu上装Python3

一般来讲,你可以直接:

sudo apt-get install python3

来安装Python3,然后再装我们经常用到的venv:

sudo apt-get install python3.4-venv`

新的Ubuntu如16.04里python缺省就是python3.5,所以什么也不用做。

但是如果你需要更新的Python版本,比如你要用asyncio,它只在3.5以后才有,你的ubuntu 14.04的python3是3.4,或者你想用f字串,3.6才有,你的Ubuntu16.04的Python是3.5,或者你就是不喜欢Ubuntu提供的版本,这些情况你就只有自己装了。

步骤

  • 准备

除了build-essential libz-dev libssl-dev libxml2-dev等一般编译所需要的包外,最好安装这些额外的包:

sudo apt-get install liblzma-dev libbz2-dev libsqlite3-dev libreadline6-dev
  • 下载源码:

官网下载你要的版本的源码,我们以3.6.0b1为例。

wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0b1.tar.xz
  • 编译

通常的解压、配置、编译

tar xfJ Python-3.6.0b1.tar.xz 
cd Python-3.6.0b1/
./configure
make
  • 安装

把可执行文件、库、头文件装到/usr/local

sudo make install

/usr/local/bin里python3,pip3,pyvenv这三个可执行文件就可供使用了。

安装支持http2的nginx

下载安装openssl

一般系统自带的openssl版本比较老,不能支持HTTP2,我们需要自己下载编译openssl。

选取一个位置,到openssl官网下载openssl源码,现在(2016/9)已经有1.1版本,但它刚出来,鉴于稳定性考虑,笔者还是推荐1.0版。

下面以用户下downloads目录为例,下载1.0.2h版openssl:

cd ~/downloads
wget https://www.openssl.org/source/openssl-1.0.2i.tar.gz
tar xfz openssl-1.0.2i.tar.gz
cd openssl-1.0.2i/
./config --prefix=/usr/local --openssldir=/usr/local/openssl
make depend
make
sudo make install

下载安装nginx

nginx官网下载源码,配置、编译、安装。

cd ~/downloads
wget http://nginx.org/download/nginx-1.11.4.tar.gz
tar xfz nginx-1.11.4.tar.gz
cd nginx-1.11.4/
# 下面最好先 ./configure --help > my-configure
# 然后编辑my-configure,配置好你需要的,再打`sh my-configure`执行
# 这里就用一行命令行以清晰表达
./configure \
--prefix=/usr/local \
--conf-path=/usr/local/etc/nginx/nginx.conf \
--user=nobody \
--group=nogroup \
--with-http_ssl_module \
--with-openssl=/home/yourname/downloads/openssl-1.0.2i \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-http_auth_request_module  \
--without-http_fastcgi_module \
--without-http_uwsgi_module \
--without-http_scgi_module \
--without-http_memcached_module \
--http-client-body-temp-path=/usr/local/tmp/http-client-body-temp \
--http-proxy-temp-path=/usr/local/tmp/http-proxy-temp \
--with-cc-opt='-DTCP_FASTOPEN=23'
# 配置行结束
make
sudo make install

上面配置里可以加上你需要的nginx模块,比如:--with-http_realip_module, --with-http_mp4_module等。

安装后配置文件夹在/usr/local/etc/nginx下,配置nginx是另外话题,就不在这里写了。