Глава 2. Выгрузка, установка и настройка

Подсистема Windows для Linux это функциональная возможность совместимости, которая действует как некий уровень трансляции, однако является свойством Windows, которое надлежит включить перед его применением. Затем нам требуется установить некий дистрибутив Linux из Microsoft Store и в конце концов настроить его перед первым использованием. Давайте начнём все эти шаги один за другим.

Включение функциональности WSL

Подсистему Windows для Linux требуется разрешить на уровне операционной системы её хоста и имеется два способа достижения этого: первый применяет графический интерфейс пользователя (GUI), а второй использует PowerShell. Пока вы не включите подсистему Windows для Linux, вы не сможете запускать WSL в своей системе и вы будете получать показанную на приводимом ниже Рисунке 2-1. Этот снимок я сделал с экрана своей системы при установке дистрибутива Linux с отключённой функциональностью WSL, что и повлекло данную ошибку.

 

Рисунок 2-1


Функциональность WSL отключена

Давайте приступим к своему первому подходу.

Подход GUI

Для включения WSL из GUI следуйте таким шагам:

  1. Нажмите Windows + R для запуска диалога Run

  2. Теперь наберите appwiz.cpl и нажмите кнопку Enter или кликните OK, как на Рисунке 2-2.

     

    Рисунок 2-2


    Запуск "Programs and Eatures"

  3. Это приведёт к всплыванию окна “Program and Features”, в котором вам придётся выбрать в верхнем левом углу “Turn Windows features on or off”, как это выделено на Рисунке 2-3.

     

    Рисунок 2-3


    Выбор "Turn Windows Fetures on or off"

  4. На вашем экране всплывёт новое окно “Windows Features”. Отмотайте его, пожалуйста, вниз и кликните левой кнопкой по лаговой кнопке для “Windows Subsystem for Linux” (Рисунке 2-4).

     

    Рисунок 2-4


    Кликните по флаговой кнопке функциональности "Windows Subsystem for Linux"

  5. Это включит необходимую функциональную возможность Windows, но всё же вам ещё потребуется перезапуск своей системы чтобы обнаружить эту настройку и изменение принятой. После перезагрузки вашей системы вы теперь сможете запускать WSL без отображения ошибок, подобных приводимым на Рисунке 2-1.

Теперь давайте взглянем на второй подход с применением PowerShell.

Подход PowerShell

Включение подсистемы Windows для Linux при помощи PowerShell это простой процесс:

  1. Выполнение приводимого ниже cmdlet, скорее всего, самый простой способ:

    
    PS C:\> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    		
  2. как только вы запустите это, вы получите приглашение на перезапуск своей системы, как это отображено на Рисунке 2-5. Нажмите “Y” и кликните Enter для подтверждения включения необходимой функциональности Windows.

     

    Рисунок 2-5


    Нажмите “Y” для подтверждения включения выбранной функциональности

Выгрузка и установка дистрибутивов Linux

После включения функциональности Windows поддержки подсистемы Windows для Linux вам придётся затем установить некий пакет дистрибутива Linux из одного из шаблонов Microsoft, таких как Ubuntu, Debian, Kali Linux и тому подобных для их запуска в качестве экземпляра WSL. Имеется множество способов выгрузки пакетов распространения (distros), некоторые из которых перечисляются далее с точными шагами, которые вам требуется выполнить.

Выгрузка из Microsoft Store

Дистрибутивы Linux могут быть напрямую выгружены из Microsoft Store при помощи таких инструкций:

  1. Кликните по меню Start и отыщите “Microsoft Store”. Затем кликните по нему для запуска Microsoft Store.

  2. В правом верхнем углу имеется строка поиска (шаг 1); введите: “Linux” и нажмите Enter. Вы обнаружите некоторые пакеты распространения Linux в отображаемых результатах поиска.

  3. Просто в качестве примера, мы выгрузим из Microsoft Store Ubuntu 18.04 LTS (distro), кликнув по нему (шаг 2), что демонстрирует Рисунок 2-6.

     

    Рисунок 2-6


    Найдите нужный дистрибутив и кликните по нему

  4. Это откроет страницу выбранного дистрибутива, в которой вы в правом верхнем углу найдёте кнопку “Install”, что отображает Рисунок 2-7 и кликнув по этой кнопке вы приступите к установке данного дистрибутива в своей системе, который станет доступным в качестве приложения в Windows.

     

    Рисунок 2-7


    Кликните кнопке “Install”

