Одним из новшеств Windows Server 2016 версии RedStone 3 (1709) является встроенная поддержка запуска нативных бинарных файлов Linux ELF64. Данный функционал реализуется за счет отдельного компонента Windows Subsystem for Linux (WSL), который обеспечивает нужный слой совместимости. В этой обзорной статье мы покажем, как включить подсистему Windows для Linux в Windows Server 2016 и использовать ее для запуска Linux приложений.
Возможность запуска Linux приложений в Windows ранее была представлена в Windows 10. Эта функция носила название Bash on Windows. Начиная с Windows 10 Fall Creators Update это название более не используется и официально эта подсистема теперь называется WSL — Windows Subsystem for Linux. Кроме того, для ее использования более не нужно переключать ОС в режим разработчика (Developer Mode). WSL доступна как Windows Server, так и в виртуальных машинах Microsoft Azure
Предполагаем, что вы уже скачали и установили релиз Windows Server >= 1709. Это может быть сервер с полноценным GUI или в Core режиме.
Проверить текущую версию ОС можно так:
systeminfo | Select-String "^OS Name","^OS Version"
Чтобы проверить, что в вашей версии Windows Server имеется функционал WSL, выполните следующую команду:
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Чтобы включить поддержку подсистемы Linuх, выполните команду:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
После чего сервер нужно перезагрузить.
Далее необходимо скачть архив с адаптированным дистрибутивом Linux. На данный момент Microsoft предлагает поддержку следующих дистрибутивов:
- Ubuntu – https://aka.ms/wsl-ubuntu-1604
- OpenSUSE – https://aka.ms/wsl-opensuse-42
- SLES – https://aka.ms/wsl-sles-12 — корпоративный вариант SUSE
В ближайшем будущем планируется добавить дистрибутивы CentOS и Fedora.
К примеру, с помощью PowerShell по HTTP протоколу, скачаем архив с дистрибутивом Ubuntu:
Invoke-WebRequest -Uri https://aka.ms/wsl-ubuntu-1604 -OutFile ~/Ubuntu.zip -UseBasicParsing
Размер архива около 200 Мб. Распакуем его:
Expand-Archive ~/Ubuntu.zip ~/Ubuntu
Исходный архив можно удалить:
Remove-Item Ubuntu.zip
Для запуска установки дистрибутива достаточно запустить файл:
Ubuntu.exe
Запустится мастер установки, который в том числе попросит указать имя пользователя и пароль, который вы будете использовать для доступа к середе Linux (эта учетная запись не связана с Windows и входит в группу sudoers, таким образом ей разрешено использовать команду sudo для установки пакетов)
Запустим обновление дистрибутива:
sudo apt-get update
sudo apt-get upgrade
Чтобы выйти из командой оболочки Linux и вернуться в PowerShell, наберите:
Exit
Открыть shell в любой момент можно командой:
bash
Имеется возможность запускать команды Linux из консоли Windows и наоборот. К примеру, в консоли PowerShell можно вывести список файлов в каталоге командой ls. Формат команды должен быть такой:
bash -c “ls -la”
Чтобы из Linux вызвать команду Windows, формат должен быть такой:
cmd.exe /c dir
Нужно отметить, что из Linux можно запускать только те исполняемые файлы Windows, которые описаны в специальной переменной окружения. Чтобы добавить в переменную окружения новый путь, выполните команду:
export PATH=$PATH:/mnt/c/Windows/System32
Теперь можно вызвать любой файл из каталога %WinDir%\system32.
Чтобы передать параметр на вход исполняемого файла, нужно воспользоваться такими конструкциями:
$notepad.exe “C:\temp\test.txt”
$notepad.exe C:\\temp\\test.txt
Все исполняемые файлы в этом случае запускаются в контексте учетной записи, запустившей bash.exe.
Итак, подсистему WSL можно использовать для тестирования, разработки и запуска утилит Linux, недоступных в Windows окружении без необходимости развертывать и настривать отдельную виртуальную машины с Linux.