想要同時運行Linux與Windows的作業系統和應用程式,不一定非得使用虛擬機器或採用Dual-boot方式來達成,因為Microsoft已在前幾年宣布擁抱開放原始碼,今日就來實戰如何善用Windows 10的1709更新,讓適用於Linux的Windows子系統徹底發揮其功效。
早在幾十年前的PC時代,Linux與Windows的市場爭奪戰便已經開打,結果是Windows取得了完全勝利,而原因是Windows的視窗設計,遠比當時以文字介面為主的Linux更貼近人們的需要,即便是專業於IT技術領域的資訊工作者也是一樣,更何況是一般大眾消費者。這是國際證照在台灣普遍的亂象,就如同現在的大學文憑一樣,讓一些學生與在職的社會人士,誤以為證照或文憑是個萬靈丹,而忽略實務經驗的重要性,以至於造成現在許多IT主管看到求職者的各項專業證照相當多時,反而會有更多的疑慮。
但有趣的是,雖然最初Windows遠比Linux還早上好幾年發展智慧型手機(Smart Phone),當時稱之為Windows Mobile,但卻被以Linux核心為基礎的Android所殲滅,Android並在2010年成為全球第一大智慧型手機作業系統,甚至於在2017年的時候,其全球網路流量和裝置也雙雙超越了Windows。
想想看,上述兩個致勝點究竟在哪裡?其實很簡單,那就是「更懂人們的需要」。至於人們究竟需要什麼,其實不外乎就是愉快、便利、簡單且安全地提升生活機能,只要能夠滿足上述這些要點,相信即便是新創的科技公司,都能夠在短短幾年之內登上科技巨擘。
從2017年開始是一個以AI、物聯網以及大數據為發展主軸的IT世界,在科技業中,大家迫切所需要的都是合作並找出彼此的利基點。以Microsoft來說,現今跨出最大的一步就是擁抱開放原始碼,而它有哪一些作為呢?目前看來至少已釋出.NET原始碼、提供跨平台的Visual Studio Code、提供SQL Server on Linux的版本(含最新的SQL Server 2017)、Linux相關客體作業系統可運行在Azure雲平台、提供適用於Linux的Windows子系統等等。這其中,適用於Linux的Windows子系統(Windows Subsystem for Linux,WSL)便是本文所要實戰講解的議題。
何謂WSL
WSL是Microsoft與Canonical公司合作開發的Linux相容底層核心的接口,使得Linux的相關程式之執行,讓用戶感覺到彷彿是運行在Windows 10的桌面之上,其運作的原理就好像是Linux上Wine的Windows版本,也就是說,過去可以在Linux中透過Wine來執行Windows的部分應用程式,如今恰好反過來,讓Windows可以透過WSL接口來執行Linux的應用程式,而且不限於命令列中的程式,也包括執行某一些已相容的Linux視窗程式。
至於其預設搭載的是哪一個Linux發行版本呢?答案就是Ubuntu 16.04(代碼是Xenial),後續完成安裝後,自行在其Bash命令提示列中,如圖1所示執行「lsb_release -a」命令即可查詢。
目前這項技術還在持續不斷改良中,使用上若是有發現任何問題,可以到官方Github Repo網站上留言,網址是「https://github.com/Microsoft/BashOnWindows/」。
WSL使用前的準備工作
想要安裝與使用WSL功能,以Windows 10作業系統來說,必須先完成一些必要的檢查與設定才行。
首先,從桌面左下角開始功能表中點選設定小圖示,或是按下〔Win〕+〔I〕快捷鍵。接著點選「系統」圖示,再點選至「關於」頁面來查看在「Windows規格」區域中,作業系統組建是否低於14393,因為若低於此編號,將無法使用此功能,而目前最佳的版本則是16299以上的組建,至於其相對應的版本編號則是1709,也就是Windows 10 Fall Creators Update的更新套件。
針對更新的方法,可從Windows 10的「設定」→「更新與安全性」來執行檢查更新,或是直接到以下的官方網址下載安裝也可以。
‧Window s 10 Fall Creators Update檔案下載網址:https://support.microsoft.com/zh-tw/help/4028685/windows-10-get-the-fall-creators-update
成功安裝Windows 10 Fall Creators Update套件後,開啟「設定」→「更新與安全性」,然後點選至「開發人員專用」頁面,然後如圖2所示選取「開發人員模式」選項即可。在重新啟動系統後,若是再回到此頁面,將會看到已顯示「已安裝『開發人員模式』套件,現已啟用適用於桌面的遠端工具」訊息。
WSL安裝指引
WSL可以運行於Windows 10與Windows Server 2016,只不過針對Windows 10的部分,必須預先完成前面步驟中所提到的啟用開發人員模式設定,才能夠正常安裝及運行。
在準備完成後,首先來看看關於Windows 10的安裝說明。先到Windows的「設定」頁面中點選「系統」,然後在「應用程式與功能」頁面之中點選「程式和功能」,最後點選開啟「開啟或關閉Windows功能」連結。
如圖3所示,如果目前尚未更新至1709 (16299.64)以上版本,例如1607 (14393.1358),那麼這裡所出現的功能名稱顯示將會添加「(搶鮮版Beta)」的字眼,而範例中並沒有顯示此字眼,即表示使用的已經是正式版本的WSL套件。
由於WSL功能也可以啟用在Windows Server 2016的1709以上版本中,因此接下來學習一下如何正確進行安裝。首先,以系統管理員的身分開啟PowerShell命令介面,然後執行以下命令參數即可:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft- Windows-Subsystem-Linux
完成安裝WSL功能後,就可以下載目前任何一款已支援的Linux發行版本。下載的方法是,只要執行Invoke-WebRequest命令參數即可完成,而以下命令範例是下載Ubuntu 1604版本:
Invoke-WebRequest -Uri https:// aka.ms/wsl-ubuntu-1604 -OutFile ~/Ubuntu.zip -UseBasicParsing
以上述範例來說,若成功下載Ubuntu檔案,便執行「Expand-Archive ~/Ubuntu.zip ~/Ubuntu」命令參數來解壓縮。接著,到解壓縮後的路徑下執行「ubuntu.exe」。執行後,如果出現「0x8007007e」相關錯誤訊息,表示目前的Windows Server 2016不是build 16215或更新版本。另一項可能原因則是,尚未於此系統內啟用WSL功能。
若是順利成功執行Ubuntu程式,系統將會立即提示必須建立一個UNIX的帳戶與密碼,而這個帳戶與密碼可以不同於現行的Windows帳戶與密碼。最後,仍建議在執行「sudo apt-get update」、「sudo apt-get upgrade」兩個命令之後,再開始正式使用此Linux子系統。
WSL基本使用說明
接下來,回到已安裝WSL功能套件的Windows 10作業系統中,學習如何針對WSL功能進行初始化以及初階的操作。首先,在桌面左下角點選搜尋小圖示,然後輸入「bash」來開啟命令視窗。
執行後,如果系統偵測到尚未啟用開發人員模式,將會無法繼續使用。相反地,如果偵測到已符合執行條件,則會出現如圖4所示的一連串提示訊息,以完成Ubuntu套件安裝與初始化工作,這包括了同意授權聲明、完成地區設定以及建立新UNIX帳戶與密碼,此帳戶與Windows沒有任何關聯性。在成功完成初始化設定後,系統也會提示往後若需要執行一些針對系統管理方面的作業(例如系統更新、軟體安裝),必須搭配sudo命令來執行才會成功。
透過bash命令完成安裝Ubuntu套件後,如圖5所示,就可以在開始功能表中發現最近新增的「Bash on Ubuntu on Windows」軟體,立即加以執行。
首次開啟,建議先執行「sudo apt-get update」、「sudo apt-get upgrade」兩個命令,以維持系統在最新的更新下運作。接著,在Ubuntu的Bash命令介面中執行「ifconfig」命令,並開啟Windows PowerShell來執行「ipconfig」,如圖6所示,比較一下各個網路的IP設定是否相同,將會發現它們共用了相同的網路連線配置,而不像虛擬機器或Docker Container使用自己專用的虛擬網路配置。
接下來,可以試試一些Ubuntu Linux下常用的命令工具,這對於從熟悉Windows操作環境,但鮮少接觸Linux作業系統的IT人員很有幫助,可以參考表1所整理的命令對照說明。
如圖7所示,便是一個在任何Linux發行版本中最被愛用的vim文字編輯器,不過並非所有Linux發行版本都直接內建。雖然vim只是一個純命令的文字編輯工具,但對於Linux工程師來說卻非常實用,主要用途不外乎修改各種系統與軟體設定檔,例如編修位於「/etc」路徑下的各種設定檔,使用起來既快速又方便。
接著,不妨嘗試在Ubuntu Linux下安裝一個網站服務來運行。如圖8所示,在此執行「sudo apt-get install apache2」命令參數,表示將要下載與安裝全球最知名的網站服務套件Apache。執行之後,系統會提示即將安裝的相依套件與檔案大小,輸入「y」後,就會開始下載與安裝。
安裝好Apache網站服務後,往後開啟Bash命令介面時,如果要啟動此服務,只要執行「sudo /etc/init.d/apache2 start」即可,需要停止此服務時,則執行「sudo /etc/init.d/apache2 stop」。若是因為修改了Apache的相關設定檔而需要重新啟動服務,就執行「sudo /etc/init.d/apache2 restart」。圖9所示是在Apache網站服務啟動的狀態下,透過本機網頁瀏覽器連線預設網頁的範例。
最後,建議可以回到PowerShell的命令視窗中,如圖10所示,執行「netstat -an」命令,查看目前本機的TCP 80連接埠是否已經被占用。答案是肯定的,因為它們使用了相同的網路。
WSL的進階GUI使用技巧
原則上,單靠WSL來運行Linux作業系統,僅能夠安裝或執行Linux相關的命令程式。不過,若想要讓WSL下的Ubuntu系統的桌面視窗程式,可以融合在Windows 10的桌面中執行也並非不可能,只要搭配Windows版本的第三方開源X server相容套件即可,而目前常用的有VcXsrv與Xming,接下來將以結合VcXsrv為例進行示範說明。
如圖11所示,在安裝相關桌面套件之前,先依序執行「sudo apt-get update」及「sudo apt-get upgrade」命令,以確保系統程式維持在最新的狀態下。
如圖12所示,接著依序執行「sudo apt-get install ubuntu-desktop」和「sudo apt-get install xfce4」兩個命令參數,以完成安裝Ubuntu桌面與xfce4圖形介面環境套件。圖形介面環境的套件如此之多,這裡為何選擇xfce4呢?答案其實很簡單,那就是它不僅設計輕巧、快速且在實際運行後又不會占用太多系統資源,因此非常適用在與現行Windows桌面環境的融合使用。
然後,連結至以下網址下載VcXsrv Windows X Server套件並完成安裝,整個安裝步驟皆採用預設配置即可。
‧VcXsrv Windows X Server下載網址:https://sourceforge.net/projects/vcxsrv/
完成安裝後,可以從桌面來開啟此項程式,首次執行時,會出現如圖13所示的「Select display settings」設定頁面,在此分別有多重視窗(Multiple windows)、全畫面(Fullscreen)、單一大型視窗(One large window)以及沒有標題列的單一視窗(One window without titlebar)四種顯示方式可以選擇。至於Display number欄位的設定,建議採用預設的「-1」即可,也就是讓VcXsrv自動選擇所要使用的顯示位置。設定完畢,按下〔下一步〕按鈕繼續。
在「Select how to start clients」頁面中,可以選擇啟動此用戶端程式的方式,分別有「Start no client」與「Start a program」,建議選擇前者,也就是僅唯一啟動xserver程式,之後需要再自行開啟用戶端程式,接著按下〔下一步〕按鈕。最後,在「Extra settings」頁面內,決定是否要整合剪貼簿(Clipboard)管理的功能。按下〔下一步〕按鈕,完成設定。
緊接著,可能會出現Windows防火牆的安全警示訊息視窗,點選「允許存取」。成功執行xserver程式後,如圖14所示就可以在工作列隱藏圖示內查看到此程式的小圖示。
接著再開啟「Bash on Ubuntu on Windows」命令視窗,執行「sudo xfce4-session」命令,如圖15所示即可讓Linux與Windows桌面完全融合在一起。以這個範例而言,Linux的桌面開始功能選單出現在Windows桌面左上方,而工作列則是在桌面中間位置的正下方,可以如同操作一般的Linux桌面程式一樣來執行終端機模擬器、檔案管理員、郵件讀取器、網路瀏覽器、設定值、圖形、多媒體、教育、辦公、遊戲以及附屬應用程式等等。
圖16所示是陸續開啟Linux桌面下的Firefox瀏覽器、終端機模擬器、磁碟管理工具以及軟體安裝管理程式的範例,必須注意的是,目前並非Linux下所有的桌面程式都能夠順利開啟與使用,不過,至少大部分內建的應用程式都可以正常運行。
讓openSUSE也加入WSL行列
前面曾提及,openSUSE Leap 42也是WSL可以搭配使用的Linux發行版本,因此接著就來學習一下如何讓openSUSE也能夠融合在Windows 10的桌面環境內。
首先,開啟「市集」應用程式並搜尋關鍵字「SUSE」,即可找到openSUSE Leap 42與SUSE Linux Enterprise兩個應用程式,原則上,這兩個都是相容於WSL架構下使用,在此以前者為例做說明。
如圖17所示,如果看到的是像範例中的「利用最新Windows更新所支援的全新功能」訊息提示,便表示目前的Windows 10尚未更新至它所要求的版本(最低為16190),此時只要緊接著按下〔更新〕按鈕,然後在完成系統更新後便可回到此處進行安裝。若是早期尚未正式發行的測試版本,則會出現要求加入Windows測試人員計畫的訊息。無論如何,Windows 10都必須是64位元架構的版本,才能夠安裝或更新。
在按下〔更新〕後,如圖18所示,將會開啟「Download Windows 10」官方網站,按一下〔Update now〕繼續。
完成下載與安裝後,Windows桌面將會出現一個「Windows 10更新小幫手」的程式捷徑,開啟它便會立即進行最新版本的檢查,而檢查結果將會告知現行最新版本的編號。在點選「立即更新」後,將會進行相容性的檢查作業,檢查的重點主要是CPU、RAM以及Disk。一旦通過檢查,只要按下〔下一步〕按鈕便會開始進行更新任務。如圖19所示,可以看見整個更新的進度,值得注意的是,針對這項更新,之後如果想要移除,仍然可以回復至原系統狀態。
整個Windows 10的更新過程,可能會重新啟動系統數次。成功完成更新後,再一次開啟「市集」來安裝openSUSE Leap 42應用程式。此時如果去查看系統需求的OS欄位資訊,便會發現已經呈現勾選的相容狀態。完成安裝後,就可以從桌面的開始功能選單中來開啟它。
首次執行openSUSE Leap 42就如同前面所介紹的Ubuntu一樣,必須先建立一個新的UNIX帳戶與密碼,才能開始正式使用。在登入後,如圖20所示執行「cat /etc/os-release」命令來查看Linux作業系統版本的完整資訊。
在openSUSE Leap中若要進行系統程式的更新,可以分別執行「sudo zypper refresh」以及如圖21所示的「sudo zypper -n update」命令參數,就能夠知道需要更新的套件數量、名稱以及檔案大小並完成更新。
在openSUSE系統中有一個非常重要的系統管理工具,那就是內建的YaST。
舉凡軟體的安裝、硬體的設定、網路的設定等等,都可以透過YaST友善介面操作來輕鬆完成,且它有提供如圖22所示於命令模式中,以及可用於桌面圖形環境中的YaST控制台。
在命令模式下,只要執行「sudo yast」即可開啟它。以這個範例來說,可以經由「Software Management」功能選項,進行各類軟體套件的條件搜尋,然後選取與安裝。
那麼在WSL架構下,Linux如何存取Windows磁碟中的檔案呢?其實也很簡單,只要執行「ls /mnt」命令,即可查看所有已自動掛載於Linux的Windows磁碟目錄,如圖23所示。當然,也可以繼續使用ls命令來查看選定目錄下的檔案清單,或者進一步透過cp、mv、rm等常用命令來管理檔案。
其他注意事項
過去,在Windows中若想要使用SSH Client或SSH Server,都必須自行下載第三方的套件來安裝,如今有了WSL,便可以直接到Bash Shell中執行Linux內建的SSH命令,或是從遠端電腦來連線其SSH Server。
不過,其實在Windows 10的14352組建後,也可以直接在Windows的「設定」→「App」→「應用程式與功能」頁面中,點選「管理選用功能」連結,開啟如圖24所示的「新增功能」頁面,來選擇安裝OpenSSH Client或是OpenSSH Server,目前可以發現它們仍處於Beta版本階段,但已經可以安裝與使用。
必須特別注意的是,如果打算也在Windows 10系統中使用OpenSSH Server服務,那麼勢必會與WSL的Linux內建SSH Server服務連接埠相衝突,因此建議修改Linux的SSH Server連接埠編號,如此一來,對於遠端的電腦而言,就可以同時連線同一部主機與網路,但卻使用不同連接埠的SSH Server,來管理不同的作業系統配置。
修改的方法很簡單,只要透過vim文字編輯工具開啟「/etc/ssh/sshd_config」設定檔,找到並修改預設的Port 22設定值即可。此外,在進階的設定部分還可修改AllowUsers、PasswordAuthentication、UsePrivilegeSeparation等設定值,以完成更安全的配置。
結語
在雲端運算世代來臨以前,異質系統之間的連接應用稱之為「整合」,這種架構由於是透過網路連接與彼此API程式間的呼叫方式來達成,因此雙方之間的距離實際仍是相當疏遠的,且在維護管理上依然相當複雜與不便利。
如今有了Windows Subsystem on Linux(WSL)這項新技術打頭陣,讓雙方的合作發展由整合(Integration)往前推向了融合(Fusion)。
至於未來呢?在AI人工智慧、物聯網以及大數據的趨勢簇擁之下,雙必須借助彼此的優勢,才能夠讓這項領域的後續發展火速前進。然而,究竟必須以什麼樣的系統基礎來運行雙方未來融合的應用技術呢?既不是Virtual Machine,也不會是Docker,而是Dual-Kernel。
像這樣的概念,雖然在過去有IT人曾經提出,但當時所強調的是Linux與BSD系統的融合,而如今跨平台技術的融合,唯有Linux與Windows的Dual-Kernel融合運行,才能夠真正讓AI技術的開發,趨近於完美地實踐在日常生活內。
<本文作者:顧武雄, Microsoft MVP 2004-2016、MCITP與MCTS認證專家、台灣微軟Technet、TechDays、Webcast、MVA特約資深顧問講師、VMware vExpert 2016-217、IBM Unified Communications/Notes/Domino/Connections Certified。>