live with scopepython
作爲Linux
的愛好者, 表示對沒有完整易用的命令行工具的Windows
平臺無愛. 可是, 在Linux
長期使用中, 深感它的圖形界面實在太糟糕了. 一般有三種方式來得到Linux
的體驗, 一是Cygwin
平臺, 它實現了將Linux
軟件的底層API
調用轉換爲Windows
的API
. 二是安裝雙系統, 但Linux
圖形界面的容錯性不好, Ubuntu
常常會顯示軟件崩潰. 三是使用虛擬機, 在VMware
或VirtualBox
上.linux
Vagrant
是個虛擬機管理器, 它主要作這樣幾件事: 1, 將虛擬機打包成box
; 2, 將box
分發; 3, 第三者獲取box
, 解壓得到虛擬機. 它解決的主要痛點是, 如何爲團隊成員搭建相同的開發環境, 以解決軟件運行依賴問題. 程序員的經典梗之一: 這代碼在我機子上運行正常啊, 怎麼上傳到服務器上就掛了呢. 固然, 簡單粗暴的方法是將虛擬機每人拷貝一份.git
對我而言, 沒有什麼統一開發環境的需求, 我主要使用它來快速搭建特定環境. 如, 我製做一個基礎box
, 在基礎上搭建python
開發環境, 搭建rails
開發環境, 搭建R
開發環境等. 當須要的時候, 隨時能夠由box
來快速獲取想要的環境.程序員
在官網https://www.vagrantup.com/
下載對應平臺的軟件包安裝. Vagrant
不用來創建虛擬機, 所以確保你安裝有VirtualBox
. 由於VMware
版本的好像收費. 雖然, 官方教程是讓你從網上下載製做好的box
, 但考慮到網速, 以及信任問題, 這裏會一步步教你們本身製做box
, 這樣纔有意思.github
這種事對任何一個開發人員都是小意思. 這裏主要注意幾點就OK了. 這裏主要使用Ubuntu
發行版, 其餘版本會有些許差別.shell
請將用戶名和密碼都設置爲vagrant
, 畢竟以後的box
會分發給第三者windows
安裝ssh
, 命令: sudo apt-get install openssh-server
服務器
修改root
密碼爲vagrant
,命令: sudo passwd root
網絡
設置vagrant
用戶sudo
免密碼, 建議在/etc/sudoers.d/
目錄新建文件並寫入vagrant ALL=(ALL) NOPASSWD: ALL
less
添加公鑰到~/.ssh/authorized_keys
文件. 可使用本身的公鑰, 也可使用Vagrant
公開的, 命令: wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O ~/.ssh/authorized_keys
. 確保.ssh
目錄權限爲0700
和authorized_keys
文件權限爲0600
.
推薦安裝虛擬機加強包guest additions package
來實現文件共享, 點擊安裝加強包後, 命令: sudo mount /dev/cdrom /media/cdrom; cd /media/cdrom; sudo ./VBoxLinuxAdditions.sh
, 視須要可能要安裝依賴sudo apt-get install linux-headers-generic build-essential dkms
配置軟件源, 安裝須要的軟件, 更新系統設定虛擬機的端口轉發, 圖形設置:控制->設置->網絡->端口轉發
,關鍵的兩點是主機端口任意和虛擬機端口22
基本上, 以上就是主要操做了, 除了第1個是在VirtualBox
建虛擬機時設定的, 第8條是在VirtualBox
上設定虛擬機的參數, 其他全是在虛擬機內進行的. 這些都是標準設定, 你能夠改變用戶名和密碼, 根用戶密碼, 以及公鑰, 只是須要在項目目錄的Vagrantfile
文件進行相應的參數設定.
啓動cmd
, 輸入命令vagrant package --base vmname --output /path/to/boxname.box
生成Base Box
.
vmname
是virtualbox
虛擬機列表中的名字, 新建虛擬機時輸入的名稱, 省略--output
時默認在當前目錄下生成.box
文件. 命令可在任意目錄下執行.
執行命令前最好先關閉虛擬機,就目前的狀況看,雖然vagrant
能自動ssh
到虛擬機並執行關機命令,但在windows
執行失敗,不肯定和平臺有沒有關係.
若是當前虛擬機自己是從Box
解壓生成的, 你安裝了些軟件, 更新了下系統, 反正是作出些改變, 能夠省略--base vmname
參數, 以將改動後的虛擬機重打包成box
以分發.
經過vagrant box add boxurl --name boxname
將box
添加到全局環境中. 此命令最好在box
的生成目錄下進行, 不然須要其完整路徑. boxurl
隨意, 惟一的用處是全局定位指定的box
, 以方便解壓生成虛擬機, 而不用指定box
文件的完整路徑.
新建項目目錄並切換, 執行vagrant init boxurl
命令. 生成.vagrant
目錄, 包含ssh
到虛擬機的私鑰, 以及Vagrantfile
文件, 用於虛擬機的參數設定.
好了, 你如今從指定的box
生成了一個新的虛擬機, 對這個虛擬機的全部操做都不會影響到box
, 在不須要時徹底能夠刪除.
如下命令是常用的:
vagrant up # 開機 vagrant ssh # 鏈接 vagrant halt # 關機 vagrant suspend # 至關於休眼 vagrant resume # 恢復 vagrant destroy [-f] # 刪除虛擬機
管理系統的box
vagrant box remove boxname移除box vagrant box list查看全局box vagrant box outdated檢查當前項目使用的box是否有更新 vagrant box repackage NAME PROVIDER VERSION重打包box到當前目錄,其中3個參數由vagrant box list獲取.是add解壓的反過程 vagrant box update [--box boxname]更新box,但並不反應在當前項目的虛擬機上,須要destroy後再up
在windows
平臺,請確保ssh
程序在path
中,或者經過你喜歡的ssh client
,如putty
, xshell
. 默認up
時會創建主機2222
端口到虛擬機22
端口的映射, 並刪除此前添加的公開公鑰而使用隨機生成的公鑰, 而對應的私鑰存儲在當前項目目錄的.vagrant\machines\default\virtualbox\private_key
, 用戶名爲vagrant
.
開啓虛擬機後,並不顯示虛擬機, 但其確實已運行, 打開virtualbox
後可看到項目運行的虛擬機名,點擊顯示則可顯示虛擬機. 或者說, 虛擬機默認以headless
模式運行, 也就是不顯示界面, 這是VirtualBox
提供的功能.
就我我的理解來看, 實際上, 上述的功能均可以經過VboxManage
命令來進行. Vagrant
對虛擬機的管理, 要麼經過VirtualBox
提供的開發接口來實現, 要麼能過ssh
到虛擬機中來實現.
最後, Vagrant
是用Ruby
開發的.