Instalação idempotente, com rollback automático e snapshots para ambiente Full Stack
Sistema enterprise-grade com instalação modular, snapshots WSL, rollback completo e logging estruturado. Execute quantas vezes quiser - 100% idempotente e seguro.
- Features
- Pré-requisitos
- Quick Start
- Instalação Detalhada
- Modos de Instalação
- Componentes
- Sistema de Snapshots
- Sistema de Rollback
- Personalização
- Comandos Úteis
- Troubleshooting
- FAQ
- Arquitetura
- Contribuindo
- ✅ 100% Idempotente - Execute múltiplas vezes sem efeitos colaterais
- ✅ Rollback Automático - Desfaça instalações com um comando
- ✅ Snapshots WSL - Backup completo da distribuição
- ✅ Logging Estruturado - Rastreamento completo de todas as operações
- ✅ Estado Persistente - Sabe exatamente o que está instalado
- ✅ Backup Automático - Arquivos modificados são salvos antes de alterações
🎉 Versão 1.0.1 - Bug crítico de variável readonly corrigido! Ver detalhes
- ✅ Zsh - Shell moderno e poderoso
- ✅ Oh My Zsh - Framework para gerenciar configurações Zsh
- ✅ Powerlevel10k - Tema rápido e bonito
- ✅ Plugins - autosuggestions, syntax-highlighting, autocomplete
- ✅ FZF - Busca fuzzy interativa
- ✅ Node.js - Via fnm (Fast Node Manager) + pnpm
- ✅ Java - Via SDKMAN! (JDK + Maven + Gradle)
- ✅ PHP 8.3 - Com Composer e extensões
- ✅ .NET 8.0 - SDK completo + ferramentas
- ✅ Python - (opcional via pyenv)
- ✅ Docker - Integração WSL + Docker Desktop
- ✅ Git - Configuração otimizada
- ✅ GitHub CLI - Ferramenta oficial do GitHub
- ✅ Ferramentas Modernas - bat, fd, ripgrep, exa, jq, httpie
| Componente | Mínimo | Recomendado | Ideal |
|---|---|---|---|
| RAM | 8 GB | 16 GB | 32 GB+ |
| CPU | 4 cores | 6 cores | 8+ cores |
| Disco | 50 GB livre | 100 GB livre | 256 GB+ SSD |
| Internet | 10 Mbps | 50 Mbps | 100+ Mbps |
- ✅ Windows 10/11 (Build 19041 ou superior)
- ✅ WSL 2 instalado e configurado
- ✅ Windows Terminal (recomendado)
- ✅ Nerd Font instalada (MesloLGS NF ou JetBrainsMono)
# No PowerShell (Windows)
# Verificar versão WSL
wsl --version
# Listar distribuições
wsl -l -v
# Versão do Windows
winver# PowerShell como Administrador
wsl --install -d Ubuntu
# Reiniciar o computador
# Após reiniciar, configurar usuário no Ubuntu📝 Resumo do fluxo para executar localmente É recomendável criar um diretório próprio para ferramentas dentro do seu home. Assim você mantém as ferramentas e scripts de automação organizados e prontos para uso. Siga o roteiro para garantir uma instalação limpa e performática.
mkdir -p ~/bin
cd ~/bin
git clone https://github.com/Cardosofiles/linux-terminal-script.git
cd linux-terminal-scriptchmod +x src/install.sh
chmod +x src/lib/*.sh
chmod +x src/modules/*.sh
chmod +x src/snapshots/*.sh
find src/ -type f -name "*.sh" -exec chmod +x {} \;echo 'export PATH="$HOME/bin/linux-terminal-settings/src:$PATH"' >> ~/.zshrc
source ~/.zshrc
# Instalação completa (recomendado)
./src/install.sh --full
# OU instalação mínima
./src/install.sh --minimal
# OU modo interativo
./src/install.sh --componentsexec zsh
source ~/.zshrc# Acessar Ubuntu no WSL
wsl -d Ubuntu
# Atualizar sistema (opcional)
sudo apt update && sudo apt upgrade -y
# Navegar para diretório home
cd ~# Clonar repositório
git clone https://github.com/Cardosofiles/linux-terminal-settings.git
cd linux-terminal-settings
# Verificar estrutura
tree -L 2 src/# Permissões recursivas
find src/ -type f -name "*.sh" -exec chmod +x {} \;
# Verificar
ls -lah src/install.sh# Backup antes de instalar
./src/snapshots/create-snapshot.sh# Instalação full
./src/install.sh --full
# Tempo estimado: 15-30 minutos# Recarregar shell
exec zsh
# Verificar instalação
./src/install.sh --list
# Testar componentes
node -v
java -version
php -v
dotnet --version
docker --version./src/install.sh --fullInstala todos os 11 componentes: Sistema base, Zsh, Powerlevel10k, Plugins, FZF, Node.js, Java, PHP, .NET, Docker, Extras
./src/install.sh --minimalInstala essencial: Sistema base, Zsh, Oh My Zsh, Powerlevel10k, Plugins, FZF
./src/install.sh --componentsEscolher componentes manualmente com menu interativo
./src/install.sh --full --skip-snapshotPula criação de snapshot - mais rápido mas sem backup completo
./src/install.sh --rollbackMenu interativo para reverter instalações - total ou parcial
./src/install.sh --listLista componentes instalados com versões
- Pacotes essenciais, Python 3, Git
- Locale (pt_BR.UTF-8), Timezone, systemd
- Otimizações APT
./src/modules/01-system.sh- Zsh shell, Oh My Zsh framework
- .zshrc base configurado
./src/modules/02-zsh.sh- Tema Powerlevel10k, instant prompt
- Requer Nerd Font instalada no Windows
./src/modules/03-powerlevel10k.shNerd Fonts recomendadas:
- MesloLGS NF (recomendada)
- JetBrainsMono Nerd Font
- Download: https://www.nerdfonts.com/font-downloads
- zsh-autosuggestions, syntax-highlighting, autocomplete
- autojump (navegação rápida)
./src/modules/04-plugins.sh- Busca fuzzy interativa
- Atalhos: CTRL+T (arquivos), CTRL+R (histórico), ALT+C (diretórios)
./src/modules/05-fzf.sh- fnm (Fast Node Manager), Node.js LTS
- pnpm via Corepack
./src/modules/06-nodejs.sh
# Gerenciar versões
fnm list-remote
fnm install 20
fnm default 20- SDKMAN!, Java JDK (Temurin 21)
- Apache Maven, Gradle
./src/modules/07-java.sh
# Gerenciar versões
sdk list java
sdk install java 17.0.9-tem
sdk default java 21.0.5-tem- PHP 8.3 CLI com extensões
- Composer, PHPUnit, PHP CS Fixer
./src/modules/08-php.sh
# Verificar extensões
php -m- .NET SDK 8.0, Entity Framework
- dotnet-format, Code Generator
./src/modules/09-dotnet.sh
# Criar projeto
dotnet new console -n MeuApp
dotnet run- Docker Desktop integration ou CLI
- docker-compose, aliases úteis
./src/modules/10-docker.sh
# Testar
docker run hello-world- bat, fd, ripgrep, tree, neofetch, jq, httpie
- exa, GitHub CLI
./src/modules/11-extras.sh./src/snapshots/create-snapshot.sh
# Onde salva: C:\WSL-Snapshots\
# Nome: Ubuntu-snapshot-YYYYMMDD-HHMMSS.tar./src/snapshots/list-snapshots.sh./src/snapshots/restore-snapshot.sh
# Escolher snapshot → Nome da nova distribuição
# Usar: wsl -d Ubuntu-Restored# Exportar
wsl --export Ubuntu C:\Backups\ubuntu.tar
# Importar
wsl --import Ubuntu-New C:\WSL\Ubuntu-New C:\Backups\ubuntu.tar
# Listar
wsl -l -v
# Definir padrão
wsl --set-default Ubuntu-New
# Remover
wsl --unregister Ubuntu-Old./src/install.sh --rollback
# Menu interativo → Opção 1Remove todos os componentes instalados
./src/install.sh --rollback
# Menu interativo → Opção 2 → Digite nome do componentesource src/lib/rollback.sh
# Listar componentes
list_installed_components
# Rollback específico
rollback_component "nodejs"
# Restaurar backups
restore_backupsnano src/config/install.conf
# Opções:
INSTALL_MODE=interactive # full | minimal | interactive
AUTO_SNAPSHOT=true # Criar snapshot automaticamente
NODE_VERSION=lts-latest # Versão do Node
JAVA_VERSION=21.0.5-tem # Versão do Java
PHP_VERSION=8.3 # Versão do PHP
DOTNET_VERSION=8.0 # Versão do .NET
ZSH_THEME=powerlevel10k # Tema (ou starship)
GIT_USER_NAME="Seu Nome" # Git config
GIT_USER_EMAIL="seu@email.com" # Git config# .zshrc template
nano src/config/templates/.zshrc.template
# Git config template
nano src/config/templates/gitconfig.template
# WSL config template
nano src/config/templates/wslconfig.template# Editar
notepad $env:USERPROFILE\.wslconfig
# Adicionar:
[wsl2]
memory=8GB
processors=4
swap=2GB
localhostForwarding=true
# Reiniciar
wsl --shutdown./src/install.sh --list # Listar componentes
./src/modules/06-nodejs.sh # Reinstalar Node.js
tail -f ~/.wsl-setup/logs/install-*.log # Ver logs
ls -lah ~/.wsl-setup/state/ # Ver estado./src/snapshots/create-snapshot.sh # Criar snapshot
./src/snapshots/list-snapshots.sh # Listar
./src/snapshots/restore-snapshot.sh # Restaurarsudo apt autoremove -y # Remover pacotes
sudo apt autoclean # Limpar cache APT
docker system prune -af --volumes # Limpar Docker
find ~/.wsl-setup/logs -mtime +30 -delete # Limpar logs antigos# Node.js
fnm install --lts
fnm default lts-latest
# Java
sdk upgrade java
# PHP/Composer
sudo apt update && sudo apt upgrade
composer self-update
# .NET
sudo apt update && sudo apt upgrade dotnet-sdk-8.0
# Sistema
sudo apt update && sudo apt upgrade -yErro: -bash: ./src/install.sh: Permission denied
Solução:
chmod +x src/install.sh
# OU
bash src/install.sh --fullSintoma: Caracteres quebrados, quadrados ou �
Solução:
- Download Nerd Font: https://www.nerdfonts.com/font-downloads
- Instalar MesloLGS NF no Windows
- Windows Terminal → Settings → Ubuntu → Appearance → Font face
- Selecionar MesloLGS NF
- Reconfigurar:
p10k configure
Erro: Cannot connect to the Docker daemon
Soluções:
# 1. Verificar Docker Desktop (Windows)
# 2. Habilitar WSL Integration
# Docker Desktop → Settings → Resources → WSL Integration → Ubuntu
# 3. Adicionar ao grupo docker
sudo usermod -aG docker $USER
newgrp docker
# 4. Testar
docker ps
docker run hello-worldSolução:
# Verificar .zshrc
grep "fnm env" ~/.zshrc
# Se não estiver, adicionar
echo 'eval "$(fnm env --use-on-cd)"' >> ~/.zshrc
# Recarregar
exec zshSolução:
# Reinstalar
./src/modules/07-java.sh
# Carregar no shell
source ~/.sdkman/bin/sdkman-init.sh
# Verificar
sdk versionSolução:
# Ver erro
tail -n 50 ~/.wsl-setup/logs/install-*.log
# Reinstalar componente específico
./src/modules/XX-componente.sh
# OU continuar (sistema é idempotente)
./src/install.sh --fullSoluções:
- Mover projetos para filesystem Linux (~/projetos, não /mnt/c/)
- Configurar .wslconfig (memory, processors)
- Excluir WSL do antivírus
- Usar
fdem vez defind
Solução:
sudo nano /etc/wsl.conf
# Adicionar:
[boot]
systemd=true
# Salvar (Ctrl+X, Y, Enter)
wsl --shutdownSim! Sistema é 100% idempotente - componentes já instalados serão pulados.
fnm install --lts # Node.js
sdk upgrade java # Java
sudo apt update && apt upgrade # Sistema geral
composer self-update # Composer./src/install.sh --components
# OU
COMPONENTS="nodejs java docker" ./src/install.sh- Criar módulo em
src/modules/12-minha-ferramenta.sh - Seguir template dos módulos existentes
- Adicionar no array de componentes do
install.sh
Não obrigatório, mas recomendado - melhor integração e performance. Alternativa: instalar só Docker CLI.
Durante instalação, ações são registradas. Rollback executa comandos de remoção em ordem reversa e restaura backups.
Sim, 2-5 GB por snapshot. Recomendação: Limpe antes de criar, mantenha apenas importantes, delete antigos regularmente.
Sistema é para desenvolvimento local, não servidores. Para produção: use Ansible, Docker, Terraform, ou CI/CD específicos.
Sim, se usar Powerlevel10k. Alternativa: Use tema Starship (mais simples).
src/
├── install.sh # Orquestrador
├── lib/
│ ├── core.sh # Funções essenciais
│ ├── idempotent.sh # Wrappers idempotentes
│ └── rollback.sh # Reversão
├── modules/
│ ├── 01-system.sh
│ ├── 02-zsh.sh
│ ├── 03-powerlevel10k.sh
│ ├── 04-plugins.sh
│ ├── 05-fzf.sh
│ ├── 06-nodejs.sh
│ ├── 07-java.sh
│ ├── 08-php.sh
│ ├── 09-dotnet.sh
│ ├── 10-docker.sh
│ └── 11-extras.sh
├── config/
│ ├── install.conf
│ └── templates/
│ ├── .zshrc.template
│ ├── .p10k.zsh.template
│ ├── gitconfig.template
│ └── wslconfig.template
└── snapshots/
├── create-snapshot.sh
├── restore-snapshot.sh
└── list-snapshots.sh
- Idempotência: Cada módulo verifica estado antes de executar
- Modularidade: Componentes independentes, executáveis individualmente
- Observabilidade: Logs estruturados com timestamp, output colorido
- Reversibilidade: Cada ação registra como desfazer, backups automáticos
- Atomicidade: Cada módulo é unidade atômica
Contribuições bem-vindas! Por favor:
- Fork o projeto
- Crie branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Diretrizes:
- ✅ Mantenha idempotência
- ✅ Adicione logs adequados
- ✅ Documente novas features
- ✅ Teste em instalação limpa
- ✅ Siga padrão de código
MIT License - veja LICENSE para detalhes
Desenvolvido com ❤️ para a comunidade WSL
Para dúvidas, abra uma issue no GitHub ou entre em contato!