WSL. Полгода спустя
Как я уже сказал, за последние полгода разработчики WSL успели основательно доработать эту подсистему, что упростило ее установку и настройку. А сама Microsoft успела стать «платиновым» членом Linux Foundation. Лет пятнадцать назад о таком нельзя было даже мечтать. В своем новом качестве Microsoft обязалась поддерживать все инициативы Linux Foundation в области открытого ПО и Linux и ежегодно перечислять в фонд 500 тысяч долларов США. Это, безусловно, большое достижение. В первую очередь для всего сообщества FOSS (free/libre and open-source software — бесплатное/свободное и открытое программное обеспечение). Через пятнадцать лет после того, как Стив Балмер назвал Linux раковой опухолью, новое руководство Microsoft оказалось куда более дальновидным и разумным.
Но вернемся к Windows Subsystem for Linux. Установка собственно Windows 10 проходит быстро и просто (почти как установка Ubuntu), и нет нужды описывать ее нашему читателю. Ты можешь выбрать либо обновление из предыдущей версии Windows 10, что займет в разы больше времени и сил, либо удалить предыдущую версию и установить систему с нуля (что я и сделал, и не из лени, а чистоты эксперимента для, чтобы система была, что называется, девственно-чистой). Автор этих строк вот уже больше года является бета-тестером Windows 10, и новые версии доступны ему бесплатно (от слова совсем). Если ты тоже бета-тестер, то у тебя должна быть лицензия на новые бета-релизы Windows 10.
В последнюю версию Windows, Anniversary Update 1607 — «юбилейное обновление» (непонятно, правда, что за юбилей у MS), WSL включается по умолчанию. Надо лишь активировать «Режим разработчика» в разделе «Обновление и безопасность», дождаться, пока система загрузит так называемый пакет разработчика, и перезагрузить компьютер. После чего запустить инструмент «Включение и отключение компонентов Windows», где выбрать пункт «Подсистема Linux для Windows…». И снова перезагрузить компьютер.
В русской версии Windows 10 все немного иначе, но общий смысл такой же
Другие статьи в выпуске:
Xakep #216. Копаем BitLocker
- Содержание выпуска
- Подписка на «Хакер»
Установка bash в WSL проходит без проблем (хотя и не так быстро, как хотелось бы). Мне не удалось с первого раза установить Unity: инсталлятор постоянно ругался на битые пакеты. Как оказалось, сначала нужно было обновить систему через штатный менеджер пакетов Ubuntu — APT. После получения обновлений установка пошла как по маслу и… продлилась на моем тестовом Dell Inspiron (не самый старый ноутбук, хотя и не топовый) около девяти с половиной часов. Почему — тайна сия мне неведома. Однако я заметил, что каждый Ubuntu-пакет устанавливался раза в три-четыре дольше, чем в «чистой» Ubuntu.
Инсталляция bash сводится к одной команде в консоли Windows 10
Начало установки через BIOS
BIOS, скорей всего, установлена у каждого второго человека, читающего эту статью. В целом она уже считается пережитком, именно UEFI пришла на ее смену. Но так как людей с BIOS все еще много, стоит затронуть и тему установки Ubuntu через нее.
После того как образ ОС был записан на флешку, начинается установка Ubuntu 16.04 рядом с Windows 10. Для этого перезагрузите свой компьютер и во время его запуска нажимайте клавишу Del или F2. Это приведет к тому, что вы попадете в BIOS компьютера. Здесь нас интересует лишь одна вкладка. С помощью стрелок направления на клавиатуре перейдите на вкладку BOOT. Именно в ней нам нужно выбрать приоритетное устройство при запуске компьютера. Нам нужно выбрать флешку.
Важно! На каждом компьютере BIOS может отличаться, и выбор приоритетного устройства может видоизменяться, поэтому конкретики не будет.
Если у вас все плохо с пониманием иностранного языка, то обращайте внимание на поля, где будет написано Hard, Disk и Priority. Напротив этих полей будет написано наименование вашего жесткого диска, зачастую начало у него SATA, именно SATA нужно поменять на USB Flash Card.
Надеемся, такое абстрактное представление поможет вам выбрать правильные настройки, но даже если была совершена ошибка — не бойтесь, ни к чему плохому она не приведет.
После выбора приоритетного устройства перейдите в графу Exit и выберите первый пункт — «Выход с сохранением измененных настроек».
Теперь ваш ПК перезагрузится и запустится инсталлятор Ubuntu.
X Window, Unity и все-все-все
Установка bash — это лишь полдела. Дальше начинается самое интересное — установка и настройка X-сервера в Windows и запуск графических приложений, в том числе и Unity.
Изначально Canonical и Microsoft добавили возможность запуска Ubuntu поверх Windows 10 для того, чтобы предоставить системным администраторам и разработчикам возможность использования bash и других Linux-инструментов и утилит, таких как make, gawk и grep, непосредственно в Windows. Пользователи Linux, как истинные хакеры (в хорошем смысле этого слова), не заставили себя долго ждать и немедленно приступили к работе над запуском графических окружений рабочего стола в WSL. И угадай, что? Они сделали это. Гватемальский программист, зарегистрированный на GitHub под ником Guerra24, смог (цитата) «запустить Unity (рабочее окружение по умолчанию в Ubuntu) внутри WSL. Это говорит о том, что прослойка от Microsoft, в принципе, вполне способна запускать любые окружения рабочего стола».
Задача эта нетривиальная, и то, что в итоге получится, трудно назвать полноценным рабочим столом Linux, но это только начало. Если ты хочешь использовать рабочий стол Ubuntu в Windows 10 в практических целях, то лучше воспользуйся любой из доступных в данный момент виртуальных машин, например VirtualBox от Oracle. А вот если ты просто хочешь повеселиться и прокачать свои навыки программирования для рабочих столов, то можешь попробовать запустить «нативный» Linux прямо в Windows 10. Для запуска Unity в WSL тебе для начала нужно установить (любым доступным способом, желательно легальным!) версию Windows 10 Anniversary Update за номером 1607. Причем не «домашнюю» версию, а самую что ни на есть «профессиональную», а то и вовсе «корпоративную». После установки обязательно обнови систему и двигайся дальше.
После двух (иногда трех) перезагрузок в процессе обновления, чтобы установить bash, необходимо запустить командную строку Windows (Win + R, ввести cmd — и будет тебе счастье в виде «консоли» Windows) и ввести… да, именно так: bash. Будет предложено согласиться с условиями обслуживания (обязательно прими их, выбора у тебя нет!) и загрузить Ubuntu. На этом этапе тебе нужно просто нажать клавишу Y. Объем загружаемых файлов будет не многим более одного гигабайта. Так что, если у тебя медленный интернет (да, бывает и такое), приготовься ждать. Затем начнется установка, которая, в свою очередь, тоже займет некоторое время, зависящее от производительности компьютера. И в конце всего этого ты попадешь в пространство пользователя (пользовательское окружение) Ubuntu 14.04, работающее поверх WSL.
Технически ты запустишь не Linux. Оно может выглядеть как Linux, но это не Linux. Дело в том, что пользовательское окружение (тот самый bash и прочие) работает не поверх ядра Linux, а внутри прослойки WSL. WSL использует специальный API и набор инструкций, для того чтобы все выглядело как в Linux, но все же это не то же самое. В основе всего этого все еще стоит ядро Windows NT. Это важно понимать, чтобы разобраться в том, как запускается и работает Unity в WSL.
После установки Ubuntu обязательно обнови ее, введя стандартные для этого команды:
# apt-get update # apt-get upgrade
VcXsrv — X-сервер для Windows
Далее нужно снова вернуться в Windows 10 и установить совместимый с ней X-сервер. Для нашего эксперимента идеально подойдет VcXsrv. Его собрата Xming лучше не использовать, так как с ним, по неизвестной мне причине, возникает проблема: при попытке запустить любое графическое приложение для Linux все просто вылетает, в том числе и консоль Windows. Но это не все. Нужно сказать Ubuntu о том, что следует использовать именно X-сервер VcXsrv. Для этого введи в bash команду
# DISPLAY =: 0.0
Теперь любое графическое приложение Linux будет работать в Windows 10. Но только до закрытия bash. Чтобы WSL работала с графикой Linux все время, автоматически выбирая нужный для работы X-сервер, просто добавь указанную строку в конец конфигурационного файла bash (~/.bashrc):
# echo «export DISPLAY=:0.0» >> ~/.bashrc
VcXsrv — X-clock в Windows. Магия!
Firefox для Ubutnu работает отлично, почти не тормозит!
После этого ты сможешь запускать любые графические приложения Linux, например Firefox или любое DE. Однако они будут работать не так, как в Linux, падая каждую минуту, а некоторые, например Unity, и вовсе не запустятся. Проблема тут в том, что WSL не содержит в себе кода поддержки сокетов (универсальная концепция обмена данными между процессами в UNIX-подобных системах, подробности тут).
Для имплементации концепции сокетов графические окружения Linux по умолчанию используют систему обмена сообщениями D-bus. Большинство графических приложений Linux не смогут даже запуститься без D-bus, не то что работать. Но WSL, к счастью, поддерживает сетевой протокол TCP, что и подвигло пользователя Reddit.com под ником ShaRose найти способ заставить D-bus использовать вместо сокетов протокол TCP. Решение не идеальное, но оно работает. Чтобы «прикрутить» D-bus к TCP, введи в bash:
# sed -i ‘s/.*/tcp:host=localhost,port=0/’ /etc/dbus-1/session.conf
Самое главное — правильно указать дисплей!
Этой командой ты изменишь конфигурационный файл D-bus так, чтобы отныне он использовал TCP вместо сокетов. В этом тебе поможет старый добрый потоковый редактор sed. Что в итоге? Приложения, требующие для своей работы D-bus, теперь запускаются и в WSL. Следующий шаг — установка графических приложений Linux. Для начала сделай в консоли WSL вот это:
# apt-get install ubuntu-desktop # apt-get install unity # apt-get install compiz-core # apt-get install compizconfig-settings-manager
Долгая установка Unity…
Первая команда установит основные графические компоненты Ubuntu, в том числе программы для конечного пользователя, такие как LibreOffice. Следующая команда устанавливает рабочий стол Unity. Две остальные команды поставят композитный оконный менеджер Compiz, использующий OpenGL, и графический фронтенд к нему. Именно его и нужно будет правильно настроить на следующем этапе.
Перед тем как начать пользоваться окружением рабочего стола Unity в Windows 10, тебе необходимо правильно настроить CompizConfig Settings Manager (CCSM). После установки всех этих приложений запусти из интерфейса bash CCSM и активируй в нем следующие плагины (все должно быть ИМЕННО так, как на скриншоте!):
Настройки Compiz
- В секции General (Общие):
- Commands (Команды)
Composite
- Copy to texture
- OpenGL
- В секции Desktop (Рабочий стол):
- Ubuntu Unity Plugin
- В секции Utility (Утилиты):
- Compiz Library Toolbox
- В секции Window Management (Управление окнами):
- Place Windows (Переместить окно)
Resize Window (Изменение размеров окна)
- Scale (Масштабировать)
- Snapping Windows
- В секции Image Loading (Загрузка изображения):
- PNG
Далее, чтобы все наконец заработало, закрой CCSM и запусти Compiz из bash командой
$ compiz
Примерно через минуту ты увидишь запущенную оболочку Unity.
Unity во всей красе
Отмечу несколько ключевых моментов:
- Если ты и правда хочешь запускать иксовые приложения в WSL, устанавливай в качестве X-сервера VcXsrv, а не Xming. Опытным путем доказано, что Xming не желает нормально работать с WSL.
- После установки CCSM необходимо настроить его именно так, как показано на картинке (то есть включить то, что отмечено галочками, и выключить все остальное). Только тогда Unity со скрипом, не с первой попытки, но запустится.
- Лучше не устанавливать проприетарные драйверы ATI для Ubuntu внутри WSL. Это приводит к полному зависанию всей системы (в том числе и Windows 10) и влечет за собой тотальную переустановку WSL со всеми вытекающими.
- Огорчу тебя: не стоит возлагать на получившийся костыль большие надежды. Нормально ЭТО работать не будет. Но на моей тестовой машине Unity внутри WSL работала вполне сносно. Субъективно — чуть медленнее, чем в нативном Linux. Быть может, в будущем кто-нибудь доведет все это дело до ума. И от Unity в WSL таки будет польза.
Что же получится в итоге, после стольких мучений? А в итоге (теоретически, так как на практике выходит пока просто интересный экспериментальный способ запуска Unity и прочих DE внутри WSL) мы получим среду для тестирования Linux-приложений прямо внутри Windows. И Unity, работающую поверх Windows. Конечно, скорость работы и отзывчивость ее не такие, как на реальном железе, но все же быстрее, чем в виртуальной машине. Многие приложения, например Google Chrome или Pidgin, просто не запускаются. А вот Firefox, файловый менеджер, магазин приложений и прочие системные утилиты Ubuntu работают на ура (чуть медленней, чем в «настоящей» Ubuntu, но работают!).
Работа с дисковым пространством с помощью средств Ubuntu LiveDisk
Одно из немногочисленных преимуществ Linux перед Windows – дистрибутивы в формате LiveDisk. Это гораздо больше, чем среда восстановления Windows. Так, LiveDisk с Ubuntu являет собой почти что полноценную операционную систему. Ограничена такая система невозможностью применения настроек и низкой скоростью работы загрузочного носителя, что в аварийных случаях вряд ли будет иметь весомое значение. В числе штатных инструментов Ubuntu LiveDisk – утилита для работы с дисковым пристрастном GParted.
При запуске LiveDisk выбираем русский язык и жмем «Запустить Ubuntu».
Далее жмем кнопку запуска Dash (аналог меню «Пуск» в Windows), в поле поиска вводим первые буквы запроса «GParted». И запускаем утилиту GParted.
В ее окне увидим ту же структуру разделов, что и в утилите Windows diskmgmt.msc, но в ином интерфейсе и с иными обозначениями данных. Подключенные жесткие диски отображаются в верхнем правом углу по типу «/dev/ sda», где «dev» – это термин «устройство» (сокращенно от device), а «sda» – конкретный HDD, SSD, флешка или прочий носитель. Носители обозначаются с заменой последней буквы в перспективе алфавита – «sdb», «sdc», «sdd» и т.д. Разделы дисков отображаются по типу «/dev/ sda1» и отличаются последней цифрой – числовой перспективой. Ориентироваться в таких условиях необходимо на размеры дисков и разделов.
В нашем имеется нераспределенное пространство с размером 15 Гб, его необходимо оформить в разделы для Ubuntu – для самой системы и ее файла подкачки. Но на компьютерах с BIOS Legacy (обычной BIOS, не UEFI) сначала нужно создать один общий раздел – расширенный, контейнер для формирования логических разделов. Три существующие раздела – «Зарезервировано системой», диски С и D – создавались при установке системы и в процессе работы Windows ее штатными средствами. А это значит, что им по умолчанию назначался тип основных разделов, коих должно быть на диске не более 4-х. Потому чтобы иметь возможность далее создавать разделы диска, четвертый раздел необходимо создать с расширенным типом, а уже внутри него формировать логические разделы.
Если раздел под Ubuntu уже сформирован, но ему ранее назначен тип основной, и это последний из четырех таких возможных, раздел нужно удалить. В окне GParted на нераспределенном пространстве вызываем контекстное меню и выбираем «Удалить». Для создания на нераспределенном пространстве раздела в контекстном меню выбираем «Новый».
В появившемся окошке создания нового раздела в графе «Создать как» выбираем «Расширенный раздел». Жмем «Добавить».
На нераспределенном пространстве снова вызываем контекстное меню и выбираем «Новый». Первым сформируем раздел подкачки Linux. Даже на современных компьютерах с 4 Гб и более оперативной памяти раздел подкачки необходим для выгрузки данных из оперативной памяти при переходе в спящий режим. В окошке создания нового раздела в графе «Новый размер» указываем размер, равный объему оперативной памяти компьютера. В графе «Создать как» выбираем «Логический раздел», а в графе «Файловая система» – «Linux-swap». Внизу жмем «Добавить».
На оставшемся нераспределенном пространстве снова вызываем контекстное меню, снова выбираем «Новый». В графе «Новый размер» в нашем случае оставляем все оставшееся место под раздел Ubuntu, в графе «Создать как», опять же, выбираем «Логический раздел», а в графе «Файловая система» ставим «ext4». Жмем «Добавить».
Все эти операции по разметке дискового пространства пока что лишь запланированы. Они отображаются внизу окна GParted и при необходимости могут быть отменены. Для их применения необходимо жать зеленую кнопку-галочку на панели вверху.
Далее подтверждаем действия,
дожидаемся завершения применения операций и закрываем утилиту GParted.
История ненависти и любви
Издавна Microsoft питала особые чувства к Linux в частности и ко всему миру FOSS в целом. И чувства эти, надо сказать, как правило, были не самыми теплыми — начиная со знаменитого «Открытого письма любителям» Билла Гейтса, написанного в далеком 1976 году (подробности в Вики), где автор обвинял пользователей персональных компьютеров (которые в те доисторические времена были и пользователями, и программистами, и хакерами!) чуть ли не в воровстве его интеллектуальной собственности (того самого бейсика), и заканчивая гневными высказываниями Стива Балмера в 2001 году по поводу Linux: «Linux — это раковая опухоль, которая пожирает всю интеллектуальную собственность, к которой прикасается. Согласно правилам лицензии, если вы используете какие-либо компоненты программного обеспечения с открытым исходным кодом, вы должны открыть код всего имеющегося у вас программного обеспечения».
Спустя пятнадцать лет, однако, Стив смягчил свою позицию: в марте 2020 года бывший генеральный директор Microsoft заявил, что рад видеть, что новый глава компании Сатья Наделла принял решение активнее поддерживать сообщество разработчиков открытого ПО, и «с удовольствием» (loved) наблюдал за анонсом MS SQL Sever для Linux. Во многом такой разворот бывшего гиганта софтверной индустрии — это заслуга сообщества FOSS. Тех тысяч и тысяч программистов, дизайнеров, майнтейнеров, FOSS-активистов и просто неравнодушных людей, которые годами «точили камень, аки вода».
Еще в середине 2000-х годов MS начала менять свою позицию в отношении FOSS. И это не пустые слова, а дела. Даром что ли не так давно Microsoft получила статус «платинового» участника Linux Foundation — главной организации, курирующей разработку Linux, высказала приверженность идеям разработки FOSS-сообщества. Ну и само существование WSL тому подтверждение. Спустя сорок с небольшим лет мы наблюдем, как некогда непримиримые идеологические (и не только идеологические) противники начали работать бок о бок, сообща делая мир лучше. Ну или хотя бы пытаться.
Спустя пятнадцать лет Стив Балмер, по сути, признал свою неправоту
То самое письмо Билла Гейтса в защиту копирайта
На данный момент апогеем такого симбиоза можно считать Windows Subsystem for Linux. Да, прослойка пока далека от совершенства. Но направление выбрано верное. И той и другой стороной.
«Дайте ей шанс!»
«Дайте Windows Subsystem for Linux шанс, и вы будете поражены», — говорят в Microsoft. Microsoft наконец-то признала потенциал мира FOSS в целом и Linux в частности. И каждое событие становится для Microsoft уроком, позволяющим оценить свои возможности и расширить свою деятельность в этой области программирования.
Совсем недавно, 16 ноября прошлого года, на сайте Microsoft для разработчиков появился пост с видеороликом под названием «Улучшения в bash на Windows и консоли Windows», в котором старший программист Microsoft Рич Тёрнер призывает Linux-разработчиков взглянуть на то, что Windows 10 может им предложить. «Установите экземпляр сборки Windows 10 для разработчиков (Windows 10 Insider Preview Build) и исполняйте свой код, используйте привычные вам инструменты, размещайте свои сайты на Apache, получайте доступ к своим базам данных MySQL непосредственно из вашего Java-кода», — говорит Тёрнер.
Новое, дружелюбное лицо Microsoft — Рич Тёрнер
Тёрнер особо отметил, что WSL была создана специально для разработчиков с целью предоставить последним все необходимые инструменты разработки для Linux. И все это, по его словам, без потери новшеств и преимуществ Windows 10. «Независимо от того, какие инструменты вы обычно используете в Linux для создания приложений, будь то Go, Erlang или C, дайте шанс WSL, а самое главное, отправляйте нам отчеты об ошибках. Эти отчеты действительно делают нашу жизнь намного проще, позволяя нам создавать продукт, который мы все можем использовать, чтобы работать более плодотворно», — продолжил он.
Разумеется, Microsoft сама заинтересована в улучшении WSL, и Тёрнер утверждает, что конечная цель всего этого состоит в том, чтобы сделать эту подсистему полностью совместимой со всеми инструментами разработки для Linux. И, по их словам, любой, кто перейдет на Windows 10, будет чувствовать себя так же комфортно, как и в Linux. А это, в свою очередь, обеспечит Microsoft приток новых пользователей. «Пока мы только в самом начале. Нам предстоит долгий путь. В данный момент нельзя сказать, что эта штука действительно полностью совместима с Linux-инструментами и готова к полноценному использованию вами», — сказал он. Это заявление стало для многих людей сюрпризом. Однако, как уже говорилось, Сатья Наделла, нынешний глава софтверного гиганта, применит в отношении FOSS и Linux иной подход, рассматривая открытый и свободный код в качестве источника дохода и новых возможностей.
Отдельно отмечу, что Рич Тёрнер в своей речи не призывает разработчиков отказаться от Linux и нисколько не умаляет преимущества этой ОС, а лишь просит дать WSL шанс.
Примеры использования Ubuntu Shell в Windows
Для начала отмечу, что автор не является специалистом по bash, Linux и разработке, а примеры ниже — просто демонстрация того, что в Windows 10 bash работает с ожидаемыми результатами для тех, кто разбирается в этом.
Приложения Linux
Приложения в Windows 10 Bash можно устанавливать, удалять и обновлять с помощью apt-get (sudo apt-get) из репозитория Ubuntu.
Использование приложений с текстовым интерфейсом ничем не отличается от такового на Ubuntu, например, вы можете установить Git в Bash и использовать его привычным образом.
Промежуточные итоги
Что хотелось бы сказать в связи со всем этим? Во-первых, Microsoft уже не та. Не та монструозная корпорация зла. С каждым годом прибыли компании от продажи ПО падают, рынок мобильных устройств, по сути, отдан на откуп Google и Apple, а пользователи (как корпоративные, так и домашние) всё чаще стараются сэкономить на покупке софта. И компании приходится адаптироваться к новым условиям. Даже «заклятый друг» MS — Apple открывает исходники своих продуктов один за другим. Во-вторых, это все очень хорошо. В первую очередь для нас, простых пользователей.
В следующей статье про Windows Subsystem for Linux мы проведем несколько тестов на производительность и попробуем наконец WSL на практике, установив на нее веб-сервер Apache и запустив локальный хостинг сайта. А пока можно промежуточно резюмировать, что эксперимент удался.