Создание дистрибутива linux для wsl

Опыт настройки и использования WSL (подсистемы Linux в Windows 10)

К написанию данной статьи меня побудил вопрос на Тостере, связанный с WSL. Я, после нескольких лет использования систем на ядре Linux, около полугода назад перешел к использованию Windows 10 на домашнем ПК. Зависимость от терминала и Linux окружения в моей работе практически сразу привели меня к вопросу: или ставить виртуалку или попробовать WSL. Я выбрал второе, и остался вполне доволен.

Под катом я расскажу как установить и настроить WSL, на какие я наткнулся проблемы и ограничения, как запускать Linux приложения из Windows и наоборот, а так же как интегрировать элементы окружения Xfce в окружение рабочего стола Windows.

Никогда не думал, что однажды вернусь на Windows, но повод попробовать мне дали стечения обстоятельств: жена, далекая от IT, дергала почти каждый раз, когда у нее возникала необходимость воспользоваться компом; проснулась ностальгия по одной игре, но она никак не хотела адекватно работать под wine; а тут еще мне подарили коробочную Windows 10 Pro. WSL я поставил чуть ли не сразу после установки системы, поигрался несколько вечеров, понял, что продукт для моих задач годный, но хочется более привычный терминал и вообще некоторых удобств.

Установка WSL и дистрибутива

Сразу оговорюсь, в интернете можно найти описание установки с помощью выполнения команды lxrun /install в командной строке или консоли PowerShell. Данный способ больше не работает (после выхода WSL в стабильный релиз). Насколько мне известно, сейчас WSL можно установить только из Microsoft Store вместе с предпочитаемым дистрибутивом.

Так же отмечу, что когда установку производил я, на выбор были доступны дистрибутивы OpenSUSE, SUSE Linux Enterprise и Ubuntu 16.04 — последний я и установил. Сейчас также доступны Ubuntu 18.04, Debian 9 и Kali Linux, возможно появятся и другие дистрибутивы. Действия по установке могут отличаться. Так же, часть проблем описанных в статье может быть уже исправлена.

Находим в магазине желаемый дистрибутив и устанавливаем. Установка пройдет быстро, так как скачает только эмулятор ядра Linux и утилиту для запуска подсистемы, которая окажется в системной папке в трех экземплярах: wsl.exe, bash.exe и ubuntu.exe (вместо ubuntu будет имя Вашего дистрибутива). Все они равнозначны и делают одно и то же — запускают собственный эмулятор терминала, в нем linux’овый bash работающий под эмулятором ядра. При первом же запуске нас попросят придумать логин и пароль для пользователя по умолчанию, а после произойдет непосредственно установка дистрибутива. В качестве пользователя по умолчанию указываем root без пароля — это потребуется для дальнейших шагов. Безопасность не пострадает, кроме того при подготовке материалов к статье, в англоязычном туториале, я наткнулся на информацию, что новые версии WSL теперь делают пользователем по умолчанию root без пароля без лишних вопросов.

Дожидаемся установки. Далее первым делом стоит обновить зеркала apt на ближайшие. Для этого понадобится CLI текстовый редактор. В комплекте только vi, я же больше предпочитаю nano, поэтому ставлю его:

sudo вводить не требуется, так как мы уже под root’ом. Отредактируем файл /etc/apt/sources.list:

У меня лучше всего работают зеркала Яндекса, поэтому мой файл выглядит так:

Нажимаем Ctrl+O для сохранения и Ctrl+X для выхода. Теперь можно обновить систему до актуального состояния:

После обновления можно создать нашего основного пользователя. В данной статье я назову его user1, Вы же можете задать привычное имя:

Далее переходим в папку юзера, зайдем под ним, установим пароль и отредактируем файл

Все, подсистема готова к использованию… почти.

Установка X-сервера, Xfce и прочих GUI’шных приложений

Первая же проблема, на которую я натолкнулся — bash-completion в предлагаемом эмуляторе терминала работал, мягко говоря, некорректно. Кроме того, данный эмулятор не умеет вкладки, а каждый его экземпляр запускает все в новом пространстве процессов, с отдельным init’ом (который кстати не заменить). Мне захотелось нормальный эмулятор терминала, некоторых других GUI приложений, а так же панельку, чтоб это все быстро запускать.

Читайте также:  Не устанавливаются гаджеты для windows 10

Когда я гуглил этот вопрос, я наткнулся на множество проблем, вроде необходимости перевода dbus на tcp протокол. На данный момент всех этих проблем нет. В подсистеме нормально работают unix-domain-socket’ы и все спокойно общается через них.

