Хотите пользоваться Linux на Windows с помощью подсистемы WIndows для Linux (Windows Subsystem for Linux, WSL), но вас тревожит то, что WSL пока имеет статус бета-версии и доступна только в режиме разработчика Windows 10? Теперь можно не беспокоиться. Дело в том, что в Windows 10 Fall Creators Update (WinFCU) WSL может быть запущена любым пользователем.
WSL, эта комбинация оболочки Bash и Windows, которую тестировали более года, в WinFCU приобретёт множество новых функций.
Кроме того, что WSL переросла статус бета-версии и больше не требует использовать режим разработчика, среди её новых возможностей стоит отметить следующие:
- Установка дистрибутивов Linux из Windows Store.
- WSL теперь поддерживает запуск нескольких дистрибутивов Linux.
- WSL доступна в Windows Server и в виртуальных машинах Microsoft Azure.
- WSL теперь поддерживает обмен данными по USB/serial.
- Различные исправления и улучшения.
Помимо Ubuntu, новая WSL теперь поддерживает openSUSE — дистрибутив сообщества SUSE, и его корпоративный вариант SUSE Linux Enterprise Server (SLES). Кроме того, ожидается, что скоро в Windows Store появятся Fedora и другие дистрибутивы.
Если вы уже пользовались WSL, существующая установка Ubuntu продолжит работать, но этот вариант считается устаревшим и не будет поддерживаться. Для того, чтобы пользоваться техподдержкой, надо заменить существующий экземпляр Ubuntu на новый, из Windows Store. Если этого не сделать, не получится получить поддержку ни от Canonical, ни от Microsoft.
Для того, чтобы сохранить старые файлы, их лучше всего заархивировать с помощью tar и скопировать в файловую систему Windows, например, в
/mnt/c/temp/backups
, а потом скопировать в новый экземпляр Ubuntu.Кроме того, теперь можно установить несколько дистрибутивов Linux из Windows Store на одной Windows 10-системе.
Для того, чтобы это сделать сначала надо активировать WSL в окне
Включение или отключение компонентов Windows
, после чего — перезагрузить систему. Надо отметить, что WSL по умолчанию не активна, и то, что после её включения придётся перезагрузиться.После перезагрузки нужно выполнить поиск по слову
Linux
в Windows Store, выбрать подходящую систему и установить её.Если в WSL уже есть установленный экземпляр Bash, вы можете начать всё сначала с помощью команды lxrun /uninstall/. Для этого можно воспользоваться командной строкой или PowerShell.
Помимо возможности устанавливать несколько дистрибутивов Linux, теперь несколько дистрибутивов можно и одновременно запускать. Каждый из них работает независимо от других. Здесь не применяются ни виртуальные машины, ни контейнеры. Это означает, что дистрибутивам понадобятся их обычные системные ресурсы. Я например, запускал бы несколько дистрибутивов на системе, в которой на каждый работающий экземпляр WSL имеется по 2 Гб дополнительной памяти.
Сама по себе WSL требует минимальных системных ресурсов. Рич Тёрнер, старший руководитель программы WSL и Windows Console в Microsoft, написал следующее: «Мы не приводим [требования к оперативной памяти], так как, честно говоря, об этом особо нечего сказать. Если вы не устанавливали WSL, дополнительная память не используется. Если вы включили WSL, на короткое время загружается маленький драйвер размером 850 Кб, а затем, до запуска дистрибутива Linux, он выгружается. При запуске загружается
/init
, который запускает /bin/bash
. Это приводит к загрузке драйвера, занимающего 850 Кб и к созданию пико-процессов для init
и bash
. Поэтому, в целом, требования WSL к памяти соответствуют требованиям средств Linux, с добавлением примерно 1 Мб».Дистрибутивы Linux могут, кроме того, работать с файловой системой хост-машины, управляемой Windows, с сетевым стеком, и так далее. Это означает, что к изменению данных в файловой системе Windows следует относиться с осторожностью.
Зачем может понадобиться одновременный запуск нескольких дистрибутивов Linux? Microsoft говорит об этом следующее: «Возможность запускать различные дистрибутивы Linux позволяет вам использовать одни и те же инструменты, пакетные менеджеры, или экосистемы и окружение, где будет выполняться ваш продакшн-код. Это ведёт к уменьшению потерь времени на поиск труднообнаружимых ошибок при развёртывании кода. Это позволяет, например, использовать браузеры Edge, Chrome и Firefox на Windows для просмотра веб-сайта, работающего на сервере Apache, установленном на Ubuntu, который взаимодействует с REST-службой, работающей на openSUSE… без необходимости задавать правила файрвола при локальном тестировании, так как все эти процессы работают по одну сторону файрвола, рядом друг с другом!».
Разработчикам Linux понравится поддержка передачи данных по USB/serial. Это позволит приложениям и сценариям командной строки взаимодействовать с последовательными портами.
Кроме того, WSL теперь поддерживает монтирование USB-накопителей и общих сетевых ресурсов. Это — хорошая новость. Плохая новость заключается в том, что она поддерживает только инфраструктуру ввода-вывода файловой системы NT. Другими словами, работать можно только с носителями, отформатированными в файловых системах FAT/FAT32/NTFS. Как насчёт файловых систем *nix? Можете голосовать, комментировать, или делать и то и другое в ветке этого запроса на UserVoice.
Если углубиться в детали улучшений, то обновлённая WSL в WinFCU включает в себя следующее:
- Улучшенные параметры TCP, в частности,
IP_OPTIONS
,IP_ADD_MEMBERSHIP
,IP_MULTICAST
, и другие.
- Теперь
/etc/hosts
наследует записи из файлаhosts
Windows.
- Поддержка системных вызовов, имеющих отношение к
xattr
. - Исправление некоторых функций, связанных с файловой системой.
- Улучшена поддержка
PTRACE
. - Улучшена поддержка
FUTEX
. - Теперь здесь работает
chsh
, что позволяет менять оболочки. В частности, теперь любимую оболочку можно использовать напрямую. При старте оболочки будут исполняться и файлы, отличные от.bashrc
.
В Fall Creators Update были добавлены следующие системные вызовы:
Prlimit64
getxattr
,setxattr
,listxattr
,removexattr
Как и ожидалось, WSL будет доступна на платформе Windows Server и на виртуальных машинах Windows в Microsoft Azure. Это рассчитано на системных администраторов.
Благодаря всем этим улучшениям разработчикам и системным администраторам будет проще пользоваться командами оболочки Linux в Windows. В то время, как обычному пользователю ПК подобное, возможно, не окажется особенно полезным, для IT-профессионалов это — шаг вперёд. Это расширяет возможности Windows в мире серверов и облачных служб, в котором сейчас всё более важное место занимает Linux. Даже в Azure больше трети виртуальных машин используют Linux.
WSL предоставляет большинство инструментов оболочки Linux . Среди них —
apt
, ssh
, find
, grep
, awk
, sed
, gpg
, wget
, tar
, vim
, emacs
, diff
, и patch
. Кроме того, тут можно использовать популярные языки программирования с открытым кодом, такие, как python, perl, ruby, php, и gcc. Далее, WSL и Bash поддерживают серверные приложения, такие, как веб-сервер Apache и система управления базой данных Oracle MySQL. Другими словами, благодаря WSL на Windows можно создать нормальную среду разработки, основанную на Linux.Используя WSL можно запускать графические интерфейсы и приложения Linux, но пока эту возможность нельзя воспринимать серьёзно. Конечно, если над этим поработают, ситуация изменится.
Как функционирует WSL? Дастин Киркланд, член группы Ubuntu Product and Strategy в Canonical, рассказал следующее: «Мы говорим о непосредственном выполнении кода Ubuntu ELF на Windows. [WSL], по сути, выполняет, в реальном времени, трансляцию системных вызовов Linux в системные вызовы Windows. Приверженцы Linux могут считать это чем-то вроде WINE наоборот, а именно, двоичные файлы Ubuntu совершенно естественным образом работают в Windows».
Итоги
Независимо от технических особенностей того, как WSL делает своё дело, самое главное то, что подсистема WIndows для Linux работает очень и очень хорошо. Надеемся, новая WSL вам понравится.
Уважаемые читатели! Если вы уже обновились до Windows 10 Fall Creators Update, просим поделиться впечатлениями о новой WSL.
Комментарии (85)
gionet
17.10.2017 14:01-7В прошлый раз я Kali Linux поставил с бубнами в десятку, в этот раз, надеюсь, в бубен быть придется реже
LoadRunner
17.10.2017 14:16-1А что со смартфонами? На какие модели и когда выкатят, известно?
А то у меня нагуглить не получается.ad1Dima
17.10.2017 14:39+1Подсистему линукса? ни на какие, и на Xbox не выкатят и на HoloLens не выкатят.
Если про сам FCU, то тоже не выкатят. Точнее в неизвестные сроки будет небольшой апдейт с багфиксами. После релиза Creators Update инсайдеров на телефонах отделили в другую ветку и выкатили туда фикс для continuum для моников в портретной ориентации. И все.
TheOleg
20.10.2017 15:14Смартфоны и мобильная ОС от Microsoft всё.
lenta.ru/news/2017/10/09/ripLoadRunner
20.10.2017 15:38Об этом я в курсе. Мне интересны как раз исправления безопасности и починка багов — они-то выпускаются.
pmcode
17.10.2017 15:37-1А терминал нормальный MS когда-нибудь запилит? Ну там fluent design, все дела.
levchick
17.10.2017 15:46Получится ли запустить, например, docker без лишних виртуальных машин?
Donutellko
17.10.2017 17:48Мог неправильно понять, но ведь уже давно имеется Docker для Windows...
levchick
17.10.2017 17:51Да, но он по сути устанавливает виртуальную машину с линуксом на борту, на котором и крутится докер. В итоге из-за проброса файловой системы на проектах с большим числом файлов (аля Symfony) имеются дикие тормоза.
arcman
17.10.2017 22:18Нет, это раньше было через VirtualBox, а теперь просто прослойка, которая в системные вызовы транслирует.
levchick
17.10.2017 22:35Я конечно не могу утверждать, так как давно не общаюсь с windows и последний раз докер на нем мучал года полтора назад, но все же даже их документация docs.docker.com/docker-for-windows говорит о том, что они до сих пор используют docker-machine. Она по сути и является виртуалкой, хотя и во многом модифицированной и облегченной по сравнению с VirtualBox.
ainu
18.10.2017 07:39В этом случае нет, в докере же (если совсем утрировать) процессы цепляются на второй/третий/четвертый скрытый init, в общем отдельной веткой. В WSL все цепляется к процессу bash пока. Там даже нельзя service apache2 start и закрыть консольку.
phoenixx
18.10.2017 08:04+1Там оба варианта. Оригинальный с docker-machine под HyperV и новый с Windows containers — docs.docker.com/docker-for-windows/#switch-between-windows-and-linux-containers. Windows Containers это вполне нативная поддержка докера, но под Windows платформу. Обычные Linux контейнеры они запускать не умеют. Поэтому по факту это отдельный набор докер образов
levchick
18.10.2017 11:43Про это не знал, спасибо. Но в моем случае это бесполезно, так как хотелось универсализировать окружения разработчиков, сидящими под разными ОС, в том числе windows. С docker-machine уж больно все медленно выходит.
phoenixx
18.10.2017 13:14+1В случае docker-machine еще можно смотреть в чем сам bottleneck, так как там могут быть пути оптимизации. К примеру если в докер контейнере используется volume, и в этом volume-е 10-ки тысяч файлов, то HyperV\VirtualBox будут очень медленно работать с ними. И можно либо добавлять в ignore какие-то папки, которые не должны шариться. Либо пробовать разные механизмы кеширования volume-ов — docs.docker.com/docker-for-mac/osxfs-caching
levchick
18.10.2017 14:27Так и есть, затычка в большом количестве расшареных файлов. На макоси все решил проброс файлов в виртуалку через nfs. На Windows долго не сидел конечно, но сходу решения найти не удалось.
phoenixx
18.10.2017 15:06У нас была подобная проблема с emberjs приложением засчет громадной папки node_modules и tmp, которую Ember-cli активно использует для билда. Мы убрали эти две папки из volume-а, и проблема для Windows решилась, и время билда стало таким же как и на macOS-е
staryy
18.10.2017 08:04К сожалению VirtualBox поменялся на Hyper-V.
И прямого доступа к ФС(как в Linux) все еще не реализовано.
vsb
18.10.2017 13:07Смысл докера в том, чтобы контейнер работал абсолютно предсказуемо. В этом отношении, на мой взгляд, запускать его не под линуксовым ядром неразумно. А так — если вы готовы запускать Windows-гостей, докер вроде это поддерживает (естественно без промежуточных линуксов).
sumanai
17.10.2017 15:57+1Установка дистрибутивов Linux из Windows Store.
Это минус. Вместо запуска легковесной командной строки теперь нужно запускать этого графического монстра с кучей мусора и рекламы.mastan
19.10.2017 00:04Какого графического монстра? Во всех вариантах запускается именно командная строка, никаких иксов там нет.
sumanai
19.10.2017 06:23+1Вы процитированный мною текст не видите? Там написано, что установка дистрибутивов теперь будет из магазина. А магазин это и есть куча хлама. По тому же рекомендуемому запросу Linux магазин выдаёт кучу хлама, где я едва нашёл Ubuntu среди условно-бесплатных приложений.
PsyHaSTe
20.10.2017 13:08-1Ставить приложения из стора можно и через консоль:
Get-AppxPackage -allusers Microsoft.WindowsStore | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}
Пожалуйста, никакой рекламы
sumanai
20.10.2017 18:47Хорошо если так. Указанная команда, как я понимаю, переставляет дефолтные приложения. А вот как при помощи консоли поставить ту же убунту или SUSE.
PsyHaSTe
20.10.2017 19:07Ну пишете «Microsoft.WindowsStore» название любого пакета и все. Это же просто пример, который еще кому-то и не понравился почему-то. Может так зайдет лучше?
Get-AppxPackage -Name Package1 –User domain\username
sumanai
20.10.2017 19:15Это понятно, непонятно, как его узнать. А магазин у меня вообще перестал запускаться. Ох уж эта десятка…
PsyHaSTe
20.10.2017 20:55Ну, никакого Find-AppxPackage документация не предлагает… Видимо, только искать в магазине, узнавать там, и рассказывать друзьям про айдишку пакета… Такое себе удобство, согласен.
red75prim
20.10.2017 19:19Пример кому-то не понравился потому, что эта команда переустанавливает Windows Store, а не устанавливает приложения из него. Установить такие приложения из командной строки судя по всему невозможно (если не считать перехват трафика Windows Store для получения URL appx пакета и его установки с помощью Add-AppxPackage).
Впрочем, если кто-то не хочет запускать Store, это его проблемы.
sumanai
20.10.2017 20:31Впрочем, если кто-то не хочет запускать Store, это его проблемы.
Так можно до многого докатится. Раз инструмент позиционируется как инструмент для разработчиков, то он и должен быть удобен для разработчиков, а не понятно для кого вообще, когда гиковский набор устанавливается в интерфейсе для домохозяек с рекламой и мусором.
PsyHaSTe
20.10.2017 20:56Я пользовался Get-Package для винды, и со стором особо дел не имел, но вся интуиция говорит о том, что эта команда переустанавливает пакет с именем «Microsoft.WindowsStore». Если нужен пакет с именем Х, просто ставим его на место команды. Другой вопрос, где взять имя пакеты — увы, нормальной апишки для этого я не нашел…
dimmount
17.10.2017 16:39система управления базой данных Oracle MySQL
только с хранилищем MyISAM. InnoDB не позволяет сделать в данной файловой системе.
Из-за файловой системы tail, хоть и работает, но при старте выдает
tail: неизвестный тип файловой системы 0x53464846
Git, rsync будут показывать, что все файлы изменены в одном и том же каталоге при запуске из WSL или и из Windows.
С другой стороны очень удобно, когда нужный обработчик существует только в виде sh скрипта. Недавно перегонял репы из меркуриала в гит из под WSL
Kernell
17.10.2017 16:39После перезагрузки нужно выполнить поиск по слову Linux в Windows Store, выбрать подходящую систему и установить её.
Как быть пользователям Windows 10 LTSB, которая идёт без Windows Store?
Seboreia
17.10.2017 19:11+3А починили баг с исчезающей прокруткой? Очень неприятно поведение, когда не можешь прокрутить вверх вывод консоли.
+ Когда появится вставка по Shift + Ins? Все никак не отвыкну от нееdiman8
18.10.2017 12:54Можно использовать сторонний терминал, например wsl-terminal. Там и настоек по-больше (по цветовым схемам, полосе прокрутки и тд), и вставка на СКМ и Shift+Ins есть.
Pinkerton42
18.10.2017 12:54Попробуйте ConEmu. Там Ctrl/Shift+Ins, и табы, и мышь в консоли почти адекватная.
Tarik02
17.10.2017 20:12Прочитав в заголовке «подсистема Windows для Linux» я немного удивился. Не правильнее будет ли «подсистема Linux для Windows»?
PsyHaSTe
20.10.2017 13:11Нет, ведь это подсистема винды, предназначенная для запуска Linux'а, а не наоборот же. Что допиливали — того и подсистема, вполне логично.
ad1Dima
20.10.2017 13:52тут двоякое прочтение в обоих случаях:
Подсистема (чего) Windows(а) для (запуска) Linux — Подсистема (какая) Windows для (чего) Linux
Подсистема (какая) Linux для (чего) Windows — Подсистема (чего) Linux(а) для (запуска) WindowsPsyHaSTe
20.10.2017 15:03Называть подсистему под Windows «подсистема Windows» как-то глупо. Обычно есть подсистема ФС, подсистема IO и так далее. По аналогии подсистема Х будет подсистемой, реализующей работу с Х в той системе, которая упомянута в контексте, в данном случае — Windows.
a553
17.10.2017 21:33Может кто-нибудь проверить, поддерживаются ли теперь junction (
mklink /J
) и symlink (mklink /D
)?
rubyrabbit
17.10.2017 21:40Самая большая проблема при разработке под Windows — это файловая система.
Приходится пробрасывать в виртуалку через NFS/CIFS, теряя при этом возможность создавать симлинки и настраивать права доступа.
Как я понимаю, описанная технология этой проблемы не решает и разные установщики пакетов так и не смогут создавать симлинки?
В общем, нужна прямая поддержка линуксовых файловых систем.sumanai
17.10.2017 22:07В общем, нужна прямая поддержка линуксовых файловых систем.
Хватило бы трансляции в NTFS, где всё нужное уже есть.
С файловыми системами режима ядра проблема, ядра то нет. А вот от ФС пользовательского пространства я бы тоже не отказался.Ganster41
18.10.2017 10:03Хватило бы трансляции в NTFS, где всё нужное уже есть.
Симлинки-то есть, а как быть с регистронезависмостью?olartamonov
18.10.2017 10:12olegart@Desktop ~ $ touch test
olegart@Desktop ~ $ touch Test
olegart@Desktop ~ $ ls *est
test Test
sumanai
18.10.2017 15:46NTFS регистрозависима, и поддерживает все специальные символы UNIX и прочее. Ограничения эти закладываются уже в подсистеме Windows, изначально ядро NT и NTFS разрабатывались с оглядкой на поддержку UNIX.
olartamonov
17.10.2017 23:17olegart@Desktop /mnt/c/Users/Oleg/Desktop $ touch test
olegart@Desktop /mnt/c/Users/Oleg/Desktop $ ln -s test test.symlink
olegart@Desktop /mnt/c/Users/Oleg/Desktop $ ls -l test*
-rwxrwxrwx 1 root root 0 окт. 17 23:14 test
lrwxrwxrwx 1 root root 4 окт. 17 23:14 test.symlink -> test
olegart@Desktop /mnt/c/Users/Oleg/Desktop $ echo "Hello world" > test
olegart@Desktop /mnt/c/Users/Oleg/Desktop $ cat test.symlink
Hello world
olegart@Desktop /mnt/c/Users/Oleg/Desktop $
kuil
17.10.2017 21:51А этот Linux будет иметь доступ к видеокарте, например, CUDA драйвера поставить и TensorFlow гонять? Я знаю, что tf под windows работает, но некоторые нужные пакеты есть только под linux
a5b
18.10.2017 02:35Чтобы CUDA (OpenCL) приложение получило доступ к карте, требуется трансляция системных вызовов (устройство /dev/dri/card0, read/write/mmap к его драйверу) из linux-стиля к windows-драйверу видеокарты, и такой трансляции на данный момент ещё не написано. (WSL — это не ядро линукс, это слой эмуляции системных вызовов и соглашений линукс в вызовы ядра Windows; поверх WSL распаковывается дистрибутив линукса, но там работают только user-space линукс-приложения.)
Баги про отсутствие поддержки CUDA в WSL: https://github.com/microsoft/bashonwindows/issues/327, https://github.com/Microsoft/BashOnWindows/issues/1788, https://github.com/Microsoft/BashOnWindows/issues/2268,
голосование (2 тыс. голосов, одна из самых затребованных фич) https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/16108045-opencl-cuda-gpu-support ответ от 2016-10-25 — "It’s on the backlog, but not currently planned."
pfihr
18.10.2017 10:29-1Кто может объяснить, зачем запускать linux из под windows?
potan
18.10.2017 16:48У нас одно время было корпоративное требование использовать windows (объяснялось сисадминами-оутсорсерами и оутлуком), но многим требовался (или был бы более удобен) Linux. Мне бы тогда эта поддержка упростила бы жизнь.
tarekd
19.10.2017 10:02Появился клиент, с библиотеками только под windows. Соответственно, сборка проекта теперь только в VS. LSW позволила развернуть любимый оконный менеджер(i3), перенести все конфиги из linux и комфортно работать на Windows.
MaksV
18.10.2017 12:53Я так понимаю обязательно надо ставить WINDOWS 10 INSIDER PREVIEW? У меня он не встает, винда перестает загружаться.
ad1Dima
18.10.2017 13:48надо ставить Windows 10 Fall Creators Update.
MaksV
18.10.2017 15:41Fall Creators Update стоит. В магазине при попытке ставить Ubuntu отправляет с предложением присоединиться к Insider Preview.
ad1Dima
18.10.2017 16:57Не могу проверить. Сам я Fall Creators Update получил через Release Preview Ring и мне магазин ничего не предлагает, просто скачивает.
Можете, кстати, попробовать в этом кольце та же сборка, что вчера зарелизили
ad1Dima
19.10.2017 11:18Кстати, сейчас на Creators Update стор предлагает именно что обновиться, а не идти в инсайдеры. Вы точно уверены, что у вас Windows 10 1709 Fall Creators Update?
letarch
20.10.2017 08:00Хотел включить WSL в окне Включение или отключение компонентов Windows. Но почему-то не включается, в диспетчере задач мелькает отправка отчёта об ошибке и пару раз выпадало окно «SystemSettings.exe ошибка приложения». Установка WCU велась с помощью файла с оф.сайта майкрософта.
inoyakaigor
Правильно ли я понимаю, что теперь из WSL есть доступ дискам в хост системе отформатированным не только в NTFS?
red75prim
И, как установлено экспериментально, ReFS
Daemon_Hell
Не знаю насколько жив проект, но можно попробовать через FUSE:
github.com/alperakcan/fuse-ext2
a5b
FUSE требует поддержки со "стороны эмулятора системных вызовов Линукс (WSL)" (чтобы вызовы read/write/stat завернулись из ядра в сторону libfuse). В WSL такой поддержки ещё нет.
Баг — https://github.com/Microsoft/BashOnWindows/issues/1962,
голосование (1 тыс. голосов) https://wpdev.uservoice.com/forums/266908-command-prompt-console-bash-on-ubuntu-on-windo/suggestions/13522845-add-fuse-filesystem-in-userspace-support-in-wsl
potan
Я когда-то агитировал разработчиков ReactOS поддержать fuse, но понимания не встретил. Забавно будет если ее поддержат в оригинале раньше.