Atualizar conf-inicial

This commit is contained in:
2026-09-15 19:40:58 +00:00
parent 4c891e0ff5
commit dac7acd98d
+125 -35
View File
@@ -5,16 +5,12 @@ set -e
# ============================================================ # ============================================================
# Configuração inicial de VM Debian 13 # Configuração inicial de VM Debian 13
# #
# Funções: # - Configura hostname
# - Altera hostname # - Configura domínio
# - Altera domínio
# - Recria /etc/hosts # - Recria /etc/hosts
# - Detecta todas as interfaces de rede # - Detecta interfaces de rede
# - Recria /etc/network/interfaces do zero # - Recria /etc/network/interfaces do zero
# - Pergunta por interface: # - DHCP / Estático / Não configurar por interface
# DHCP
# Estático
# Não configurar
# - Limpa históricos # - Limpa históricos
# - Desliga a máquina ao final # - Desliga a máquina ao final
# #
@@ -45,9 +41,12 @@ valid_ipv4() {
[ "${#octets[@]}" -eq 4 ] || return 1 [ "${#octets[@]}" -eq 4 ] || return 1
for octet in "${octets[@]}"; do for octet in "${octets[@]}"; do
[[ "$octet" =~ ^[0-9]+$ ]] || return 1 [[ "$octet" =~ ^[0-9]+$ ]] || return 1
[ "$octet" -ge 0 ] 2>/dev/null || return 1 [ "$octet" -ge 0 ] 2>/dev/null || return 1
[ "$octet" -le 255 ] 2>/dev/null || return 1 [ "$octet" -le 255 ] 2>/dev/null || return 1
done done
return 0 return 0
@@ -55,22 +54,24 @@ valid_ipv4() {
valid_hostname() { valid_hostname() {
local hostname="$1" local value="$1"
[[ "$hostname" =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]$ ]] || [[ "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]]
[[ "$hostname" =~ ^[a-zA-Z0-9]$ ]]
} }
# ============================================================ # ============================================================
# ROOT # VERIFICA ROOT
# ============================================================ # ============================================================
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
echo echo
echo "ERRO: execute este script como root." echo "ERRO: execute este script como root."
echo echo
exit 1 exit 1
fi fi
@@ -96,13 +97,20 @@ while true; do
read_tty "Novo nome da máquina: " NEW_HOSTNAME read_tty "Novo nome da máquina: " NEW_HOSTNAME
if [ -z "$NEW_HOSTNAME" ]; then if [ -z "$NEW_HOSTNAME" ]; then
echo "O nome da máquina não pode ficar vazio." echo "O nome da máquina não pode ficar vazio."
continue continue
fi fi
if ! valid_hostname "$NEW_HOSTNAME"; then if ! valid_hostname "$NEW_HOSTNAME"; then
echo "Hostname inválido." echo "Hostname inválido."
continue continue
fi fi
break break
@@ -119,13 +127,20 @@ while true; do
read_tty "Domínio (ex.: fatec.local): " NEW_DOMAIN read_tty "Domínio (ex.: fatec.local): " NEW_DOMAIN
if [ -z "$NEW_DOMAIN" ]; then if [ -z "$NEW_DOMAIN" ]; then
echo "O domínio não pode ficar vazio." echo "O domínio não pode ficar vazio."
continue continue
fi fi
if ! valid_hostname "$NEW_DOMAIN"; then if ! valid_hostname "$NEW_DOMAIN"; then
echo "Domínio inválido." echo "Domínio inválido."
continue continue
fi fi
break break
@@ -150,17 +165,23 @@ echo
read_tty "Continuar? [S/n]: " CONFIRM read_tty "Continuar? [S/n]: " CONFIRM
case "$CONFIRM" in case "$CONFIRM" in
n|N|nao|não|NAO|NÃO) n|N|nao|não|NAO|NÃO)
echo echo
echo "Operação cancelada." echo "Operação cancelada."
echo
exit 0 exit 0
;; ;;
esac esac
# ============================================================ # ============================================================
# HOSTNAME # CONFIGURA HOSTNAME
# ============================================================ # ============================================================
echo echo
@@ -172,7 +193,7 @@ hostnamectl set-hostname "$NEW_HOSTNAME"
# ============================================================ # ============================================================
# /etc/hosts # RECRIA /etc/hosts
# ============================================================ # ============================================================
echo "Configurando /etc/hosts..." echo "Configurando /etc/hosts..."
@@ -197,6 +218,7 @@ echo " INTERFACES DE REDE ENCONTRADAS"
echo "============================================================" echo "============================================================"
echo echo
mapfile -t INTERFACES < <( mapfile -t INTERFACES < <(
find /sys/class/net \ find /sys/class/net \
-mindepth 1 \ -mindepth 1 \
@@ -208,8 +230,11 @@ mapfile -t INTERFACES < <(
if [ "${#INTERFACES[@]}" -eq 0 ]; then if [ "${#INTERFACES[@]}" -eq 0 ]; then
echo "ERRO: nenhuma interface de rede encontrada." echo "ERRO: nenhuma interface de rede encontrada."
exit 1 exit 1
fi fi
@@ -218,14 +243,21 @@ for IFACE in "${INTERFACES[@]}"; do
MAC="desconhecido" MAC="desconhecido"
STATE="desconhecido" STATE="desconhecido"
if [ -f "/sys/class/net/$IFACE/address" ]; then if [ -f "/sys/class/net/$IFACE/address" ]; then
MAC=$(cat "/sys/class/net/$IFACE/address") MAC=$(cat "/sys/class/net/$IFACE/address")
fi fi
if [ -f "/sys/class/net/$IFACE/operstate" ]; then if [ -f "/sys/class/net/$IFACE/operstate" ]; then
STATE=$(cat "/sys/class/net/$IFACE/operstate") STATE=$(cat "/sys/class/net/$IFACE/operstate")
fi fi
echo "Interface : $IFACE" echo "Interface : $IFACE"
echo "MAC : $MAC" echo "MAC : $MAC"
echo "Estado : $STATE" echo "Estado : $STATE"
@@ -235,7 +267,7 @@ done
# ============================================================ # ============================================================
# RECRIA /etc/network/interfaces # RECRIA /etc/network/interfaces DO ZERO
# ============================================================ # ============================================================
echo "Recriando /etc/network/interfaces..." echo "Recriando /etc/network/interfaces..."
@@ -253,15 +285,18 @@ EOF
# ============================================================ # ============================================================
# CONFIGURAÇÃO DAS INTERFACES # CONFIGURA CADA INTERFACE
# ============================================================ # ============================================================
for IFACE in "${INTERFACES[@]}"; do for IFACE in "${INTERFACES[@]}"; do
MAC="desconhecido" MAC="desconhecido"
if [ -f "/sys/class/net/$IFACE/address" ]; then if [ -f "/sys/class/net/$IFACE/address" ]; then
MAC=$(cat "/sys/class/net/$IFACE/address") MAC=$(cat "/sys/class/net/$IFACE/address")
fi fi
@@ -281,8 +316,10 @@ for IFACE in "${INTERFACES[@]}"; do
read_tty "Escolha [1/2/3]: " OPTION read_tty "Escolha [1/2/3]: " OPTION
case "$OPTION" in case "$OPTION" in
# ==================================================== # ====================================================
# DHCP # DHCP
# ==================================================== # ====================================================
@@ -309,7 +346,7 @@ EOF
# ==================================================== # ====================================================
# ESTÁTICO # IP ESTÁTICO
# ==================================================== # ====================================================
2) 2)
@@ -327,10 +364,14 @@ EOF
read_tty "Endereço IPv4: " IPADDR read_tty "Endereço IPv4: " IPADDR
if valid_ipv4 "$IPADDR"; then if valid_ipv4 "$IPADDR"; then
break break
fi fi
echo "Endereço IPv4 inválido." echo "Endereço IPv4 inválido."
done done
@@ -344,6 +385,7 @@ EOF
read_tty "Prefixo da rede [ex.: 24]: " PREFIX read_tty "Prefixo da rede [ex.: 24]: " PREFIX
if [[ "$PREFIX" =~ ^[0-9]+$ ]] && if [[ "$PREFIX" =~ ^[0-9]+$ ]] &&
[ "$PREFIX" -ge 0 ] && [ "$PREFIX" -ge 0 ] &&
[ "$PREFIX" -le 32 ]; then [ "$PREFIX" -le 32 ]; then
@@ -352,6 +394,7 @@ EOF
fi fi
echo "Prefixo inválido. Informe um valor entre 0 e 32." echo "Prefixo inválido. Informe um valor entre 0 e 32."
done done
@@ -365,14 +408,21 @@ EOF
read_tty "Gateway [ENTER para nenhum]: " GATEWAY read_tty "Gateway [ENTER para nenhum]: " GATEWAY
if [ -z "$GATEWAY" ]; then if [ -z "$GATEWAY" ]; then
break break
fi fi
if valid_ipv4 "$GATEWAY"; then if valid_ipv4 "$GATEWAY"; then
break break
fi fi
echo "Gateway inválido." echo "Gateway inválido."
done done
@@ -386,25 +436,37 @@ EOF
read_tty "DNS [ex.: 172.16.0.2 8.8.8.8] [ENTER para nenhum]: " DNS read_tty "DNS [ex.: 172.16.0.2 8.8.8.8] [ENTER para nenhum]: " DNS
if [ -z "$DNS" ]; then if [ -z "$DNS" ]; then
break break
fi fi
DNS_VALID=1 DNS_VALID=1
for DNS_IP in $DNS; do for DNS_IP in $DNS; do
if ! valid_ipv4 "$DNS_IP"; then if ! valid_ipv4 "$DNS_IP"; then
DNS_VALID=0 DNS_VALID=0
break break
fi fi
done done
if [ "$DNS_VALID" -eq 1 ]; then if [ "$DNS_VALID" -eq 1 ]; then
break break
fi fi
echo "Um ou mais servidores DNS são inválidos." echo "Um ou mais servidores DNS são inválidos."
done done
@@ -416,13 +478,16 @@ EOF
read_tty "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH read_tty "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH
if [ -z "$DNS_SEARCH" ]; then if [ -z "$DNS_SEARCH" ]; then
DNS_SEARCH="$NEW_DOMAIN" DNS_SEARCH="$NEW_DOMAIN"
fi fi
# ------------------------------------------------ # ------------------------------------------------
# GRAVA INTERFACE # GRAVA CONFIGURAÇÃO
# ------------------------------------------------ # ------------------------------------------------
cat >> /etc/network/interfaces <<EOF cat >> /etc/network/interfaces <<EOF
@@ -439,17 +504,23 @@ EOF
if [ -n "$GATEWAY" ]; then if [ -n "$GATEWAY" ]; then
echo " gateway $GATEWAY" >> /etc/network/interfaces echo " gateway $GATEWAY" >> /etc/network/interfaces
fi fi
if [ -n "$DNS" ]; then if [ -n "$DNS" ]; then
echo " dns-nameservers $DNS" >> /etc/network/interfaces echo " dns-nameservers $DNS" >> /etc/network/interfaces
fi fi
if [ -n "$DNS_SEARCH" ]; then if [ -n "$DNS_SEARCH" ]; then
echo " dns-search $DNS_SEARCH" >> /etc/network/interfaces echo " dns-search $DNS_SEARCH" >> /etc/network/interfaces
fi fi
@@ -467,14 +538,19 @@ EOF
3) 3)
echo echo
echo "$IFACE não será adicionada ao /etc/network/interfaces." echo "$IFACE não será configurada."
break break
;; ;;
# ====================================================
# INVÁLIDO
# ====================================================
*) *)
echo
echo "Opção inválida. Escolha 1, 2 ou 3." echo "Opção inválida. Escolha 1, 2 ou 3."
;; ;;
@@ -486,7 +562,7 @@ done
# ============================================================ # ============================================================
# PERMISSÕES # PERMISSÃO DO ARQUIVO
# ============================================================ # ============================================================
chmod 644 /etc/network/interfaces chmod 644 /etc/network/interfaces
@@ -520,7 +596,7 @@ echo
# ============================================================ # ============================================================
# CONFIRMA DESLIGAMENTO # CONFIRMA FINALIZAÇÃO
# ============================================================ # ============================================================
echo echo
@@ -540,9 +616,9 @@ echo
echo "Limpando históricos..." echo "Limpando históricos..."
# ------------------------------------------------------------ # ============================================================
# Histórico do root # ROOT
# ------------------------------------------------------------ # ============================================================
history -c 2>/dev/null || true history -c 2>/dev/null || true
@@ -553,14 +629,23 @@ rm -f /root/.lesshst
rm -f /root/.wget-hsts rm -f /root/.wget-hsts
# ------------------------------------------------------------ # ============================================================
# Usuários normais # USUÁRIOS NORMAIS
# ------------------------------------------------------------ # ============================================================
while IFS=: read -r USERNAME PASSWORD UID GID GECOS HOME_DIR SHELL; do while IFS=: read -r \
USERNAME \
PASSWORD_FIELD \
USER_ID \
GROUP_ID \
GECOS \
HOME_DIR \
USER_SHELL
if [ "$UID" -ge 1000 ] && do
[ "$UID" -lt 65534 ] &&
if [ "$USER_ID" -ge 1000 ] 2>/dev/null &&
[ "$USER_ID" -lt 65534 ] 2>/dev/null &&
[ -d "$HOME_DIR" ]; then [ -d "$HOME_DIR" ]; then
rm -f "$HOME_DIR/.bash_history" rm -f "$HOME_DIR/.bash_history"
@@ -574,16 +659,19 @@ while IFS=: read -r USERNAME PASSWORD UID GID GECOS HOME_DIR SHELL; do
done < /etc/passwd done < /etc/passwd
# ------------------------------------------------------------ # ============================================================
# Evita regravar o histórico desta sessão # LIMPA HISTÓRICO DA SESSÃO ATUAL
# ------------------------------------------------------------ # ============================================================
history -c 2>/dev/null || true
unset HISTFILE unset HISTFILE
export HISTFILE=/dev/null export HISTFILE=/dev/null
# ============================================================ # ============================================================
# SINCRONIZA ALTERAÇÕES # SINCRONIZA DISCO
# ============================================================ # ============================================================
sync sync
@@ -599,6 +687,7 @@ echo " CONFIGURAÇÃO CONCLUÍDA"
echo "============================================================" echo "============================================================"
echo echo
echo "Hostname : $NEW_HOSTNAME" echo "Hostname : $NEW_HOSTNAME"
echo "Domínio : $NEW_DOMAIN"
echo "FQDN : $FQDN" echo "FQDN : $FQDN"
echo echo
echo "Rede configurada em:" echo "Rede configurada em:"
@@ -609,11 +698,12 @@ echo
echo "Desligando a máquina..." echo "Desligando a máquina..."
echo echo
sleep 3 sleep 3
# ============================================================ # ============================================================
# DESLIGA # DESLIGA A VM
# ============================================================ # ============================================================
systemctl poweroff systemctl poweroff