2019独角兽企业重金招聘Python工程师标准>>>
##前言 虽然日常的学习和工作都在windows上完成,但与学习和工作无关的业余时间里,我喜欢捣鼓linux。在将光盘驱动换成500G硬盘之后,我就在新硬盘上装了个fedora 20系统。但不得不让人吐槽的是,fedora系统并不尽如人意,比如要自己编译vim(我添加了各种支持,python、python3、ruby、tcl、ruby、lua,省得以后再为某种使用重新搞一次编译),fedora上居然提示我xsubpp的问题(谷歌也不得其解)。
在浏览osc的相关内容的时候,我发现了vagrant(应该是老早关注docker的时候,想在windows上使用docker,docker官方的文档里提到了vagrant)。使用了这货之后,发觉它相当适合我。最近心血来潮,想学学django开发,于是就开始了配置环境之路。
##vagrant的简介 vagrant就是一个虚拟化工具,用于创建和配置轻量级、可重用、便捷的开发环境,支持多种虚拟化平台(virtualbox,vmware,hyper-v等)。另外加一点,开发vagrant的HashiCorp公司是相当不错的,除了vagrant之外,它还有packer(如其字面意思是打包开发环境的软件,与vagrant结合使用)和serf(这个不怎么关注)。 ##vagrant简单使用 百度搜索vagrant,可以得到一大堆的博客介绍如何使用vagrant,我就不多说,仅依凭官方文档及自己的平常使用来说明一下。
要使用vagrant,首先要下载这个软件。它提供了windows和linux的二进制版本,方便安装。我是使用virtualbox的,于是也下载安装了最新版的virtualbox。
安装好vagrant之后,根据自己的需求去找相关的打包好的box(官方文档说这是vagrant环境的包格式),当然也可以自己去打包一个box(我没有那样的折腾精神,毕竟在开发环境上没有我的个人信息,使用他人打包好的环境也是可以的)。找box的地方有两个,一个是旧的,另一个是新的。
vagrant支持自定义插件(当然是用ruby写的),为了让vagrant能够自动更新box里的virtual guest additions(或者自己更新),我谷歌到了一个vagrant-vbguest插件。根据其文档,后面的vagrantfile将添加一些内容。
ubuntu trusty版本即将发布,有一系列的新特性,但我关注的不是这个,只是想用新一点库,而且我也不用其桌面系统。于是我去vagrantcloud里找trusty,看到了ubuntu官方的cdimage里有官方的给出的box,于是就下了这个。当然有其他的版本,都是可以的,看个人需求了。
下来以后,就开始使用了,为避免box更新的麻烦,于是就自定义了一个在vagrant cloud里找不到的box。
vagrant init phm/trusty64
它会自动生成一个vagrantfile,我根据官方文档及自己的使用将其更改如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :VAGRANTFILE_API_VERSION = "2"Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|config.vm.box = "phm/trusty64"# 自定义的box地址,默认是要从vagrant cloud上下载的。config.vm.box_url = "phm.box"# 不要让vagrant自动检测box的更新,因为我是不会更新这box的config.vm.box_check_update = false# 自定义的trusty主机名config.vm.hostname = "trusty-phm"# 自定义的网络端口映射config.vm.network "forwarded_port", guest: 4000, host: 14000config.vm.network "forwarded_port", guest: 8000, host: 18000config.vm.network "forwarded_port", guest: 5432, host: 15432config.vm.network "forwarded_port", guest: 80, host: 10080# 我的代码是直接推送到github或者gitoschina上的,不需要与主机同步config.vm.synced_folder "./data", "/vagrant", disabled: true# 插件vbguest的一些设置# 启用virtual guest additions的自动更新config.vbguest.auto_update = true# 不要远程下载virtual guest addtionsconfig.vbguest.no_remote = true# vboxguestaddions.iso文件的本地地址config.vbguest.iso_path = "F:/HashiCorp/VBoxGuestAdditions.iso"
end
当然要把刚刚下载来的box放到这个vagrantfile所在的目录里,并重命名成与vagrantfile里相同的名称。然后就是简单的启动命令
vagrant up
命令执行完成后,就可以用
vagrant ssh
或者用其他的终端登录工具登录了,我是用xshell的(因为是在windows上,其用户名是vagrant,密码也是vagrant,ssh地址和端口是127.0.0.1:2222)。 ##trusty的配置 ###更新软件 登录进这个trusty之后,我第一件要做的事就是更改其apt源。我用的是中科大的源,当然也可以是其他的源,oschina源也行(但不得不吐槽oschina的速度有时还是有点慢,不如中科大的,可能我是教育网用户的缘故)。更改/etc/apt/sources.list成如下
deb http://mirrors.ustc.edu.cn/ubuntu trusty main universe restricted multiverse
deb http://mirrors.ustc.edu.cn/ubuntu trusty-security main universe restricted multiverse
deb http://mirrors.ustc.edu.cn/ubuntu trusty-updates main universe restricted multiverse
deb http://mirrors.ustc.edu.cn/ubuntu trusty-backports main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu trusty main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu trusty-security main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu trusty-updates main universe restricted multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu trusty-backports main universe restricted multiverse
接下来就是更新软件,因为ubuntu的cdimage里vagrant的box版本是2月22日的,软件肯定略旧。执行
sudo apt-get update && sudo apt-get dist-upgrade
进行软件更新。更新之后最好重启一下:
sudo reboot
###安装zsh 我比较喜欢zsh(其实也是因为在osc的博客里看到有人介绍oh-my-zsh,然后到github上看到了它相当惊艳的一面,于是就决定使用它以代替bash),于是就安装zsh:
sudo apt-get install zsh
然后,再把oh-my-zsh给弄来:
curl -L http://install.ohmyz.sh | sh
之后把shell换成zsh,并对.zshrc做点小改动。
由于是要学习django,那么python是必安装的,庆幸的是trusty已经提供了最新版本的python2和python3。于是我就不去弄pyenv这种东西了。更主要的是pip(python的包管理插件)支持--user选项,即在不改动系统的python包下把包安装到用户目录下。
###编译vim 我不太喜欢ubuntu官方编译的vim,一是它的版本没有跟进,二是它的库支持不全(个人见解)。于是我克隆其github的代码(是vim在google code上版本库的镜像):
git clone https://github.com/b4winckler/vim.git
(若提示git命令未找到,那就要安装git-core,
sudo apt-get install git-core
)
在编译vim之前要把编译vim的依赖库安装好,主要是官方编译vim依赖的库
sudo apt-get build-dep vim
然后再确认依赖包是不是都安装了
sudo apt-get install libncurses5-dev python-dev python3-dev \
ruby-dev tcl-dev liblua5.2-dev libperl-dev
之后就开始进入vim源码文件夹里开始configure,选项有点多
./configure --prefix=/home/vagrant/devlibs/vim --enable-pythoninterp \
--enable-python3interp --enable-rubyinterp --enable-tclinterp \
--enable-perlinterp --enable-luainterp --with-features=huge \
--with-compiledby="Xiaoming
--enable-multibyte --enable-sniff --enable-cscope --disable-gpm \
--without-x --disable-gui
只在命令行操作trusty,不需要gui或者x,同时需要支持中文(multibyte),安装在用户目录而不是系统的/usr/local里。这些完成后,就是make了:
make VIMRUNTIMEDIR=/home/vagrant/devlibs/vim/share/vim/vim74
这里这个VIMRUNTIMEDIR不能错了,就是在要安装的目录里的share文件夹下,不然在编译安装之后运行vim命令会报错无法找到一些东西。漫长的等待(估计也就七八分钟时间)之后就可以执行
make install
了。然后把vim的安装目录添加进path里(必须在/usr/bin和/usr/local/bin之前,否则系统的vim会代替自行编译安装的vim)。
###vim配置 这里vim的配置我主要是使用了spf13的配置,省得自己各种麻烦去配置了。
sh <(curl https://j.mp/spf13-vim3 -L)
然后它会一路安装下去&#xff0c;包括一些插件的安装&#xff0c;只是耗时较长&#xff0c;我是大概用了15分钟才安装好的&#xff08;不得不吐槽网速跟某墙的重要性&#xff09;。
spf13我唯一不满意的是它居然默认不换行的&#xff08;代码要是很长就悲剧了&#xff09;。我是用github的配色方案的&#xff0c;在.vimrc.local里输入&#xff1a;
colo github
我还在.vimrc.bundles.before里设置了一下g:spf13_bundle_groups&#xff0c;因为我并不需要所有的插件&#xff0c;主要是去掉了一些我用不到的语言插件。
###.zshrc的配置
export ZSH&#61;$HOME/.oh-my-zshZSH_THEME&#61;"agnoster-phm"plugins&#61;(pip git wd tmux python django per-directory-history gitignore)source $ZSH/oh-my-zsh.sh# ssh
export SSH_KEY_PATH&#61;"~/.ssh/id_rsa_github:~/.ssh/id_rsa_heroku"# My Own Libs
export PATH&#61;$HOME/devlibs/vim/bin:$PATHexport http_proxy&#61;http://218.108.170.164:80
其中zsh的插件里我选取了一些可能用到的程序以及工具。per-directory-history就是把每一个目录里的执行过的命令记录下来&#xff0c;这样方便历史命令的查找。http_proxy是指http代理&#xff0c;我用的是杭州华数的代理&#xff0c;目前是免费的&#xff0c;而且速度相当不错。 ###django的配置 我喜欢前沿一点的东西&#xff0c;于是对于django我就去学最新的dev版了。首先是克隆django的版本库&#xff1a;
git clone https://github.com/django/django.git
然后安装之&#xff1a;
pip3 install -e django/ --user
之后就参考django的官方文档开始学习了。