Bash on Ubuntu on Windows

這應該是今年微軟 Build 大會,最讓人震驚的消息了吧?有興趣的人,可以參考《Developers can run Bash Shell and user-mode Ubuntu Linux binaries on Windows 10》一文。

基本上,這項功能預計會在 Windows 10 的年度更新(Anniversary update、預計是今年夏天發布)的時候出現,他會在 Windows 10 中建立一個 Ubuntu 的 Linux 子系統;而之後就可以直接在 Windows 10 的環境下,執行 Ubuntu 的 bash shell 了!

而更重要的是,他會有一個完整的「Ubuntu user space」,Ubuntu 上的 user-mode 的應用程式,也將可以直接在這個環境下運作!甚至,不需要重新編譯過,只需要直接在這個環境中,使用 apt 這個套件管理工具,來下載各式各樣的應用~

官方也有強調,這不是用虛擬機器(Virtual machine)或是容器(container)來執行的;他基本上是在底層,去做即時的 Linux system call 到 Windows OS 的 system call 的轉譯;在概念上,應該就是 Wine(參考)的反向了~而根據文章的內容,這樣的架構也可以獲得幾乎相同的 CPU、記憶體、以及其他的 IO 效能。


雖然這項功能應該是要等到夏天的 Windows 10 年度更新才會有,不過目前在 Windows 10 Insider Preview 的 Fast Ring 最新的預覽版、Build 14316 裡面(官方介紹),就可以搶先體驗這個功能了!Heresy 看到之後,就立刻把筆記電腦切到 Insider Preview 了、準備試玩了~ XD

不過很遺憾的是,在把 Windows 10 從正式版切換到 Insider Preview 後,並沒有辦法馬上偵測到預覽版的更新…Heresy 甚至去下載了比較舊的預覽版 ISO、透過 ISO 強制更新到 Insider Preview 的版本,Windows Update 還是沒辦法偵測到更新… orz
後來是電腦又放了幾天,他才能抓到 Build 14316、並開始更新。總覺得,微軟這方面做的還真糟糕啊…

而由於「Bash on Ubuntu on Windows」這項功能,就算在 Windows 10 的預覽版中,也還是屬於比較進階的 Beta 功能,所以預設是沒有啟用的。如果要啟用這項功能的話,可以參考官方的「Installation Guide」(MSDN),他的流程基本上如下:

  1. 開啟「開發人員模式」

    他的方法是先按下鍵盤的 Win I、開啟「設定」的視窗,然後點選「更新與安全性」,並點選左側最下方的「開發人員專用」;這時候右側會顯示「使用開發人員功能」的選項,請選擇「開發人員模式」。

  2. 開啟 Windows Subsystem for Linux

    接下來,可以透過搜尋「開啟或關閉 Windows 功能」,來開啟「Windows 功能」的視窗。

    或者,也可以在「設定」中,點選「系統」中的「應用程式與功能」,然後選取右側最下方的「程式與功能」,之後在新開啟的視窗中點選左側的「開啟或關閉 Windows 功能」,也可以叫出同樣的視窗。

    而在「Windows 功能」視窗中,應該可以看到「Windows Subsystem for Linux (Beta)」這個項目,請把他勾選起來、並按下「確定」,然後按照指示重新開機。

    這邊要注意的,是這項功能只存在於 64 位元的 Windows,如果是 32 位元的 Windows 是無法使用的。

    另外,如果懶得用圖形介面慢慢找的話,也可以用 PowerShell 的命令(需要系統管理者權限):

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

  3. 下載 User -mode 映像檔並安裝

    都準備好了之後,接下來就是開啟一個命令提示字元視窗,並執行「bash」這個指令, 他就會跳出即將安裝的提示,這時候就可以輸入「Y」、讓他開始下載映像檔、並進行安裝了~


在完成安裝後,在開始選單內,應該就會有「Bash on Ubuntu on Windows」 的連結(右圖),之後只要點選他,就可以開啟這個 Bash 的環境了~

或者,在命令提示字元中直接執行「bash」,也可以進入這個 shell 環境;如果想要執行單一指令的話,也可以透過「bash -c "ls"」這樣的命令來執行。

而由於他算是 Ubuntu 的系統(可以這樣講嗎?),所以使用上的方法,也就請參考 Ubuntu 的教學了~如果要安裝軟體的話,則可以透過「apt」這系列的指令(維基百科)來完成,算是滿方便的。

至於他的系統版本,Heresy 試著簡單看了一下,基本上如下:

root@localhost:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.4 LTS
Release:        14.04
Codename:       trusty

root@localhost:~# uname -a
Linux localhost 3.4.0 #1 PREEMPT Thu Aug 1 17:06:05 CST 2013 x86_64 x86_64 x86_64 GNU/Linux

在系統硬體的方面,他可以直接抓到實體的 CPU,但是沒辦法取得顯示卡的型號,其他的硬體看來也無法存取。

而如果要存取本來磁碟機上的檔案,則非常的方便,以「C:\Windows」來說,在這個環境下的路徑就是「/mnt/c/Windows」。

至於子系統的檔案、還有 Home 目錄,則是放在「c:\Users\Heresy\AppData\Local\lxss\」(使用者名稱請自行更換)這個資料夾下;由於他是隱藏資料夾,底下也有不少隱藏的資料夾,所以建議調整一下檔案總管的設定,會比較好找。

Heresy 這邊剛裝好的時候,他用了 529MB,以現在來說不算大;不過如果之後要裝一堆東西的話,磁碟使用量是會持續上升的。 ^^"

如果玩到後來,把這個 Linux 子系統搞爛了要怎麼辦?微軟有提供「lxrun」這個指令,可以用來管理這個子系統;當有問題的時候,可以透過「lxrun /uninstall」把整個子系統移除,然後再重新執行「lxrun /install」,就可以恢復到初始狀態了~

而這個環境可以拿來幹嘛呢?Heresy 自己是想把他當成 Linux 下的編譯測試環境,所以就著裝了 git、g 、make、libboost 等等必要的工具,看來都沒問題、可以正常使用。

但是另一方面,在惡搞的過程中,也發現他有不少限制。像是想裝 Unbutu-desktop 或 gnome 的話,基本上都會錯誤、無法完成安裝(不意外就是了 ^^"),所以看來是不可能在這邊跑圖形介面了~ XD
(記得是「libavahi-common-data」這個套件裝不起來)

而實際上,微軟也直說了,目標設計就是命令提示字元,所以應該不會有 GUI 的可能性了。


這篇的介紹大概寫到這裡了。

為什麼會想用這東西呢?Heresy 個人是覺得,用這個子系統來做跨平台程式的維護(編譯測試),應該算是一個相對方便的方案!因為這樣檔案都在同一台電腦上、甚至都是同一份,可以很簡單地同時確認在 Windows 的 Visual C 和 Linux 的 g 下的編譯狀態,而不用把檔案到處複製。

那為什麼不用虛擬機器呢?虛擬機器要使用的資源基本上應該還是比較多的,不管是硬碟、還是記憶體,消耗都相對大;不過在 Heresy 來看,這套子系統最大的好處,就是要開始用基本上根本不用等!直接開啟、直接使用,不像 VM 還要等虛擬機器開機完…

總之,由於現在這還是 Fast Ring、最不穩定的預覽版,所以 Heresy 應該還不會把主力機器換成這版本;不過等他出了正式版,Heresy 應該就會裝起來,把它弄成固定的 g 編譯環境了吧~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。