diff --git a/spoke/setup-network.sh b/spoke/setup-network.sh index 820f19e..d98a5b3 100755 --- a/spoke/setup-network.sh +++ b/spoke/setup-network.sh @@ -26,9 +26,40 @@ check_deps() { [ "$(id -u)" -eq 0 ] || die "Run as root" -check_deps ip netplan systemctl ping +check_deps ip netplan systemctl ping hostnamectl header "TinyBoard Network Setup" +echo "" +echo " 0) Change hostname" +echo " 1) Configure static IP" +echo " q) Quit" +echo "" +read -rp "Choose: " NET_OPT +echo "" + +case "$NET_OPT" in +0) + header "Change Hostname" + CURRENT_HOSTNAME=$(hostname) + echo -e "Current hostname: ${YELLOW}$CURRENT_HOSTNAME${NC}" + read -rp "Enter new hostname (e.g. rocky): " NEW_HOSTNAME + [ -n "$NEW_HOSTNAME" ] || die "Hostname cannot be empty." + [[ "$NEW_HOSTNAME" =~ ^[a-zA-Z0-9._-]+$ ]] || die "Invalid hostname — use only letters, numbers, dots, underscores, hyphens." + hostnamectl set-hostname "$NEW_HOSTNAME" + echo "$NEW_HOSTNAME" > /etc/hostname + sed -i "s/${CURRENT_HOSTNAME}/${NEW_HOSTNAME}/g" /etc/hosts + info "Hostname changed to: $NEW_HOSTNAME" + exit 0 + ;; +1) + ;; +q|Q) + exit 0 + ;; +*) + die "Invalid choice." + ;; +esac info "Available interfaces:" ip -o link show | awk -F': ' 'NR>1 {print " " $2}' @@ -98,7 +129,13 @@ if $IS_WIFI; then header "WiFi Credentials" CURRENT_SSID="" if [ -f "$NETPLAN_FILE" ]; then - CURRENT_SSID=$(grep -A1 'access-points:' "$NETPLAN_FILE" 2>/dev/null | tail -1 | tr -d ' "' | sed 's/:$//' || true) + CURRENT_SSID=$(python3 - "$NETPLAN_FILE" <<'PYEOF' +import sys, re +txt = open(sys.argv[1]).read() +m = re.search(r'access-points:\s*\n\s+["\']{0,1}([^"\':\n]+)["\']{0,1}:', txt) +print(m.group(1).strip() if m else "") +PYEOF +) fi KEEP_WIFI="n"