Vagrant Boxs
Vagrant Boxs
box是vagrant環境下打包的格式。box可以被用在任何需要用Vagrant創建獨立工作環境的平臺中。Vagrantbox命令集提供了所有管理box的功能。最簡單使用box的方法是從box公共獲取目錄中添加一個box.當然也可以在這個網站上增加和共享你的box.它還支持版本控制,這樣同一個團隊的使用低版本的人,就很容易進行升級。同事創建box的人還可以修復問題并且可以對這些問題有效的溝通。
發現box
最簡單的尋找box的方法,是到公共box目錄中尋找你想要用的。這個目錄中已經包含主要的操作系統,同時還有一些有特定功能的box比如包含LAMP,Ruby,python等其他軟件的。
在公共box目錄中的box可以有很多的提供者。不管你是用Virtualbox,VMware,還是AWS等。都可以找到你所需要的。
從公共目錄中給本地添加box非常容易。每個box都給你展示了怎么添加box。但是基本的格式都是這樣:
?
$ vagrant box add USER/BOX比如:vagrant box add hashicorp/precise64.也可以快速的初始化vagrant環境用下面的命令:vagrant init hashicorp/precise64
正式Box
HashiCorp(類似于vagrant超市) 提供了一個基本的Ubuntu12.04(32和64位)box。這個box高度優化,非常小,包含了支持virtualbox和VMware。你可以用下面的命令來使用
?
$ vagrant init hashicorp/precise64或者是更新你的vagrantfile這樣
?
Vagrant.configure("2") doconfig.box = "hashicorp/precise64" end對于其他人員來說,我們建議使用Bento box。這個box對很多提供者來說是開源的,比如說vmware、virtualbox,或者parallels。這里有很多的操作系統和版本可以提供。?
BOX版本控制
從varant1.5開始,box支持版本控制。這就可以讓發布box的人,更新box,那些使用box的人只要通過很簡單流程,就可以更新,并且可以看到做了哪些改變。
如果你剛開始用vagrant,box的版本控制就不是那么重要。我們建議先去學習其他的內容。如果你用vagrant在一個工作組中,或者打算創建一個自己的box,版本控制就很重要了。幸運的是,vagrant的版本控制,使他非常簡單使用和適用于vagrant的工作流。
查看和更新版本
vagrant box list 會列出所有安裝box的版本。如果想查看所有可以獲取的box版本,可以通過HashiCorp的冊子來查看。一個簡單的方式是通過https://atlas.hashicorp.com/$USER/$BOX.
例如,尋找hashicorp/precise64的信息可以在這個網址獲取https://atlas.hashicorp.com/ hashicorp/precise64。
可以通過命令vagrant box outdated命令來查看你所采用的box是否過期。也可以通過vagrant
box update命令來更新box.這個命令會下載和更新box.對于一個正在運行的vagrant環境,這個命令是不會更新的。如果一個vagrant環境正在運行,必須注銷或者重新創建才能獲取更新。更新命令把這些更新下載到本地。
版本限制
可以通過在vagrantfile配置config.vm.box_version選項來控制vagrant環境一個指定的版本或者版本集合。如果這個選項沒有配置,最新的版本就會被采用。相當于設置“>=0”.box的版本控制可以指定為某個版本或者版本集合。可以使用下來的這些來控制版本包括"=X,>X <X, >=X,<=X ~X"。可以用多個這些邏輯字符來限制,他們之間用逗號分割。上面的這些邏輯命令大部分都很常見,除了"~X",這個可以被理解為悲觀約束。比如~>1.0相當于>=1.0,<2.0;~>1.1.5相當于>=1.1.5,<1.2.0
你可以選擇你合適的方式處理版本。然而,許多公共目錄中的box都遵循語法控制。基本上只有第一個數字會打破向后兼容。在vagrant box的集合中,版本為1.1.5的box后續版本可能為1.2或者1.4.5等等。但是2.0版本就可以以為著做了很大的改動,會破壞你的軟件。在這種模式下,最好的限制版本方式是~>1.0,這樣的話,你就知道不管怎么樣,都是安全的。
自動更新檢測
用vagrantfile,你也可以配置vagrant自動檢查更新在運作vagrant up期間。這個默認是允許的。當然也可以用config.vm.box_check_update=false變量來禁用。當這個允許使用的時候,每次運行vagrantup都會檢查更新。不僅僅當機器開始重新創建的時候,當從暫停中重啟的時候也會執行。
當找到一個更新版本的時候,vagrant會顯示出一個警告,告訴用戶這里有個更新可以使用。用戶可以選擇暫時忽略警告或者是通過運行vagrant box update命令來更新經過。
vagrant不能自動下載和更新升級包,因為升級包很大并且需要把之前的刪掉重建。這樣會導致重要數據丟失。所以這個過程是手動的,需要在命令行模式中升級。
刪除舊版本
vagrant不會自動刪除舊的版本,因為他不知道舊的版本是否被別的環境采用。因為box都很大,你可以通過vagrant box remove命令來徹底刪除。
BOX文件格式
過去,Box僅僅是virtualbox導出的tar文件。隨著vagrant支持各種各樣的提供者或者版本控制,box文件應該稍微有點復雜。
現在的box有2部分組成。
- box文件-這是個壓縮文件對于每個提供者是不同的,這里面包含了所有的東西。vagrant不用這個文件的任何內容,他是傳給提供者的。所以對于不同的提供者他的格式是不同的,比如virtualbox的文件和VMware的文件是不同的。
- box目錄元數據--這是個JSON文件,在這個文件里面指定了,box的名字,簡單的描述,可用的版本,可用的提供者,實際box文件的URL等等。如果這個文件不存在,box文件同樣可以直接添加,但是不是支持版本控制和更新。
BOX文件
box文件是vagrant運行需要的。建議你用一個源文件當然,壓縮文件因為歷史原因也是支持的。
用tar,tar.gz,zip命令來壓縮box文件。這個打包可以是任何一個,對于每個提供者,他是指定的。vagrant內核都會在后續過程中為用戶解壓。
在壓縮文件中,vagrant需要一個文件:metadata.json。這是一個JSON文件,他和box目錄中的元數據部分一點關系都沒有。每個box都有一個metadata.json。然而每個元數據JSON文件可以描述同一個box的多個版本。潛在生成多個提供者。
metadata.json至少包含包含一個提供者的鍵。vagrant用這個來檢測box的提供者。例如,你的提供者是Virtualbox,那么metadata.json應該是
{"provider": "virtualbox" }如果沒有metadata.json文件或者是這個文件沒有包含有效的提供者的json,添加box的時候,vagrant會報錯,因為他沒法檢測提供者是什么。
其他增加的鍵值對就不會存在這個問題。這些數值會暗地里傳到vagrant和相關插件。
BOX的元數據
元數據是box的可選部件。有了這個部件支持版本控制,更新,多提供者。他是一個JSON文件,類似于下面的格式。
{"name": "hashicorp/precise64","description": "This box contains Ubuntu 12.04 LTS 64-bit.","versions": [{"version": "0.1.0","providers": [{"name": "virtualbox","url": "http://somewhere.com/precise64_010_virtualbox.box","checksum_type": "sha1","checksum": "foo"}]}] }就像你看到的,這個文件可以描述不同的版本,不同的提供者,可以對不同的版本添加或者刪除提供者。
這個文件可以通過vagrant box add命令通過指定一個本地路徑或者URL,Vagrant會安裝合適的box.同時JSON文件中的URL可以是一個文件路徑。如果支持多個提供者,vagrant會詢問采用哪個提供者
創建一個基本的box
基本的box是一個特殊類別的box.他們包含vagrant運行的最基本的功能,并且是原始的box而不是在現有的box上修改而成的。例如,vagrant提供的Ubuntu的box,就是基本的box。他是從最小的ubuntu安裝盤安裝的而不是打包一個現有的系統。基本的盒子對于從一個干凈的環境中創建一個開發環境非常有用。vagrant希望將來能夠為更多的操作系統提供box.
基本的BOX是什么
基本的盒子僅僅是有讓vagrant運行的簡單的功能組成。舉例來說:一個linux的box包含下列部分:
- 打包管理
- SSH
- SSH用戶
- Chef或者Puppet,不是必須需要。
除此之外,每個提供者可能還需要額外的軟件。例如,如果你創建了一個virtualbox的基本box,需要包含virtualbox客戶插件,這樣共享文件夾才能實現。但對于AWS的box來說,就不是必須的了。
創建一個基本的Box
創建一個基本的box完全依賴于提供者。也就是說根據你安裝的提供者是VirtualBox、VMware、還是AWS等不同。創建一個基本box而不同。正因為如此,一片文章不可能包含所有的創建box
硬盤空間
當創建一個基本的盒子。需要確保用戶能夠有足夠的空間來做一些事情。例如,在VirtualBox中,應當設置一個含有最大值的動態擴展的驅動器。這就使得驅動器開始的時候很小,但是可以隨著需要動態增長。這就給用戶提供了最大的便利性。
如果你創建了個AWS基本盒子,不需要強制分配幾個T的空間。因為用戶可以自己需要的時候,自己創建。但是默認應該是掛載上臨時驅動器的,因為是免費并且提供足夠空間的。
內存
和硬盤空間一樣,找到掛載內存大小的平衡點非常重要。對于大多數的提供者來說,用戶可以通過修改vagrantfile修改內存空間。所以默認不需要設置太多。如果設置幾G的內存空間,啟動的時候用戶體驗非常差。通常設置為512M對于大多數的應用來說,就已經足夠了。
外設
在基本的box中,禁用任何不必須的硬件比如音頻、USB控制器等。這些對于vagrant來說都不是必須的,這些也都可以通過vagrantfile簡單的增加上。
默認用戶設置
Vagrant幾乎每個特性都可以修改。然而,vagrant并不希望你修改。如果你打算發布你創建的版本的話,就應當按照這些默認設置來。如果你打算創建一個自己用的box就不用遵循下面的這些規則了。
vagrant用戶
默認情況下,vagrant有個vagrant用戶可以通過SSH連接到虛擬機。這個用戶應當被設置為一個不安全的密鑰,這樣vagrant就可以被當作一個默認的用戶了。雖然,vagrant用戶是基于密鑰的認證,但是通常慣例是,密碼也設置為vagrant。這樣用戶就可以手動登錄.
為了配置SSH訪問不安全的密鑰對,把公鑰放在~/.ssh/authorized_keys目錄下。注意OpenSSH對于密鑰的要求是非常嚴格的。確保~/.ssh有0700模式,授權密鑰文件應該有0600模式。
當vagrant啟動一個box的時候,如果發現一個不安全的密鑰對,為了更加安全,他會自動用一個隨機生成的密鑰對替換之前的。
Root密碼:vagrant
vagrant實際上并不需要設置任何的root密碼。然而,如果知道root的密碼,將會是發布的box進行修改更加簡單。共用獲取的box通常用vagrant作為root密碼。
沒有密碼的Sudo
許多Vagrant應用期望默認SSH用戶對于sudo用戶沒有配置密碼。這樣讓Varant配置網絡、掛載同步文件夾、安裝軟件。
對于一些最小的操作系統來說,他們甚至不包含sudo。檢查一下你的系統是否安裝sudo.安裝完成后,把vagrant用戶配置為沒有用戶。可以在配置文件中這么配置。
?
vagrant ALL=(ALL) NOPASSWD: ALL默認情況下,通過SSH連接的時候,vagrant不是用putty或者tty來的。你還需要確保配置文件中沒有requiretty。如果存在的話,就刪除掉。這就讓sudo運行時不需要tty。
SSH 調整
當你的機器或者vagrant創建的機器沒有連接Internet的時候,可以把SSH服務配置中的UseDNS設置為no,來加速SSH。這樣避免了反向DNS查找SSH客戶機的時間。
Window的BOX
支持的window類型:win7,win8,win server2008,win server2008 r2,win server2012,winserver 2012 r2.win server 2003和winxp不支持。但是如果你是xp的忠實粉絲,這個可能有幫住。
基本的windows配置
- 關閉用戶代理客戶機
- 禁用復雜密碼
- 禁用關閉跟蹤程序
- 禁止開機啟動服務管理
除了在控制面板關閉用戶代理客戶機外,還需要在注冊表中關閉。對于不同的window版本可能不同,但是win8/8.1可以用下面的命令。這將允許類似于自動puppet安裝到win的box中。
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /d 0 /t REG_DWORD /f /reg:64基本的WinRM配置
為了配置WinRM,需要設置WinRM服務自動啟動并且允許非加密認證。從window基本的命令行窗口運行下面的命令。
winrm quickconfig -q winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"} winrm set winrm/config @{MaxTimeoutms="1800000"} winrm set winrm/config/service @{AllowUnencrypted="true"} winrm set winrm/config/service/auth @{Basic="true"} sc config WinRM start= auto增加WinRM1.1配置
下面這些額外的配置主要針對Win server2008(WinRM 1.1),對于win server2008 r2,win7和后續的window版本這些配置可以忽略。
1、確認windows的powshell已經安裝
2、更改winrm的端口到5985或者升級winrm到2.0
下面的命令將會更改winrm1.1的端口
netsh firewall add portopening TCP 5985 "Port 5985" winrm set winrm/config/listener?Address=*+Transport=HTTP @{Port="5985"}總結
以上是生活随笔為你收集整理的Vagrant Boxs的全部內容,希望文章能夠幫你解決所遇到的問題。