2020年3月6日 星期五

給微軟視窗俘虜們的逃脫地道入口: virtualbox 版的貴哥實驗室

綠色虛線是 guest OS 的勢力範圍 這學期我的課程環境被關在 virtualbox 虛擬機環境裡面, 於是我製作了 虛擬機映像檔。 請把 bionic-g20C.vdi.gz (或者更新的版本, 看檔名就知道) 下載回你的 MS Windows、 將它解壓縮 (原始的 .gz 檔可作為備份,不要刪除!) 並且 安裝 virtualbox for windows

一、 基本設定

  1. 啟動 virtualbox、 點左上角的 「新增」、 幫虛擬機取一個名字、 選定虛擬機類型為 Linux 的 Ubuntu 64bit。
  2. 設定虛擬機可用的記憶體。 建議 guest 至少要有 4GB; 但也請留至少 4GB 給 host 用。 如何判斷你的 windows host 有多少記憶體? 叫出工作管理員, 切換到 記憶體分頁
  3. 勾選 「使用現有虛擬硬碟檔案」、 點右邊資料夾圖示、 找到剛剛解壓縮出來的 bionic-g20C.vdi 。
  4. OK, 回到 virtualbox 主畫面, 就可以按 「啟動」 開啟虛擬機。 看到虛擬機裡面的開機選單 (目前版本是朝陽空拍圖), 應該就成功了。 按一下上下箭頭, 阻止它數秒。 建議先直接關機, 因為預設的解析度太低, 很難用。 註: 這一次暴力關機, 被問到 「儲存電腦狀態」 或 「關閉電腦電源」 時, 可以選後者, 因為現在還沒有動到虛擬硬碟。 以後當然就不要暴力關機了。
  5. 回主選單, 選 「機器」 => 「顯示」 (圖 5a) 或是 在虛擬機名稱上面按滑鼠右鍵, 選 「設定」 再選 「顯示」 (圖 5b) -- 我在兩個不同版本的 virtualbox 上面看到的介面略有差異。 總之, 叫出 「顯示」 的設定選單後, 切到 「畫面」 分頁, 把 「視訊記憶體」 調好調滿 (128MB)、 啟動 3d 加速、 啟動 2d 加速。 (圖 5c) 我的 host 本身就沒有顯卡加速, 所以只是勾爽的而已。
  6. 再次啟動虛擬機。 左下角主選單選 「偏好設定」 => 「螢幕設定」, 就可以選取較高解析度了。

也請參考 VirtualBox 建立新的虛擬機器設定教學 的前幾步。 (但因為他是從零開始安裝 guest ubuntu, 所以比我這篇麻煩。)

建立新的虛擬機 分配記憶體大小 選取現成的 .vdi 映像檔 開機畫面 圖5a: 在 virtualbox 裡面設定「顯示」 圖5b: 在 virtualbox 裡面設定「顯示」 圖5c: 虛擬顯卡的記憶體容量調好調滿 進虛擬機裡面設解析度

二、 網路設定: 如何對外開放 guest 上的服務

如果你的 host 電腦所在的區網很安全 (沒有人會惡意掃描可登入的服務等等), 可以考慮把虛擬機從完全隔離的自閉內網拉到跟 host 並行的實體區網, 以便區網內其他電腦 (或你的手機) 可以看得到它所提供的服務。 進入虛擬機的 「網路」 設定, 在 「介面卡1」 分頁, 「附加到:」 原本設定是 「NAT」, 請把它改成 「橋接介面卡」, 「名稱」 請選擇 host 對外的那張網卡。

如果需要把 guest 的服務對外開放, 但又想維持較安全的 NAT (不想改用橋接), 那麼就需要設定 port forwarding。 在 virtualbox 的 「機器」 => 「設定」 選單裡找到 「網路」 => 「介面卡1」 的設定, 打開 「進階」 => 「連接埠轉送」。 按右側的小綠加號, 新增一條規則。 例如想把 guest 位於 port 22 的 ssh 服務拉到 host 的 port 5803, 只需要填三處: 「名稱」 填 "ssh" (任意自取)、 「主機連接埠」 填 "5803"、 「客體連接埠」 填 "22"。 「確定」 後立刻生效, 不需要重開機。 從 host 可以這樣連線: ssh -p 5803 your_user@localhost 主機 IP 留白則預設值為 0.0.0.0 表示允許任何機器連這個 port; 若填 127.0.0.1 則只允許 host 連這個 port。 guest IP 可以留白則是因為反正 virtualbox 知道。 詳見 howtogeek 文章。 如果 host 是 windows 10, 而且從 host 可以用 pietty 連進 guest (linux), 但是從外面其他機器卻無法連進去, 那有可能是被 windows 防火牆 擋住了。 請打開 「控制台」=>「windows defender 防火牆」=>「允許的應用程式」, 勾選 VirtualBox Manager。

設定 port forwarding 設定 port forwarding

三、 Guest Additions

