Configuração campeã do WSL para DevOps

Quem não trocou de notebook antes e teve que passar pelo penoso caminho de configurar tudo do zero novamente. Bom recentemente comprei um notebook novo para fazer um upgrade. No antigo eu tinha o Ubuntu 20.04 LTS instalado e a configuração foi bem tranquila. Neste novo equipamento ele já veio com o Windows 11 e não quero fazer a troca de SO, pelo menos nesse momento. Com isso resolvi dar uma chance ao WSL 2 e tive uma boa surpresa com o uso. Abaixo coloquei toda a configuração que fiz para tentar ter o melhor dos dois sistemas operacionais para trabalhar no dia a dia.

Habilite o WSL no Windows

Clique no botão iniciar e então digite painel de controle seguido de Enter. Será carregado o bom e velho painel de controle do Windows. Clique no ícone Programas e Recursos.

Painel de controle do Windows

Será carregado a tela onde são exibidos todos os programas instalados. Clique na opção do lado esquerdo de Ativar ou Desativar Recursos do Windows.

Programas Instalados

Será carregada uma tela contendo os recursos disponíveis e os que estão ativos. Localize e marque a checkbox do item Subsistema do Windows para Linux.

Seleção de pacotes

Ao término da instalação ele solicitará que você reinicie o seu computador.

Agora que você tem o subsistema instalado será necessário a instalação de um pacote adicional chamado

Abra um prompt de comandos e confirme que a versão 2 está configurada como padrão

PS C:\> wsl --status
Distribuição Padrão: Ubuntu-20.04
Versão Padrão: 2

O Subsistema do Windows para Linux foi atualizado pela última vez em 31/05/2022
O kernel do Subsistema do Windows para Linux pode ser atualizado manualmente com o "wsl --update", mas as atualizações automáticas não podem ocorrer devido às configurações do sistema.
Para receber atualizações automáticas do kernel, habilite a configuração do Windows Update: "Receber atualizações para outros produtos da Microsoft ao atualizar o Windows".
Para obter mais informações, visite https://aka.ms/wsl2kernel.

Versão do kernel: 5.10.16

Instalando o Ubuntu 22.04

Localize e instale a versão mais recente LTS do Ubuntu na Store do Windows.

Inicie pela primeira vez o Ubuntu

Ao iniciar a distribuição pela primeira vez você precisa informar um nome de usuário e uma senha.

Como iremos utilizar o terminal ao invés da janela do Ubuntu pode fechar a janela pois a distribuição continuará em execução.

Windows Terminal

Caso você esteja utilizando a versão 11 do Windows o Windows Terminal já vem instalado por padrão. Caso contrário volte a loja do Windows localize e instale o Windows Terminal.

Depois de instalado abra ao Windows Terminal e selecione clique em v e selecione o Ubuntu 22.04

Para que o terminal tenha uma melhor aparência vamos instalar uma fonte que tenha suporte a glyphs (ícones). Para isso acesse o site NerdFonts e escolha uma fonte da sua preferência. No meu caso gosto de utilizar a Hacker Nerd Font, caso queira utilizá-la também o link para baixá-la é esse.

Depois de baixada descompacte e faça a instalação da fonte. Uma observação importante é que essa fonte tem suporte a mais de um sistema operacional então não é necessário instalarmos todas, apenas aquelas com o final no nome do arquivo “Windows Compatible”.

Depois da fonte configurada entre nas configurações do Windows Terminal clicando novamente em v. Localize e clique no perfil do Ubuntu no lado esquerdo da tela e em seguida clique em Aparência do lado direito.

Selecione a fonte que você instalou em Tipo de Fonte e em seguida cliquem em Salvar e feche a aba de configurações. Feche o terminal e abra novamente e em seguida abra um novo terminal do Ubuntu.

Instale o ZSH e troque o seu Shell padrão para ele

O bash é o padrão de quase todas as distribuições Linux e isso é por um bom motivo. Além de leve ele é extremamente versátil. Então você deve estar se perguntando porque razão estou falando para instalar um outro shell. A reposta é que o ZSH está se mostrando um terminal tão leve e versátil quanto o BASH com a vantagem de existirem diversos utilitários e personalizações disponíveis o que torna a experiência de quem tem que ficar horas no terminal mais eficiente e porque não, mais prazerosa.

Depois dessa singela declaração vamos a instalação do ZSH, para isso basta rodar os comandos abaixo:

sudo apt install zsh curl git vim wget

sudo chsh -s /usr/bin/zsh $USER

Feche o terminal e abra novamente. Você será questionado da criação de um arquivo de perfil. Pode escolher qualquer opção pois iremos configurá-la nos passos seguintes.

Instale o ohmyzsh e o PowerLevel10K

Ohmyzsh

O ohmyzsh é um framework que traz uma série de plugins, funções e temas para deixar o seu dia-a-dia mais fácil. Recomendo uma passagem pelo site para dar uma olhada na documentação pois aqui somente irei mostrar o básico da configuração.

Agora rode os comandos abaixo.

sh -c \
"$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Powerlevel 10K

O powerlevel10k é um tema para zsh com ênfase na flexibilidade, velocidade e experiencia out-of-the-box em tradução livre diretamente do site. Recomendo uma visita no github do projeto para conhecer um pouco mais.

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

