Skip to main content

Script pós instalação

Ajustando o debian minimalista

vim debian_postinstall.sh

Cole o script abaixo e salve o arquivo

#!/bin/bash

# ==============================================================================
# Script de Pós-Instalação para Servidores Debian-based
#
# Autor: Krisofferson Marini
# Versão: 3.3
# ==============================================================================

set -eu
set -o pipefail

# --- Verificação de Privilégios ---
if [[ "$EUID" -ne 0 ]]; then
    echo "ERRO: Este script precisa de privilégios de root para ser executado." >&2
    exit 1
fi

if [[ -z "$SUDO_USER" ]]; then
    echo "AVISO: Executando como root diretamente. As configurações para o usuário comum serão ignoradas."
    readonly CURRENT_USER="root"
    readonly CONFIGURE_SUDO_USER=false
else
    readonly CURRENT_USER=$SUDO_USER
    readonly CONFIGURE_SUDO_USER=true
fi

# --- Variáveis Globais ---
readonly HOME_USER=$(getent passwd "$CURRENT_USER" | cut -d: -f6)
readonly PACKAGES_TO_INSTALL=(
    firmware-linux firmware-linux-free firmware-linux-nonfree
    vim fzf man-db atop gnupg2 sysstat lsof hwinfo chrony ncdu
    btop htop iotop wget nmap tcpdump whois bind9-dnsutils dnstop
    iftop locate traceroute bmon netdiscover fastfetch tmux grc
    bat entr eza exuberant-ctags silversearcher-ag fd-find ripgrep
    fonts-cascadia-code fonts-firacode
)

# --- Funções Utilitárias ---
log_step() { echo -e "\n--- $1 ---"; }

append_if_not_exists() {
    local marker="$1"
    local content="$2"
    local file="$3"
    local owner="${4:-root:root}"
    echo -n "Configurando $file... "
    mkdir -p "$(dirname "$file")"
    if grep -qF "$marker" "$file"; then
        echo "ℹ Já configurado. Ignorando."
        return
    fi
    echo -e "\n$marker\n$content" >> "$file"
    chown "$owner" "$file"
    echo "✔ OK"
}

# --- Funções de Configuração ---
# (As funções configure_apt_sources, install_packages, etc. permanecem as mesmas)
configure_apt_sources() { log_step "Ajustando /etc/apt/sources.list"; if grep -qE "^\s*deb .* main contrib non-free" /etc/apt/sources.list; then echo "ℹ Repositórios já configurados."; return; fi; sed -i -E 's/^(deb .* main)( non-free-firmware)?$/\1 contrib non-free\2/' /etc/apt/sources.list; echo "✔ Repositórios 'contrib' e 'non-free' adicionados."; echo "Atualizando lista de pacotes..."; apt update; }
install_packages() { log_step "Instalando pacotes essenciais"; DEBIAN_FRONTEND=noninteractive apt install -y -q "${PACKAGES_TO_INSTALL[@]}"; if command -v batcat &> /dev/null && ! command -v bat &> /dev/null; then ln -sf /usr/bin/batcat /usr/local/bin/bat; echo "✔ Link simbólico criado para batcat."; fi; echo "✔ Instalação de pacotes concluída."; }
add_user_to_journal_group() { log_step "Adicionando '$CURRENT_USER' ao grupo 'systemd-journal'"; if groups "$CURRENT_USER" | grep -q '\bsystemd-journal\b'; then echo "ℹ Usuário já pertence ao grupo."; else usermod -aG adm,systemd-journal "$CURRENT_USER"; echo "✔ Usuário adicionado aos grupos 'adm' e 'systemd-journal'."; fi; }
configure_system_vim() { log_step "Configurando Vim globalmente"; sed -i -e 's/"syntax on/syntax on/' -e 's/"set background=dark/set background=dark/' /etc/vim/vimrc; echo "✔ Configurações globais do Vim aplicadas."; }


# --- Conteúdo de Configuração (Heredocs) ---
get_vimrc_content() { cat <<'EOF'
syntax on
set encoding=utf8 showmatch ts=4 sts=4 sw=4 autoindent smartindent smarttab expandtab
set number relativenumber cursorline history=5000 foldmethod=syntax foldlevel=99
nnoremap <space> za
EOF
}

