From 4c891e0ff5099a4b3c9dadac81e54f66d4534901 Mon Sep 17 00:00:00 2001 From: "tiago.ferreira" Date: Tue, 15 Sep 2026 19:37:41 +0000 Subject: [PATCH] Atualizar conf-inicial --- conf-inicial | 393 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 312 insertions(+), 81 deletions(-) diff --git a/conf-inicial b/conf-inicial index de3cdec..8b19676 100644 --- a/conf-inicial +++ b/conf-inicial @@ -3,75 +3,179 @@ set -e # ============================================================ -# Preparação de VM Debian 13 +# Configuração inicial de VM Debian 13 # -# - Configura hostname -# - Configura domínio -# - Detecta interfaces diretamente do sistema -# - Recria /etc/network/interfaces do ZERO -# - Permite DHCP ou IP estático por interface -# - Limpa histórico +# Funções: +# - Altera hostname +# - Altera domínio +# - Recria /etc/hosts +# - Detecta todas as interfaces de rede +# - Recria /etc/network/interfaces do zero +# - Pergunta por interface: +# DHCP +# Estático +# Não configurar +# - Limpa históricos # - Desliga a máquina ao final +# +# Compatível com: +# curl -fsSL URL | bash # ============================================================ -# ------------------------------------------------------------ -# Verifica root -# ------------------------------------------------------------ +# ============================================================ +# 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 hostname="$1" + + [[ "$hostname" =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]$ ]] || + [[ "$hostname" =~ ^[a-zA-Z0-9]$ ]] +} + + +# ============================================================ +# ROOT +# ============================================================ if [ "$EUID" -ne 0 ]; then + echo echo "ERRO: execute este script como root." + echo exit 1 fi # ============================================================ -# HOSTNAME / DOMÍNIO +# CABEÇALHO # ============================================================ +clear 2>/dev/null || true + echo echo "============================================================" -echo " CONFIGURAÇÃO DO HOST" +echo " CONFIGURAÇÃO INICIAL - DEBIAN 13" echo "============================================================" echo + +# ============================================================ +# HOSTNAME +# ============================================================ + while true; do - read -rp "Novo nome da máquina: " NEW_HOSTNAME - if [ -n "$NEW_HOSTNAME" ]; then - break + 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 - echo "O nome da máquina não pode ficar vazio." + if ! valid_hostname "$NEW_HOSTNAME"; then + echo "Hostname inválido." + continue + fi + + break + done -while true; do - read -rp "Domínio (ex.: fatec.local): " NEW_DOMAIN +# ============================================================ +# DOMÍNIO +# ============================================================ - if [ -n "$NEW_DOMAIN" ]; then - break +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 - echo "O domínio não pode ficar vazio." + if ! valid_hostname "$NEW_DOMAIN"; then + echo "Domínio inválido." + continue + fi + + break + done FQDN="${NEW_HOSTNAME}.${NEW_DOMAIN}" -# ------------------------------------------------------------ -# Configura hostname -# ------------------------------------------------------------ +# ============================================================ +# 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." + exit 0 + ;; +esac + + +# ============================================================ +# HOSTNAME +# ============================================================ + +echo +echo "Configurando hostname..." echo "$NEW_HOSTNAME" > /etc/hostname hostnamectl set-hostname "$NEW_HOSTNAME" -# ------------------------------------------------------------ -# Recria /etc/hosts -# ------------------------------------------------------------ +# ============================================================ +# /etc/hosts +# ============================================================ + +echo "Configurando /etc/hosts..." cat > /etc/hosts </dev/null || echo "desconhecido") + MAC="desconhecido" + STATE="desconhecido" - echo " Interface: $IFACE" - echo " MAC: $MAC" + if [ -f "/sys/class/net/$IFACE/address" ]; then + MAC=$(cat "/sys/class/net/$IFACE/address") + fi + + if [ -f "/sys/class/net/$IFACE/operstate" ]; then + STATE=$(cat "/sys/class/net/$IFACE/operstate") + fi + + echo "Interface : $IFACE" + echo "MAC : $MAC" + echo "Estado : $STATE" echo + done # ============================================================ -# RECRIA /etc/network/interfaces DO ZERO +# RECRIA /etc/network/interfaces # ============================================================ -cat > /etc/network/interfaces < /etc/network/interfaces <<'EOF' # ============================================================ # Configuração de rede -# Gerada automaticamente +# Gerada automaticamente pelo script de configuração inicial # ============================================================ auto lo @@ -141,31 +258,36 @@ EOF for IFACE in "${INTERFACES[@]}"; do - MAC=$(cat "/sys/class/net/$IFACE/address" 2>/dev/null || echo "desconhecido") + MAC="desconhecido" + + if [ -f "/sys/class/net/$IFACE/address" ]; then + MAC=$(cat "/sys/class/net/$IFACE/address") + fi + echo echo "============================================================" - echo " Interface: $IFACE" + echo " INTERFACE: $IFACE" echo " MAC: $MAC" echo "============================================================" echo - echo "Como deseja configurar esta interface?" - echo - echo " 1) DHCP" - echo " 2) IP estático" - echo " 3) Não configurar" + echo "1) DHCP" + echo "2) IP estático" + echo "3) Não configurar" echo + while true; do - read -rp "Opção [1/2/3]: " OPTION + read_tty "Escolha [1/2/3]: " OPTION case "$OPTION" in + # ==================================================== + # DHCP + # ==================================================== + 1) - # ==================================================== - # DHCP - # ==================================================== cat >> /etc/network/interfaces <> /etc/network/interfaces </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 # ------------------------------------------------------------ -# Outros usuários +# Usuários normais # ------------------------------------------------------------ -while IFS=: read -r USERNAME _ UID _ _ HOME_DIR SHELL; do +while IFS=: read -r USERNAME PASSWORD UID GID GECOS HOME_DIR SHELL; do - if [ "$UID" -ge 1000 ] && [ -d "$HOME_DIR" ]; then + if [ "$UID" -ge 1000 ] && + [ "$UID" -lt 65534 ] && + [ -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 @@ -348,23 +575,22 @@ done < /etc/passwd # ------------------------------------------------------------ -# Remove histórico da sessão atual +# Evita regravar o histórico desta sessão # ------------------------------------------------------------ unset HISTFILE - export HISTFILE=/dev/null # ============================================================ -# SINCRONIZA DISCO +# SINCRONIZA ALTERAÇÕES # ============================================================ sync # ============================================================ -# RESULTADO +# FINALIZAÇÃO # ============================================================ echo @@ -375,10 +601,15 @@ echo echo "Hostname : $NEW_HOSTNAME" echo "FQDN : $FQDN" echo -echo "A configuração de rede foi recriada do zero." +echo "Rede configurada em:" +echo "/etc/network/interfaces" echo -echo "A máquina será desligada." +echo "Históricos removidos." echo +echo "Desligando a máquina..." +echo + +sleep 3 # ============================================================