Выгрузка из Distro вручную

Microsoft создал прямые ссылки для выгрузки большого числа популярных дистрибутивов Linux через https://aka.ms/, снабжённые короткими URL, перечисляемыми в Таблице 2-1 Это подразумевает, что вы можете пройти по этим ссылкам и выгрузить некий дистрибутив Linux и такой подхд будет очень полезен, когда Microsoft Store был отключён/ блокирован в вашей системе через некую Групповую политику.

Таблица 2-1. Дистрибутивы Linux и прямые URL их выгрузки
Название дистрибутива URL выгрузки

Ubuntu 18.04

https://aka.ms/wsl-ubuntu-1804

Ubuntu 18.04 ARM

https://aka.ms/wsl-ubuntu-1804-arm

Ubuntu 16.04

https://aka.ms/wsl-ubuntu-1604

Debian GNU/Linux

https://aka.ms/wsl-debian-gnulinux

Kali Linux

https://aka.ms/wsl-kali-linux

OpenSUSE Leap 42

https://aka.ms/wsl-opensuse-42

SUSE Linux Enterprise 12

https://aka.ms/wsl-sles-12

Fedora Remix for WSL

https://aka.ms/WhitewaterFoundry/WSLFedoraRemix/releases/

По окончанию выгрузки будьте любезны кликнуть дважды по соответствующему файлу пакета приложения (*.appx) для установки выбранного дистрибутива inux, как это показано на Рисунок 2-8.

 

Рисунок 2-8


Установка дистрибутива пакета приложения (*.appx) после выгрузки

Выгрузка с помощью PowerShell

Пакеты дистрибутивов Linux можно запросто выгрузить с помощью PowerShell, воспользовавшись cmdlet Invoke-WebRequest и передав ему напрямую URL выгрузки в качестве некого аргумента в параметре “-URI”. Код PowerShell из Листинга 2-1 показывает как выгрузить пакет приложения Ubuntu 18.04. Аналогично можно воспользоваться и прочими упомянутыми ранее URL для выгрузки разнообразных дистрибутивов для WSL. Устанавливая значение переменной предпочтительного отображения хода выполнения $ProgressPreference ='SilentlyContinue' можно скрыть строку хода скачивания: это выгрузит ваш пакет быстрее без какой бы то ни было строки отображения состояния в вашей консоли и в PowerShell v5.1 и более низких версиях это улучшает скорость выгрузки.

Запустите консоль PowerShell с полномочиями администратора и скопируйте туда приводимый ниже фрагмент кода, а затем нажмите Enter для его исполнения.

 

Листинг 2-1. Выгрузка дистрибутива Linux (Ubuntu 18.04) при помощи PowerShell


$URL = 'https://aka.ms/wsl-ubuntu-1804'
$Filename = "$(Split-Path $URL -Leaf).appx"
$ProgressPreference = 'SilentlyContinue'

# starts download from the URL
$Params = @{
    URI = $URL
    OutFile = $Filename
    UseBasicParsing = $true
}
Invoke-WebRequest @Params

# invoking the application package
# to start the installation
Invoke-Item $FileName
 	   

Выполнение данного кода выгрузит приложение Ubuntu 18.04 LTS в виде файла wsl-ubuntu-1804.appx. По завершению выгрузки вы сможете применить Cmdlet Invoke-Item к соответствующему файлу .appx в текущем рабочем каталоге для запуска GUI установки приложения и далее кликнуть по кнопке install, как это показано на Рисунке 2-9.

 

Рисунок 2-9


Кликните для начала установки дистрибутива

В качестве альтернативы можно итеративно пройтись по всем URL и выгрузить их один за другим при помощи cmdlet PowerShell Add-AppxPackage и добавить все пакеты приложений (*.appx) в соответствующую учётную запись пользователя (Листинг 2-2).

 

Листинг 2-2. Добавление всех пакетов дистрибутивов Linux в учётную запись пользователя


$URLs = @(
    "https://aka.ms/wsl-ubuntu-1804",
    "https://aka.ms/wsl-ubuntu-1804-arm",
    "https://aka.ms/wsl-ubuntu-1604",
    "https://aka.ms/wsl-debian-gnulinux",
    "https://aka.ms/wsl-kali-linux",
    "https://aka.ms/wsl-opensuse-42",
    "https://aka.ms/wsl-sles-12"
)

$ProgressPreference = 'SilentlyContinue'
$ErrorActionPreference = 'Stop'

