Como configurar um ambiente de desenvolvimento no WSL2

1. Introdução ao WSL2: Por que usar o subsistema Linux no Windows?

O Windows Subsystem for Linux versão 2 (WSL2) representa uma evolução significativa para desenvolvedores que precisam de um ambiente Linux sem abandonar o Windows. Diferentemente do WSL1, que funcionava como uma camada de tradução de chamadas de sistema, o WSL2 utiliza um kernel Linux real executado em uma máquina virtual leve e gerenciada pelo próprio Windows.

Principais vantagens do WSL2:
- Kernel Linux completo com compatibilidade total de chamadas de sistema
- Desempenho de I/O de arquivos até 3-5x superior ao WSL1
- Suporte nativo ao Docker sem necessidade de VirtualBox ou Hyper-V
- Integração perfeita com o sistema de arquivos do Windows
- Inicialização em segundos e consumo mínimo de recursos

Pré-requisitos:
- Windows 10 build 19041 ou superior (ou Windows 11)
- Virtualização habilitada na BIOS/UEFI
- Pelo menos 4GB de RAM (8GB recomendado)

2. Instalação e configuração inicial do WSL2

Para instalar o WSL2, abra o PowerShell como Administrador e execute:

# Instalar o WSL com distribuição Ubuntu padrão
wsl --install

# Se já tiver o WSL1 instalado, defina a versão 2 como padrão
wsl --set-default-version 2

# Listar distribuições instaladas e verificar versão
wsl --list --verbose

# Verificar status geral do WSL
wsl --status

Para migrar uma distribuição existente do WSL1 para WSL2:

# Converter uma distribuição específica
wsl --set-version Ubuntu 2

# Definir uma distribuição como padrão
wsl --set-default Ubuntu

A saída esperada do comando wsl --list --verbose deve mostrar:

  NAME      STATE           VERSION
* Ubuntu    Running         2

3. Otimização do terminal e integração com Windows

O Windows Terminal é a ferramenta recomendada para trabalhar com WSL2. Instale-o pela Microsoft Store ou via winget:

winget install Microsoft.WindowsTerminal

Configuração do Windows Terminal para WSL:
- Perfil Ubuntu já é criado automaticamente
- Configure fonte Cascadia Code PL para Powerline
- Ative "Usar tema do sistema" ou escolha um tema escuro

Acesso ao sistema de arquivos do Windows:

# Montagem automática em /mnt/
cd /mnt/c/Users/seu_usuario/Projetos

# Para melhor performance, mantenha projetos dentro do sistema de arquivos Linux
mkdir -p ~/projetos
cd ~/projetos

Boas práticas de performance:
- Armazene projetos em ~/projetos (dentro do Linux) para evitar overhead de I/O
- Use \\wsl.localhost\Ubuntu\home\seu_usuario\projetos para acessar do Windows
- Configure variáveis de ambiente compartilhadas no arquivo ~/.bashrc

# Adicione ao ~/.bashrc para compartilhar PATH
export PATH="$PATH:/mnt/c/Program Files/nodejs"

4. Configuração de ferramentas essenciais de desenvolvimento

Gerenciadores de pacotes:

# Atualizar apt e instalar pacotes básicos
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential curl wget git -y

# Instalar Linuxbrew (Homebrew para Linux)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Configuração do Git:

# Configurar identidade
git config --global user.name "Seu Nome"
git config --global user.email "seu@email.com"

# Gerar chave SSH
ssh-keygen -t ed25519 -C "seu@email.com"

# Adicionar chave ao ssh-agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# Integrar com Windows (reutilizar credenciais)
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

Editores de código:

# VS Code com Remote-WSL (instale a extensão no Windows)
code .

# Para Neovim
sudo apt install neovim -y

5. Gerenciamento de linguagens e runtimes

Node.js com nvm:

# Instalar nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# Recarregar terminal
source ~/.bashrc

# Instalar Node.js LTS
nvm install --lts
nvm use --lts

# Verificar versões
node --version
npm --version

Python com pyenv:

# Instalar dependências do pyenv
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

# Instalar pyenv
curl https://pyenv.run | bash

# Adicionar ao ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# Instalar Python 3.12
pyenv install 3.12.0
pyenv global 3.12.0

Docker no WSL2:

# Opção 1: Docker Desktop com integração WSL2
# Baixe de https://docs.docker.com/desktop/wsl/

# Opção 2: Docker Engine nativo
sudo apt install docker.io docker-compose -y
sudo usermod -aG docker $USER
newgrp docker

6. Personalização do ambiente e produtividade

Zsh com Oh My Zsh:

# Instalar Zsh
sudo apt install zsh -y

# Definir Zsh como shell padrão
chsh -s $(which zsh)

# Instalar Oh My Zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# Instalar plugins
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

# Configurar plugins no ~/.zshrc
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Tema Powerlevel10k:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Configure o tema no ~/.zshrc:

ZSH_THEME="powerlevel10k/powerlevel10k"

Script de bootstrap automatizado:

Crie um arquivo setup.sh:

#!/bin/bash
echo "Configurando ambiente de desenvolvimento WSL2..."

# Atualizar sistema
sudo apt update && sudo apt upgrade -y

# Instalar pacotes essenciais
sudo apt install -y build-essential curl wget git zsh neovim

# Instalar nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# Instalar Oh My Zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

echo "Ambiente configurado com sucesso!"

7. Resolução de problemas comuns e boas práticas

Ajuste de recursos no .wslconfig:

Crie ou edite %USERPROFILE%\.wslconfig:

[wsl2]
memory=4GB
processors=4
swap=2GB
localhostForwarding=true

Problemas de rede e DNS:

# Corrigir DNS no WSL2
sudo nano /etc/resolv.conf
# Adicione:
nameserver 8.8.8.8
nameserver 8.8.4.4

# Ou para configuração permanente
sudo nano /etc/wsl.conf
[network]
generateResolvConf = false

Permissões de arquivos:

# Corrigir permissões em /mnt/
sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o uid=1000,gid=1000,umask=022,fmask=111

Dicas de performance:
- Nunca trabalhe diretamente em /mnt/c/ para projetos grandes
- Use \\wsl.localhost\Ubuntu\home para acessar arquivos do Windows
- Desative o Windows Defender para pastas específicas do WSL2

8. Próximos passos: expandindo o ambiente

Ferramentas cloud:

# AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

# Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# GCP SDK
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
sudo apt install google-cloud-sdk

Bancos de dados locais:

# PostgreSQL
sudo apt install postgresql postgresql-contrib -y
sudo service postgresql start

# MySQL
sudo apt install mysql-server -y
sudo service mysql start

# Redis
sudo apt install redis-server -y
sudo service redis start

Contêineres e orquestração:

# Minikube para Kubernetes local
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Iniciar cluster
minikube start --driver=docker

Com estas configurações, seu ambiente de desenvolvimento no WSL2 estará completo e pronto para projetos profissionais. A combinação de ferramentas Linux com a praticidade do Windows oferece o melhor dos dois mundos para desenvolvedores.

Referências