Update debian/set_mac_wifi.sh

This commit is contained in:
2026-02-15 11:23:25 +00:00
parent f9ac2891f5
commit ed23bc3461
+66 -25
View File
@@ -63,11 +63,29 @@ setup_udev_persistence() {
return 1
fi
# Cria o ficheiro de regras
echo "ACTION==\"add\", SUBSYSTEM==\"net\", ATTR{address}==\"$original_mac\", RUN+=\"/usr/bin/ip link set dev \$name address $target_mac\"" > "$UDEV_RULES_FILE"
# Cria o conteúdo da regra
local rule_content="ACTION==\"add\", SUBSYSTEM==\"net\", ATTR{address}==\"$original_mac\", RUN+=\"/usr/bin/ip link set dev \$name address $target_mac\""
# Escreve no ficheiro de regras
echo "$rule_content" > "$UDEV_RULES_FILE"
# Verifica se o ficheiro foi criado com sucesso
if [ -f "$UDEV_RULES_FILE" ]; then
log "Sucesso: Ficheiro de regras Udev criado em $UDEV_RULES_FILE."
log "Conteúdo da regra: $rule_content"
else
log "Erro: Falha ao criar o ficheiro de regras Udev em $UDEV_RULES_FILE."
return 1
fi
# Recarrega as regras do udev
if udevadm control --reload-rules; then
log "Regras Udev recarregadas com sucesso."
else
log "Erro: Falha ao recarregar regras Udev."
return 1
fi
udevadm control --reload-rules
log "Regra Udev criada/atualizada em $UDEV_RULES_FILE."
return 0
}
@@ -144,36 +162,59 @@ fi
# 3. Determinar o MAC Address
TARGET_MAC=""
# Função para perguntar confirmação ao utilizador
ask_confirmation() {
local message="$1"
local default="$2" # "y" or "n"
while true; do
if [ "$default" = "y" ]; then
read -p "$message [Y/n]: " choice < /dev/tty
else
read -p "$message [y/N]: " choice < /dev/tty
fi
# Default choice if user just presses Enter
if [ -z "$choice" ]; then
choice="$default"
fi
case "$choice" in
y|Y|yes|Yes|YES)
return 0
;;
n|N|no|No|NO)
return 1
;;
*)
echo "Por favor, responda sim ou não."
;;
esac
done
}
# Verificar argumento ($1)
if [ -n "$1" ]; then
TARGET_MAC="$1"
log "MAC definido via argumento: $TARGET_MAC"
else
# Verificar se é interativo
# IMPORTANTE: Ler de /dev/tty para funcionar com curl | bash
if [ -t 0 ] && [ -e /dev/tty ]; then
# Abre /dev/tty para ler input do utilizador
exec < /dev/tty
echo "Nenhum MAC definido. Deseja:"
echo "1) Gerar um novo MAC único automático"
echo "2) Introduzir um MAC manualmente"
read -p "Opção [1/2]: " choice
case "$choice" in
1)
# Pergunta ao utilizador se quer gerar um MAC automaticamente
if ask_confirmation "Deseja gerar um novo MAC único automaticamente?" "y"; then
TARGET_MAC=$(generate_unique_mac)
log "MAC gerado automaticamente: $TARGET_MAC"
;;
2)
read -p "Introduza o MAC (formato XX:XX:XX:XX:XX:XX): " TARGET_MAC
;;
*)
log "Opção inválida."
exit 1
;;
esac
# Restaura stdin se necessário (embora geralmente não seja crítico aqui)
else
# Pergunta para introduzir MAC manualmente
while true; do
read -p "Introduza o MAC (formato XX:XX:XX:XX:XX:XX): " TARGET_MAC < /dev/tty
if [[ "$TARGET_MAC" =~ ^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$ ]]; then
break
else
echo "Formato de MAC inválido. Por favor, introduza no formato XX:XX:XX:XX:XX:XX."
fi
done
fi
else
# Modo não interativo (boot/curl) sem argumentos: Gerar automático
log "Execução não interativa. A gerar MAC único..."