Foreach($URL in $URLs){
    $Filename = "$(Split-Path $URL -Leaf).appx"
    Write-Host "Downloading: $Filename" -Foreground Yellow -NoNewline
    try{
        $params = @{
            Uri = $URL
            Outfile = $Filename
            UseBasicParsing = $true
        }
        Invoke-WebRequest @params
        Add-AppxPackage -Path $Filename

        if($?){
            Write-Host " Done" -Foreground Green
        }
    }
    catch{
        Write-Host " Failed" -Foreground Red
    }
}
 	   

Когда будет выполнен этот код PowerShell, он установит все перечисленные дистрибутивы Linux один за другим, как это показано на Рисунке 2-10 и вы сможете убедиться в этом пройдя в меню Start и проверив только что добавленные приложения.

 

Рисунок 2-10


Дистрибутивы Linux появятся в меню Start

Выгрузка с помощью curl.exe

curl.exe, произносимая как "курл" является очень популярной утилитой командной строки, которая применяется для выполнения веб запросов и обмена данными из вашей командной строки. curl.exe можно применить с неким URL для выгрузки соответствующего пакета распространения WSL в вашей локальной машине:


> curl.exe -L -o wsl-kali-linux.appx https://aka.ms/wsl-kali-linux
		

Рисунок 2-11 отображает после того как мы запустим curl.exe с непосредственным URL к некому пакету дистрибутива Linux, он будет выгружен и сохранён в указанном локальном пути, который передаётся через некий аргумент “-o”, подобно wsl-kali-linux.appx из нашего образца; это название файла при необходимости можно изменить и ваш вывод будет записан в неком новом файле. Использование curl.exe предпочтительнее когда вы применяете выгрузку и установку WSL в неком сценарии bash, когда не работают применявшиеся нами в предыдущих cmdlet PowerShell.

 

Рисунок 2-11


Применение curl для выгрузки пакетов дистрибутивов Linux

[Замечание]Замечание

Мы запускаем curl.exe, а не curl, потому как в PowerShell curl это псевдоним для cmdlet invoke-webrequest, который является совершенно иным средством.

Установка и настройка WSL

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

Запуск Distro

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

 

В качестве приложения

Итак, чтобы начать, пройдите в меню Start и наберите искомое название своего дистрибутива, например, “Ubuntu”, как это показано на Рисунке 2-12.

 

Рисунок 2-12


Пройдите в меню Satrt и отыщите название дистрибутива Linux

Теперь дважды кликните по соответствующему приложению Ubuntu как это выделено на Рисунке 2-12 для запуска подсистемы Windows для Linux в первый раз. Вам будет предложено подождать несколько минут пока она подготовит и проинициализирует указанный дистрибутив в первый раз.

 

При помощи wsl.exe

Дистрибутивы WSL также можно запускать через wsl.exe; если вы запустите этот исполняемый файл без каких бы то ни было параметров, он тогла запустит установленный по умолчанию пакет дистрибутива, как это отображено на Рисунке 2-13.

 

Рисунок 2-13


Запуск дистрибутива по умолчанию Linux с применением wsl.exe

Чтобы перечислить все установленные в вашей системе пакеты дистрибутивов и указать дистрибутив по умолчанию запустите исполняемый файл wsl с --list или -l:


> wsl.exe -–list
> wsl.exe –l
		

Часто будет требоваться запускать некий конкретный пакет дистрибутива; в таком случае мы можем воспользоваться параметрами --distribution или -d, как это показано на Рисунке 2-14 с соответствующим wsl.exe и передать ему в качестве аргумента необходимое название дистрибутива, что отражено в Листинге 2-3.

 

Листинг 2-3. Запуск определённого дистрибутива Linux


C:\>wsl.exe –l
Windows Subsystem for Linux Distributions:
Ubuntu-18.04 (Default)
openSUSE-42
SLES-12
kali-linux
C:\>wsl.exe --distribution kali-linux
C:\>wsl.exe -d sles-12
 	   
 

Рисунок 2-14


Запуск определённого дистрибутива Linux с применением wsl.exe

