Monday, March 21, 2022

Distribuições personalizadas no Windows Subsystem for Linux (WSL)

O Windows Subsystem for Linux (WSL) é uma ferramenta poderosa para desenvolvimento multiplataforma. Ele é uma evolução dos Windows Subsystems existentes desde a primeira versão do Windows NT, e permite aos desenvolvedores subirem um ambiente GNU/Linux no Windows sem a necessidade de criar máquinas virtuais.

 

Além de conseguir executar a maioria das aplicações Linux sem alterações diretamente no Windows, existem várias ferramentas que se aproveitam dessa integração oferecida pelo WSL para permitir o desenvolvimento cruzado entre as duas plataformas. Por exemplo, o Visual Studio Code disponibiliza uma extensão que possibilita o desenvolvimento de aplicações Linux a partir do Windows.

 

A loja do Windows disponibiliza diversas distribuições do Linux. Mas e se a distribuição que você precisa não está disponível na loja? Nesse artigo mostraremos como importar a maioria das distribuições Linux para o WSL.

 

Distribuições oficiais

 

Existem diversas distribuições Linux prontas para serem instaladas através da loja do Windows ou pelo gerenciador de pacotes winget. Utilize o seguinte comando para listar essas distribuições:

 

winget search --tag linux

 

Mas, até a data da publicação desse artigo, a minha distribuição favorita (Arch Linux) não está disponível oficialmente para instalar no WSL. Felizmente, o processo de importação de distribuições Linux no WSL é simples e está bem descrito na sua documentação. Nas próximas seções veremos como importar o Arch Linux para o WSL.

 

Importação via Docker

 

Seguindo a documentação do WSL, estes são os pré-requisitos para importar uma distribuição Linux no WSL com o auxílio do Docker:

  • WSL
  • Uma distribuição Linux qualquer instalada no WSL
  • Docker Desktop para Windows com integração para WSL2 habilitada

É possível instalar esses itens com os seguintes comandos winget (nesse exemplo vamos instalar a distribuição Ubuntu):

 

wsl --install
winget install -e --id Canonical.Ubuntu
winget install -e --id Docker.DockerDesktop

Após instalar o Docker, siga as instruções da página https://docs.microsoft.com/windows/wsl/tutorials/wsl-containers#install-docker-desktop para habilitar a integração com o WSL.

 

Com o ambiente configurado, crie uma pasta para armazenar o pacote tar que iremos importar (por exemplo, C:\temp) e abra uma sessão no Ubuntu com os seguintes comandos do PowerShell:

 

mkdir C:\temp
wsl -d Ubuntu

Com a sessão do Ubuntu aberta, execute os seguintes comandos para gerar o pacote tar do Arch Linux:

 

docker run --name archlinuxwsl -t archlinux bash -c ls /
docker export archlinuxwsl > /mnt/c/temp/archlinux.tar
docker rm archlinuxwsl
logout

Agora que temos o pacote, podemos importá-lo para o WSL através dos seguintes comandos no PowerShell do Windows:

 

# crie uma pasta para a distribuição a ser importada
mkdir C:\wslDistroStorage\ArchLinux

wsl --import ArchLinux C:\wslDistroStorage\ArchLinux `
    C:\temp\archlinux.tar

Finalizada a importação, a nossa distribuição está pronta para ser utilizada. Utilize o comando wsl -d ArchLinux para iniciar uma sessão.

 

Importação via imagem do mantenedor

 

Alguns mantenedores de distribuições Linux disponibilizam os pacotes tar utilizados para gerar as imagens de contêineres oficiais. No caso do Arch Linux, esses pacotes estão disponíveis no endereço https://gitlab.archlinux.org/archlinux/archlinux-docker/-/releases, com nome no formato base-XXXXXXXX.X.XXXXX.tar.xz.

 

Assim, ao invés de executar todo o procedimento de importação através do Docker, basta baixar uma das versões do pacote, descompactar e importá-lo no WSL usando o comando wsl --import descrito na seção anterior. O formato XZ utilizado pelo Arch Linux pode ser descompactado pela ferramenta 7-zip. Use o comando winget install -e --id 7zip.7zip para instalar essa ferramenta.

 

Instalador

 

Apesar de o processo de importação ser simples, em alguns cenários é conveniente criar um instalador, principalmente se for necessário fazer a instalação em larga escala. Para isso, a Microsoft disponibiliza o código fonte de um projeto para criar um instalador no mesmo formato (MSIX) utilizado pelas distribuições WSL oficiais. O repositório desse projeto está disponível no endereço https://github.com/Microsoft/WSL-DistroLauncher.

 

Além de registrar a distribuição no WSL, esse instalador permite executar uma configuração inicial, como a criação de um usuário e ajustes na ferramenta de gerenciamento de pacotes.

 

Caso tenha interesse em um exemplo prático, eu criei um instalador para a distribuição Arch Linux baseado nesse projeto. O código está disponível no endereço https://github.com/DevelopersCommunity/archlinux-wsl. Nesse exemplo, além de instalar o Arch Linux e ajustar os comandos de criação de usuário, adicionei código para executar a configuração inicial das chaves de criptografia utilizadas pelo gerenciador de pacotes pacman. A página de releases do repositório tem um pacote MSIX pronto para ser instalado. Para utilizar esse MSIX, é necessário importar o certificado utiizado na sua assinatura, como descrito no README.

 

Conclusão

 

Nesse artigo vimos como é simples importar uma distribuição Linux no WSL. Com um pouco mais de esforço, é possível criar um instalador no mesmo padrão utilizado pela loja do Windows para automatizar o processo de instalação.

Posted at https://sl.advdat.com/3uewWJfhttps://sl.advdat.com/3uewWJf