Skip to content

Cardosofiles/linux-terminal-script

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 

Repository files navigation

🚀 Sistema de Instalação Automatizada - WSL 2 + Ubuntu

Instalação idempotente, com rollback automático e snapshots para ambiente Full Stack

Version Status Ambiente de Desenvolvimento Idempotente Rollback WSL Ubuntu Node.js Java PHP .NET Docker Zsh

My Skills

Sistema enterprise-grade com instalação modular, snapshots WSL, rollback completo e logging estruturado. Execute quantas vezes quiser - 100% idempotente e seguro.


📋 Índice


✨ Features

🔧 Sistema Core

  • 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

🖥️ Terminal & Shell

  • 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

💻 Linguagens & Runtimes

  • 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)

🐳 DevOps & Tools

  • Docker - Integração WSL + Docker Desktop
  • Git - Configuração otimizada
  • GitHub CLI - Ferramenta oficial do GitHub
  • Ferramentas Modernas - bat, fd, ripgrep, exa, jq, httpie

Pré-requisitos

Hardware Recomendado

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

Software Necessário

No Windows

  • Windows 10/11 (Build 19041 ou superior)
  • WSL 2 instalado e configurado
  • Windows Terminal (recomendado)
  • Nerd Font instalada (MesloLGS NF ou JetBrainsMono)

Verificação Rápida

# No PowerShell (Windows)
# Verificar versão WSL
wsl --version

# Listar distribuições
wsl -l -v

# Versão do Windows
winver

Instalar WSL 2 (Se necessário)

# PowerShell como Administrador
wsl --install -d Ubuntu

# Reiniciar o computador
# Após reiniciar, configurar usuário no Ubuntu

🚀 Quick Start

📝 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.

1. Clone o Repositório

mkdir -p ~/bin
cd ~/bin
git clone https://github.com/Cardosofiles/linux-terminal-script.git
cd linux-terminal-script

2. Dar Permissões de Execução

chmod +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 {} \;

2.1 Adicionar ao PATH

echo 'export PATH="$HOME/bin/linux-terminal-settings/src:$PATH"' >> ~/.zshrc
source ~/.zshrc

3. Executar Instalação

# Instalação completa (recomendado)
./src/install.sh --full

# OU instalação mínima
./src/install.sh --minimal

# OU modo interativo
./src/install.sh --components

4. Recarregar Shell

exec zsh
source ~/.zshrc

📦 Instalação Detalhada

Passo 1: Preparação

# Acessar Ubuntu no WSL
wsl -d Ubuntu

# Atualizar sistema (opcional)
sudo apt update && sudo apt upgrade -y

# Navegar para diretório home
cd ~

Passo 2: Clone e Verificação

# Clonar repositório
git clone https://github.com/Cardosofiles/linux-terminal-settings.git
cd linux-terminal-settings

# Verificar estrutura
tree -L 2 src/

Passo 3: Dar Permissões

# Permissões recursivas
find src/ -type f -name "*.sh" -exec chmod +x {} \;

# Verificar
ls -lah src/install.sh

Passo 4: Criar Snapshot Pré-Instalação

# Backup antes de instalar
./src/snapshots/create-snapshot.sh

Passo 5: Executar Instalação

# Instalação full
./src/install.sh --full

# Tempo estimado: 15-30 minutos

Passo 6: Pós-Instalação

# Recarregar shell
exec zsh

# Verificar instalação
./src/install.sh --list

# Testar componentes
node -v
java -version
php -v
dotnet --version
docker --version

🎨 Modos de Instalação

Modo Full (--full)

./src/install.sh --full

Instala todos os 11 componentes: Sistema base, Zsh, Powerlevel10k, Plugins, FZF, Node.js, Java, PHP, .NET, Docker, Extras

Modo Minimal (--minimal)

./src/install.sh --minimal

Instala essencial: Sistema base, Zsh, Oh My Zsh, Powerlevel10k, Plugins, FZF

