近期因為公司專案的關係,接觸到了 Virtual Box ,而之前專案的經驗是使用到 Docker,當時就有聽說兩者之間的差異,剛好這次有機會使用到 VB,並且在裡面執行rails專案,趁這個機會記錄自己在安裝時的一些狀況。


目錄

  • Virtural Box 基本介紹

    • VM 環境安裝與設定
    • 安裝 Remote SSH
    • 設定 port 轉發功能
  • 安裝 VSCode insiders

  • 安裝 Git 做為專案版控

    • 將 Git 與 GitLab 做連接
  • 安裝RVM管理 Ruby 版本

  • 安裝 Ruby

  • 安裝 Rails

  • 安裝 Database


什麼是 Virtual Box

VirtualBox 是一套由 Oracle 公司所開發的免費且中文化的「虛擬機器( Virtual Machine,以下皆簡稱: VM) 」軟體,目前已發表到6.1.6版,安裝 VirtualBox 之後,可以在你的電腦建置多部的 VM,而在其中可以安裝不同的作業系統,例如:Windows、Linux、Solaris、BSD、IBM OS/2、MacOS等;當然,也可以安裝任何的軟體,就好像在使用實體電腦一樣。

雖然模擬出來的環境跑起來不會比原本的系統快,不過這是個完全獨立的空間,可以讓我們無限制的分割硬碟、重新格式化、重灌各種系統…等等,都不用擔心裝錯或中毒造成原本主電腦的資料損毀(如果 VM 掛掉,直接刪掉重裝或還原即可)。

[打開 Virtural Box 可以看到支援了許多 OS 與對應的版本]

Virtural Box 官網載點

在點擊 Download 後,這邊要選擇的是 :

要將 VM 安裝在什麼系統(我自己是使用 MacOS ),點了相對應的系統後,就會開始下載。

點擊下載完成的 Virtural Box 圖示。

因為是中文化介面,所以安裝起來相對比較容易,以下提供自己安裝上的幾個設定。

說在前頭:

對於 VM 的設定,如果已經啟動則無法再變更,如果要進行變更,便需要重新再設置一個 VM,所以要先思考一下這個 VM 的 RAM、硬碟等相關配置是否足夠哦。


VM 環境安裝

點擊新增,建置 VM。

設定專案名稱、OS、與對應的版本號,這邊我選擇的是 Linux、64-bit。

完成後接著到設定 RAM 的地方,可以自行選擇要分配到 VM 的 RAM 空間,原則上是不要超過自己本機的 RAM 一半以上就行,否則會拖慢你本機執行上的效率,這邊我選擇預設的 1024MB 。

[tips: never allocate more than half of the memory that on host system ]

硬碟配置,為虛擬電腦建立硬碟儲存空間。

硬碟檔類型,基本上選項裡的這三個 Virtural Box 都有完全支援,這邊我使用 VirtualBox 的基本(native)格式: VDI 。 官網對於三者的說明

接下來要選擇空間配置方式,一樣可以依需求喜好做配置,我這邊使用的則是動態配置。

動態分配v.s固定大小

舉例來說: 在動態配置時,假如你要給它 20GB,那麼一開始大概只會佔用 2MB 的空間,不會一次就真的使用了 20GB,因為動態配置的關係,是會邊使用邊長大的,但萬一硬碟其實空間不夠了且沒發現就有可能會出問題。

而在固定配置方面,一開始便會直接佔用掉你所分配的大小,假設設定配置 40GB 的空間給它,那虛擬硬碟檔案就會直接佔用掉 40GB 的空間。

設置檔案位置與硬碟大小

調整視訊記憶體,這裡可以調整至最高 128MB,並勾選啟動 3D加速。

設置存放位置,預設為空。

點擊開始即完成 VM 建置。

安裝Remote SSH

因為我之後要從自己 host 的 MacOS 連線至 VirturalBox 內的 Linux VM,所以在這邊會先預設幾個條件。 在設定 / 網路裡的介面卡設置,點擊介面卡2,勾選啟用網路卡,並按以下配置做設定。

回到介面卡1,點擊連接埠傳送。

進到連接埠裡會出現以下視窗,點擊加入新的連接埠轉送規則

設定連接埠

名稱: 可自訂,這裡我用的是「SSH」。

協定: 使用預設的「TCP」。