## MUDANÇA APLICADA: A lógica de configuração do EZA e os aliases foram combinados
## para garantir que a flag --icons seja aplicada diretamente.
get_eza_and_aliases_config() {
cat << 'EOF'
# =============================================================================
# Configuração Robusta para EZA e Aliases
# =============================================================================

# --- Configuração do EZA ---
# Define opções base que serão usadas pela maioria dos aliases.
export EZA_BASE_OPTS="--group-directories-first --header --time-style=relative"

# Define dinamicamente a flag de ícones para evitar problemas de TTY.
if [ -n "$TMUX" ]; then
  ICON_STYLE="--icons=always"
else
  ICON_STYLE="--icons=always" # Simplificado para 'always'. O eza lida bem com pipes.
fi

# --- Aliases para Eza (ls moderno) ---
# A flag de ícone ($ICON_STYLE) e as opções base ($EZA_BASE_OPTS) são adicionadas diretamente.
alias ls="eza $ICON_STYLE $EZA_BASE_OPTS"
alias ll="eza -lh --git $ICON_STYLE $EZA_BASE_OPTS"
alias la="eza -a $ICON_STYLE $EZA_BASE_OPTS"
alias lla="eza -lha --git $ICON_STYLE $EZA_BASE_OPTS"
alias lt="eza -l --sort=modified --reverse $ICON_STYLE $EZA_BASE_OPTS"
alias lS="eza -lS --reverse $ICON_STYLE $EZA_BASE_OPTS"
alias ltree="eza -T $ICON_STYLE $EZA_BASE_OPTS"
alias ltree3="eza -T --level=3 $ICON_STYLE $EZA_BASE_OPTS"
alias lsd="eza -lD $ICON_STYLE $EZA_BASE_OPTS"
alias lsr="eza -R $ICON_STYLE $EZA_BASE_OPTS"

# Aliases com filtros não precisam de todas as opções base (ex: --header).
readonly EZA_IGNORE_PATTERN="node_modules|dist|build|target|__pycache__|*.log|*.lock"
alias lsi="eza $ICON_STYLE -I '$EZA_IGNORE_PATTERN'"
alias lli="eza -lh --git $ICON_STYLE -I '$EZA_IGNORE_PATTERN'"
alias lsg='eza -lh --git-status=modified $ICON_STYLE'

# --- Outros aliases ---
alias grep='grep --color=auto'
alias diff='diff --color=auto'
alias ip='ip -c'
alias cat='batcat'
alias bat='batcat'
alias fd='fdfind'

# --- Aliases com GRC (Generic Colouriser) ---
alias journalctl='grc journalctl'
alias tail='grc tail'
alias ping='grc ping'
alias ps='grc ps'
alias dig='grc dig'
alias nmap='grc nmap'
alias ss='grc ss'
EOF
}

# --- Função Principal ---
main() {
    echo "Iniciando configuração do sistema Debian..."
    configure_apt_sources
    install_packages
    configure_system_vim

    log_step "Configurando ambiente do usuário root"
    echo "$(get_vimrc_content)" > /root/.vimrc
    echo "✔ /root/.vimrc criado/atualizado."

    local root_ps1
    root_ps1=$(cat <<'EOF'
readonly RED='\[\e[1;31m\]'; readonly NC='\[\e[0m\]'
PS1="${RED}┌─[${RED}\u${RED}@${RED}\h${RED}]─[${NC}\w${RED}]\n${RED}└───> # ${NC}"
EOF
)
    # Combina aliases, config do fzf e o prompt
    local root_bash_content
    root_bash_content="$(get_eza_and_aliases_config)\nsource /usr/share/doc/fzf/examples/key-bindings.bash\n$root_ps1"
    append_if_not_exists "# CONFIGURAÇÕES DO SCRIPT DE SETUP" "$root_bash_content" "/root/.bashrc"

    if [ "$CONFIGURE_SUDO_USER" = true ]; then
        log_step "Configurando ambiente do usuário '$CURRENT_USER'"
        add_user_to_journal_group
        echo "$(get_vimrc_content)" > "$HOME_USER/.vimrc"
        chown "$CURRENT_USER:$CURRENT_USER" "$HOME_USER/.vimrc"
        echo "✔ $HOME_USER/.vimrc criado/atualizado."

        local user_bashrc_content
        user_bashrc_content="$(get_eza_and_aliases_config)\nsource /usr/share/doc/fzf/examples/key-bindings.bash"
        append_if_not_exists "# CONFIGURAÇÕES DO SCRIPT DE SETUP" "$user_bashrc_content" "$HOME_USER/.bashrc" "$CURRENT_USER:$CURRENT_USER"

        local user_profile_content
        user_profile_content=$(cat <<'EOF'
if [ -n "$BASH_VERSION" ] && [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc"; fi
if command -v fastfetch &>/dev/null; then fastfetch; fi
EOF
)
        append_if_not_exists "# CONFIGURAÇÕES DE PERFIL" "$user_profile_content" "$HOME_USER/.bash_profile" "$CURRENT_USER:$CURRENT_USER"
    fi

    echo -e "\n--------------------------------------------------------"
    echo "✔ Script finalizado com sucesso!"
    echo "Para que as alterações entrem em vigor:"
    echo "1. Remova manualmente os arquivos ~/.bashrc e ~/.bash_profile antigos (se existirem) e faça logout/login."
    echo "2. Para o usuário root, remova /root/.bashrc e faça login novamente."
    echo "--------------------------------------------------------"
}

main

Agora dê permissão de execução e rode o script

chmod +x debian_postinstall.sh
./debian_postinstall.sh

fonte: https://github.com/ksmarini/debian