Modo Interativo (--components)

./src/install.sh --components

Escolher componentes manualmente com menu interativo

Modo Sem Snapshot (--skip-snapshot)

./src/install.sh --full --skip-snapshot

Pula criação de snapshot - mais rápido mas sem backup completo

Modo Rollback (--rollback)

./src/install.sh --rollback

Menu interativo para reverter instalações - total ou parcial

Modo Listagem (--list)

./src/install.sh --list

Lista componentes instalados com versões


📦 Componentes

01 - Sistema Base

  • Pacotes essenciais, Python 3, Git
  • Locale (pt_BR.UTF-8), Timezone, systemd
  • Otimizações APT
./src/modules/01-system.sh

02 - Zsh + Oh My Zsh

  • Zsh shell, Oh My Zsh framework
  • .zshrc base configurado
./src/modules/02-zsh.sh

03 - Powerlevel10k

  • Tema Powerlevel10k, instant prompt
  • Requer Nerd Font instalada no Windows
./src/modules/03-powerlevel10k.sh

Nerd Fonts recomendadas:

04 - Plugins Zsh

  • zsh-autosuggestions, syntax-highlighting, autocomplete
  • autojump (navegação rápida)
./src/modules/04-plugins.sh

05 - FZF (Fuzzy Finder)

  • Busca fuzzy interativa
  • Atalhos: CTRL+T (arquivos), CTRL+R (histórico), ALT+C (diretórios)
./src/modules/05-fzf.sh

06 - Node.js + pnpm

  • 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

07 - Java + Maven + Gradle

  • 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

08 - PHP + Composer

  • PHP 8.3 CLI com extensões
  • Composer, PHPUnit, PHP CS Fixer
./src/modules/08-php.sh

# Verificar extensões
php -m

09 - .NET SDK

  • .NET SDK 8.0, Entity Framework
  • dotnet-format, Code Generator
./src/modules/09-dotnet.sh

# Criar projeto
dotnet new console -n MeuApp
dotnet run

10 - Docker

  • Docker Desktop integration ou CLI
  • docker-compose, aliases úteis
./src/modules/10-docker.sh

# Testar
docker run hello-world

11 - Ferramentas Extras

  • bat, fd, ripgrep, tree, neofetch, jq, httpie
  • exa, GitHub CLI
./src/modules/11-extras.sh

📸 Sistema de Snapshots

Criar Snapshot

./src/snapshots/create-snapshot.sh

# Onde salva: C:\WSL-Snapshots\
# Nome: Ubuntu-snapshot-YYYYMMDD-HHMMSS.tar

Listar Snapshots

./src/snapshots/list-snapshots.sh

Restaurar Snapshot

./src/snapshots/restore-snapshot.sh

# Escolher snapshot → Nome da nova distribuição
# Usar: wsl -d Ubuntu-Restored

Comandos WSL (PowerShell)

# 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

🔄 Sistema de Rollback

Rollback Completo

./src/install.sh --rollback

# Menu interativo → Opção 1

Remove todos os componentes instalados

Rollback Parcial (Componente Específico)

./src/install.sh --rollback

# Menu interativo → Opção 2 → Digite nome do componente

Rollback Manual

source src/lib/rollback.sh

# Listar componentes
list_installed_components

# Rollback específico
rollback_component "nodejs"

# Restaurar backups
restore_backups

⚙️ Personalização

Arquivo de Configuração

nano 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

Templates de Configuração

# .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

Aplicar .wslconfig no Windows

# Editar
notepad $env:USERPROFILE\.wslconfig

# Adicionar:
[wsl2]
memory=8GB
processors=4
swap=2GB
localhostForwarding=true

# Reiniciar
wsl --shutdown

🛠️ Comandos Úteis

Gerenciamento

./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

Snapshots

./src/snapshots/create-snapshot.sh         # Criar snapshot
./src/snapshots/list-snapshots.sh          # Listar
./src/snapshots/restore-snapshot.sh        # Restaurar

