Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save EvertonSA/461bc9a9bf2514ec25358231b3dda3a7 to your computer and use it in GitHub Desktop.
Save EvertonSA/461bc9a9bf2514ec25358231b3dda3a7 to your computer and use it in GitHub Desktop.
Startup DEV WINDOWS/LINUX - Guia rápido de instalação do WSL2 + Docker

Startup DEV WINDOWS/LINUX - Guia rápido de instalação do WSL2 + Docker

INSTRUCÃO OFICIAL: https://docs.microsoft.com/pt-br/windows/wsl/install-win10

Em 2016, a Microsoft anunciou a possibilidade de rodar o Linux dentro do Windows 10 como um subsistema e o nome a isto foi dado de WSL ou Windows Subsystem for Linux.

O acesso ao sistema de arquivos no Windows 10 pelo Linux era simples e rápido, porém não tinhamos uma execução completa do kernel do Linux e outros artefatos nativos e isto impossibilitava a execução de várias tarefas no Linux, uma delas é o Docker.

Em 2019, a Microsoft anunciou o WSL2, com uma dinâmica aprimorada em relação a 1ª versão:

  • Execução do kernel completo do Linux
  • Melhor desempenho para acesso aos arquivos dentro do Linux
  • Compatibilidade completa de chamada do sistema

O WSL2 já estava disponível na versão Insider do Windows, mas na última semana de maio de 2020 passou a estar disponível em final release na atualização 20.04 do Windows 10.

Assim, o WSL2 permitiu que executemos Docker no Linux usando o Windows 10.

Compare as versões: https://docs.microsoft.com/pt-br/windows/wsl/compare-versions

Vamos entender como usar o Docker com o WSL 2.

Antes de começarmos o que você precisa ter para rodar o WSL:

  • Windows 10 Home ou Professional
  • Uma máquina compatível com virtualização.
  • Pelo menos 4GB de memória RAM

1- Verifique a versão do seu Windows, se já for a versão 20.04 ótimo, estamos prontos, senão precisamos instalar a atualização para instalar a 20.04.

https://www.microsoft.com/pt-br/software-download/windows10

O software da atualização verificará se sua máquina é compatível com a atualização. A atualização poderá levar muito tempo, pra mim levou mais de 1 hora para atualizar.

2 - Habilite o recurso do WSL no Windows

Digite no PowerShell em modo administrador:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Reinicie sua máquina somente por segurança.

3 - Atribua a versão default do WSL para a versão 2

wsl --set-default-version 2

4 - Instale a última atualização do kernel do WSL 2:

Ao rodar o comando acima provavelmente a mensagem abaixo vai aparecer, para resolver, basta atualizar o Kernel do WSL 2:

WSL 2 requer uma atualização para seu componente kernel. Para obter mais informações, visite https://aka.ms/wsl2kernel

https://docs.microsoft.com/pt-br/windows/wsl/wsl2-kernel

Basta instalar, não precisa de mais nada

Após instalado, execute o passo 3 novamente

5 - Escolha sua distribuição Linux no Windows Store

Ao iniciar a versão, você deverá criar um usuário que poderá ser o mesmo da sua máquina e uma senha, este será o usuário root da sua instância WSL.

PS C:\WINDOWS\system32> wsl --set-default-version 2
WSL 2 requer uma atualização para seu componente kernel. Para obter mais informações, visite https://aka.ms/wsl2kernel

6 - Instale o Docker Desktop versão maior ou igual 2.3

No link abaixo a versão stable estava acima da 2.3 necessária.

https://www.docker.com/products/docker-desktop

7 - Habilite o WSL no Docker Desktop

  • Vá em Resources/WSL Integration e marca opção "Enable integrantion" e marque sua distro instalada nesta opção "Enable integration with additional distros"

8 - Teste o seu Docker

Execute o comando docker run ou docker-compose up

9 - Instalar nodejs e VSCODE + Extensões

https://docs.microsoft.com/pt-br/windows/nodejs/setup-on-wsl2

10 - Configurar git

vi ~/.gitconfig

[user]
  email = <my email here>
  name = Steven Murawski
[core]
  editor = code --wait
  eol = lf
  autocrlf = true

11 - Configurações padrões do seu VSCODE

Baixar a extensão Settings Sync e vincular ao seu gist;

PS. Caso tenha interesse, peguem as configurações que faço uso: https://gist.github.com/marciojg/94e01006e2da01810785ccb6611454f1

12 - Evitar lentidão, problemas de permissionamento e problemas com o node hot reload

Por padrão o pash que o bash carrega é esse, um mapeamento para o usário windows:

devel@NOMEDAMAQUINA:/mnt/c/Users/nome.usuario.windows$

Evite usar esse path para programar, prefira usar a pasta do usuário da sua distro linux:

cd /home/nome.usuario.linux ou cd ~
devel@NOMEDAMAQUINA:~$

Extras

1 - Alterar a versão do WSL de uma distribuição

