Отказ от ответственности: Следующая процедура протестирована в Windows 10 версии 1709 (Fall Creators Update). Процедура может измениться в будущих сборках Windows 10. Внимание, язык программирования впереди.
- Установщик компиляции: мы должны скомпилировать исполняемый файл для вызова функции
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.
- Загрузите .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) и файл .tar.gz (шаг № 2) в ту же папку, куда вы хотите установить. Запустите эту команду в этой папке: WslInstall.exe <distro_name> <file_name.tar.gz>
. Например команда будет:
WslInstall.exe Alpine alpine-minirootfs-xxx.tar.gz
.
Распределение Alpine должно быть установлено.