Позднее в этой книге мы более подробно рассмотрим прочие возможности и аргументы командной строки, которые принимает wsl.exe; на данный момент давайте просто осознаем несколько важных моментов относительно запуска дистрибутива при помощи wsl.exe, а именно:

  1. WSL запускает дистрибутив в текущем рабочем каталоге из соответствующего приглашения на ввод CMD или PowerShell.

  2. Вызываемый через wsl.exe дистрибутив Linux будет запускаться от имени пользователя по умолчанию этого дистрибутива, но вы можете изменять такое поведение применяя параметр --user или -u и передавая через него имя конкретного пользователя в качестве аргумента:

    
    > wsl.exe --distribution Ubuntu-18.04 --user prateek
    		
  3. Вызываемый через wsl.exe дистрибутив Linux будет обладать теми же самыми административными правами что и вызывающий процесс и терминал.

 

С применением исполняемого файла

Все дистрибутивы Linux также можно запросто запускать напрямую при помощи их соответствующих исполняемых файлов, как это показано на Рисунке 2-15, который весь располагается в каталоге “C:\Users\{username}\AppData\Local\Microsoft\WindowsApps\” и здесь в Листинге 2-4 несколько примеров, которые вы можете попробовать самостоятельно.

 

Листинг 2-4. Запуск дистрибутива Linux через его исполняемый файл


# launching ubuntu 18.04
ubuntu1804.exe

# launching kali linux
kali.exe

# launching openSUSE 42
openSUSE-42.exe
 	   
 

Рисунок 2-15


Запуск дистрибутивов при помощи исполняемых файлов

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

Установка учётных записей пользователя и управление ими

Создание некого пользователя это самый первый шаг в настройке некого нового дистрибутива Linux в WSL, а потому, как только вся инициализация завершена, как это можно наблюдать на Рисунке 2-16, у вас будет запрошено создание некой новой учётной записи пользователя с каким- то паролем. Эта учётная запись пользователя автоматически конфигурируется в качестве пользователя данного дистрибутива по умолчанию и она добавляется в группу “sudo” в качестве администратора Linux. Конфигурация такого пользователя требуется всякий раз когда вы устанавливаете, переустанавливаете или сбрасываете дистрибутив.

[Замечание]Замечание

При вводе пароля он не отображается эхом в консоли по причинам безопасности и это не означает что ваша система не получила соответствующие нажатия клавиш.

 

Рисунок 2-16


Настройка учётной записи пользователя в процессе инициализации дистрибутива

По умолчанию ввод пароля не требуется при запуске вами дистрибутива, однако он потребуется когда вы повышаете значения полномочий любого процесса при помощи команды sudo.

Для изменения своего текущего пароля пользователя в Linux откройте свой дистрибутив Linux (например, Ubuntu) и введите команду passwd и, как это отображено на Рисунке 2-17, у вас будет запрошен на ввод ваш текущий пароль и, когда вы предоставите его, он снова будет запрошен для подтверждения.

 

Рисунок 2-17


Сброс пароля

В случае если вы забыли свой пароль для какого- то из конкретных дистрибутивов Linux, откройте PowerShell или приглашение на ввод команд из меню Start и запустите их от имени root в своём целевом дистрибутиве WSL воспользовавшись следующей командой:


> wsl -u root -d <name of distribution> 
		

После того как ваш дистрибутив запустился со своим пользователем root, следуйте далее и воспользуйтесь командой passwd с именем того пользователя, для которого вы желаете сбросить значение пароля, как это сделано в приводимом ниже примере:


> passwd prateek
		

Если вы не применяете пользователя root, у вас не будет достаточно прав для сброса пароля для любого иного пользователя без ввода значения его текущего пароля, который мы изначально позабыли.

Модель полномочий

Пользователи Unix в подсистеме Windows для Linux являются не Windows учётными записями пользователя, которые не зависят от модели полномочий Windows, что потребует повышения полномочий в вашем дистрибутиве Linux. Существуют две отдельные модели полномочий в WSL для Linux и Windows, причём они не зависят друг от друга. Это означает, что некий пользователь администратор Linux повысит полномочия только в своей среде Linux и полномочия Linux не работают в Windows.

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

Как это показано на Рисунке 2-18, мы запросто можем получать доступ к таким точкам монтирования в среде Linux, которые ничто иное как устройства Windows, смонтированные в подсистеме Windows для Linux. Когда текущий пользователь Windows запускает команду ls в неком каталоге, который доступен ему, а затем направляет конвейером полученный результат в команду wc -l для получения общего числа возвращаемых строк, мы видим, что это значение счётчика больше нуля, однако если текущий пользователь попытается получить доступ к любому иному каталогу, к которому не имеет надлежащих полномочий, тогда будет возвращён нулевой результат. Это доказывает наш предыдущий момент, что даже хотя вы и работаете в подсистеме Linux, ваши полномочия Windows применяются к тем ресурсам Windows, к которым вы осуществляете доступ.

 

