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