From 0ff8a797fe187f6651b7aa92a2ad4dddd3871163 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 16 Mar 2026 18:22:30 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20Wizard=20so=20sp=C3=A4tnou?= =?UTF-8?q?=20navig=C3=A1ciou=20+=20oddelenie=20n=C3=A1zvu=20a=20hostname?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cancel = Späť na predchádzajúci krok (na kroku 1 = Zrušiť) - Názov kontajnera sa zobrazí v Proxmoxe tak ako ho zadáš - Hostname sa automaticky vytvorí malými písmenami - Resources (disk/ram/cpu) v jednom kroku - Potvrdenie zobrazuje kompletný súhrn Co-Authored-By: Claude Opus 4.6 (1M context) --- ct/ubuntu.sh | 268 +++++++++++++++++++++++++++++++-------------------- 1 file changed, 164 insertions(+), 104 deletions(-) diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh index 44a299a..d5935aa 100644 --- a/ct/ubuntu.sh +++ b/ct/ubuntu.sh @@ -62,65 +62,7 @@ simple_install() { header_info - # --- KROK 1: Hostname --- - HN=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "HOSTNAME" \ - --inputbox "\nZadaj hostname pre kontajner:" 10 58 "ubuntu" \ - 3>&1 1>&2 2>&3) || exit_script - HN=$(echo "${HN,,}" | tr -d ' ') - [[ -z "$HN" ]] && HN="ubuntu" - - # --- KROK 2: IP adresa --- - local ip_input - ip_input=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "IP ADRESA" \ - --inputbox "\nZadaj statickú IP adresu s maskou\n(napr. 192.168.1.100/24)\n\nAlebo nechaj prázdne pre DHCP:" 12 58 "" \ - 3>&1 1>&2 2>&3) || exit_script - - if [[ -n "$ip_input" ]]; then - NET="$ip_input" - # Gateway - local default_gw - default_gw=$(echo "$ip_input" | cut -d'/' -f1 | sed 's/\.[0-9]*$/.1/') - GATE=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "GATEWAY" \ - --inputbox "\nZadaj gateway:" 10 58 "$default_gw" \ - 3>&1 1>&2 2>&3) || exit_script - [[ -z "$GATE" ]] && GATE="$default_gw" - else - NET="dhcp" - GATE="" - fi - - # --- KROK 3: DNS --- - local dns_input - dns_input=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "DNS SERVERY" \ - --inputbox "\nZadaj DNS servery (oddelené medzerou):" 10 58 "8.8.8.8 1.1.1.1" \ - 3>&1 1>&2 2>&3) || exit_script - [[ -z "$dns_input" ]] && dns_input="8.8.8.8 1.1.1.1" - NS="-nameserver=${dns_input}" - - # --- KROK 4: Resources --- - DISK_SIZE=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "DISK" \ - --inputbox "\nVeľkosť disku v GB:" 10 58 "$var_disk" \ - 3>&1 1>&2 2>&3) || exit_script - [[ -z "$DISK_SIZE" ]] && DISK_SIZE="$var_disk" - - RAM_SIZE=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "RAM" \ - --inputbox "\nVeľkosť RAM v MB:" 10 58 "$var_ram" \ - 3>&1 1>&2 2>&3) || exit_script - [[ -z "$RAM_SIZE" ]] && RAM_SIZE="$var_ram" - - CORE_COUNT=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "CPU" \ - --inputbox "\nPočet CPU jadier:" 10 58 "$var_cpu" \ - 3>&1 1>&2 2>&3) || exit_script - [[ -z "$CORE_COUNT" ]] && CORE_COUNT="$var_cpu" - - # --- KROK 4: Výber užívateľov z users.json --- + # Stiahni users.json dopredu (len raz) msg_info "Sťahujem zoznam užívateľov" local users_json users_json=$(curl -fsSL "$USERS_JSON_URL") || { @@ -129,40 +71,183 @@ simple_install() { } msg_ok "Zoznam užívateľov stiahnutý" - # Parsovanie užívateľov bez jq — cez grep/sed + # Parsovanie užívateľov bez jq local usernames=() local key_counts=() while IFS= read -r uname; do [[ -n "$uname" ]] && usernames+=("$uname") done < <(echo "$users_json" | grep '"username"' | sed 's/.*"username"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/') - - # Počet SSH kľúčov pre každého užívateľa - local idx=0 for uname in "${usernames[@]}"; do local kc kc=$(echo "$users_json" | sed -n "/$uname/,/\]/p" | grep 'ssh-' | wc -l) key_counts+=("$kc") - idx=$((idx + 1)) done - local user_count=${#usernames[@]} - if [[ "$user_count" -eq 0 ]]; then - msg_warn "Žiadni užívatelia v users.json" - SELECTED_USERS="" - else - local checklist_args=() - for i in $(seq 0 $((user_count - 1))); do - checklist_args+=("${usernames[$i]}" "${key_counts[$i]} SSH kľúč(ov)" "ON") - done + # Predvolené hodnoty pre wizard + local _ct_name="Ubuntu" + local _ip_input="" + local _gate="" + local _dns="8.8.8.8 1.1.1.1" + local _disk="$var_disk" + local _ram="$var_ram" + local _cpu="$var_cpu" + local _selected_users="" - SELECTED_USERS=$(whiptail --backtitle "Ubuntu LXC Setup" \ - --title "UŽÍVATELIA" \ - --checklist "\nVyber užívateľov na vytvorenie:\n(SPACE = zaškrtni, ENTER = potvrď)" \ - $((user_count + 10)) 58 "$user_count" \ - "${checklist_args[@]}" \ - 3>&1 1>&2 2>&3) || exit_script + # Wizard so spätnou navigáciou + local STEP=1 + while true; do + case $STEP in + + # --- KROK 1: Názov kontajnera --- + 1) + if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "NÁZOV KONTAJNERA" \ + --ok-button "Ďalej" --cancel-button "Zrušiť" \ + --inputbox "\nZadaj názov kontajnera (zobrazí sa v Proxmoxe):\n\nHostname sa vytvorí automaticky malými písmenami." 12 58 "$_ct_name" \ + 3>&1 1>&2 2>&3); then + [[ -n "$result" ]] && _ct_name="$result" + ((STEP++)) + else + exit_script + fi + ;; + + # --- KROK 2: IP adresa + gateway --- + 2) + if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "IP ADRESA" \ + --ok-button "Ďalej" --cancel-button "Späť" \ + --inputbox "\nZadaj statickú IP adresu s maskou\n(napr. 192.168.1.100/24)\n\nAlebo nechaj prázdne pre DHCP:" 12 58 "$_ip_input" \ + 3>&1 1>&2 2>&3); then + _ip_input="$result" + if [[ -n "$_ip_input" ]]; then + local default_gw + default_gw=$(echo "$_ip_input" | cut -d'/' -f1 | sed 's/\.[0-9]*$/.1/') + [[ -z "$_gate" ]] && _gate="$default_gw" + if gw_result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "GATEWAY" \ + --ok-button "Ďalej" --cancel-button "Späť" \ + --inputbox "\nZadaj gateway:" 10 58 "$_gate" \ + 3>&1 1>&2 2>&3); then + _gate="$gw_result" + [[ -z "$_gate" ]] && _gate="$default_gw" + ((STEP++)) + else + continue + fi + else + _gate="" + ((STEP++)) + fi + else + ((STEP--)) + fi + ;; + + # --- KROK 3: DNS --- + 3) + if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "DNS SERVERY" \ + --ok-button "Ďalej" --cancel-button "Späť" \ + --inputbox "\nZadaj DNS servery (oddelené medzerou):" 10 58 "$_dns" \ + 3>&1 1>&2 2>&3); then + [[ -n "$result" ]] && _dns="$result" + ((STEP++)) + else + ((STEP--)) + fi + ;; + + # --- KROK 4: Resources --- + 4) + if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "ZDROJE" \ + --ok-button "Ďalej" --cancel-button "Späť" \ + --inputbox "\nDisk (GB) / RAM (MB) / CPU (jadrá)\noddelené medzerou:" 10 58 "$_disk $_ram $_cpu" \ + 3>&1 1>&2 2>&3); then + if [[ -n "$result" ]]; then + _disk=$(echo "$result" | awk '{print $1}') + _ram=$(echo "$result" | awk '{print $2}') + _cpu=$(echo "$result" | awk '{print $3}') + [[ -z "$_disk" ]] && _disk="$var_disk" + [[ -z "$_ram" ]] && _ram="$var_ram" + [[ -z "$_cpu" ]] && _cpu="$var_cpu" + fi + ((STEP++)) + else + ((STEP--)) + fi + ;; + + # --- KROK 5: Výber užívateľov --- + 5) + if [[ "$user_count" -eq 0 ]]; then + _selected_users="" + ((STEP++)) + else + local checklist_args=() + for i in $(seq 0 $((user_count - 1))); do + checklist_args+=("${usernames[$i]}" "${key_counts[$i]} SSH kľúč(ov)" "ON") + done + + if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "UŽÍVATELIA" \ + --ok-button "Ďalej" --cancel-button "Späť" \ + --checklist "\nVyber užívateľov na vytvorenie:\n(SPACE = zaškrtni, ENTER = potvrď)" \ + $((user_count + 10)) 58 "$user_count" \ + "${checklist_args[@]}" \ + 3>&1 1>&2 2>&3); then + _selected_users="$result" + ((STEP++)) + else + ((STEP--)) + fi + fi + ;; + + # --- KROK 6: Potvrdenie --- + 6) + local _hn + _hn=$(echo "${_ct_name,,}" | tr -d ' ' | tr -c 'a-z0-9-' '-') + local _net_display="dhcp" + [[ -n "$_ip_input" ]] && _net_display="$_ip_input" + + local confirm_text="Názov: $_ct_name\n" + confirm_text+="Hostname: $_hn\n" + confirm_text+="IP: $_net_display\n" + [[ -n "$_gate" ]] && confirm_text+="Gateway: $_gate\n" + confirm_text+="DNS: $_dns\n" + confirm_text+="Disk: ${_disk}GB RAM: ${_ram}MB CPU: ${_cpu}\n" + [[ -n "$_selected_users" ]] && confirm_text+="Užívatelia: $_selected_users\n" + + if whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/6]" \ + --title "POTVRDENIE" \ + --ok-button "Inštalovať" --cancel-button "Späť" \ + --yesno "$confirm_text\nPokračovať s inštaláciou?" 18 58; then + break + else + ((STEP--)) + fi + ;; + esac + done + + # Nastavenie premenných z wizardu + HN=$(echo "${_ct_name,,}" | tr -d ' ' | tr -c 'a-z0-9-' '-') + APP_DISPLAY_NAME="$_ct_name" + if [[ -n "$_ip_input" ]]; then + NET="$_ip_input" + GATE="$_gate" + else + NET="dhcp" + GATE="" fi + NS="-nameserver=${_dns}" + DISK_SIZE="$_disk" + RAM_SIZE="$_ram" + CORE_COUNT="$_cpu" + SELECTED_USERS="$_selected_users" # Export pre install skript export SELECTED_USERS @@ -177,7 +262,6 @@ simple_install() { VLAN="" MTU="" SD="" - NS="" IPV6_METHOD="auto" IPV6_ADDR="" IPV6_GATE="" @@ -198,30 +282,6 @@ simple_install() { VERBOSE="no" METHOD="simple" DIAGNOSTICS="no" - - # Zobraz súhrn - header_info - echo -e "${DEFAULT}${BOLD}${BL}Ubuntu LXC - Inštalácia${CL}" - echo -e "${TAB}${HOSTNAME}${YW} Hostname: ${GN}${HN}${CL}" - echo -e "${TAB}${NETWORK}${YW} IP: ${GN}${NET}${CL}" - if [[ -n "$GATE" ]]; then - echo -e "${TAB}${GATEWAY}${YW} Gateway: ${GN}${GATE}${CL}" - fi - echo -e "${TAB}${INFO}${YW} DNS: ${GN}${dns_input}${CL}" - echo -e "${TAB}${DISKSIZE}${YW} Disk: ${GN}${DISK_SIZE}GB${CL}" - echo -e "${TAB}${RAMSIZE}${YW} RAM: ${GN}${RAM_SIZE}MB${CL}" - echo -e "${TAB}${CPUCORE}${YW} CPU: ${GN}${CORE_COUNT} jadier${CL}" - if [[ -n "$SELECTED_USERS" ]]; then - echo -e "${TAB}${ROOTSSH}${YW} Užívatelia: ${GN}${SELECTED_USERS}${CL}" - fi - echo "" - - # Potvrdenie - if ! whiptail --backtitle "Ubuntu LXC Setup" \ - --title "POTVRDENIE" \ - --yesno "Pokračovať s inštaláciou?" 8 58; then - exit_script - fi } # Spustenie