安装及准备

切换到python独立环境

1
$ pyenv virtualenv salt-2.7.8

获取代码:

1
2
$ git clone https://github.com/saltstack/salt
$ git fetch --tags

安装:

1
2
3
$ env SWIG_FEATURES="-cpperraswarn -includeall -D__`uname -m`__ -I/usr/include/openssl" pip install M2Crypto
$ pip install pyzmq PyYAML pycrypto msgpack-python jinja2 psutil
$ pip install -e ./salt

配置:

1
$ mkdir -p $(dirname `pyenv which python`)/../etc/salt
$ cp ./salt/conf/master ./salt/conf/minion $(dirname `pyenv which python`)/../etc/salt

master配置文件:

  1. user: root
  2. root_dir: $(dirname pyenv which python)/..
  3. pidfile: $(dirname pyenv which python)/../salt-master.pid
  4. publish_port: 14505
  5. ret_port: 14506

minion配置文件:

  1. user: root
  2. root_dir: $(dirname pyenv which python)/..
  3. pidfile: $(dirname pyenv which python)/../salt-minion.pid
  4. master: localhost
  5. id: saltdev
  6. master_port: 14505

运行启动:

1
2
3
4
5
6
$ cd $(dirname `pyenv which python`)/../
$ salt-master -c ./etc/salt -d
$ salt-minion -c ./etc/salt -d
$ salt-key -c ./etc/salt -L
$ salt-key -c ./etc/salt -A
$ salt -c ./etc/salt '*' test.ping

其他:

  1. 通过-l debug开启debug模式,去掉-d直接输出到console。
  2. socket path在linux上最多107个字符,可以通过缩短sock_dir和root_dir字符。
  3. ulimit -n检查File descriptor limites,至少2047:ulimit -n 2048

文档生成

1
2
3
$ pip install Sphinx==1.3b2
$ cd doc; make html
$ cd _build/html; python -m SimpleHTTPServer

Tests

1
$ ./setup.py test

参考:

  1. saltstack官方文档

Python开发环境搭建

用阿里Yun的源给pip和easy_install加速

~/.bashrc:

1
alias easy_install='easy_install -i http://mirrors.aliyun.com/pypi/simple/'

安装pip:

1
$ easy_install pip

~/.pip/pip.conf:

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

多版本管理pyenv, virtualenv

1
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ exec $SHELL -l
$ export PYTHON_BUILD_MIRROR_URL="http://pyenv.qiniudn.com/pythons/" #加速, Official: http://yyuu.github.io/pythons/

安装pyenv-virtualenv plugin:

1
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
$ exec "$SHELL"

安装centOS系统开发环境工具:

1
$ yum groupinstall -y "Development Tools"
$ yum install -y readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs

安装隔离的python环境:

1
$ pyenv install --list
$ pyenv install 2.7.8
$ pyenv rehash

查看切换版本:

1
$ pyenv versions
$ pyenv global 2.7.8 #OR Use: pyenv local 2.7.8

新建环境,检查环境列表:

1
$ pyenv virtualenv 2.7.8 my-2.7.8 #OR from current version: pyenv virtualenv venv34
$ pyenv virtualenvs

Activate环境:

1
pyenv activate <name>
pyenv deactivate

卸载环境,与卸载某个python版本相同:

1
pyenv uninstall my-virtual-env

相关变量:

1
PYENV_VIRTUALENV_CACHE_PATH
VIRTUALENV_VERSION
EZ_SETUP/GET_PIP # use ez_setup.py and get_pip.py from the specified location.
EZ_SETUP_URL/GET_PIP_URL # download ez_setup.py and get_pip.py from the specified URL.
SETUPTOOLS_VERSION/PIP_VERSION # install the specified version of setuptools and pip.

建立自己的PyPi服务器

目前可以用Artifactory, Sonatype Nexus等作为Java的私有仓库和Mirros,虽然Artifactory Pro版也支持PyPi,甚至yum、npm等其他仓库,但目前看要$1000+,期望后续Sonatype Nexus有免费的套餐~
稍微麻烦点可以自己架设一个devpi:

1
2
3
4
5
6
7
$ pip install devpi-server
$ devpi-server --version # 查看版本
$ devpi-server --start
$ pip install -i http://localhost:3141/root/pypi/ simplejson #简单测试
$ devpi-server --status
$ devpi-server --stop
$ devpi-server --log

正式部署及其他方案可以参考下面。

参考:

  1. Python多版本共存之pyenv
  2. 用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
  3. pyenv-virtualenv Official site
  4. Quickstart: running a pypi mirror on your laptop
  5. Quickstart: permanent install on server/laptop
  6. Quickstart: uploading, testing, pushing releases
  7. Survey of Existing PyPI Implementations

更改/etc/localtime

删除/etc/localtime:

1
$ rm -f /etc/localtime

比如选择中国上海时区,重新做个软链接:

1
$ ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

配置NTP服务器

修改/etc/ntp.conf:

1
...
restrict 10.0.100.0 mask 255.255.255.0 nomodify #允许某网段客户端访问
...
server s1a.time.edu.cn #使用教育网内时间源
server 127.127.1.0 #本地时钟,当断网时保证同步
fudge 127.127.1.0 stratum 10
...

启动ntpd服务:

1
$ service ntpd start

客户端同步时间:

1
$ ntpdate 10.0.100.6

可以用crontab定时同步,如每2小时同步一次,crontab -e:

1
0 */2 * * * /usr/sbin/ntpdate 10.0.100.6

参考:

  1. linux下超简单的ntp时间服务器
  2. Linux下crontab的使用