Мы рады рассказать, что теперь вы можете попробовать Windows Subsystem for Linux 2 установив Windows build 18917 в Insider Fast ring! В этой статье мы расскажем о том, как начать работу, о новых wsl.exe командах, а также поделимся важными заметками. Полная документация о WSL 2 доступна на странице в нашей документации.



Начало работы с WSL 2


Мы хотели сделать WSL 2 максимально похожим на WSL 1, и мы очень ждем ваших отзывов о том, что можно было бы улучшить. Документация по установке объяснит как начать работу с WSL 2.

При начале работы с WSL 2 вы заметите несколько UX-изменений. Ниже подробнее о двух наиболее важных изменениях в initial preview.

Помещайте ваши файлы Linux в корневую файловую систему Linux


Убедитесь, что файлы, к которым вы будете часто обращаться с приложениями Linux, размещены внутри вашей корневой файловой системы Linux, чтобы получить преимущества в производительности файлов. Мы понимаем, что последние три года мы просили вас помещать файлы на диск C при использовании WSL 1, но это не относится к WSL 2. Для более быстрого доступа к файловой системе в WSL 2 эти файлы должны быть внутри корневой файловой системы Linux. Мы также предоставили приложениям Windows доступ к корневой файловой системе Linux (например, File Explorer! Попробуйте запустить: explorer.exe. в домашнем каталоге вашего дистрибутива Linux и посмотрите, что произойдет), что значительно облегчит этот переход.

Доступ к сетевым приложениям Linux с динамическим IP-адресом в начальных сборках


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

Чтобы узнать больше об изменениях UX, см. нашу документацию: Изменения в UX между WSL 1 и WSL 2.

Новые команды WSL


Мы также добавили несколько новых команд, которые помогут вам контролировать и просматривать версии и дистрибутивы WSL.

  • wsl --set-version <Distro> <Version>

    Используйте эту команду для преобразования дистрибутива в архитектуру WSL 2 или архитектуру WSL 1.

    : конкретный дистрибутив Linux (например, «Ubuntu»)
    : 1 или 2 (для WSL 1 или 2)
  • wsl --set-default-version <Version>

    Изменяет версию установки по умолчанию (WSL 1 или 2) для новых дистрибутивов.
  • wsl --shutdown

    Немедленно завершает работу всех запущенных дистрибутивов и облегченной виртуальной машины WSL 2.

    ВМ, которая работает с дистрибутивами WSL 2, — это то, что мы стремимся делать для вас, поэтому мы запускаем ее, когда вам это нужно, и выключаем ее, когда не нужно. Могут быть случаи, когда вы захотите выключить ее вручную, и эта команда позволяет вам сделать это, завершив все дистрибутивы и завершив работу виртуальной машины WSL 2.
  • wsl --list --quiet

    Показывает имена дистрибутивов.

    Эта команда полезна для сценариев, поскольку она будет выводить только имена дистрибутивов, которые вы установили, без отображения другой информации, такой как дистрибутива по умолчанию, версии и т. д.
  • wsl --list --verbose

    Показывает подробную информацию обо всех дистрибутивах.

    Эта команда выводит имя каждого дистрибутива, в каком состоянии находится дистрибутив и в какой версии он работает. Также показано, какие дистрибутивы используются по умолчанию со звездочкой.

Ждем ваши отзывы!


Если у вас возникнут какие-либо проблемы или у вас есть отзывы для нашей команды, пожалуйста, отправьте сообщение о проблеме на Github.

