6

В разделе "Установка подсистемы Linux на Windows Server" Microsoft упоминает три официальных дистрибутива: Debian, Kali, Ubuntu, OpenSUSE и SLES.

Поскольку у нас есть дистрибутивы на основе Debian и Slackware, я задаюсь вопросом: можно ли использовать какие-либо другие дистрибутивы из этих - или других - деревьев дистрибутивов (например, Fedora, Arch), и есть ли недостатки, которые нельзя использовать "официальные" раздачи? Я особенно заинтересован в том, чтобы избежать использования Магазина Windows, например, как описано в приведенной выше ссылке, поскольку Магазин Windows может быть заблокирован групповыми политиками.

1 ответ1

9

Отказ от ответственности: Следующая процедура протестирована в Windows 10 версии 1709 (Fall Creators Update). Процедура может измениться в будущих сборках 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 здесь WslInstall.

  1. Загрузите .tar.gz RootFS: Есть много способов получить RootFS дистрибутива, например, из ISO-файла, из образа докера, с помощью команды debootstrap и т.д. Из моего личного опыта есть некоторые условия, которые должны присутствовать в этом .tar.gz файл. Файл .tar.gz должен быть сжат только с помощью gzip и должен содержать действительный двоичный файл /bin/bash или /bin/sh и /etc/passwd (как обычно).

Это просто рекомендации, которые пользователи могут пропустить. Здесь я опускаю эти шаги и помещаю прямую ссылку для загрузки предварительно созданного файла .tar.gz . Например, для Alpine перейдите по этой ссылке: http://dl-4.alpinelinux.org/alpine/v3.7/releases/x86_64/ и загрузите только файл tar.gz

  1. Установка: поместите скомпилированный исполняемый файл (шаг № 1) и файл .tar.gz (шаг № 2) в ту же папку, куда вы хотите установить. Запустите эту команду в этой папке: WslInstall.exe <distro_name> <file_name.tar.gz> . Например команда будет:

    WslInstall.exe Alpine alpine-minirootfs-xxx.tar.gz .

Распределение Alpine должно быть установлено.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .