你能在 Win10 的“适用于 Linux 的 Windows 子系统”中安装任何其他发行版吗?

你能在 Win10 的“适用于 Linux 的 Windows 子系统”中安装任何其他发行版吗?

这 ”Windows Server 安装指导“链接手动下载适用于 Linux 的 Windows 子系统发行版包”,其中提到了官方提供的几个发行版:Debian、Kali、Ubuntu、OpenSUSE、Fedora 和 SLES

由于我们手头有基于 Debian 和 Slackware 的发行版:

  • 是否可以除这些之外的其他发行版/树,例如 Arch?
  • 不使用官方发行版有什么缺点吗?

我特别感兴趣的是避免使用 Windows Store 的方法,因为它可以受阻通过组策略。

答案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.gzRootFS:
    有很多方法可以获取发行版的 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 发行版。

相关内容