Limpeza

sudo 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

Atualização

# 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 -y

🚨 Troubleshooting

Script sem permissão

Erro: -bash: ./src/install.sh: Permission denied

Solução:

chmod +x src/install.sh
# OU
bash src/install.sh --full

Powerlevel10k sem ícones

Sintoma: Caracteres quebrados, quadrados ou �

Solução:

  1. Download Nerd Font: https://www.nerdfonts.com/font-downloads
  2. Instalar MesloLGS NF no Windows
  3. Windows Terminal → Settings → Ubuntu → Appearance → Font face
  4. Selecionar MesloLGS NF
  5. Reconfigurar: p10k configure

Docker não funciona

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-world

fnm: command not found

Solução:

# Verificar .zshrc
grep "fnm env" ~/.zshrc

# Se não estiver, adicionar
echo 'eval "$(fnm env --use-on-cd)"' >> ~/.zshrc

# Recarregar
exec zsh

SDKMAN não encontrado

Solução:

# Reinstalar
./src/modules/07-java.sh

# Carregar no shell
source ~/.sdkman/bin/sdkman-init.sh

# Verificar
sdk version

Instalação falha no meio

Soluçã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 --full

WSL muito lento

Soluções:

  1. Mover projetos para filesystem Linux (~/projetos, não /mnt/c/)
  2. Configurar .wslconfig (memory, processors)
  3. Excluir WSL do antivírus
  4. Usar fd em vez de find

"System has not been booted with systemd"

Solução:

sudo nano /etc/wsl.conf

# Adicionar:
[boot]
systemd=true

# Salvar (Ctrl+X, Y, Enter)

wsl --shutdown

❓ FAQ

Posso executar múltiplas vezes?

Sim! Sistema é 100% idempotente - componentes já instalados serão pulados.

Como atualizar ferramentas?

fnm install --lts             # Node.js
sdk upgrade java              # Java
sudo apt update && apt upgrade # Sistema geral
composer self-update           # Composer

Posso instalar apenas alguns componentes?

./src/install.sh --components
# OU
COMPONENTS="nodejs java docker" ./src/install.sh

Como adicionar minha ferramenta?

  1. Criar módulo em src/modules/12-minha-ferramenta.sh
  2. Seguir template dos módulos existentes
  3. Adicionar no array de componentes do install.sh

Preciso de Docker Desktop?

Não obrigatório, mas recomendado - melhor integração e performance. Alternativa: instalar só Docker CLI.

Como funciona o rollback?

Durante instalação, ações são registradas. Rollback executa comandos de remoção em ordem reversa e restaura backups.

Snapshots ocupam muito espaço?

Sim, 2-5 GB por snapshot. Recomendação: Limpe antes de criar, mantenha apenas importantes, delete antigos regularmente.

Posso usar em produção?

Sistema é para desenvolvimento local, não servidores. Para produção: use Ansible, Docker, Terraform, ou CI/CD específicos.

Preciso de Nerd Font?

Sim, se usar Powerlevel10k. Alternativa: Use tema Starship (mais simples).


🏗️ Arquitetura

Estrutura de Diretórios

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

Princípios de Design

  • 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

🤝 Contribuindo

Contribuições bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie branch para sua feature (git checkout -b feature/MinhaFeature)
  3. Commit mudanças (git commit -m 'Adiciona MinhaFeature')
  4. Push para a branch (git push origin feature/MinhaFeature)
  5. 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

📄 Licença

MIT License - veja LICENSE para detalhes


Desenvolvido com ❤️ para a comunidade WSL

Para dúvidas, abra uma issue no GitHub ou entre em contato!

About

Este repositório reúne um script completo para instalação, configuração de um ambiente de desenvolvimento moderno no Linux. Ele automatiza a preparação de linguagens, ferramentas e dependências essenciais, garantindo rapidez, consistência e alta produtividade — tudo de forma idempotente.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages