Atualizar conf-inicial

This commit is contained in:
2026-09-15 19:37:41 +00:00
parent 247dd2b331
commit 4c891e0ff5
+303 -72
View File
@@ -3,75 +3,179 @@
set -e set -e
# ============================================================ # ============================================================
# Preparação de VM Debian 13 # Configuração inicial de VM Debian 13
# #
# - Configura hostname # Funções:
# - Configura domínio # - Altera hostname
# - Detecta interfaces diretamente do sistema # - Altera domínio
# - Recria /etc/network/interfaces do ZERO # - Recria /etc/hosts
# - Permite DHCP ou IP estático por interface # - Detecta todas as interfaces de rede
# - Limpa histórico # - Recria /etc/network/interfaces do zero
# - Pergunta por interface:
# DHCP
# Estático
# Não configurar
# - Limpa históricos
# - Desliga a máquina ao final # - 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 if [ "$EUID" -ne 0 ]; then
echo
echo "ERRO: execute este script como root." echo "ERRO: execute este script como root."
echo
exit 1 exit 1
fi fi
# ============================================================ # ============================================================
# HOSTNAME / DOMÍNIO # CABEÇALHO
# ============================================================ # ============================================================
clear 2>/dev/null || true
echo echo
echo "============================================================" echo "============================================================"
echo " CONFIGURAÇÃO DO HOST" echo " CONFIGURAÇÃO INICIAL - DEBIAN 13"
echo "============================================================" echo "============================================================"
echo echo
# ============================================================
# HOSTNAME
# ============================================================
while true; do while true; do
read -rp "Novo nome da máquina: " NEW_HOSTNAME
if [ -n "$NEW_HOSTNAME" ]; then read_tty "Novo nome da máquina: " NEW_HOSTNAME
break
if [ -z "$NEW_HOSTNAME" ]; then
echo "O nome da máquina não pode ficar vazio."
continue
fi 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 done
while true; do # ============================================================
read -rp "Domínio (ex.: fatec.local): " NEW_DOMAIN # DOMÍNIO
# ============================================================
if [ -n "$NEW_DOMAIN" ]; then while true; do
break
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 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 done
FQDN="${NEW_HOSTNAME}.${NEW_DOMAIN}" 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 echo "$NEW_HOSTNAME" > /etc/hostname
hostnamectl set-hostname "$NEW_HOSTNAME" hostnamectl set-hostname "$NEW_HOSTNAME"
# ------------------------------------------------------------ # ============================================================
# Recria /etc/hosts # /etc/hosts
# ------------------------------------------------------------ # ============================================================
echo "Configurando /etc/hosts..."
cat > /etc/hosts <<EOF cat > /etc/hosts <<EOF
127.0.0.1 localhost 127.0.0.1 localhost
@@ -84,19 +188,22 @@ EOF
# ============================================================ # ============================================================
# DETECÇÃO DAS INTERFACES # DETECTA INTERFACES
# ============================================================ # ============================================================
echo echo
echo "============================================================" echo "============================================================"
echo " DETECÇÃO DAS INTERFACES DE REDE" echo " INTERFACES DE REDE ENCONTRADAS"
echo "============================================================" echo "============================================================"
echo echo
mapfile -t INTERFACES < <( mapfile -t INTERFACES < <(
ls /sys/class/net | find /sys/class/net \
grep -v '^lo$' -mindepth 1 \
-maxdepth 1 \
-printf '%f\n' |
grep -v '^lo$' |
sort
) )
@@ -106,27 +213,37 @@ if [ "${#INTERFACES[@]}" -eq 0 ]; then
fi fi
echo "Interfaces encontradas:"
echo
for IFACE in "${INTERFACES[@]}"; do for IFACE in "${INTERFACES[@]}"; do
MAC=$(cat "/sys/class/net/$IFACE/address" 2>/dev/null || echo "desconhecido") 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 "Interface : $IFACE"
echo "MAC : $MAC" echo "MAC : $MAC"
echo "Estado : $STATE"
echo echo
done done
# ============================================================ # ============================================================
# RECRIA /etc/network/interfaces DO ZERO # RECRIA /etc/network/interfaces
# ============================================================ # ============================================================
cat > /etc/network/interfaces <<EOF echo "Recriando /etc/network/interfaces..."
cat > /etc/network/interfaces <<'EOF'
# ============================================================ # ============================================================
# Configuração de rede # Configuração de rede
# Gerada automaticamente # Gerada automaticamente pelo script de configuração inicial
# ============================================================ # ============================================================
auto lo auto lo
@@ -141,32 +258,37 @@ EOF
for IFACE in "${INTERFACES[@]}"; do 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 "============================================================" echo "============================================================"
echo " Interface: $IFACE" echo " INTERFACE: $IFACE"
echo " MAC: $MAC" echo " MAC: $MAC"
echo "============================================================" echo "============================================================"
echo echo
echo "Como deseja configurar esta interface?"
echo
echo "1) DHCP" echo "1) DHCP"
echo "2) IP estático" echo "2) IP estático"
echo "3) Não configurar" echo "3) Não configurar"
echo echo
while true; do while true; do
read -rp "Opção [1/2/3]: " OPTION read_tty "Escolha [1/2/3]: " OPTION
case "$OPTION" in case "$OPTION" in
1)
# ==================================================== # ====================================================
# DHCP # DHCP
# ==================================================== # ====================================================
1)
cat >> /etc/network/interfaces <<EOF cat >> /etc/network/interfaces <<EOF
# ------------------------------------------------------------ # ------------------------------------------------------------
@@ -180,59 +302,129 @@ iface $IFACE inet dhcp
EOF EOF
echo echo
echo "$IFACE configurada para DHCP." echo "$IFACE configurada como DHCP."
break break
;; ;;
2)
# ==================================================== # ====================================================
# ESTÁTICO # ESTÁTICO
# ==================================================== # ====================================================
2)
echo echo
echo "Configuração estática de $IFACE" echo "Configuração estática de $IFACE"
echo echo
while true; do
read -rp "Endereço IPv4 (ex.: 192.168.10.20): " IPADDR
if [[ "$IPADDR" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then # ------------------------------------------------
# IP
# ------------------------------------------------
while true; do
read_tty "Endereço IPv4: " IPADDR
if valid_ipv4 "$IPADDR"; then
break break
fi fi
echo "Endereço IPv4 inválido." echo "Endereço IPv4 inválido."
done done
# ------------------------------------------------
# PREFIXO
# ------------------------------------------------
while true; do while true; do
read -rp "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
break break
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
echo # ------------------------------------------------
read -rp "Gateway [ENTER para nenhum]: " GATEWAY # GATEWAY
# ------------------------------------------------
echo while true; do
read -rp "Servidor(es) DNS separados por espaço [ENTER para nenhum]: " DNS
echo read_tty "Gateway [ENTER para nenhum]: " GATEWAY
read -rp "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH
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 if [ -z "$DNS_SEARCH" ]; then
DNS_SEARCH="$NEW_DOMAIN" DNS_SEARCH="$NEW_DOMAIN"
fi fi
# ------------------------------------------------
# GRAVA INTERFACE
# ------------------------------------------------
cat >> /etc/network/interfaces <<EOF cat >> /etc/network/interfaces <<EOF
# ------------------------------------------------------------ # ------------------------------------------------------------
@@ -268,16 +460,22 @@ EOF
;; ;;
# ====================================================
# NÃO CONFIGURAR
# ====================================================
3) 3)
echo echo
echo "$IFACE não será configurada." echo "$IFACE não será adicionada ao /etc/network/interfaces."
break break
;; ;;
*) *)
echo
echo "Opção inválida." echo "Opção inválida. Escolha 1, 2 ou 3."
;; ;;
esac esac
@@ -288,7 +486,14 @@ done
# ============================================================ # ============================================================
# MOSTRA CONFIGURAÇÃO FINAL # PERMISSÕES
# ============================================================
chmod 644 /etc/network/interfaces
# ============================================================
# MOSTRA RESULTADO
# ============================================================ # ============================================================
echo echo
@@ -311,10 +516,24 @@ cat /etc/network/interfaces
echo echo
echo "------------------------------------------------------------" echo "------------------------------------------------------------"
echo
# ============================================================ # ============================================================
# LIMPA HISTÓRICO # CONFIRMA DESLIGAMENTO
# ============================================================
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
@@ -322,25 +541,33 @@ echo "Limpando históricos..."
# ------------------------------------------------------------ # ------------------------------------------------------------
# Root # Histórico do root
# ------------------------------------------------------------ # ------------------------------------------------------------
history -c 2>/dev/null || true history -c 2>/dev/null || true
rm -f /root/.bash_history rm -f /root/.bash_history
rm -f /root/.zsh_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/.bash_history"
rm -f "$HOME_DIR/.zsh_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 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 unset HISTFILE
export HISTFILE=/dev/null export HISTFILE=/dev/null
# ============================================================ # ============================================================
# SINCRONIZA DISCO # SINCRONIZA ALTERAÇÕES
# ============================================================ # ============================================================
sync sync
# ============================================================ # ============================================================
# RESULTADO # FINALIZAÇÃO
# ============================================================ # ============================================================
echo echo
@@ -375,10 +601,15 @@ echo
echo "Hostname : $NEW_HOSTNAME" echo "Hostname : $NEW_HOSTNAME"
echo "FQDN : $FQDN" echo "FQDN : $FQDN"
echo echo
echo "A configuração de rede foi recriada do zero." echo "Rede configurada em:"
echo "/etc/network/interfaces"
echo echo
echo "A máquina será desligada." echo "Históricos removidos."
echo echo
echo "Desligando a máquina..."
echo
sleep 3
# ============================================================ # ============================================================