可以在Win10的“Windows Subsystem for Linux”中安裝任何其他發行版嗎?

可以在Win10的“Windows Subsystem for Linux”中安裝任何其他發行版嗎?

這 ”Windows 伺服器安裝指導” 連結手動下載適用於 Linux 的 Windows 子系統發行版軟體包”,其中提到了官方提供的幾個發行版:Debian、Kali、Ubuntu、OpenSUSE、Fedora 和 SLES

由於我們手邊有基於 Debian 和 Slackware 的發行版:

  • 是否可以使用除 Arch 之外的任何發行版/樹?
  • 不使用官方發行版有什麼缺點嗎?

我對避免使用 Windows 應用程式商店的方式特別感興趣,因為它可以被阻止透過組策略。

答案1

這是在 Windows 10 v1709 中進行測試的,該過程可能會在未來的 Windows 10 版本中發生變化

  1. 編譯安裝程式:
    我們必須編譯一個可執行檔來調用WslRegisterDistribution()功能:
    (預計此記錄的功能不會改變)
    #include <Windows.h>
    #include <stdio.h>
    
    typedef HRESULT (WINAPI* RegisterDistro)(PCWSTR distroName, PCWSTR tarGzFilename);
    
    int main() {
      int wargc;
      wchar_t** wargv;
      wargv = CommandLineToArgvW(GetCommandLineW(), &wargc);
      HMODULE dll = LoadLibraryExW(L"wslapi.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32);
      RegisterDistro func = (RegisterDistro)GetProcAddress(dll, "WslRegisterDistribution");
      HRESULT result = func(wargv[1], wargv[2]);
      (result == S_OK) ? printf("%ls installed\n", wargv[1]) : printf("Error: 0x%x\n", result);
    }
    
    使用任何 C 編譯器(例如gcc)編譯此文件,並指定可執行文件名稱Wslnstall.exe(步驟 #3 所需的),我的 GitHub 中有此編譯版本儲存庫

  2. 下載.tar.gz根檔案系統:
    有許多方法可以取得發行版的 RootFS(例如,從 ISO 檔案、docker 映像、使用debootstrap指令等),根據我個人的經驗,該檔案中存在一些條件.tar.gz,例如該.tar.gz檔案應該是壓縮為僅限 gzip,包含有效/bin/bash/bin/sh二進/etc/passwd位(像往常一樣)。
    • 這些只是指導方針使用者可以跳過,在這裡我省略了這些步驟,直接連結到預建的 .tar.gz對於 Alpine(僅下載.tar.gz

  3. 安裝:
    將已編譯的可執行檔(步驟#1)和.tar.gz(步驟#2)放入同一資料夾您要安裝,從該資料夾中執行:
    # WslInstall.exe <distro_name> <file_name.tar.gz>
      WslInstall.exe Alpine alpine-minirootfs-xxx.tar.gz
    

現在應該安裝 Alpine 發行版了。

相關內容