張曉亞 廣東理工學(xué)院電氣工程系 韓文龍 廣州愛立信通信設(shè)備有限公司
Vagrant是一種虛擬機(jī)管理工具,基于Ruby語言開發(fā),主要而不僅用于Oracle VM VitrualBox虛擬機(jī)的管理。Vagrant官方網(wǎng)站https://www.vagrantup.com給出的口號(hào)是:Development Environments Made Easy,讓開發(fā)環(huán)境變得易于搭建。Vagrant為開發(fā)者、運(yùn)維人員提供了相同的、易于操作的搭建開發(fā)環(huán)境的搭建工作流。他提供了一個(gè)聲明式的配置文件,用于描述所有的需要的軟件、開發(fā)包、操作系統(tǒng)配置、用戶和其他。程序開發(fā)中修復(fù)bug的成本會(huì)指數(shù)級(jí)地增加其生產(chǎn)的距離。Vagrant通過提供相同的操作系統(tǒng)、包、用戶和配置來鏡像生產(chǎn)環(huán)境,同時(shí)讓用戶能夠靈活地使用他們最喜歡的編輯器、IDE和瀏覽器。Vagrant還集成了您現(xiàn)有的配置管理工具,如Chef,Puppet,anUNK,或Salt,因此您可以像在生產(chǎn)環(huán)境一樣使用相同的腳本來配置Vagrant。
圖1 Vagrant架構(gòu)圖
以下以最受關(guān)注的開發(fā)語言Python軟件開發(fā)環(huán)境為例,對(duì)使用vagrant工具搭建真實(shí)的Ubuntu操作系統(tǒng)虛擬開發(fā)環(huán)境進(jìn)行闡述。需要先從http://www.vagrantbox.es/這個(gè)網(wǎng)站下載vagrantbox的操作系統(tǒng)box文件。這里使用的是https://github.com/sepetrov/trusty64/releases/download/v0.0.5/trusty64.box為64位ubuntu
操作系統(tǒng)的box文件。使用命令“vagrant box add trusty64trusty64.box”,即可添加一個(gè)名為trusty64的box到本地box倉(cāng)庫(kù)。到需要使用虛擬機(jī)的目錄下使用命令“vagrantinittrusty64”就可以把本地的box初始化到當(dāng)前文件夾,使用命令“vagrantup”和“vagrantssh”即可以啟動(dòng)和連接vagrant創(chuàng)建的虛擬機(jī)。以上可以看出Vagrant對(duì)于虛擬機(jī)創(chuàng)建的高效和便捷,同樣對(duì)于虛擬機(jī)的環(huán)境搭建同樣方便。下面為Python開發(fā)的常見環(huán)境:
(1)Python3.x;
(2)Pip工具;
(3)pypandoc、json-tools、py4j、requests、setuptools 等python庫(kù);
如果要打通開發(fā)環(huán)境(window下)和測(cè)試環(huán)境(VM下),還需要:
(4)共享文件夾;
以及其他的一些系統(tǒng)設(shè)置:
(5)硬盤分配大小;
(6)內(nèi)存;
(7)cpu核心數(shù);
c on fi g.v m.net work "pr ivate_net work", ip:"192.168.59.30"。這里設(shè)置虛擬機(jī)的ip為固定ip192.168.59.30,可以在宿主機(jī)器使用ssh連接。
config.vm.provider "virtualbox" do |v|
v.name = "dev"
v.memory = 1024
v.cpus = 1
end
這里設(shè)置主機(jī)名為dev,并設(shè)置內(nèi)存大小為1024,cup核心數(shù)為1核。
工作中可以把工作目錄掛載到虛擬機(jī)目錄,這樣可以隨時(shí)在虛擬機(jī)中得到最新的代碼,隨時(shí)進(jìn)行測(cè)試運(yùn)行。config.vm.synced_folder "../../eea-work", "/data/eea/rms/current"。這里把宿主機(jī)的"../../eea-work"目錄掛載到虛擬機(jī)"/data/eea/rms/current"目錄。
在實(shí)際使用中可以靈活的使用shell腳本進(jìn)行python依賴包的安裝。
config.vm.provision "shell", inline: <<-SHELL #需要執(zhí)行的shell命令
echo "---------------------Upgrading System------------"
sudorm -R /var/lib/apt/lists/*
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install build-essential
sudo apt-get install python-dev
sudo apt-get install python-pip -y
echo "---------------------Upgrading pip-------------------"
sudo pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
SHELL
也可以使用”config.vm.provision "shell", path:"./script/shell.sh”直接執(zhí)行腳本文件。這里使用的shell腳本。
對(duì)vagrant的配置文件進(jìn)行Vagrantfile配置,配置文件內(nèi)容及說明如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "trusty64" #使用的box文件
config.vm.hostname="dev" #虛擬機(jī)名稱
c on fi g.v m.net work "pr ivate_net work", ip:"192.168.59.30" #ip配置
config.vm.provider "virtualbox" do |v|
v.name = "master" #主機(jī)名
v.memory = 1024 #內(nèi)存大小
v.cpus = 1 #核心數(shù)
end
config.vm.synced_folder "../../eea-work", "/data/eea/rms/current" #共享
config.vm.provision "shell", inline: <<-SHELL #需要執(zhí)行的shell命令
echo "---------------------Upgrading System------------"
sudorm -R /var/lib/apt/lists/*
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get install build-essential
sudo apt-get install python-dev
sudo apt-get install python-pip -y
echo "---------------------Upgrading pip-------------------"
sudo pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
SHELL
end
8box打包和發(fā)布
最后對(duì)于vagrant已經(jīng)配置完成box,可以使用“vagrant package output box_name.box”,進(jìn)行box打包,打包成的box文件可以進(jìn)行分發(fā),這樣多個(gè)開發(fā)人員基于同一個(gè)box,使用“vagrant box add box_namebox_name.box”添加box后,再用“vagrant initbox_name”進(jìn)行box初始化后,就擁有了和分發(fā)者相同的開發(fā)環(huán)境。
首先下發(fā)這個(gè)文件到另一臺(tái)電腦的一個(gè)目錄下,在這個(gè)電腦下創(chuàng)建如下目錄結(jié)構(gòu)eea-work/test/vagrant/.eea-work為實(shí)際工作目錄,vagrant目錄下為vagrant配置目錄。在vagrant目錄下使用命令vagrant up啟動(dòng)虛擬機(jī),使用vagrantssh登錄虛擬機(jī),使用ls/data/eea/rms/current查看是否有工作開發(fā)的文件。
基于Vagrant的環(huán)境搭建,不以搭建的宿主的環(huán)境限制,可以在任何的平臺(tái)搭建。搭建的過程相當(dāng)?shù)谋憬莺秃?jiǎn)單。搭建后的環(huán)境可以使用Vagrantfile,分發(fā)配置的方式分發(fā),也可以使用box_name.box,分發(fā)box的方式分發(fā)。軟件開發(fā)人員可以減少大量的配置開發(fā)環(huán)境的時(shí)間,把更多的精力用于軟件的編程和功能的實(shí)現(xiàn)上。
[1]郭亮,郭海智,謝光.基于Vagrant部署程序設(shè)計(jì)類課程實(shí)驗(yàn)教學(xué)環(huán)境[J].實(shí)驗(yàn)科學(xué)與技術(shù),2017(5):70-75.
[2]劉娜,王旭.基于云計(jì)算的服務(wù)交付模型[J].信息技術(shù)與標(biāo)準(zhǔn)化.2014(10):32-35.
[3]何凱,劉偉.基于虛擬機(jī)的網(wǎng)絡(luò)管理與維護(hù)實(shí)驗(yàn)教學(xué)探索,實(shí)驗(yàn)技術(shù)與管理,2016(33):201-204.