Atualizar conf-inicial

This commit is contained in:
2026-09-15 19:55:18 +00:00
parent dac7acd98d
commit 29dbfcdb2e
+21 -478
View File
@@ -3,14 +3,12 @@
set -e
# ============================================================
# Configuração inicial de VM Debian 13
# Renomear 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
# - Altera hostname
# - Altera domínio
# - Atualiza /etc/hostname
# - Atualiza /etc/hosts
# - Limpa históricos
# - Desliga a máquina ao final
#
@@ -31,29 +29,7 @@ read_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() {
valid_name() {
local value="$1"
[[ "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]]
@@ -61,17 +37,14 @@ valid_hostname() {
# ============================================================
# VERIFICA ROOT
# ROOT
# ============================================================
if [ "$EUID" -ne 0 ]; then
echo
echo "ERRO: execute este script como root."
echo
exit 1
fi
@@ -83,7 +56,7 @@ clear 2>/dev/null || true
echo
echo "============================================================"
echo " CONFIGURAÇÃO INICIAL - DEBIAN 13"
echo " RENOMEAR MÁQUINA - DEBIAN 13"
echo "============================================================"
echo
@@ -97,20 +70,13 @@ 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
if ! valid_name "$NEW_HOSTNAME"; then
echo "Hostname inválido."
continue
fi
break
@@ -127,20 +93,13 @@ 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
if ! valid_name "$NEW_DOMAIN"; then
echo "Domínio inválido."
continue
fi
break
@@ -163,20 +122,15 @@ echo "FQDN : $FQDN"
echo "------------------------------------------------------------"
echo
read_tty "Continuar? [S/n]: " CONFIRM
read_tty "Confirmar alteração? [S/n]: " CONFIRM
case "$CONFIRM" in
n|N|nao|não|NAO|NÃO)
echo
echo "Operação cancelada."
echo
exit 0
;;
esac
@@ -185,7 +139,7 @@ esac
# ============================================================
echo
echo "Configurando hostname..."
echo "Alterando hostname..."
echo "$NEW_HOSTNAME" > /etc/hostname
@@ -196,7 +150,7 @@ hostnamectl set-hostname "$NEW_HOSTNAME"
# RECRIA /etc/hosts
# ============================================================
echo "Configurando /etc/hosts..."
echo "Atualizando /etc/hosts..."
cat > /etc/hosts <<EOF
127.0.0.1 localhost
@@ -209,417 +163,31 @@ EOF
# ============================================================
# DETECTA INTERFACES
# RESULTADO
# ============================================================
echo
echo "============================================================"
echo " INTERFACES DE REDE ENCONTRADAS"
echo " NOVA CONFIGURAÇÃO"
echo "============================================================"
echo
mapfile -t INTERFACES < <(
find /sys/class/net \
-mindepth 1 \
-maxdepth 1 \
-printf '%f\n' |
grep -v '^lo$' |
sort
)
if [ "${#INTERFACES[@]}" -eq 0 ]; then
echo "ERRO: nenhuma interface de rede encontrada."
exit 1
fi
for IFACE in "${INTERFACES[@]}"; do
MAC="desconhecido"
STATE="desconhecido"
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
# ============================================================
echo "Recriando /etc/network/interfaces..."
cat > /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 <<EOF
# ------------------------------------------------------------
# Interface $IFACE - DHCP
# ------------------------------------------------------------
auto $IFACE
allow-hotplug $IFACE
iface $IFACE inet dhcp
EOF
echo
echo "$IFACE configurada como DHCP."
break
;;
# ====================================================
# IP ESTÁTICO
# ====================================================
2)
echo
echo "Configuração estática de $IFACE"
echo
# ------------------------------------------------
# IP
# ------------------------------------------------
while true; do
read_tty "Endereço IPv4: " IPADDR
if valid_ipv4 "$IPADDR"; then
break
fi
echo "Endereço IPv4 inválido."
done
# ------------------------------------------------
# PREFIXO
# ------------------------------------------------
while true; do
read_tty "Prefixo da rede [ex.: 24]: " PREFIX
if [[ "$PREFIX" =~ ^[0-9]+$ ]] &&
[ "$PREFIX" -ge 0 ] &&
[ "$PREFIX" -le 32 ]; then
break
fi
echo "Prefixo inválido. Informe um valor entre 0 e 32."
done
# ------------------------------------------------
# GATEWAY
# ------------------------------------------------
while true; do
read_tty "Gateway [ENTER para nenhum]: " GATEWAY
if [ -z "$GATEWAY" ]; then
break
fi
if valid_ipv4 "$GATEWAY"; then
break
fi
echo "Gateway inválido."
done
# ------------------------------------------------
# DNS
# ------------------------------------------------
while true; do
read_tty "DNS [ex.: 172.16.0.2 8.8.8.8] [ENTER para nenhum]: " DNS
if [ -z "$DNS" ]; then
break
fi
DNS_VALID=1
for DNS_IP in $DNS; do
if ! valid_ipv4 "$DNS_IP"; then
DNS_VALID=0
break
fi
done
if [ "$DNS_VALID" -eq 1 ]; then
break
fi
echo "Um ou mais servidores DNS são inválidos."
done
# ------------------------------------------------
# DNS SEARCH
# ------------------------------------------------
read_tty "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH
if [ -z "$DNS_SEARCH" ]; then
DNS_SEARCH="$NEW_DOMAIN"
fi
# ------------------------------------------------
# GRAVA CONFIGURAÇÃO
# ------------------------------------------------
cat >> /etc/network/interfaces <<EOF
# ------------------------------------------------------------
# Interface $IFACE - ESTÁTICA
# ------------------------------------------------------------
auto $IFACE
allow-hotplug $IFACE
iface $IFACE inet static
address $IPADDR/$PREFIX
EOF
if [ -n "$GATEWAY" ]; then
echo " gateway $GATEWAY" >> /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
read_tty "Pressione ENTER para limpar o histórico e desligar..." FINAL_CONFIRM
# ============================================================
# 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
# LIMPEZA DO HISTÓRICO
# ============================================================
echo
echo "Limpando históricos..."
# ============================================================
# ROOT
# ============================================================
# Root
history -c 2>/dev/null || true
rm -f /root/.bash_history
@@ -629,10 +197,7 @@ rm -f /root/.lesshst
rm -f /root/.wget-hsts
# ============================================================
# USUÁRIOS NORMAIS
# ============================================================
# Usuários normais
while IFS=: read -r \
USERNAME \
PASSWORD_FIELD \
@@ -659,51 +224,29 @@ do
done < /etc/passwd
# ============================================================
# LIMPA HISTÓRICO DA SESSÃO ATUAL
# ============================================================
# Evita regravar o histórico desta sessão
history -c 2>/dev/null || true
unset HISTFILE
export HISTFILE=/dev/null
# ============================================================
# SINCRONIZA DISCO
# FINALIZA
# ============================================================
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