主機IP: 主機IP 需要在建立起來的 VM 裡找,後面緊接著會做說明,不過輸入的會是在「乙太網路卡 VirtualBox Host-Only Network」這一塊資訊中的「IPv4 位址」,我的是「192.168.56.104」。

主機連接埠: 輸入「22」。

客體IP: 為 enp0s3 這段的設定,這裡是「10.0.2.15」。

客體連接埠: 設為「22」。

設定完成後,再回到介面卡1裡即可看到剛剛的配置。

啟動 VM 並進入 Ubuntu 裡,查看 IP 位置。 點擊 Try Ubuntu 後,便會進到 Ubuntu 裡了。

Search your computer / terminal

查看使用環境

cat /etc/*-release

我因為專案的關係安裝的是 Ubuntu 16.04 版,而目前官方最新已釋出到 20.04。

官網連結

ifconfig 查詢 IP 位址。

這裡的 enp0s3 指的是前面在設置網路介面卡的客體 IP。

而 enp0s8 則是我們額外建置在 NAT 裡的 IPv4。

因為是要在 MacOS 使用 SSH 連線操作,所以在 Ubuntu 裡需安裝 openssh-server。

sudo apt-get install openssh-server

安裝的過程裡會告知你該操作會使用到多少空間,確認即可輸入 y 繼續安裝。

這時會發現有些 Ubuntu 檔案無法被順利 fetch,先做更新後再重新安裝。

sudo apt-get update

sudo apt-get install openssh-server

這次安裝並沒有再出現錯誤訊息了,回到我們的 MacOS 系統裡做 SSH key 連線。

連線的方式會是: ssh hostname@IP

因為在上面已經取得 ubuntu 裡的 ssh IP,所以這裡可以直接代入。

ssh ubuntu@192.168.56.104

在連線的過程中會看到需要輸入 ubuntu的密碼,但我們當時是選擇 Try Ubuntu,所以還未設置。

回到 Ubuntu 裡設置 root 密碼。

先切換到 root 。

sudo bash 進到 root 後,接著執行以下操作。

密碼建立完成後,回到 MacOS 重新連線。

ssh ubuntu@192.168.56.104

exit 則可以離開 ubuntu 。


安裝VS Code insiders

雖然安裝了 openssh server 後,已經可以在我的 MacOS 執行 Ubuntu,但如果想做專案開發,勢必還要有編輯器,幸虧現在 VS Code 官方直接支援了 SSH 連線到伺服器進行開發,且擴充套件會是安裝在伺服器上,效能與在本地端開發幾乎沒有差別,非常的方便。

不過由於目前在遠端開發上,一般版尚未支援,只有 VS Code Insiders 版有支援,所以需再額外的下載。

圖片來源

VS Code Insiders 官網載點

有別於一般常使用的藍色,Insiders 是綠色,在左下角處會有個綠色圖示,點擊後,便會開啟 remote 的視窗。

選擇第一個 Connent to Host。

輸入 ubuntu 的 hostname 與 IP,基本上這邊與在 Mac 的 terminal 上 SSH 連線相同。

輸入 ubuntu 的 root 密碼。

連線成功。


補充 :

省略登入密碼

雖然已經可以正常透過 SSH 連線 Linux 了,但如果登入次數很頻繁加上密碼又設置的特別長,連線時還都被要求輸入 root 密碼,這就會很麻煩。

於是,我們便可以使用 ssh-keygen 生成一組 pub/pri key,然後將 pub-key 複製到要被控制的 Linux 上,如此一來,當你有 pri-key 的控制電腦要遠端操控這台有 pub-key 的Linux時,便會自動識別配對,我們就不必每次要連線時還要輸入密碼,聽起來有點繞口,實際操作一次可以比較容易明白。

首先,先在不是要被連線的電腦創建pub/pri key,以我來說就是在 Mac 上。

ssh-keygen

因為我已經有建立過了,所以會多了 Overwrite 是否覆寫的訊息,不過基本上這邊都可以直接下一步。

將建立的 pub-key 複製並分享給遠端 Linux 。

ssh-copy-id ubuntu@192.168.56.106

輸入 Linux root 密碼。

再次 ssh 連線確認是否有成功。


總結

以上大致為這次安裝 Virtural Box 的經驗,不過因為之前有使用過 Docker ,這邊便稍微拿兩者做個小比較。


Reference:

容器與虛擬主機

Docker vs Virtual Machine | simply explained || Docker Tutorial 6