Первым делом нам понадобится X-сервер, притом установленный в основную систему (в Windows). Лично я использую для этих целей VcXsrv — порт X11 на Windows. Официальный сайт указанный в about самой утилиты его сейчас не предоставляет, поэтому гуглим установщик и устанавливаем все по умолчанию.

Пока идет установка возвращаемся в терминал WSL, командой exit выходим обратно в root’а. Первым делом настроим русские локали:

Далее установим некоторые компоненты Xfce. Можно конечно установить его целиком из мета-пакета, но большинство компонентов нам не понадобится, а модульная архитектура Xfce позволяет нам поставить только необходимое:

Запускать каждый раз окружение руками не очень удобно, поэтому я автоматизировал данный процесс. Для этого в основной системе создадим в удобном для нас месте папку, а в ней 3 файла для запуска:

    config.xlaunch — файл настроек для VcXsrv

x-run.vbs — WSL всегда запускается со своим эмулятором терминала, если его закрыть — завершатся все его дочерние процессы. Чтоб данное окно не мозолило глаза, неплохо его запускать скрытым. К счастью в Windows встроен интерпретатор VBScript, который позволяет это сделать в одну строчку:

Поясню, что здесь происходит. Мы говорим VBscript выполнить приложение wsl с параметром cd /home/user1; DISPLAY=:0 LANG=ru_RU.UTF-8 su user1 -c xfce4-session , папка запуска нам не важна, поэтому пустая строка, действие open — запуск, 0 — скрытый режим. Самому wsl мы отдаем команду на выполнение: переход в папку пользователя, затем с установкой переменных окружения DISPLAY (дисплей X-сервера) и LANG (используемая локаль) мы запускаем xfce4-session от имени нашего пользователя user1 (благодаря команде su)

  • start.bat — batch файл для запуска, по желанию его можно засунуть в автозагрузку
  • Далее можем запустить наш start.bat и настроить панель Xfce под себя. Замечу, что здесь я наткнулся на еще одну проблему — панель прекрасно отображается поверх всех окон, но вот выделить себе место, как панель на рабочем столе Windows она не может. Если кто знает решение данной проблемы, поделитесь в комментариях.

    Ну и под конец данной части, скриншот моего рабочего стола:

    Взаимодействие окружения Windows и окружения подсистемы Linux

    Запускать Linux приложения напрямую из Windows можно через те же 3 команды — bash, wsl или ubuntu. Не забываем, что по умолчанию запуск идет от root, поэтому стоит понижать привилегии через su , так же нужно не забывать передавать переменную окружения DISPLAY=:0 если приложению требуется X-сервер. Так же нужно менять папку, из которой должно работать приложение, через cd внутри WSL. Пример, посчитаем md5 для file.txt на диске D средствами Linux’овой md5sum:

    Доступ к файловой системе Linux так же имеется, лежит она в %localappdata%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs . Читать таким образом файлы можно, а вот писать — не желательно, можно поломать файловую систему. Думаю проблема в том, что Windows не умеет работать с правами и владельцами файловой системы Linux.

    Из Linux так же можно запускать Windows приложения. Просто запускаем exe-шник и он выполнится в основной системе.

    Диски Windows монтируются в /mnt в соответствии со своими буквами в нижнем регистре. Например диск D будет смонтирован в /mnt/d . Из Linux можно свободно читать и писать файлы Windows. Можно делать на них симлинки. Права у таких файлов всегда будут 0777, а владельцем будет root.

    Сетевой стек у подсистемы общий с Windows. Сервер поднятый в Linux будет доступен на localhost в Windows и наоборот. Однако unix-domain-socket для Windows будет просто пустым файлом, работать с этим можно только внутри Linux. Выход во внешнюю сеть у Linux так же есть, в том числе можно слушать порты, если этого не запрещает фаервол.
    ifconfig в Linux и ipconfig в Windows выдают одинаковую информацию о сетевых интерфейсах.

    Читайте также:  Аудио драйвер для windows 10 64 bit via

    Из диспетчера задач Windows можно спокойно прибить процесс внутри подсистемы Linux. Однако Linux увидит только свои процессы.

    Особенности, ограничения и подводные камни

    Ядро Linux в WSL не настоящее. Это всего лишь прослойка-эмулятор, которая часть Linux-специфичных задач выполняет сама, а часть проксирует напрямую в ядро winNT. Большая часть api в нем реализована, но не все. Свое ядро собрать не получится, как и не получится подключить модули ядра (.ko, Kernel Object).

    Init процесс у WSL тоже свой и заменить его, например, на system.d не выйдет. У меня давно есть желание написать менеджер демонов на go, который бы работал с файлами юнитов system.d и предоставлял бы схожий интерфейс, да все руки не доходят.

    Нет поддержки openFUSE, соответственно примонтировать виртуальную или удаленную файловую систему не получится. Так же нельзя сделать mount из файла, mount вообще ничего кроме bind здесь, похоже, не умеет.

    Так же нет никакой возможности разбить файловую систему Linux на несколько разделов/дисков.

    Прямой доступ к железу практически отсутствует. Все таки мы находимся в песочнице Windows, а не в полноценном Linux. /dev и /sys заметно пустуют, в них лишь проц да виртуальные устройства. Доступ к GPU — только через X-сервер, напрямую — никак, так что нейросети обучать придется в Windows.

    В JS разработке столкнулся с тем, что electron.js отказался запускаться в WSL, пришлось дублировать окружение node.js в Windows.

    Итоги

    Статья получилась довольно длинной, надеюсь, что она окажется еще и полезной.
    WSL для меня лично оказался инструментом вполне юзабельным, решающим мои задачи fullstack backend разработчика. Виртуалка с Linux за полгода так и не понадобилась. По общим ощущениям Windows+WSL намного функциональнее, чем Linux+Wine.

    Пока писал статью, обнаружил, что в Microsoft Store появилась сборка WSL с Debian 9.3, данный дистрибутив мне более симпатичен, чем Ubuntu, поэтому буду пробовать ставить.

    Источник

    Установка Linux совместно с Windows 10 через WSL

    Обновл. 22 Апр 2021 |

    WSL (сокр. от «Windows Subsystem for Linux») — это относительно новый механизм, входящий в состав Windows 10, позволяющий устанавливать непосредственно внутри Windows различные Linux-дистрибутивы (например, Ubuntu, openSUSE, Debian и др.) и пользоваться такими инструментами и службами, как: vim, tmux, emacs, Apache и MySQL, а также скриптами, написанными на bash, Python, Ruby, C#, F# и пр.

    Выделяют две отдельные ветки развития WSL: WSL 1 (релиз бета-версии состоялся в 2016 году) и WSL 2 (релиз состоялся в 2019 году).

    Главный вопрос: «Чем же отличается установка Linux совместно с Windows 10 через Мультизагрузку от установки через WSL?».

    Устанавливая дистрибутив Linux совместно с Windows 10 через Мультизагрузку вы устанавливаете вторую полноценную операционную систему, т.е. выбранный вами дистрибутив Linux поставляется с командной оболочкой, окружением рабочего стола, приложениями с графическим интерфейсом.

    Устанавливая дистрибутив Linux совместно с Windows 10 через WSL вы получаете только командную оболочку выбранного вами дистрибутива без какого-либо графического интерфейса (т.е. без окружения рабочего стола и приложений с графическим интерфейсом). Установить дополнительно приложения с графическим интерфейсом вы сможете, но через сторонние приложения.

    WSL 1

    WSL 1 — это механизм, скрывающий внутри себя особую прослойку совместимости, которая позволяет транслировать вызовы от линуксовых программ к WSL и далее от WSL (для обработки) к Windows (напоминает Wine в Linux-системах). Если всё, что вам нужно, — это оболочка bash и связанные с ней команды (apt, ssh, find, grep, awk, sed, tar, vim, emacs и diff), а также возможность программировать на Python, Perl, Ruby, PHP, С/C++, то WSL 1 — это ваш вариант. Кроме того, в WSL 1 реализована поддержка веб-сервера Apache и СУБД MySQL.

    Компания Microsoft также заявляет, что если ваши файлы должны храниться в файловой системе Windows или вы производите кросс-компиляцию с помощью инструментов Windows и Linux, то с WSL 1 вы получите более высокую производительность.

    При этом стоит отметить, что WSL 1 также не лишен и некоторых недостатков, главным из которых является отсутствие реализации полноценного Linux-ядра. В результате этого, в WSL 1 нет нормальной поддержки графических интерфейсов (GNOME, KDE, Cinnamon и др.). Даже для опытных пользователей настройка графических приложений под WSL 1 является (относительно) непростой задачей.

    Читайте также:  Pycharm ��� ���������� manjaro linux

    WSL 2

    WSL 2 — это новая версия архитектуры Windows Subsystem for Linux, которая позволяет запускать бинарные файлы Linux прямо в Windows. В отличие от WSL 1, механизм которой опирается на слой совместимости, WSL 2 использует виртуальную машину (Microsoft Hyper-V), внутри которой запускает полноценное Linux-ядро.

    Основными целями WSL 2 являются: повышение производительности файловой системы, а также добавление полной совместимости системных вызовов. При этом дистрибутивы Linux могут быть запущены как с архитектурой WSL 1, так и с архитектурой WSL 2. Версия WSL для каждого отдельно взятого дистрибутива в любое время может быть обновлена или понижена, а также ничто не мешает вам запускать обе версии WSL вместе.

    Шаг №1: Включение компонентов WSL с помощью Панели Управления

    Включение WSL 1

    Чтобы установить WSL 1 с помощью Панели Управления, вам нужно в поиске Windows 10 открыть «Параметры» > выбрать пункт «Приложения» > в разделе «Сопутствующие параметры» выбрать пункт «Программы и компоненты» :

    Затем на левой панели выберите пункт «Включение или отключение компонентов Windows» :

    Отметьте опцию «Подсистема Windows для Linux» :

    Затем нажмите кнопку «ОК» и после этого — «Перезагрузить сейчас» .

    Как только вы выполните данные шаги, компонент WSL 1 будет готов для загрузки и запуска дистрибутивов Linux. Если же вы хотите активировать WSL 2, то ниже представлена инструкция того, как это можно сделать.

    Включение WSL 2

    Чтобы установить WSL 2 с помощью Панели Управления, вам нужно в поиске Windows 10 открыть «Параметры» > выбрать пункт «Приложения» > в разделе «Сопутствующие параметры» выбрать пункт «Программы и компоненты» :

    Затем выберите на левой панели пункт «Включение или отключение компонентов Windows» :

    Отметьте 2 пункта: «Платформа виртуальной машины» и «Подсистема Windows для Linux» .

    Затем нажмите кнопку «ОК» и после этого — «Перезагрузить сейчас» .

    Дальше вам нужно будет скачать и установить обновление для WSL 2:

    После этого в поиске Windows 10 найдите Windows PowerShell, щелкните правой кнопкой мыши (ПКМ) на найденном пункте и выберите опцию «Запуск от имени администратора» .

    После входа (от имени администратора) в Windows PowerShell выполните следующую команду, которая устанавливает использование WSL 2 по умолчанию:

    wsl —set-default-version 2

    Теперь можно переходить к установке дистрибутива Linux.

    Шаг №2: Установка дистрибутива Linux

    Чтобы установить дистрибутив Linux на Windows 10, вам нужно открыть Microsoft Store и найти выбранный вами дистрибутив:

    Примечание: В этой инструкции я буду устанавливать дистрибутив Ubuntu.

    Затем нажмите кнопку «Получить» (или «Установить» ):

    Начнется скачивание выбранного дистрибутива:

    После скачивания необходимого дистрибутива, нажмите кнопку «Запустить» .

    В открывшейся консоли создайте имя нового пользователя Linux и нажмите клавишу Enter . Затем задайте пароль и снова нажмите клавишу Enter . После этого нужно будет повторить пароль и нажать клавишу Enter для подтверждения:

    После выполнения вышеописанных шагов вы сможете начать использовать установленный Linux-дистрибутив. Для этого в поиске достаточно будет ввести название установленного дистрибутива и запустить его.

    Внимание: Установленный Linux-дистрибутив будет без графического интерфейса пользователя. Т.е. у вас будет только командная оболочка выбранного дистрибутива без окружения рабочего стола и приложений с графическим интерфейсом.

    Удаление дистрибутива Linux

    Если вам больше не нужен установленный дистрибутив Linux в вашей системе, то рекомендуется его удалить, а затем отключить WSL.

    Чтобы удалить дистрибутив Linux в Windows 10, установленный через WSL, вам нужно в поиске Windows 10 открыть «Параметры» > выбрать пункт «Приложения» > в разделе «Приложения и возможности» выбрать установленный дистрибутив Linux (у меня это Ubuntu) > нажать кнопку «Удалить» :

    Затем для подтверждения нажать кнопку «Удалить» еще раз.

    Как только вы выполните эти шаги, установленный дистрибутив Linux будет удален; останется только отключить механизм WSL.

    Отключение механизма WSL

    Чтобы отключить WSL в Windows 10, вам нужно:

    в поиске Windows 10 открыть «Параметры» ;

    выбрать пункт «Приложения» ;

    в разделе «Сопутствующие параметры» выбрать пункт «Программы и компоненты» ;

    затем выбрать на левой панели пункт «Включение или отключение компонентов Windows» ;

    снять флажок «Подсистема Windows для Linux» (и флажок «Платформа виртуальной машины» , если устанавливали WSL 2).

    Затем нажмите кнопку «ОК» и после этого — «Перезагрузить сейчас» .

    После выполнения данных действий WSL будет отключен на вашем устройстве.

    Поделиться в социальных сетях:

    Установка Linux совместно с Windows 10 через Мультизагрузку

    Источник

    Оцените статью