#!/usr/bin/env bash # Przywrócenie automatycznego IP (DHCP) — GMKtec K11 (gmktec-k11) # # Kolejność: # 1. Przywróć najnowszy *poprawny* backup /etc/netplan/00-installer-config.yaml.bak.* # 2. Jeśli brak poprawnego backupu — szablon DHCP na eno1 i enp3s0 # # Wymaga: sudo set -euo pipefail NETPLAN_FILE="/etc/netplan/00-installer-config.yaml" NIC_PRIMARY="eno1" NIC_LAN="enp3s0" DRY_RUN=false FORCE_DHCP=false BACKUP_FILE="" usage() { cat <<'EOF' Użycie: sudo ./restore-dhcp-network.sh [opcje] Opcje: --dry-run Pokaż plan bez zapisu ani netplan apply --force-dhcp Pomiń backupy — od razu szablon DHCP --backup <ścieżka> Przywróć wskazany plik backupu (musi przejść netplan generate) -h, --help Ta pomoc Po rollbacku sprawdź: ip -br addr Sesja SSH może być pod starym adresem DHCP (np. 192.168.100.2). Ponowna konfiguracja statyczna (skan + menu): sudo ./configure-static-dual-nic.sh EOF } while [[ $# -gt 0 ]]; do case "$1" in --dry-run) DRY_RUN=true; shift ;; --force-dhcp) FORCE_DHCP=true; shift ;; --backup) if [[ $# -lt 2 ]]; then echo "BŁĄD: --backup wymaga ścieżki." >&2 exit 1 fi BACKUP_FILE="$2" shift 2 ;; -h|--help) usage; exit 0 ;; *) echo "Nieznana opcja: $1" >&2; usage >&2; exit 1 ;; esac done if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then echo "BŁĄD: Uruchom skrypt jako root (sudo)." >&2 exit 1 fi if ! command -v netplan >/dev/null 2>&1; then echo "BŁĄD: netplan nie jest zainstalowany." >&2 exit 1 fi DHCP_YAML=$(cat <&2; return 1; } chmod 600 "$tmp" printf '%s\n' "$content" > "$tmp" mv -f "$tmp" "$NETPLAN_FILE" chmod 600 "$NETPLAN_FILE" } netplan_file_valid() { local file="$1" local tmpdir [[ -f "$file" ]] || return 1 tmpdir=$(mktemp -d) || return 1 mkdir -p "$tmpdir/etc/netplan" cp "$file" "$tmpdir/etc/netplan/00-installer-config.yaml" if netplan generate --root-dir "$tmpdir" &>/dev/null; then rm -rf "$tmpdir" return 0 fi rm -rf "$tmpdir" return 1 } find_valid_backup() { local f if [[ -n "$BACKUP_FILE" ]]; then if netplan_file_valid "$BACKUP_FILE"; then echo "$BACKUP_FILE" return 0 fi echo "BŁĄD: Backup nie przechodzi netplan generate: $BACKUP_FILE" >&2 return 1 fi # Najpierw najnowsze poprawne; pomijaj zepsute backupy ze skryptu statycznego while IFS= read -r f; do [[ -z "$f" ]] && continue if netplan_file_valid "$f"; then echo "$f" return 0 fi echo " Pomijam niepoprawny backup: $f" >&2 done < <(ls -1t "${NETPLAN_FILE}.bak."* 2>/dev/null || true) return 1 } echo "=== Przywracanie DHCP ===" source_file="" action="dhcp-fallback" if [[ "$FORCE_DHCP" != true ]]; then if backup_path=$(find_valid_backup); then echo " Źródło: backup $backup_path" source_file="$backup_path" action="restore-backup" else echo " Brak poprawnego backupu — używam szablonu DHCP." fi else echo " --force-dhcp: szablon DHCP (bez backupów)." fi if [[ "$DRY_RUN" == true ]]; then echo "=== DRY-RUN ===" if [[ "$action" == "restore-backup" ]]; then echo "Przywrócono by został plik z: $source_file" echo "--- zawartość backupu ---" cat "$source_file" else echo "Zapisano by został $NETPLAN_FILE:" echo "$DHCP_YAML" fi echo "" echo "Dry-run: netplan apply pominięty." exit 0 fi if [[ "$action" == "restore-backup" ]]; then cp -a "$source_file" "$NETPLAN_FILE" echo " Przywrócono: $NETPLAN_FILE <- $source_file" else write_netplan_file "$DHCP_YAML" echo " Zapisano szablon DHCP: $NETPLAN_FILE" fi echo "=== netplan generate ===" if ! netplan generate 2>&1; then echo "" echo "BŁĄD: netplan generate nie powiódł się." if [[ "$action" == "restore-backup" ]]; then echo "Próbuję szablon DHCP..." write_netplan_file "$DHCP_YAML" netplan generate else exit 1 fi fi echo "=== netplan apply ===" netplan apply sleep 2 echo "=== Weryfikacja ===" ip -br addr show "$NIC_PRIMARY" "$NIC_LAN" 2>/dev/null || ip -br addr echo "" echo "=== GOTOWE (DHCP) ===" echo "Sprawdź aktualne adresy: ip -br addr" echo "Połącz się ponownie SSH pod adresem DHCP (np. ip addr show enp3s0)." echo "Aby ponownie ustawić statyczne IP: sudo $(dirname "$0")/configure-static-dual-nic.sh"