#!/bin/bash set -e # ============================================================ # Configuração inicial de VM Debian 13 # # - Configura hostname # - Configura domínio # - Recria /etc/hosts # - Detecta interfaces de rede # - Recria /etc/network/interfaces do zero # - DHCP / Estático / Não configurar por interface # - Limpa históricos # - Desliga a máquina ao final # # Compatível com: # curl -fsSL URL | bash # ============================================================ # ============================================================ # FUNÇÕES # ============================================================ read_tty() { local prompt="$1" local varname="$2" read -rp "$prompt" "$varname" < /dev/tty } valid_ipv4() { local ip="$1" local IFS=. local -a octets read -ra octets <<< "$ip" [ "${#octets[@]}" -eq 4 ] || return 1 for octet in "${octets[@]}"; do [[ "$octet" =~ ^[0-9]+$ ]] || return 1 [ "$octet" -ge 0 ] 2>/dev/null || return 1 [ "$octet" -le 255 ] 2>/dev/null || return 1 done return 0 } valid_hostname() { local value="$1" [[ "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]] } # ============================================================ # VERIFICA ROOT # ============================================================ if [ "$EUID" -ne 0 ]; then echo echo "ERRO: execute este script como root." echo exit 1 fi # ============================================================ # CABEÇALHO # ============================================================ clear 2>/dev/null || true echo echo "============================================================" echo " CONFIGURAÇÃO INICIAL - DEBIAN 13" echo "============================================================" echo # ============================================================ # HOSTNAME # ============================================================ while true; do read_tty "Novo nome da máquina: " NEW_HOSTNAME if [ -z "$NEW_HOSTNAME" ]; then echo "O nome da máquina não pode ficar vazio." continue fi if ! valid_hostname "$NEW_HOSTNAME"; then echo "Hostname inválido." continue fi break done # ============================================================ # DOMÍNIO # ============================================================ while true; do read_tty "Domínio (ex.: fatec.local): " NEW_DOMAIN if [ -z "$NEW_DOMAIN" ]; then echo "O domínio não pode ficar vazio." continue fi if ! valid_hostname "$NEW_DOMAIN"; then echo "Domínio inválido." continue fi break done FQDN="${NEW_HOSTNAME}.${NEW_DOMAIN}" # ============================================================ # CONFIRMAÇÃO # ============================================================ echo echo "------------------------------------------------------------" echo "Hostname : $NEW_HOSTNAME" echo "Domínio : $NEW_DOMAIN" echo "FQDN : $FQDN" echo "------------------------------------------------------------" echo read_tty "Continuar? [S/n]: " CONFIRM case "$CONFIRM" in n|N|nao|não|NAO|NÃO) echo echo "Operação cancelada." echo exit 0 ;; esac # ============================================================ # CONFIGURA HOSTNAME # ============================================================ echo echo "Configurando hostname..." echo "$NEW_HOSTNAME" > /etc/hostname hostnamectl set-hostname "$NEW_HOSTNAME" # ============================================================ # RECRIA /etc/hosts # ============================================================ echo "Configurando /etc/hosts..." cat > /etc/hosts < /etc/network/interfaces <<'EOF' # ============================================================ # Configuração de rede # Gerada automaticamente pelo script de configuração inicial # ============================================================ auto lo iface lo inet loopback EOF # ============================================================ # CONFIGURA CADA INTERFACE # ============================================================ for IFACE in "${INTERFACES[@]}"; do MAC="desconhecido" if [ -f "/sys/class/net/$IFACE/address" ]; then MAC=$(cat "/sys/class/net/$IFACE/address") fi echo echo "============================================================" echo " INTERFACE: $IFACE" echo " MAC: $MAC" echo "============================================================" echo echo "1) DHCP" echo "2) IP estático" echo "3) Não configurar" echo while true; do read_tty "Escolha [1/2/3]: " OPTION case "$OPTION" in # ==================================================== # DHCP # ==================================================== 1) cat >> /etc/network/interfaces <> /etc/network/interfaces <> /etc/network/interfaces fi if [ -n "$DNS" ]; then echo " dns-nameservers $DNS" >> /etc/network/interfaces fi if [ -n "$DNS_SEARCH" ]; then echo " dns-search $DNS_SEARCH" >> /etc/network/interfaces fi echo echo "$IFACE configurada com IP estático." break ;; # ==================================================== # NÃO CONFIGURAR # ==================================================== 3) echo echo "$IFACE não será configurada." break ;; # ==================================================== # INVÁLIDO # ==================================================== *) echo echo "Opção inválida. Escolha 1, 2 ou 3." ;; esac done done # ============================================================ # PERMISSÃO DO ARQUIVO # ============================================================ chmod 644 /etc/network/interfaces # ============================================================ # MOSTRA RESULTADO # ============================================================ echo echo "============================================================" echo " CONFIGURAÇÃO FINAL" echo "============================================================" echo echo "Hostname : $NEW_HOSTNAME" echo "Domínio : $NEW_DOMAIN" echo "FQDN : $FQDN" echo echo "------------------------------------------------------------" echo "/etc/network/interfaces" echo "------------------------------------------------------------" echo cat /etc/network/interfaces echo echo "------------------------------------------------------------" echo # ============================================================ # CONFIRMA FINALIZAÇÃO # ============================================================ echo echo "A configuração foi concluída." echo echo "A máquina será desligada ao final da limpeza." echo read_tty "Pressione ENTER para finalizar e desligar..." FINAL_CONFIRM # ============================================================ # LIMPEZA DE HISTÓRICO # ============================================================ echo echo "Limpando históricos..." # ============================================================ # ROOT # ============================================================ history -c 2>/dev/null || true rm -f /root/.bash_history rm -f /root/.zsh_history rm -f /root/.python_history rm -f /root/.lesshst rm -f /root/.wget-hsts # ============================================================ # USUÁRIOS NORMAIS # ============================================================ while IFS=: read -r \ USERNAME \ PASSWORD_FIELD \ USER_ID \ GROUP_ID \ GECOS \ HOME_DIR \ USER_SHELL do if [ "$USER_ID" -ge 1000 ] 2>/dev/null && [ "$USER_ID" -lt 65534 ] 2>/dev/null && [ -d "$HOME_DIR" ]; then rm -f "$HOME_DIR/.bash_history" rm -f "$HOME_DIR/.zsh_history" rm -f "$HOME_DIR/.python_history" rm -f "$HOME_DIR/.lesshst" rm -f "$HOME_DIR/.wget-hsts" fi done < /etc/passwd # ============================================================ # LIMPA HISTÓRICO DA SESSÃO ATUAL # ============================================================ history -c 2>/dev/null || true unset HISTFILE export HISTFILE=/dev/null # ============================================================ # SINCRONIZA DISCO # ============================================================ sync # ============================================================ # FINALIZAÇÃO # ============================================================ echo echo "============================================================" echo " CONFIGURAÇÃO CONCLUÍDA" echo "============================================================" echo echo "Hostname : $NEW_HOSTNAME" echo "Domínio : $NEW_DOMAIN" echo "FQDN : $FQDN" echo echo "Rede configurada em:" echo "/etc/network/interfaces" echo echo "Históricos removidos." echo echo "Desligando a máquina..." echo sleep 3 # ============================================================ # DESLIGA A VM # ============================================================ systemctl poweroff