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 pacote MSIX no mesmo padrão utilizado pela loja do Windows para automatizar o processo de instalação.