wsl --set-version <distribution name> <versionNumber>

2 - Dicas:

  • Atalho no menu iniciar Ou executando C:\Windows\System32\wsl.exe
  • O sistema de arquivos do Windows é acessível em /mnt
  • É possível acessar o sistema de arquivos do Linux pela rede do Windows digite \\wsl$
  • É possível acessar uma pasta digitando explorer.exe .
  • É possível abrir uma pasta com o VSCode digitando code .
  • É possível acessar executáveis do Windows no terminal do Linux.

3 - Por padrão o WSL2 pode utilizar “recursos de forma ilimitada” na sua máquina.

Se você quiser limitar os recursos, crie um arquivo .wsconfig na pasta do seu usuário.

https://docs.microsoft.com/pt-br/windows/wsl/wsl-config#configure-global-options-with-wslconfig

Depois de configurar execute no power shell:

wsl --shutdown (vai reiniciar o Docker também e vai aparecer uma mensagem se você quer iniciar o Docker

4 - As duas distribuições WSL do docker:

https://www.docker.com/blog/new-docker-desktop-wsl2-backend/

5 - Liberar memória no host

https://linux-mm.org/Drop_Caches

echo 1 | sudo tee /proc/sys/vm/drop_caches

echo 3 | sudo tee /proc/sys/vm/drop_caches

6 - Use BuildKit and multi-stage builds

Acrescente export DOCKER_BUILDKIT=1 no .profile do seu usuário

7 - Disponibilizar chrome do windows para testes com Karma

sudo vim ~/.bashrc

# OWN ENVIRONMENT VARIABLES
export CHROME_BIN="/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"

Salva e reinicia o terminal ou rode **source ~/.bashrc**

8 - Crontab

https://www.ubuntudicas.com.br/2012/01/crontab-o-agendador-de-tarefas-do-linux/

9 - Demais WSL2 Hacks

https://github.com/shayne/wsl2-hacks

10 - Instalar Flutter

fonte: https://dnmc.in/2021/01/25/setting-up-flutter-natively-with-wsl2-vs-code-hot-reload/

## Java JDK
sudo apt update && sudo apt install default-jdk
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

## Android SDK
mkdir -p ~/Android/Sdk/cmdline-tools
wget https://dl.google.com/android/repository/commandlinetools-linux-6858069_latest.zip -O latest.zip
unzip latest.zip
mkdir -p ~/Android/Sdk/cmdline-tools
mv cmdline-tools ~/Android/Sdk/cmdline-tools/latest
rm -rf latest.zip
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
sdkmanager

## Plattform tools
sdkmanager --install "platform-tools"
export PATH=$PATH:$ANDROID_HOME/platform-tools
adb

## Build tools and Android images
sdkmanager --install "system-images;android-29;google_apis;x86_64" "platforms;android-29" "build-tools;29.0.3"
sdkmanager --licenses

## Flutter SDK
wget https://storage.googleapis.com/flutter_infra/releases/stable/linux/flutter_linux_2.0.2-stable.tar.xz -O flutter_latest.tar.xz
tar xf flutter_latest.tar.xz
mkdir ~/Flutter
mv flutter ~/Flutter/Sdk
export FLUTTER_ROOT=$HOME/Flutter/Sdk
export PATH=$FLUTTER_ROOT/bin:$PATH
flutter --version

## ENVs
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export FLUTTER_ROOT=$HOME/Flutter/Sdk
export PATH=$FLUTTER_ROOT/bin:$PATH

sudo printf "\n\nexport JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64\nexport PATH=\$PATH:\$JAVA_HOME/bin" >> ~/.bashrc

sudo printf "\n\nexport ANDROID_HOME=\$HOME/Android/Sdk\nexport PATH=\$PATH:\$ANDROID_HOME/cmdline-tools/latest/bin\nexport PATH=\$PATH:\$ANDROID_HOME/platform-tools" >> ~/.bashrc

sudo printf "\n\nexport FLUTTER_ROOT=\$HOME/Flutter/Sdk\nexport PATH=\$FLUTTER_ROOT/bin:\$PATH" >> ~/.bashrc

flutter doctor --android-licenses

flutter doctor # return must be all ok, with only android studio with attention icon

# Abra o vscode, marca web server e aperta F5
# Caso ache necessário crie esta env
# export CHROME_EXECUTABLE="/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"
# sudo printf "\n\nexport CHROME_EXECUTABLE=/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe" >> ~/.bashrc

sdkmanager --list # opcional. Listar sdks
sdkmanager --install "system-images;android-29;google_apis;x86_64" "platforms;android-29" "build-tools;29.0.3"
sdkmanager --licenses
avdmanager create avd --name adroid-emulator --package "system-images;android-29;google_apis;x86_64"

flutter emulators # retorna um emulator pelo menos

-- configurar extensao emulator para poder permitir emulador cold boot
-- iniciar ele e reza

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment