Bem-vindo à primeira parte desta série de tutoriais dedicada a construir uma estação de trabalho robusta e automatizada para profissionais de TI e SysAdmins utilizando o Ubuntu 24.04. O conceito central que guia esta jornada é o de Workspace as Code (Estação de Trabalho como Código), onde tratamos as configurações, ferramentas e todo o ambiente de desenvolvimento como código, aplicando práticas de versionamento, automação e reprodutibilidade.
Neste primeiro capítulo, lançaremos a fundação do nosso ambiente, garantindo que o sistema operacional esteja atualizado e equipado com as ferramentas essenciais. Em seguida, daremos o passo mais importante: iniciar um repositório Git para começar a versionar cada mudança, garantindo que possamos rastrear, reverter e compartilhar nossas configurações de forma eficiente.
Informação: Esta série foi projetada para ser sequencial. Cada parte constrói sobre a anterior, embora algumas seções possam ser adaptadas de forma independente.
workspace-as-code.Este tutorial é ideal para:
Não é necessário ter experiência prévia com Git ou Linux avançado, mas é recomendável ter familiaridade básica com terminal e conhecimento de comandos como cd, ls e mkdir.
Antes de começar, verifique se você atende aos requisitos mínimos:
# Verifique a versão do Ubuntu
$ lsb_release -a
# Você deve ver algo como:
# No LSB modules are available.
# Distributor ID: Ubuntu
# Release: 24.04
# Codename: noble
Se você não vê "24.04", este tutorial ainda funcionará, mas algumas ferramentas podem ter comportamentos ligeiramente diferentes. Recomendamos atualizar para Ubuntu 24.04 LTS.
# Verifique se tem acesso sudo
$ sudo whoami
# Você deve ver:
# root
# Se receber "sudo: command not found", você não tem privilégios de administrador
Atenção: Este tutorial requer acesso sudo. Se você não o possui, peça ao administrador do sistema.
# Teste sua conexão
$ ping -c 1 8.8.8.8
# Você deve ver respostas bem-sucedidas
O primeiro passo em qualquer nova configuração de sistema é garantir que todos os pacotes estejam atualizados. Isso corrige vulnerabilidades de segurança, melhora a compatibilidade e garante que as novas ferramentas que instalaremos funcionem corretamente.
Execute os seguintes comandos para atualizar os repositórios de pacotes, aplicar as atualizações e, em seguida, limpar pacotes órfãos ou desnecessários.
# Atualize os repositórios de pacotes
$ sudo apt update
# Atualize todos os pacotes instalados
$ sudo apt upgrade -y
# Remova pacotes órfãos e desnecessários
$ sudo apt autoremove -y && sudo apt autoclean
Agora, vamos instalar um conjunto de ferramentas que formam a espinha dorsal do nosso arsenal de SysAdmin. Cada uma delas tem um propósito específico que facilitará nosso trabalho diário.
Aqui está uma visão geral de cada ferramenta que instalaremos:
| Ferramenta | Categoria | Propósito |
|---|---|---|
| vim | Editor | Editor de texto poderoso e ubíquo |
| fzf | Busca | Fuzzy finder para busca interativa |
| git | Versionamento | Controle de versão |
| tmux | Terminal | Multiplexador de terminal |
| curl, wget | Download | Ferramentas para baixar arquivos |
| jq | JSON | Processador de JSON em linha de comando |
| ripgrep (rg) | Busca | Alternativa rápida ao grep |
| bat | Visualização | Cat com realce de sintaxe |
| eza | Listagem | Alternativa moderna ao ls |
| btop | Monitoramento | Monitor de sistema interativo |
| nmap, tcpdump | Rede | Ferramentas de análise de rede |
| rclone | Cloud | Sincronização com provedores de nuvem |
| traceroute | Rede | Exibe a rota dos pacotes até um destino |
| plocate | Busca | Localiza arquivos rapidamente por nome (alternativa ao locate) |
| whois | Rede | Consulta informações de registro de domínios e IPs |
| dnsutils | Rede | Conjunto de ferramentas DNS (dig, nslookup, etc.) |
| ipcalc | Rede | Calculadora de sub-rede IP para endereçamento IPv4/IPv6 |
| grc | Utilidade | Colore a saída de logs e comandos para facilitar a leitura |
| tldr | Documentação | Exemplos práticos de uso de comandos (páginas simplificadas) |
| lshw, hwinfo | Diagnóstico | Ferramentas para listar informações detalhadas de hardware |
| fwupd | Sistema | Gerencia atualizações de firmware |
| ethtool | Rede | Consulta e ajusta parâmetros de interfaces de rede |
| iftop | Monitoramento | Exibe uso de largura de banda por conexão em tempo real |
| fd-find | Busca | Localiza arquivos no sistema de forma simples e rápida (alternativa ao find) |
| strace | Depuração | Monitora chamadas de sistema de um processo |
| rsync | Sincronização | Sincroniza arquivos e diretórios localmente ou remotamente |
| remmina | Acesso remoto | Cliente de área de trabalho remota (RDP, VNC, SSH, etc.) |
| network-manager-l2tp | Rede | Plugin L2TP para NetworkManager (suporte a VPN L2TP) |
| network-manager-l2tp-gnome | Rede | Interface gráfica GNOME para configuração de VPN L2TP |
# Instalação de pacotes via APT (gerenciador de pacotes do Ubuntu)
$ sudo apt install -y \
vim fzf ipcalc wget curl tcpdump git traceroute nmap plocate \
whois dnsutils grc tmux eza btop lshw hwinfo fwupd ethtool \
iftop jq bat fd-find ripgrep strace rsync rclone remmina \
network-manager-l2tp network-manager-l2tp-gnome tldr
Se desejar, você também pode instalar algumas aplicações via Snap (um gerenciador de pacotes alternativo):
# Instalação de pacotes via Snap
$ sudo snap install joplin-desktop brave drawing
O coração da nossa abordagem "Workspace as Code" é o Git. Vamos criar um repositório para armazenar todos os nossos arquivos de configuração (dotfiles), scripts e automações.
Este tutorial usa GitLab como exemplo, mas você pode usar qualquer provedor Git que preferir:
| Provedor | URL | Melhor Para | Tipo |
|---|---|---|---|
| GitHub | https://github.com | Comunidade, projetos open-source | Nuvem |
| GitLab | https://gitlab.com | Privacidade, CI/CD integrado | Nuvem |
| Gitea | Auto-hospedado | Controle total, sem dependências externas | Self-hosted |
| Gitbucket | Auto-hospedado | Alternativa leve ao GitLab | Self-hosted |
As instruções abaixo funcionam para qualquer provedor. Apenas ajuste a URL conforme necessário.
Uma boa organização é fundamental. Propomos a seguinte estrutura dentro de um diretório principal chamado workspace-as-code/:
workspace-as-code/
│
├── 📁 dotfiles/ ← Seus arquivos de configuração (.bashrc, .vimrc, etc)
│ ├── .bashrc
│ ├── .bash_aliases
│ ├── .vimrc
│ └── .tmux.conf
│
├── 📁 scripts/ ← Scripts de automação e utilitários
│ ├── setup.sh
│ ├── backup.sh
│ └── validate.sh
│
├── 📁 terraform/ ← Infraestrutura como código (próximas partes)
│ └── main.tf
│
├── 📁 packer/ ← Templates de imagens (próximas partes)
│ └── ubuntu.json
│
├── 📁 ansible/ ← Configuração de máquinas (próximas partes)
│ └── playbook.yml
│
├── 📄 .gitignore ← Arquivos a ignorar no Git
├── 📄 README.md ← Documentação do projeto
└── 📄 .git/ ← Metadados do Git (criado automaticamente)
Cada pasta será preenchida conforme avançamos na série!
Vamos seguir os passos para criar o projeto no seu provedor Git e configurar o repositório localmente.
Para GitHub:
workspace-as-codePara GitLab:
workspace-as-codePara Gitea auto-hospedado:
workspace-as-code# Crie o diretório principal do projeto e acesse-o
$ mkdir ~/workspace-as-code
$ cd ~/workspace-as-code
# Inicialize um repositório Git
$ git init
# Configure sua identidade no Git (apenas para este repositório)
# Substitua pelos seus dados
$ git config --local user.name "Seu Nome"
$ git config --local user.email "seu-email@exemplo.com"
# Verifique a configuração
$ git config --local --list
# Você deve ver algo como:
# user.name=Seu Nome
# user.email=seu-email@exemplo.com
# core.repositoryformatversion=0
# core.filemode=true
# core.bare=false
# Crie a estrutura de diretórios que planejamos
$ mkdir -p ansible dotfiles packer scripts terraform
Informação: Os arquivos de configuração serão criados conforme avançamos na série. Por enquanto, estamos apenas criando a estrutura.
.gitignore inteligenteO .gitignore é crucial para evitar que segredos, logs e arquivos de cache sejam enviados para o repositório. Isso é uma questão de segurança crítica.
# Crie o arquivo .gitignore com conteúdo seguro
$ cat << 'EOF' > .gitignore
# ============================================
# Arquivos de Sistema e Cache
# ============================================
.DS_Store
.AppleDouble
.LSOverride
*.swp
*.swo
*~
.vscode/
.idea/
# ============================================
# Logs e Arquivos de Build
# ============================================
*.log
logs/
build/
dist/
*.egg-info/
# ============================================
# SEGREDOS E CREDENCIAIS (MUITO IMPORTANTE!)
# ============================================
*.key
*.pem
*.secret
*.p12
*.pfx
/secrets/
credentials.json
.env
.env.local
.env.*.local
aws_credentials
.aws/credentials
.ssh/
# ============================================
# Arquivos de Cache do Terraform
# ============================================
.terraform/
*.tfstate
*.tfstate.backup
crash.log
crash.*.log
override.tf
override.tf.json
*_override.tf
*_override.tf.json
.tfvars
.tfvars.json
.terraform.lock.hcl
# ============================================
# Arquivos de Cache do Ansible
# ============================================
*.retry
.ansible/
# ============================================
# Arquivos de Cache do Packer
# ============================================
manifest.json
packer-manifest.json
# ============================================
# Arquivos Temporários
# ============================================
*.tmp
*.temp
tmp/
temp/
EOF
Atenção: Nunca versione chaves de API, senhas, certificados ou qualquer tipo de credencial. O
.gitignoreé sua primeira linha de defesa contra vazamentos de segurança. Se você acidentalmente commitar um segredo, usegit rm --cachedegit filter-branchpara removê-lo do histórico.
Finalmente, vamos salvar nosso progresso e enviá-lo para o repositório remoto.
# Adicione todos os arquivos criados ao staging area do Git
$ git add .
# Verifique o que será commitado
$ git status
# Você deve ver algo como:
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: .gitignore
# Faça o primeiro commit, a "fundação" do nosso projeto
$ git commit -m "Initial commit: project structure and gitignore"
# Você deve ver algo como:
# [master (root-commit) abc1234] Initial commit: project structure and gitignore
# 1 file changed, 50 insertions(+)
# create mode 100644 .gitignore
Agora, conecte seu repositório local ao projeto no provedor Git:
Para GitHub:
# Substitua USERNAME e REPO_NAME pelos seus valores
$ git remote add origin git@github.com:USERNAME/workspace-as-code.git
# Ou use HTTPS se preferir:
$ git remote add origin https://github.com/USERNAME/workspace-as-code.git
Para GitLab:
# Substitua USERNAME pelos seus valores
$ git remote add origin git@gitlab.com:USERNAME/workspace-as-code.git
# Ou use HTTPS se preferir:
$ git remote add origin https://gitlab.com/USERNAME/workspace-as-code.git
Para Gitea auto-hospedado:
# Substitua DOMAIN, USERNAME e REPO_NAME pelos seus valores
$ git remote add origin git@seu-gitea.com:USERNAME/workspace-as-code.git
Depois, configure a branch principal e envie:
# Renomeie a branch principal para 'main' (prática moderna)
$ git branch -M main
# Envie suas alterações para o provedor Git
$ git push -u origin main
# Você deve ver algo como:
# Enumerating objects: 3, done.
# Counting objects: 100% (3/3), done.
# Writing objects: 100% (3/3), 200 bytes | 200.00 KiB/s, done.
# Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
# To github.com:USERNAME/workspace-as-code.git
# * [new branch] main -> main
# Branch 'main' set up to track remote branch 'main' from 'origin'.
Informação: Este tutorial usa SSH para clonar. Se você preferir HTTPS, use as URLs HTTPS acima. SSH é recomendado porque não requer digitar senha a cada push. Para configurar SSH, veja este guia do GitHub ou este guia do GitLab.
Se você encontrar problemas durante a configuração, aqui estão as soluções para os erros mais comuns:
Causa: Outro processo está usando o apt (gerenciador de pacotes).
Solução:
# Aguarde alguns minutos e tente novamente
$ sudo lsof /var/lib/apt/lists/lock
# Se necessário, force a limpeza (use com cuidado!)
$ sudo rm /var/lib/apt/lists/lock
$ sudo apt update
Causa: O pacote não existe nos repositórios padrão.
Solução:
# Atualize os repositórios
$ sudo apt update
# Verifique se o pacote existe
$ apt search [nome-do-pacote]
# Se não encontrar, pode estar em repositórios PPA ou ser instalado via Snap
$ sudo snap install [nome-do-pacote]
Causa: Você não está no diretório correto.
Solução:
# Certifique-se de estar no diretório workspace-as-code
$ cd ~/workspace-as-code
$ pwd # Deve mostrar /home/seu-usuario/workspace-as-code
# Verifique se o repositório foi inicializado
$ git status
Causa: A URL remota está incorreta ou não foi configurada.
Solução:
# Verifique a URL remota
$ git remote -v
# Se estiver vazia, adicione novamente
$ git remote add origin git@github.com:seu-usuario/workspace-as-code.git
# Se precisar corrigir uma URL existente, use:
$ git remote set-url origin git@github.com:seu-usuario/workspace-as-code.git
# Verifique novamente
$ git remote -v
Causa: Suas chaves SSH não estão configuradas corretamente.
Solução:
# Verifique se sua chave SSH existe
$ ls -la ~/.ssh/id_rsa
# Se não existir, crie uma nova
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# Adicione a chave ao ssh-agent
$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/id_rsa
# Copie a chave pública para sua conta no GitHub/GitLab
$ cat ~/.ssh/id_rsa.pub
# Cole o conteúdo nas configurações de SSH do seu provedor Git
Parabéns! Você concluiu a primeira e mais crucial etapa desta jornada. Seu sistema está atualizado, equipado com ferramentas essenciais, e, o mais importante, seu ambiente de trabalho agora é um projeto versionado.
✓ Sistema Ubuntu 24.04 atualizado e seguro
✓ Ferramentas CLI modernas instaladas e prontas
✓ Repositório Git criado e versionado
✓ Estrutura de projeto organizada e profissional
✓ Proteção contra vazamento de credenciais com .gitignore
✓ Validação de configuração com script automatizado
Antes de prosseguir para a Parte 2, faça o seguinte:
Explore as ferramentas instaladas:
$ fzf --version
$ ripgrep --version
$ eza --version
$ bat --version
Verifique seu repositório:
$ cd ~/workspace-as-code
$ git log --oneline
$ git remote -v
$ git status
Crie um README inicial (opcional, mas recomendado):
$ cat > README.md << EOF
# Workspace as Code
Minha estação de trabalho completamente automatizada e versionada.
## Estrutura
- **dotfiles**: Configurações de shell e editor
- **scripts**: Automações e utilitários
- **terraform**: Infraestrutura como código
- **packer**: Templates de imagens
- **ansible**: Configuração de máquinas
## Como Usar
1. Clone este repositório
2. Execute os scripts de setup
3. Customize conforme necessário
## Série Completa
Esta é a Parte 1 de uma série de 15 tutoriais sobre Workspace as Code.
EOF
$ git add README.md
$ git commit -m "docs: add initial README"
$ git push origin main
Commit o script de validação:
$ git add scripts/validate.sh
$ git commit -m "chore: add validation script"
$ git push origin main
Com a fundação estabelecida, estamos prontos para começar a personalizar nosso ambiente de linha de comando com aliases, funções e otimizações do Bash.
Fim da Parte 1
Próxima: Customizando o Bash com Aliases e Funções