Комментарии (11)


  1. Framework
    20.06.2019 10:23

    После первых анонсов была надежда на Docker без виртуальной машины. Но нет, ВМ на месте.


    А заработает ли Docker с WSL 2? И если да, то это решение будет лучше или хуже того, что сейчас предлагается для Windows?


    1. APXEOLOG
      20.06.2019 15:10

      Ну на гифке работает


    1. xPomaHx
      21.06.2019 09:25
      +1

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


  1. FoterIS
    20.06.2019 10:30
    +1

    Сейчас мы стремимся включить в WSL 2 возможность доступа к сетевым приложениям с помощью localhost.

    Очень надеюсь, что вы это сделаете.

    А появится ли нормальный мапинг директорий /mnt/d/folder/… -> D:\folder\… или хотя-бы возможность установить Docker Daemon внутрь linux системы, а не в Windows?


    1. loltrol
      20.06.2019 11:25

      Как подсказывает интуиция, логика, прямой текст в существующих статьях по wsl 2, и, Вы не поверите, гифка в начале данной статьи и сам текст статьи — именно там и будет запущен докер. Что то на подобии apt install docker-ce вам поможет его установить. Потому что это будет немножко подкрученная(в плане интеграции с хостом и скорости запуска) полноценная виртуалка с linux на борту. Про маппинг — написано что будет доступ к файловой системе linux, будет ли обратный доступ — это вопрос на засыпку, но технических препятствий я не вижу, samba-share никто не отменял, и вполне вероятно что microsoft прикрутят или уже прикрутили что то более простое и быстрое.


      1. FoterIS
        20.06.2019 11:42

        Ну выполнить команду apt install docker-ce я и сейчас могу и установка, но это не отменяет того, что сам докер крутится под WSL, а подключется к daemon который установлен под windows по tcp://localhost:2375. Да можно выкрутится и запустить все под VirutualBox, но этого не хочется. Если будет возможность стратовать daemon из под linux, боз установки всего добра в Windows, то тогда это будет здорово. Но при этом надо чтобы сам daemon был виден из под windows по tcp://localhost:2375, ну либо по ip вирутальной машины, чтобы например подключится к нему с помощью Rider.


        Про файловую систему я не много не понял, как оно будет работать, где мне нужно разместить проекты, чтобы они были доступны как из windows так и из под linux, сейчас у меня явная проблема, что я не могу пользоваться системной переменной linux $pwd для volume image, т.к. будет попытка смапить директорию /mnt/c(d)/… но на уровне Windows такая директория отсутствует. Если это будет работать адекватно, я буду в восторге.


        1. red75prim
          20.06.2019 12:26

          где мне нужно разместить проекты, чтобы они были доступны как из windows так и из под linux

          Где удобнее. Файловая система Windows доступна из WSL2 через /mnt/c и т.д.


          $ mount | grep /mnt/c
          C:\ on /mnt/c type 9p (rw,noatime,sync,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000,access=client,trans=fd,rfd=9,wfd=9)

          Из Windows файловая система WSL2 доступна через шару \wsl$\<Имя дистрибутива>


          Докер теперь может работать внутри WSL2, то есть volumes в этом случае будут нормально подключаться по $pwd.


          1. FoterIS
            20.06.2019 12:28

            Спасибо за разъяснения, дождусь релиза и сразу же опробую новый функционал.


  1. yuretsz
    20.06.2019 17:53

    Эх, жаль, что забросили идею сделать без виртуалки.


    1. XimikS
      20.06.2019 18:33
      +1

      Оказалось, что легковесная виртуалка производительней, чем маппинг линуксовых syscalls к винде.


  1. lightman
    21.06.2019 09:34

    У нас есть проект WebAPI (netcore 2.1) + фронт часть (php, js). На проде всё крутится под linux и летает.
    Задача: запускать локально на Windows 10 для разработки.
    Включил WSL (ubuntu LTS), поставил туда nginx, php-fpm, библиотеки зависимостей.
    Проект вытянут в папку на хосте (C:\project), в WSL корневая директория для PHP настроена на /mnt/c/project/frontend
    API часть стартует в Visual Studio.

    Схема получается такой: в браузере (хост) обращаюсь localhost -> nginx (WSL) -> php-fpm (WSL) -> запрос к API в Visual Studio (хост) -> и дальше ответ в обратном порядке.

    Оказалось всё это просто люто тормозит. Запросы в браузере выполняются ненормированное время: может отработать за 5 секунд (что медленнее чем на проде), а может зависнуть за несколько минут и бесконечно что-то грузить-грузить-грузить (вращающаяся иконка в браузере). Причём ждать бессмысленно — можно нажать F5 раз, другой, и вот снова отработало «быстро» (5 сек).

    Куда уходит производительность — непонятно. Пробовал профилировать PHP через XDebug — большая часть времени тратится на Unknown.

    Развернул VirtualBox с Ubuntu, настроил аналогично (папка с проектом прокинута в виртуалку Shared Folder) — работает медленнее чем на проде, но зато нет этих многоминутных зависаний.

    Надеюсь в WSL2 это будет исправлено.