The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用工具:從 Microsoft Store 安裝 WSL 1.0 版

WSL (Windows Subsystem for Linux) 經過多年的發展,已經到達了相當穩定的階段,微軟在 2022/11/22 推出 1.0 正式版本,如果你還沒用過,那你真的要考慮試試。今天這篇文章我從如何安裝開始講起,並介紹新版本帶來了哪些新功能。

WSL

關於版本

我其實是在很多天前就從這則推文得知 WSL 1.0 即將發佈的消息,但我看到的第一個感覺就是:「咦?WSL 即將推出 1.0 版?現在不是 WSL 2 了嗎?怎麼重複推出一個 WSL 1.0 這玩意?!」我從推文整理了以下資訊,我用 Q&A 的方式你可以比較好理解!XD

微軟:WSL 即將推出 1.0 版!

用戶:等等,現在不是 WSL 2 了嗎?

微軟:我們 WSL 1 還在支援週期內

用戶:那 WSL 1.0 等於 WSL 2 嗎

微軟:也不是,WSL 1.0 是 Microsoft Store 上面的版本,所以 WSL 1 與 WSL 2 都支援

用戶:你版本搞這麼複雜幹嘛啦!🤬

微軟:你不用管這麼多,以後到 Microsoft Store 安裝或更新 WSL 就好了!

總之,你只要這次可以成功利用 Microsoft Store 安裝 WSL 的話,未來就不用再擔心版本的問題了,因為 Microsoft Store 未來會自動幫你安裝更新版本!不過,前提是你要能真的順利安裝起來,請繼續看下去!😅

安裝步驟

我原本以為安裝 WSL 1.0 很簡單,畢竟台灣人都是不看說明書安裝的,我直接從 Microsoft Store 安裝 Windows Subsystem for Linux 最新版(1.0.0.0),結果一啟動就告訴我以下錯誤:

Windows version 10.0.19045.2251 does not support the packaged version of Windows Subsystem for Linux. For information please visit https://aka.ms/wslinstall

image

我的 Windows 10 Pro 明明就已經裝到 22H2 最新版了,這樣還不能用,實在說不過去啊!不過,錯誤訊息至少很佛心的叫我到 https://aka.ms/wslinstall 查看資訊,我從頭看到尾,裡面完全沒提到「成功安裝」的關鍵知識,還說了只要 Windows 10 version 2004 and higher (Build 19041 and higher) 就可以裝,但我的 Windows 10 已經是 20H2 且版本號為 10.0.19045.2251 了耶,這理論上應該可以成功安裝吧!😩

最後,我是從 Windows Command Line 官方部落格的 The Windows Subsystem for Linux in the Microsoft Store is now generally available on Windows 10 and 11 文章,才得知原來 Windows 10 還要額外安裝 KB5020030 才行,這才是成功安裝的關鍵啊!🔥

如果你是 Windows 11 的話,要安裝 KB5019157 才行!

既然得知要先安裝 KB5020030 才能使用 WSL 1.0 版,我在開啟 KB 網頁後,發現這頁長篇大論寫一堆,看了一下如何取得更新,他又說可以直接從 Windows Update 看到 KB5020030 更新,但我的電腦就是看不到,我去 Twitter 問了這個問題,他說剛推出的更新,通常要等 3 週左右才會看到,所以這問題應該是短期的現象,只能手動下載了!最後,我是直接從 Microsoft Update Catalog 網站,查找 KB5020030 關鍵字,才找到可以下載的檔案,請依據你的 CPU 架構進行下載,如下圖示:

image

下載後直接執行安裝,重開機之後,就可以正常使用 WSL 1.0 了!這個新版的 WSL 1.0 多了一個全新的 --version 參數,你可以藉此得知自己有沒有安裝成功:

wsl --version

image

我重新整理一下上述的安裝步驟,其實就兩個步驟而已:

  1. 先透過 Windows Update 安裝 KB5020030 更新

    若找不到就到 Microsoft Update Catalog 手動下載安裝,安裝後會需要重開機。

  2. 若要安裝全新 WSL 版本,可以透過 wsl --install 命令直接安裝

    wsl --install
    

    若你無法從 Microsoft Store 安裝,那就只能透過 Windows 內建的選用元件來安裝,你只要加上 --inbox 參數即可,例如:

    wsl --install --inbox
    

    本文稍後還會介紹更多「安裝」相關的命令參數。

  3. 若要升級現有的 WSL 版本,可以透過 wsl --update 命令直接原地升級

    wsl --update
    

    注意:在安裝 KB5020030 更新之前,使用 wsl --update 是沒有效果的!

    image

    只要套用 KB5020030 更新之後,使用 wsl --update 就可以自動升級了!

    image

    這個步驟會自動從 Microsoft Store 安裝 Windows Subsystem for Linux 最新版 (目前最新版為 1.0.0.0),你也可以透過 wsl --versionwsl uname -r 得知 WSL 的 Kernel 版本!如

使用方式

