##前言
虽然日常的学习和工作都在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: 14000
config.vm.network "forwarded_port", guest: 8000, host: 18000
config.vm.network "forwarded_port", guest: 5432, host: 15432
config.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 addtions
config.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 <phm8341@gmail.com>" \
--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)
然后它会一路安装下去,包括一些插件的安装,只是耗时较长,我是大概用了15分钟才安装好的(不得不吐槽网速跟某墙的重要性)。
spf13我唯一不满意的是它居然默认不换行的(代码要是很长就悲剧了)。我是用github的配色方案的,在.vimrc.local里输入:
colo github
我还在.vimrc.bundles.before里设置了一下g:spf13_bundle_groups,因为我并不需要所有的插件,主要是去掉了一些我用不到的语言插件。
###.zshrc的配置
export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="agnoster-phm"
plugins=(pip git wd tmux python django per-directory-history gitignore)
source $ZSH/oh-my-zsh.sh
# ssh
export SSH_KEY_PATH="~/.ssh/id_rsa_github:~/.ssh/id_rsa_heroku"
# My Own Libs
export PATH=$HOME/devlibs/vim/bin:$PATH
export http_proxy=http://218.108.170.164:80
其中zsh的插件里我选取了一些可能用到的程序以及工具。per-directory-history就是把每一个目录里的执行过的命令记录下来,这样方便历史命令的查找。http_proxy是指http代理,我用的是杭州华数的代理,目前是免费的,而且速度相当不错。 ###django的配置 我喜欢前沿一点的东西,于是对于django我就去学最新的dev版了。首先是克隆django的版本库:
git clone https://github.com/django/django.git
然后安装之:
pip3 install -e django/ --user
之后就参考django的官方文档开始学习了。
来源:oschina
链接:https://my.oschina.net/u/1174224/blog/215877