Files
Ubuntu24_LXC/ct/ubuntu.sh
martin 0ff8a797fe feat: Wizard so spätnou navigáciou + oddelenie názvu a hostname
- 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) <noreply@anthropic.com>
2026-03-16 18:22:30 +01:00

294 lines
8.5 KiB
Bash

#!/usr/bin/env bash
source <(curl -fsSL https://git.inbox.sk/proxmox/Ubuntu24_LXC/raw/branch/main/misc/build.func)
# Vlastný skript pre Ubuntu 24.04 LXC kontajner
# Zdroj: https://git.inbox.sk/proxmox/Ubuntu24_LXC
APP="Ubuntu"
var_tags="${var_tags:-os}"
var_cpu="${var_cpu:-4}"
var_ram="${var_ram:-4096}"
var_disk="${var_disk:-32}"
var_os="${var_os:-ubuntu}"
var_version="${var_version:-24.04}"
var_unprivileged="${var_unprivileged:-1}"
# URL pre stiahnutie konfigurácie
USERS_JSON_URL="https://git.inbox.sk/proxmox/Ubuntu24_LXC/raw/branch/main/config/users.json"
CLAUDE_SETUP_URL="https://git.inbox.sk/proxmox/Ubuntu24_LXC/raw/branch/main/config/claude-setup.md"
header_info "$APP"
variables
color
catch_errors
# =============================================================================
# update_script() - aktualizácia existujúceho kontajnera
# =============================================================================
function update_script() {
header_info
check_container_storage
check_container_resources
if [[ ! -d /var ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
msg_info "Updating ${APP} LXC"
$STD apt-get update
$STD apt-get -y upgrade
msg_ok "Updated ${APP} LXC"
msg_ok "Updated successfully!"
exit
}
# =============================================================================
# simple_install() - zjednodušená inštalácia s výberom užívateľov
# =============================================================================
simple_install() {
pve_check
shell_check
root_check
arch_check
NEXTID=$(pvesh get /cluster/nextid)
# Timezone
if command -v timedatectl >/dev/null 2>&1; then
timezone=$(timedatectl show --value --property=Timezone 2>/dev/null || echo "UTC")
elif [ -f /etc/timezone ]; then
timezone=$(cat /etc/timezone)
else
timezone="UTC"
fi
header_info
# Stiahni users.json dopredu (len raz)
msg_info "Sťahujem zoznam užívateľov"
local users_json
users_json=$(curl -fsSL "$USERS_JSON_URL") || {
msg_error "Nepodarilo sa stiahnuť users.json"
exit 1
}
msg_ok "Zoznam užívateľov stiahnutý"
# 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/')
for uname in "${usernames[@]}"; do
local kc
kc=$(echo "$users_json" | sed -n "/$uname/,/\]/p" | grep 'ssh-' | wc -l)
key_counts+=("$kc")
done
local user_count=${#usernames[@]}
# 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=""
# 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
export USERS_JSON="$users_json"
export CLAUDE_SETUP_URL
# --- Nastavenie premenných pre build_container ---
CT_TYPE="$var_unprivileged"
CT_ID="$NEXTID"
BRG="${var_brg:-vmbr0}"
MAC=""
VLAN=""
MTU=""
SD=""
IPV6_METHOD="auto"
IPV6_ADDR=""
IPV6_GATE=""
SSH="no"
SSH_AUTHORIZED_KEY=""
APT_CACHER=""
APT_CACHER_IP=""
ENABLE_FUSE="no"
ENABLE_TUN="no"
ENABLE_GPU="no"
ENABLE_NESTING="1"
ENABLE_KEYCTL="0"
ENABLE_MKNOD="0"
PROTECT_CT="no"
CT_TIMEZONE="$timezone"
TAGS="community-script;${var_tags:-}"
PW=""
VERBOSE="no"
METHOD="simple"
DIAGNOSTICS="no"
}
# Spustenie
simple_install
build_container
description
msg_ok "Completed successfully!\n"
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"