vi ./zshrc


ZSH_THEME="powerlevel10k/powerlevel10k"</p>

source .zshrc

Configuração do Powerlevel

Ao executar o shell configurado com o powerlevel10k será aberto um wizard de configuração com alguma perguntas. Responda de acordo com as suas preferências. Abaixo coloco a lista de telas as opções que eu escolhi para o meu terminal.

Instale o PIP para o Python3

sudo apt-get -y install python3-pip

Instale e configure o GO

Baixe a última versão para Linux a partir do site oficial ou:

wget https://dl.google.com/go/go1.18.2.linux-amd64.tar.gz


sudo tar -C /usr/local -xzf go1.18.2.linux-amd64.tar.gz

Inclusão no .zshrc

# GO binary PATH inclusion

export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go

Instale e configure o ASDF

git clone https://github.com/asdf-vm/asdf.git \
~/.asdf --branch v0.9.0

Adicione a linha abaixo no .zshrc

# asdf configuration
. $HOME/.asdf/asdf.sh

Carregue a nova configuração

source ./zshrc

Instale as SDKS e Compiladores com o ASDF:

#JDK
asdf plugin add java

asdf list-all java | grep openjdk

asdf install java openjdk-17.0.2

asdf global java openjdk-17.0.2

# Java Home adicionar ao .zshrc

. ~/.asdf/plugins/java/set-java-home.zsh


# Maven

asdf plugin add maven

asdf install maven 3.8.5

asdf global maven 3.8.5


# Groovy

asdf plugin add groovy

asdf install groovy 4.0.2

asdf global groovy 4.0.2

Crie suas chaves SSH

ssh-keygen -t RSA -b 2048 -C "seu-email"

Configure o GIT

git config --global user.name ""

git config --global user.email ""

Instale as ferramentas de automação e aprovisionamento

Ansible

sudo apt install -y software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt update
sudo apt install -y ansible

$ ansible --version                                                                                                                                                                     
ansible [core 2.12.2]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/ivan/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/ivan/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.10 (default, Mar 15 2022, 12:22:08) [GCC 9.4.0]
  jinja version = 2.10.1
  libyaml = True

Terraform

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform

Para testar digite o comando abaixo

$ terraform --version                                                                                                                                                                   
Terraform v1.1.7
on linux_amd64

Instale o Docker

# 1. Required dependencies 
sudo apt update && sudo apt -y install apt-transport-https ca-certificates curl gnupg lsb-release 

# 2. GPG key 
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 

# 3. Use stable repository for Docker 
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 

# 4. Install Docker 
sudo apt update 
sudo apt -y install docker-ce docker-ce-cli containerd.io 

# 5. Add user to docker group 
sudo groupadd docker 
sudo usermod -aG docker $USER 

------
sudo service docker start
* Starting Docker: docker
sudo service docker status
* Docker is running
docker run hello-world
❯ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/


Instale o Minikube e o configure para usar o Docker

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

sudo install minikube-linux-amd64 /usr/local/bin/minikube

$ minikube version
minikube version: v1.25.2
commit: 362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7

minikube config set driver docker

Inicie o cluster para verificar o funcionamento com o minikube start:

Para para o cluster digite minikube stop

Instale o Kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Para testar digite o comando abaixo

❯ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.4", GitCommit:"e6c093d87ea4cbb530a7b2ae91e54c0842d8308a", GitTreeState:"clean", BuildDate:"2022-03-06T21:32:53Z", GoVersion:"go1.17.7", Compiler:"gc", Platform:"linux/amd64"}

Instale os plugins kubens, kubectx

sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens

Instale o plugin FZF

sudo apt install fzf


Instale o k9s

Para utilizarmos o k9s no nosso Ubuntu o jeito mais fácil é instalar o brew linux e a partir dele fazer a instalação.

Instalando o Brew

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

echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/ivan/.zprofile
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

Testando o funcionamento do Brew.

sudo apt-get install build-essential

brew install gcc

Instalação do K9s

brew install derailed/k9s/k9s

Testando o K9s

Instale o Helm Chart

brew install helm

Agora vamos adicionar o repositório da Bitnami

helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈

Habilite os Plugins no Ohmyzsh

Agora vamos configurar alguns plugins que irão habilitar algumas funcionalidades adicionais assim como o Code completion no shell do zsh. Para isso edit novamente o arquivo .zshrc e localize a linha:

plugins=(git)

Por padrão somente está habilitado o plugin do Git. Vamos adicionar os seguintes plugins:

PluginDescrição
ansible
asdf
docker
fzf
git
kubectl
kubectx
helm
minikube

Com isso a linha ficará desta forma:

plugins=(ansible asdf docker fzf git kubectl kubectx helm minikube)

Conclusão

Chegamos ao final da nossa configuração! Agora você temos o nosso terminal mais responsivo e com os utilitários básicos que todo Arquiteto de DevOps teria para começar. Ainda existem os utilitários de cada provedor de nuvem que você provavelmente terá que adicionar. Não coloquei aqui para que o tutorial não ficasse mais extenso do que ficou.

Mas e ai gostaram? Comentem ai se faltou alguma coisa!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s