Рисунок 2-18


Ограничения модели полномочий

Но когда я попытаюсь получить доступ к некому каталогу Windows, для которого у меня нет полномочий, всё завершится ошибкой “Permission denied”. Это происходит по той причине, что пользователь Windows “Prateek”, через которого запускается WSL, имеет дотуп к папке профиля своего пользователя C:\Users\Prateek.THINKPAD, но не имеет привилегий для папки профиля пользователя “Administrator”.

Обновление и модернизация Distro

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

[Замечание]Замечание

Для упрощения чтения мы работаем в предположении, что вы применяете дистрибутивы Ubuntu или Debian, которые являются двумя наиболее популярными дистрибутивами, если вы используете какой- либо иной дистрибутив, тогда последующие команды обновления и модернизации могут оказаться неприменимыми для вас.

Перво- наперво, прежде чем переходить к тому как это сделать, давайте сначала поймём общее различие между обновлением (update) и модернизацией (upgrade). Обновление - это процесс замены текущего продукта более новой и более совершенной версией продукта, тогда как модернизация изменяет ваш текущий продукт. С точки зрения Linux, а точнее для Ubuntu и Debian, "обновление" означает освежение всего списка установленных пакетов, например, повышение их версий и т.п., без изменения чего либо ещё, а "модернизация" означает установку и обновления в сам список установленных пакетов.

Почти все дистрибутивы являются легковесными минимальными пакетами программного обеспечения, которые могут быстро выгружаться и инициализироваться; они имеют лишь необходимые инструменты и библиотеки, поставляемые с ними. Хорошей мыслью является обновление и модернизация вашего дистрибутива с применением команд из Листинге 2-5; обратите, пожалуйста, внимание что этот шаг может потребовать некого времени до своего завершения, и вы обнаружите выгрузку пакетов, как это отображено на Рисунке 2-19.

 

Листинг 2-4. Обновление и модернизация подсистемы Windows для Linux


sudo apt update && sudo apt upgrade
 	   
 

Рисунок 2-19


Обновление и модернизация дистрибутива WSL

На Рисунке 2-19 apt это сокращение для “Advanced Package Tool”, и apt это инструмент командной строки, который способствует в обработке пакетов Ubuntu и Debian и связанных с ними дистрибутивах Linux. apt взаимодействует с системами пакетов Ubuntu и Debin для поиска и установки более новых пакетов и для модернизации или удаления пакетов. Однако существует распространённое заблуждение, что apt update устанавливает новые версии обновлений программных пакетов в Linux, что не так. Вместо этого данная команда обновляет базу данных, носящую название индексом пакетов apt, которая удерживает список доступных из репозитория пакетов программного обеспечения своего дистрибутива в файле ‘/etc/apt/sources.list’.

Например, когда у вас имеется установленным Python v3.5, тогда после apt update наша вышеупомянутая база данных будет осведомлена об имеющейся и доступной более новой версии Python, версии 3.6. Теперь, когда вы запустите apt upgrade он модернизирует Python v3.5 до более новой версии.

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

Установка дополнительных инструментов и пакетов

Реальная цель обладания подсистемой Windows для Linux состоит в том чтобы позволить разработчикам применять свои любимые инструменты в Windows для расширения их общей практики разработки. Как и в любом ином варианте операционной системы Linux, в подсистеме Windows для Linux, большинство таких утилит, инструментов и пакетов Linux можно запросто установить при помощи такого диспетчера пакетов как apt, который является коллекцией инструментов для управления пакетоами. В своём следующем примере мы устанавливаем с помощью команды apt install в своём дистрибутиве Linux nodejs, git и nmap:


> sudo apt install nodejs git nmap
		

APT это коллекция таких инструментов, как apt, apt-get и apt-cache, которые приносят в общую таблицу чуть больше , например, возможность поиска пакетов при помощи apt-cache search, определяя через search ключевое слово и он может проверить даже подробные сведения такого пакета, например, Архитектуру, Размер, Контрольную сумму MD5 и тому подобное при помощи команды apt-cache show, что показано на Рисунке 2-20:


> apt-cache search aws-cli
> apt-cache show python3-botocore
		
 

Рисунок 2-20


Поиск и установка пакетов при помощи apt

Выводы

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