我回應我自己的問題,以捕捉我發現的東西。
有一種方法,使盒飯,Veewee,流浪和Ruby在半明智的方式一起工作,但它是複雜的。最好使用最新版本的Bento來代替Veewee和Packer工具。
帕克確實或多或少什麼Veewee做,但做了一些很大的改進,包括:
每個封隔器盒的定義是,指的腳本文件的簡單列表一個JSON文件 - 不再三層文件與符號鏈接;更容易理解和更好的源代碼控制。
Packer二進制文件是OS本機可執行文件(不再在Ruby中)。你可以將它們放在你的路徑上的某個地方(比如Linux上的/ usr/local/bin)來部署它們。 Packer避免了Ruby的瘋狂。
下面是一個簡單的工作流程:
安裝VirtualBox。安裝Bento。 Bento也將安裝Vagrant作爲Ruby寶石;但我們不會使用這種流浪者的例子。使用適用於您的操作系統的本機安裝程序分別安裝Vagrant。
爲您的項目選擇一個名稱,用於目錄&文件名。 (在這個例子中,我使用「CUSTOM」)。在bento/packer/scripts目錄中創建一個空的子目錄。我做了mkdir CUSTOM
。
查看.../bento/packer中的.JSON文件。你可以在原地修改一個,或者可以更改一個&。我做了cp centos-6.4-x86_64.json centos-6.4-x86_64-CUSTOM.json
。
編輯該文件的「構建器」部分以更改VM的磁盤大小,RAM大小,ssh端口等。
編輯「供應方」部分,「輸出」行提供要創建的文件盒一個有意義的名字。 (在這個例子中,我使用「BOXFILE」)。請注意,您可以嵌入{{timestamp}}
以將Unix時間戳添加到文件名 - 有助於使文件名具有唯一性。
編輯該文件的「供應方」部分是指任何腳本(按順序)要在帕克運行構建序列。這通常是Packer已經提供的腳本的組合,以及您爲自定義目的而構建的任何其他腳本的組合。
我使用的方法是這樣的:
"provisioners": [
{
"execute_command": "echo 'vagrant' | {{.Vars}} sudo -S -E bash '{{.Path}}'",
"scripts": [
"scripts/common/sshd.sh",
"scripts/common/vagrant.sh",
"scripts/common/vmtools.sh",
"scripts/CUSTOM/reso_1024x768.sh",
"scripts/CUSTOM/prompt_cwd.sh",
"scripts/CUSTOM/standard_dirs.sh",
"scripts/CUSTOM/standard_utils.sh",
"scripts/CUSTOM/python27.sh",
"scripts/CUSTOM/supervisord.sh",
"scripts/CUSTOM/ruby.sh",
"scripts/centos/cleanup.sh",
"scripts/common/minimize.sh"
],
"type": "shell"
}
注意我的自定義腳本都出現在清理之前,儘量減少步驟 - 這是很重要的。
從bento/packer目錄運行packer build -only=virtualbox centos-6.4-x86_64-CUSTOM.json
。如果之前尚未下載VirtualBox客戶端加載項和基礎操作系統的磁盤映像(ISO),則會立即生效;這些文件很大,所以這一步可能需要一段時間。
包裝機使用VirtualBox的創建一個臨時VM,並運行在你的全部指定的腳本。完成此過程後,會使用上面指定的BOXFILE名稱在bento/builds/visualbox目錄中捕獲VM的副本,並且Packer會丟棄VirtualBox VM。
註冊剛剛用Vagrant構建的框。使用單獨安裝的Vagrant版本(例如,您可能需要指定/ usr/local/bin/vagrant或任何適合您的操作系統的版本),請執行vagrant box add CUSTOM path/to/BOXFILE
。這會在〜/ .vagrant.d/boxes/CUSTOM/VirtualBox中創建一個新的子目錄,其中Vagrant需要通過這個盒子定義創建虛擬機。
創建一個Vagrant項目目錄並將其放入光盤中。我做了mkdir ~/test; cd ~/test
。 vagrant init CUSTOM
啓動VM:vagrant up
連接到VM:
使用此框初始化流浪項目vagrant ssh
在這一點上,你使用通常,流浪者和Bento/Packer不再參與其中 - 他們的合併工作就是創建基地箱,一旦註冊了Vagrant,Vagrant stand一個人。
有很多其他有趣的事情來看待重:流浪,喜歡流浪的特殊-AWS插件,以及如何與廚師,木偶或Ansible使用它......但我就講到這裏,因爲我原來的問題被回答。
你碰巧有任何代碼在GitHub上看看? –