Atualizar conf-inicial
This commit is contained in:
+125
-35
@@ -5,16 +5,12 @@ set -e
|
||||
# ============================================================
|
||||
# Configuração inicial de VM Debian 13
|
||||
#
|
||||
# Funções:
|
||||
# - Altera hostname
|
||||
# - Altera domínio
|
||||
# - Configura hostname
|
||||
# - Configura domínio
|
||||
# - Recria /etc/hosts
|
||||
# - Detecta todas as interfaces de rede
|
||||
# - Detecta interfaces de rede
|
||||
# - Recria /etc/network/interfaces do zero
|
||||
# - Pergunta por interface:
|
||||
# DHCP
|
||||
# Estático
|
||||
# Não configurar
|
||||
# - DHCP / Estático / Não configurar por interface
|
||||
# - Limpa históricos
|
||||
# - Desliga a máquina ao final
|
||||
#
|
||||
@@ -45,9 +41,12 @@ valid_ipv4() {
|
||||
[ "${#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
|
||||
@@ -55,22 +54,24 @@ valid_ipv4() {
|
||||
|
||||
|
||||
valid_hostname() {
|
||||
local hostname="$1"
|
||||
local value="$1"
|
||||
|
||||
[[ "$hostname" =~ ^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9]$ ]] ||
|
||||
[[ "$hostname" =~ ^[a-zA-Z0-9]$ ]]
|
||||
[[ "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]]
|
||||
}
|
||||
|
||||
|
||||
# ============================================================
|
||||
# ROOT
|
||||
# VERIFICA ROOT
|
||||
# ============================================================
|
||||
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
|
||||
echo
|
||||
echo "ERRO: execute este script como root."
|
||||
echo
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
|
||||
@@ -96,13 +97,20 @@ 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
|
||||
@@ -119,13 +127,20 @@ 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
|
||||
@@ -150,17 +165,23 @@ 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
|
||||
|
||||
|
||||
# ============================================================
|
||||
# HOSTNAME
|
||||
# CONFIGURA HOSTNAME
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
@@ -172,7 +193,7 @@ hostnamectl set-hostname "$NEW_HOSTNAME"
|
||||
|
||||
|
||||
# ============================================================
|
||||
# /etc/hosts
|
||||
# RECRIA /etc/hosts
|
||||
# ============================================================
|
||||
|
||||
echo "Configurando /etc/hosts..."
|
||||
@@ -197,6 +218,7 @@ echo " INTERFACES DE REDE ENCONTRADAS"
|
||||
echo "============================================================"
|
||||
echo
|
||||
|
||||
|
||||
mapfile -t INTERFACES < <(
|
||||
find /sys/class/net \
|
||||
-mindepth 1 \
|
||||
@@ -208,8 +230,11 @@ mapfile -t INTERFACES < <(
|
||||
|
||||
|
||||
if [ "${#INTERFACES[@]}" -eq 0 ]; then
|
||||
|
||||
echo "ERRO: nenhuma interface de rede encontrada."
|
||||
|
||||
exit 1
|
||||
|
||||
fi
|
||||
|
||||
|
||||
@@ -218,14 +243,21 @@ 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"
|
||||
@@ -235,7 +267,7 @@ done
|
||||
|
||||
|
||||
# ============================================================
|
||||
# RECRIA /etc/network/interfaces
|
||||
# RECRIA /etc/network/interfaces DO ZERO
|
||||
# ============================================================
|
||||
|
||||
echo "Recriando /etc/network/interfaces..."
|
||||
@@ -253,15 +285,18 @@ EOF
|
||||
|
||||
|
||||
# ============================================================
|
||||
# CONFIGURAÇÃO DAS INTERFACES
|
||||
# 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
|
||||
|
||||
|
||||
@@ -281,8 +316,10 @@ for IFACE in "${INTERFACES[@]}"; do
|
||||
|
||||
read_tty "Escolha [1/2/3]: " OPTION
|
||||
|
||||
|
||||
case "$OPTION" in
|
||||
|
||||
|
||||
# ====================================================
|
||||
# DHCP
|
||||
# ====================================================
|
||||
@@ -309,7 +346,7 @@ EOF
|
||||
|
||||
|
||||
# ====================================================
|
||||
# ESTÁTICO
|
||||
# IP ESTÁTICO
|
||||
# ====================================================
|
||||
|
||||
2)
|
||||
@@ -327,10 +364,14 @@ EOF
|
||||
|
||||
read_tty "Endereço IPv4: " IPADDR
|
||||
|
||||
|
||||
if valid_ipv4 "$IPADDR"; then
|
||||
|
||||
break
|
||||
|
||||
fi
|
||||
|
||||
|
||||
echo "Endereço IPv4 inválido."
|
||||
|
||||
done
|
||||
@@ -344,6 +385,7 @@ EOF
|
||||
|
||||
read_tty "Prefixo da rede [ex.: 24]: " PREFIX
|
||||
|
||||
|
||||
if [[ "$PREFIX" =~ ^[0-9]+$ ]] &&
|
||||
[ "$PREFIX" -ge 0 ] &&
|
||||
[ "$PREFIX" -le 32 ]; then
|
||||
@@ -352,6 +394,7 @@ EOF
|
||||
|
||||
fi
|
||||
|
||||
|
||||
echo "Prefixo inválido. Informe um valor entre 0 e 32."
|
||||
|
||||
done
|
||||
@@ -365,14 +408,21 @@ EOF
|
||||
|
||||
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
|
||||
@@ -386,25 +436,37 @@ EOF
|
||||
|
||||
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
|
||||
@@ -416,13 +478,16 @@ EOF
|
||||
|
||||
read_tty "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH
|
||||
|
||||
|
||||
if [ -z "$DNS_SEARCH" ]; then
|
||||
|
||||
DNS_SEARCH="$NEW_DOMAIN"
|
||||
|
||||
fi
|
||||
|
||||
|
||||
# ------------------------------------------------
|
||||
# GRAVA INTERFACE
|
||||
# GRAVA CONFIGURAÇÃO
|
||||
# ------------------------------------------------
|
||||
|
||||
cat >> /etc/network/interfaces <<EOF
|
||||
@@ -439,17 +504,23 @@ 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
|
||||
|
||||
|
||||
@@ -467,14 +538,19 @@ EOF
|
||||
3)
|
||||
|
||||
echo
|
||||
echo "$IFACE não será adicionada ao /etc/network/interfaces."
|
||||
echo "$IFACE não será configurada."
|
||||
|
||||
break
|
||||
;;
|
||||
|
||||
|
||||
# ====================================================
|
||||
# INVÁLIDO
|
||||
# ====================================================
|
||||
|
||||
*)
|
||||
|
||||
echo
|
||||
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
|
||||
@@ -520,7 +596,7 @@ echo
|
||||
|
||||
|
||||
# ============================================================
|
||||
# CONFIRMA DESLIGAMENTO
|
||||
# CONFIRMA FINALIZAÇÃO
|
||||
# ============================================================
|
||||
|
||||
echo
|
||||
@@ -540,9 +616,9 @@ echo
|
||||
echo "Limpando históricos..."
|
||||
|
||||
|
||||
# ------------------------------------------------------------
|
||||
# Histórico do root
|
||||
# ------------------------------------------------------------
|
||||
# ============================================================
|
||||
# ROOT
|
||||
# ============================================================
|
||||
|
||||
history -c 2>/dev/null || true
|
||||
|
||||
@@ -553,14 +629,23 @@ rm -f /root/.lesshst
|
||||
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 ] &&
|
||||
[ "$UID" -lt 65534 ] &&
|
||||
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"
|
||||
@@ -574,16 +659,19 @@ while IFS=: read -r USERNAME PASSWORD UID GID GECOS HOME_DIR SHELL; do
|
||||
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
|
||||
|
||||
export HISTFILE=/dev/null
|
||||
|
||||
|
||||
# ============================================================
|
||||
# SINCRONIZA ALTERAÇÕES
|
||||
# SINCRONIZA DISCO
|
||||
# ============================================================
|
||||
|
||||
sync
|
||||
@@ -599,6 +687,7 @@ echo " CONFIGURAÇÃO CONCLUÍDA"
|
||||
echo "============================================================"
|
||||
echo
|
||||
echo "Hostname : $NEW_HOSTNAME"
|
||||
echo "Domínio : $NEW_DOMAIN"
|
||||
echo "FQDN : $FQDN"
|
||||
echo
|
||||
echo "Rede configurada em:"
|
||||
@@ -609,11 +698,12 @@ echo
|
||||
echo "Desligando a máquina..."
|
||||
echo
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
|
||||
# ============================================================
|
||||
# DESLIGA
|
||||
# DESLIGA A VM
|
||||
# ============================================================
|
||||
|
||||
systemctl poweroff
|
||||
Reference in New Issue
Block a user