在我兩年前的使用 WSL 2 打造優質的多重 Linux 開發環境文章中,已經有了鉅細靡遺的說明,這些內容至今都還有效,沒用過的人可以跳過去看文章。這篇文章我就來介紹 WSL 1.0 全新的功能有哪些!🔥

  • 查看 WSL 版本

    以前因為 WSL 一直在發展中,所以對版本沒有很好的管理,也很難查看目前的 WSL 版本為何。而新版 WSL 1.0 支援了 --version 參數,可以很方便查看這項版本資訊:

    wsl --version
    
  • 更新 WSL 版本

    由於 WSL 已經被標示為「穩定狀態」,所以未來升級版本變的相當容易,預設用以下指令就可以升級,他會從 Microsoft Store 自動下載最新版回來!

    wsl --update
    

    如果有公司無法連接微軟的更新伺服器,那麼加上 --web-download 參數則可以改從 GitHub 下載相關檔案!

    wsl --update --web-download
    
  • 支援 Linux 常見的 Systemd 服務管理員

    有了 systemd 之後,可以說大部分 Linux 應用程式就可以跑在 WSL 底下了,像是 snap, microk8s, systemctl 就都可以用了! 👍

    以下是啟用 systemd 的步驟說明:

    1. 先在 WSL Linux 中編輯 /etc/wsl.conf 檔案

      sudo vi /etc/wsl.conf
      

      放入以下兩行內容:

      [boot]
      systemd=true
      
    2. 退出 WSL 並將 WSL 關機

      wsl.exe --shutdown
      
    3. 列出所有透過 systemd 管理的服務

      wsl systemctl list-unit-files --type=service
      

    詳見 Systemd support is now available in WSL! 說明!

  • 更強大的 wsl.exe --install 命令

    你可以列出目前 WSL 所有支援的 Distro 有哪些:

    wsl.exe --list --online
    
    The following is a list of valid distributions that can be installed.
    Install using 'wsl.exe --install <Distro>'.
    
    NAME               FRIENDLY NAME
    Ubuntu             Ubuntu
    Debian             Debian GNU/Linux
    kali-linux         Kali Linux Rolling
    SLES-12            SUSE Linux Enterprise Server v12
    SLES-15            SUSE Linux Enterprise Server v15
    Ubuntu-18.04       Ubuntu 18.04 LTS
    Ubuntu-20.04       Ubuntu 20.04 LTS
    OracleLinux_8_5    Oracle Linux 8.5
    OracleLinux_7_9    Oracle Linux 7.9
    

    以下命令是快速安裝 Kali Linux 的命令:

    wsl.exe --install kali-linux
    

    新版 WSL 1.0 安裝時,你可以透過 --no-launch 參數要求不要在安裝後啟動 Shell 執行,也可透過 --web-download 改從 GitHub 下載 Distro 相關檔案(預設會從 Microsoft Store 下載)。不過,這兩個參數只有在特殊情境下才會使用,我個人覺得應該不常用。

    wsl.exe --install kali-linux --web-download --no-launch
    
  • 掛載虛擬磁碟 (VHD/VHDX)

    如果你想在 Windows 底下掛載一個 Linux 才支援的磁碟分割格式,如 ext4,那麼你就有可能會需要用到這個功能。除此之外,使用情境應該不多才對,但理論上,你要在 WSL 底下管理磁碟或透過 usbipd-win 掛載 USB 隨身碟也都是可行的,只是步驟會再稍微複雜一點。

    掛載一個 ext4 檔案系統的虛擬硬碟:

    wsl -d Ubuntu-20.04 --mount --vhd $env:USERPROFILE\Ubuntu-18.04.vhdx --name U1804
    

    他會跟你講把磁碟掛在到哪個路徑下 (/mnt/wsl/U1804),而且會提供你磁碟卸載(--unmount)的命令!👍

    The disk was successfully mounted as '/mnt/wsl/U1804'.
    Note: The location will be different if you have modified the automount.root setting in /etc/wsl.conf.
    To unmount and detach the disk, run 'wsl.exe --unmount \\?\C:\Users\user\Ubuntu-18.04.vhdx'.
    

    卸載磁碟

    wsl.exe --unmount \\?\$env:USERPROFILE\Ubuntu-18.04.vhdx
    

    目前直接掛載 USB 磁碟還有點問題(#6011),未來應該會直接支援。

    你可以參考 Mount a Linux disk in WSL 2Connect USB devices 獲得詳細的操作步驟。

    如果你想利用 WSL 來管理磁碟,可以參考 WSL2 How-to: Prepare and Attach Virtual Drives (VHD) 這篇文章,不過我照著文章是做不出來的,但基本精神差不多,有興趣的人可以研究看看。

  • 可直接將整個 WSL Distro 匯出/匯入 *.vhdx 檔案

    先前的 WSL 匯出功能,只能將整個 WSL 匯出成 *.tar 檔,現在可以直接匯出成 *.vhdx 虛擬硬碟,相當方便! 👍

    匯出現有的 Distro

    wsl --export Ubuntu-18.04 --vhd 'G:\Ubuntu-18.04.vhdx'
    

    刪除現有的 Distro (此命令會直接刪除 *.vhdx 檔,而且無法復原喔!)

    wsl --unregister Ubuntu-18.04
    

    將匯出的 *.vhdx 匯入到指定目錄

    wsl --import 'Ubuntu-18.04' 'G:\Ubuntu-18.04' 'G:\Ubuntu-18.04.vhdx' --vhd
    

    上述命令會建立一個新的 G:\Ubuntu-18.04\ext4.vhdx 虛擬硬碟!

    原地將現成的 *.vhdx 變成 Distro 的虛擬硬碟

    wsl --import-in-place 'Ubuntu-18.04' 'G:\Ubuntu-18.04.vhdx'
    

相關連結