搭建Linux工做環境之Vagrant

圖片描述

live with scopepython

序言

作爲Linux的愛好者, 表示對沒有完整易用的命令行工具的Windows平臺無愛. 可是, 在Linux長期使用中, 深感它的圖形界面實在太糟糕了. 一般有三種方式來得到Linux的體驗, 一是Cygwin平臺, 它實現了將Linux軟件的底層API調用轉換爲WindowsAPI. 二是安裝雙系統, 但Linux圖形界面的容錯性不好, Ubuntu常常會顯示軟件崩潰. 三是使用虛擬機, 在VMwareVirtualBox上.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: ALLless

  • 添加公鑰到~/.ssh/authorized_keys文件. 可使用本身的公鑰, 也可使用Vagrant公開的, 命令: wget https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O ~/.ssh/authorized_keys. 確保.ssh目錄權限爲0700authorized_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文件進行相應的參數設定.

打包爲Box

啓動cmd, 輸入命令vagrant package --base vmname --output /path/to/boxname.box生成Base Box.

vmnamevirtualbox虛擬機列表中的名字, 新建虛擬機時輸入的名稱, 省略--output時默認在當前目錄下生成.box文件. 命令可在任意目錄下執行.

執行命令前最好先關閉虛擬機,就目前的狀況看,雖然vagrant能自動ssh到虛擬機並執行關機命令,但在windows執行失敗,不肯定和平臺有沒有關係.

若是當前虛擬機自己是從Box解壓生成的, 你安裝了些軟件, 更新了下系統, 反正是作出些改變, 能夠省略--base vmname參數, 以將改動後的虛擬機重打包成box以分發.

經過vagrant box add boxurl --name boxnamebox添加到全局環境中. 此命令最好在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開發的.

相關文章
相關標籤/搜索