如果在 host 裡面放一個名為 「VirtualBox Guest Additions」 特殊的 iso 檔, 讓 guest 可以安裝額外的驅動程式 (變成 para-virtualization 機制), 也就是 guest OS 想要存取硬體時, 都很節制地透過 hypercall 請 host 幫忙 (而不是旁若無人地自己動手) 那麼 host 與 guest 之間的硬體資源就可以更順暢地整合, 例如任意調整螢幕解析度、 全螢幕模式、 從 host 分享資料夾給 guest 等等。

  1. 在 host 裡面 安裝 VirtualBox Guest Additions。 在 windows host 裡面... (待補) ; 在 ubuntu host 裡面: apt install virtualbox-guest-additions-iso
  2. 在虛擬機視窗上方選取 「裝置」 => 「插入 guest additions CD 映像」。
  3. 在虛擬機裡面: sudo mount /dev/cdrom /mnt/t1 (因為我製作的虛擬機映像檔禁止自動掛載, 且已事先建立 /mnt/t[1234] 等等目錄。 sudo 的密碼是一個空格。) 此時 ls /mnt/t1 應該要看到 VBox*Additions* 等等檔案。
  4. 再來, 在虛擬機裡面執行 sudo /mnt/t1/VBoxLinuxAdditions.run, 就開始安裝一堆驅動程式 (kernel 模組啦)。 虛擬機必須重開機, 新的 kernel modules 才會生效。

進行以下操作前, 請先看本文最上面的截圖。 綠色虛線部分是虛擬機的勢力範圍; 上下的灰色部分是 virtualbox 的選單與工具列。 萬一要是的選單與工具列不見了 (例如切換到全螢幕模式), 可以按 「右ctrl Home」 把 virtualbox 的選單叫出來。

[任意調整螢幕解析度] 如果用滑鼠把虛擬機視窗拉小, 會出現捲軸 (scroll bars), 因為此時 guest 的桌面只有一小部分直接顯示在 host 的桌面上。 如果在虛擬機上方 「檢視」 選單下, 勾選了 「自動調整顯示客體大小」, 那麼當你拉大拉小虛擬機視窗時, guest 會被通知 「螢幕的解析度改變了」, 進而馬上跟著調整畫面。 當然這時也就不再需要捲軸了 -- 最明顯的是桌面右下角的電源圖示會永遠保持在可見範圍的右下角。 另外推薦再試試 「檢視」 選單下, 喧賓奪主的 「全螢幕模式」, 及客人全螢幕但邀請主人的視窗進來, 有點令人頭昏的 「無縫模式」。

[Host 分享目錄給 guest] 從虛擬機上方 「裝置」 選單下, 選 「共用資料夾」。 對話框右上角有一個小小的資料夾 (和加號) 圖示。 點下去之後的對話框當中, 「資料夾路徑」 可以從 host 選取一個資料夾以便分享給 guest。 而 「資料夾名稱」 則是從 guest 裡面看到的名稱, 可以隨便取, 例如叫做 shared_from_host 好了。 設定完、 確定之後, 回到 guest 裡面執行: sudo mount -t vboxsf shared_from_host /mnt/t4 之後就可以從 /mnt/t4 底下看到 host 所分享出來的目錄。 注意: host 所分享的, 不可以是 symbolic link。

以上參考 Make VirtualBox Full Screen 如何安裝VBOXADDITIONS以調整VirtualBox下虛擬OS的解析度

四、 Extension Pack

選取一個 usb 裝置讓給 guest 用 如果想要把 「連接在 host 上的 usb 裝置」 讓給 guest 用, 就要安裝 extension pack。 Windows host 請見 中文教學。 Linux host 的話, 以 root 的身份 apt install virtualbox-ext-pack ; adduser $USER vboxusers 然後登出再登入即可, 詳見 這個問答。 成功之後, 在設定選單裡的 USB 分頁裡, 右側的加號 "加入新的 usb 篩選器" 按下去之後, 會出現 host 看到的所有 usb 裝置的清單讓你選。

五、 結語

好啦, 現在你從微軟視窗囚室裡面看到通往自由的逃脫地道的入口了, 下一步該怎麼做, 很清楚了吧 ;-) 請到 從零開始的 linux 學習指南, 跳到 「安裝成功之後, 建議先看這三篇」 開始看起囉!

4 則留言:

  1. 最近垃圾留言太猖狂 (還是英文的...是在哈囉?) 所以改成審核制,且必須先登入 google 帳號才能留言。

    回覆刪除
  2. 是Lubuntu嗎?我工作關係需要Windows環境,先前自己選了VirtualBox+Lubuntu開通地道。看到和自己一模一樣的桌面包在VirtualBox裡很開心!

    回覆刪除
    回覆
    1. (乾杯) 是啊, lubuntu 18.04 。 然後聽說新版的 lubuntu 20.04 從 lxde 改成 lxqt ...

      刪除
  3. 正在試著用 virtualbox 安裝 proxmox, 安裝過程遇到惱人的解析度太低的問題: https://forum.proxmox.com/threads/proxmox-3-4-install-resolution-issue.22346/ 在討論串最後讀到這個解法: http://robertoviola.cloud/2020/04/16/proxmox-no-screen-during-installation/ 筆記一下.. 改用 kvm 就不會有問題, 這個真的是 virtualbox 的 bug https://www.whonix.org/wiki/Template:VirtualBox_Screen_Resolution_Bug

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。