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

WSL ([Windows Subsystem for Linux](https://learn.microsoft.com/en-us/windows/wsl/?WT.mc_id=DT-MVP-4015686)) 經過多年的發展，已經到達了相當穩定的階段，微軟在 2022/11/22 推出 1.0 正式版本，如果你還沒用過，那你真的要考慮試試。今天這篇文章我從如何安裝開始講起，並介紹新版本帶來了哪些新功能。

![WSL](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/238318de5e2d331a57ac-203910537-68153495-4a6e-40e5-8f7a-1bcbbca6101d.png)

### 關於版本

我其實是在很多天前就從[這則推文](https://twitter.com/craigaloewen/status/1592937956888969216)得知 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](https://apps.microsoft.com/store/detail/windows-subsystem-for-linux/9P9TQF7MRM4R) 最新版(`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](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/be27947079c5e896f98e-203817388-df1f7a7a-3327-4a70-a3dc-13d1291c50f3.png)

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

最後，我是從 [Windows Command Line](https://devblogs.microsoft.com/commandline/?WT.mc_id=DT-MVP-4015686) 官方部落格的 [The Windows Subsystem for Linux in the Microsoft Store is now generally available on Windows 10 and 11](https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-in-the-microsoft-store-is-now-generally-available-on-windows-10-and-11/?WT.mc_id=DT-MVP-4015686) 文章，才得知原來 Windows 10 還要額外安裝 [KB5020030](https://support.microsoft.com/en-us/topic/november-15-2022-kb5020030-os-builds-19042-2311-19043-2311-19044-2311-and-19045-2311-preview-237a9048-f853-4e29-a3a2-62efdbea95e2) 才行，這才是成功安裝的關鍵啊！🔥

> 如果你是 Windows 11 的話，要安裝 [KB5019157](https://support.microsoft.com/en-us/topic/november-15-2022-kb5019157-os-build-22000-1281-preview-d64fb317-3435-49ff-b2c4-d0356a51a6b0) 才行！

既然得知要先安裝 [KB5020030](https://support.microsoft.com/en-us/topic/november-15-2022-kb5020030-os-builds-19042-2311-19043-2311-19044-2311-and-19045-2311-preview-237a9048-f853-4e29-a3a2-62efdbea95e2) 才能使用 WSL 1.0 版，我在開啟 KB 網頁後，發現這頁長篇大論寫一堆，看了一下如何取得更新，他又說可以直接從 Windows Update 看到 `KB5020030` 更新，但我的電腦就是看不到，我去 Twitter 問了[這個問題](https://twitter.com/Will_Huang/status/1595808645828456448)，他說剛推出的更新，通常要等 3 週左右才會看到，所以這問題應該是短期的現象，只能手動下載了！最後，我是直接從 [Microsoft Update Catalog](https://www.catalog.update.microsoft.com/Home.aspx) 網站，查找 `KB5020030` 關鍵字，才找到可以下載的檔案，請依據你的 CPU 架構進行下載，如下圖示：

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/77ddce3011a4547f0bff-203820804-6d431f42-94e5-4834-8190-b17498b236db.png)

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

```bash
wsl --version
```

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/d6ded657741b2eccb37d-203821160-1d31fb92-66df-4372-a9e6-cda1bff0b1ba.png)

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

1.  先透過 Windows Update 安裝 `KB5020030` 更新
    
    若找不到就到 [Microsoft Update Catalog](https://www.catalog.update.microsoft.com/Search.aspx?q=KB5020030) 手動下載安裝，安裝後會需要重開機。
    
2.  若要安裝全新 WSL 版本，可以透過 `wsl --install` 命令直接安裝
    
    ```bash
    wsl --install
    ```
    
    若你無法從 Microsoft Store 安裝，那就只能透過 Windows 內建的選用元件來安裝，你只要加上 `--inbox` 參數即可，例如：
    
    ```bash
    wsl --install --inbox
    ```
    
    > 本文稍後還會介紹更多「安裝」相關的命令參數。
    
3.  若要升級現有的 WSL 版本，可以透過 `wsl --update` 命令直接原地升級
    
    ```bash
    wsl --update
    ```
    
    注意：在安裝 `KB5020030` 更新之前，使用 `wsl --update` 是沒有效果的！
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/0e67887741ae0f0c82b1-203824672-356ff743-0933-446f-80de-ae5c69a00703.png)
    
    只要套用 `KB5020030` 更新之後，使用 `wsl --update` 就可以自動升級了！
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/user-images.githubusercontent.com/04a10f88dcb94dd0a124-203827955-8d24849f-6a31-474c-9b63-d9371fdbe96f.png)
    
    > 這個步驟會自動從 **Microsoft Store** 安裝 [Windows Subsystem for Linux](https://apps.microsoft.com/store/detail/windows-subsystem-for-linux/9P9TQF7MRM4R) 最新版 (目前最新版為 `1.0.0.0`)，你也可以透過 `wsl --version` 或 `wsl uname -r` 得知 WSL 的 Kernel 版本！如
    

### 使用方式

在我兩年前的[使用 WSL 2 打造優質的多重 Linux 開發環境](/post/2020/07/26/Multiple-Linux-Dev-Environment-build-on-WSL-2)文章中，已經有了鉅細靡遺的說明，這些內容至今都還有效，沒用過的人可以跳過去看文章。這篇文章我就來介紹 WSL 1.0 全新的功能有哪些！🔥

-   查看 WSL 版本
    
    以前因為 WSL 一直在發展中，所以對版本沒有很好的管理，也很難查看目前的 WSL 版本為何。而新版 WSL 1.0 支援了 `--version` 參數，可以很方便查看這項版本資訊：
    
    ```bash
    wsl --version
    ```
    
-   更新 WSL 版本
    
    由於 WSL 已經被標示為「穩定狀態」，所以未來升級版本變的相當容易，預設用以下指令就可以升級，他會從 Microsoft Store 自動下載最新版回來！
    
    ```bash
    wsl --update
    ```
    
    如果有公司無法連接微軟的更新伺服器，那麼加上 `--web-download` 參數則可以改從 GitHub 下載相關檔案！
    
    ```bash
    wsl --update --web-download
    ```
    
-   支援 Linux 常見的 Systemd 服務管理員
    
    有了 `systemd` 之後，可以說大部分 Linux 應用程式就可以跑在 WSL 底下了，像是 [snap](https://snapcraft.io/), [microk8s](https://microk8s.io/), [systemctl](https://www.linode.com/docs/guides/introduction-to-systemctl/) 就都可以用了！ 👍
    
    以下是啟用 `systemd` 的步驟說明：
    
    1.  先在 WSL Linux 中編輯 `/etc/wsl.conf` 檔案
        
        ```bash
        sudo vi /etc/wsl.conf
        ```
        
        放入以下兩行內容：
        
        ```ini
        [boot]
        systemd=true
        ```
        
    2.  退出 WSL 並將 WSL 關機
        
        ```bash
        wsl.exe --shutdown
        ```
        
    3.  列出所有透過 systemd 管理的服務
        
        ```bash
        wsl systemctl list-unit-files --type=service
        ```
        
    
    > 詳見 [Systemd support is now available in WSL!](https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/?WT.mc_id=DT-MVP-4015686) 說明！
    
-   更強大的 `wsl.exe --install` 命令
    
    你可以列出目前 WSL 所有支援的 Distro 有哪些：
    
    ```bash
    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 的命令：
    
    ```bash
    wsl.exe --install kali-linux
    ```
    
    新版 WSL 1.0 安裝時，你可以透過 `--no-launch` 參數要求不要在安裝後啟動 Shell 執行，也可透過 `--web-download` 改從 GitHub 下載 Distro 相關檔案(預設會從 Microsoft Store 下載)。不過，這兩個參數只有在特殊情境下才會使用，我個人覺得應該不常用。
    
    ```bash
    wsl.exe --install kali-linux --web-download --no-launch
    ```
    
-   掛載虛擬磁碟 (VHD/VHDX)
    
    如果你想在 Windows 底下掛載一個 Linux 才支援的磁碟分割格式，如 `ext4`，那麼你就有可能會需要用到這個功能。除此之外，使用情境應該不多才對，但理論上，你要在 WSL 底下管理磁碟或透過 [usbipd-win](https://github.com/dorssel/usbipd-win) 掛載 USB 隨身碟也都是可行的，只是步驟會再稍微複雜一點。
    
    掛載一個 `ext4` 檔案系統的虛擬硬碟：
    
    ```powershell
    wsl -d Ubuntu-20.04 --mount --vhd $env:USERPROFILE\Ubuntu-18.04.vhdx --name U1804
    ```
    
    他會跟你講把磁碟掛在到哪個路徑下 (`/mnt/wsl/U1804`)，而且會提供你**磁碟卸載**(`--unmount`)的命令！👍
    
    ```bash
    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'.
    ```
    
    卸載磁碟
    
    ```powershell
    wsl.exe --unmount \\?\$env:USERPROFILE\Ubuntu-18.04.vhdx
    ```
    
    > 目前直接掛載 USB 磁碟還有點問題([#6011](https://github.com/microsoft/WSL/issues/6011))，未來應該會直接支援。
    
    你可以參考 [Mount a Linux disk in WSL 2](https://learn.microsoft.com/en-us/windows/wsl/wsl2-mount-disk?WT.mc_id=DT-MVP-4015686) 與 [Connect USB devices](https://learn.microsoft.com/en-us/windows/wsl/connect-usb?WT.mc_id=DT-MVP-4015686) 獲得詳細的操作步驟。
    
    > 如果你想利用 WSL 來管理磁碟，可以參考 [WSL2 How-to: Prepare and Attach Virtual Drives (VHD)](https://anthony-f-tannous.medium.com/wsl2-how-to-prepare-and-attach-virtual-drives-vhd-ac17b1fc7a61) 這篇文章，不過我照著文章是做不出來的，但基本精神差不多，有興趣的人可以研究看看。
    
-   可直接將整個 WSL Distro 匯出/匯入 `*.vhdx` 檔案
    
    先前的 WSL 匯出功能，只能將整個 WSL 匯出成 `*.tar` 檔，現在可以直接匯出成 `*.vhdx` 虛擬硬碟，相當方便！ 👍
    
    匯出現有的 Distro
    
    ```powershell
    wsl --export Ubuntu-18.04 --vhd 'G:\Ubuntu-18.04.vhdx'
    ```
    
    刪除現有的 Distro (此命令會直接刪除 `*.vhdx` 檔，而且無法復原喔!)
    
    ```powershell
    wsl --unregister Ubuntu-18.04
    ```
    
    將匯出的 `*.vhdx` 匯入到指定目錄
    
    ```powershell
    wsl --import 'Ubuntu-18.04' 'G:\Ubuntu-18.04' 'G:\Ubuntu-18.04.vhdx' --vhd
    ```
    
    > 上述命令會建立一個新的 `G:\Ubuntu-18.04\ext4.vhdx` 虛擬硬碟！
    
    原地將現成的 `*.vhdx` 變成 Distro 的虛擬硬碟
    
    ```powershell
    wsl --import-in-place 'Ubuntu-18.04' 'G:\Ubuntu-18.04.vhdx'
    ```
    

### 相關連結

-   [Install WSL | Microsoft Learn](https://learn.microsoft.com/en-us/windows/wsl/install?WT.mc_id=DT-MVP-4015686)
-   [The Windows Subsystem for Linux in the Microsoft Store is now generally available on Windows 10 and 11 - Windows Command Line](https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-in-the-microsoft-store-is-now-generally-available-on-windows-10-and-11/?WT.mc_id=DT-MVP-4015686#comment-5824)
-   [November 15, 2022—KB5020030 (OS Builds 19042.2311, 19043.2311, 19044.2311, and 19045.2311) Preview - Microsoft Support](https://support.microsoft.com/en-us/topic/november-15-2022-kb5020030-os-builds-19042-2311-19043-2311-19044-2311-and-19045-2311-preview-237a9048-f853-4e29-a3a2-62efdbea95e2)
-   [microsoft/WSL: Issues found on WSL](https://github.com/microsoft/WSL)
    -   [WSL v1.0.0 cannot be installed on Windows 10 Version 19045, whereas supported on the System Requirements on Microsoft Store · Issue #9157 · microsoft/WSL](https://github.com/microsoft/WSL/issues/9157)
