vagrant使用及trusty的配置记录

前言

虽然日常的学习和工作都在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 <[email protected]>" \
--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的官方文档开始学习了。

你可能感兴趣的:(vagrant,配置,vim,trusty)