Можно ли установить какие-либо другие дистрибутивы в «Подсистеме Windows для Linux» Win10?

Можно ли установить какие-либо другие дистрибутивы в «Подсистеме Windows для Linux» Win10?

"Установка Windows ServerГид"ссылкик"Вручную загрузите пакеты дистрибутивов Windows Subsystem for Linux", в котором упоминаются несколько официально поставляемых дистрибутивов: 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.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 должен быть установлен.

Связанный контент