Initial import: bare-metal stacks, Server UI, GPU fan, tutorials.
Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI, control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+189
@@ -0,0 +1,189 @@
|
||||
#!/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 <<EOF
|
||||
network:
|
||||
version: 2
|
||||
ethernets:
|
||||
${NIC_PRIMARY}:
|
||||
dhcp4: true
|
||||
${NIC_LAN}:
|
||||
dhcp4: true
|
||||
EOF
|
||||
)
|
||||
|
||||
write_netplan_file() {
|
||||
local content="$1"
|
||||
local tmp
|
||||
tmp=$(mktemp) || { echo "BŁĄD: mktemp nie powiódł się." >&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"
|
||||
Reference in New Issue
Block a user