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