- Krok 1: Názov kontajnera (zobrazenie v Proxmoxe) - Krok 2: Hostname (editovateľný, predvyplnený z názvu) - Krok 3: IP + gateway - Krok 4: DNS - Krok 5: Disk - Krok 6: RAM - Krok 7: CPU - Krok 8: Užívatelia - Krok 9: Potvrdenie - Oprava trailing pomlčky v hostname (sed orezanie) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
335 lines
9.6 KiB
Bash
335 lines
9.6 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 _hn=""
|
|
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=""
|
|
local MAX_STEP=9
|
|
|
|
# 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/$MAX_STEP]" \
|
|
--title "NÁZOV KONTAJNERA" \
|
|
--ok-button "Ďalej" --cancel-button "Zrušiť" \
|
|
--inputbox "\nZadaj názov kontajnera (zobrazí sa v Proxmoxe):" 10 58 "$_ct_name" \
|
|
3>&1 1>&2 2>&3); then
|
|
[[ -n "$result" ]] && _ct_name="$result"
|
|
# Predvyplň hostname z názvu ak ešte nebol zadaný
|
|
[[ -z "$_hn" ]] && _hn=$(echo "${_ct_name,,}" | tr -d ' ' | sed 's/[^a-z0-9-]/-/g; s/^-*//; s/-*$//')
|
|
((STEP++))
|
|
else
|
|
exit_script
|
|
fi
|
|
;;
|
|
|
|
# --- KROK 2: Hostname ---
|
|
2)
|
|
if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--title "HOSTNAME" \
|
|
--ok-button "Ďalej" --cancel-button "Späť" \
|
|
--inputbox "\nHostname kontajnera (malé písmená, čísla, pomlčky):" 10 58 "$_hn" \
|
|
3>&1 1>&2 2>&3); then
|
|
if [[ -n "$result" ]]; then
|
|
_hn=$(echo "${result,,}" | tr -d ' ' | sed 's/[^a-z0-9-]/-/g; s/^-*//; s/-*$//')
|
|
fi
|
|
((STEP++))
|
|
else
|
|
((STEP--))
|
|
fi
|
|
;;
|
|
|
|
# --- KROK 3: IP adresa + gateway ---
|
|
3)
|
|
if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--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/$MAX_STEP]" \
|
|
--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 4: DNS ---
|
|
4)
|
|
if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--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 5: Disk ---
|
|
5)
|
|
if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--title "DISK" \
|
|
--ok-button "Ďalej" --cancel-button "Späť" \
|
|
--inputbox "\nVeľkosť disku v GB:" 10 58 "$_disk" \
|
|
3>&1 1>&2 2>&3); then
|
|
[[ -n "$result" ]] && _disk="$result"
|
|
((STEP++))
|
|
else
|
|
((STEP--))
|
|
fi
|
|
;;
|
|
|
|
# --- KROK 6: RAM ---
|
|
6)
|
|
if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--title "RAM" \
|
|
--ok-button "Ďalej" --cancel-button "Späť" \
|
|
--inputbox "\nVeľkosť RAM v MB:" 10 58 "$_ram" \
|
|
3>&1 1>&2 2>&3); then
|
|
[[ -n "$result" ]] && _ram="$result"
|
|
((STEP++))
|
|
else
|
|
((STEP--))
|
|
fi
|
|
;;
|
|
|
|
# --- KROK 7: CPU ---
|
|
7)
|
|
if result=$(whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--title "CPU" \
|
|
--ok-button "Ďalej" --cancel-button "Späť" \
|
|
--inputbox "\nPočet CPU jadier:" 10 58 "$_cpu" \
|
|
3>&1 1>&2 2>&3); then
|
|
[[ -n "$result" ]] && _cpu="$result"
|
|
((STEP++))
|
|
else
|
|
((STEP--))
|
|
fi
|
|
;;
|
|
|
|
# --- KROK 8: Výber užívateľov ---
|
|
8)
|
|
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/$MAX_STEP]" \
|
|
--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 9: Potvrdenie ---
|
|
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\n"
|
|
confirm_text+="RAM: ${_ram}MB\n"
|
|
confirm_text+="CPU: ${_cpu} jadier\n"
|
|
[[ -n "$_selected_users" ]] && confirm_text+="Užívatelia: $_selected_users\n"
|
|
|
|
if whiptail --backtitle "Ubuntu LXC Setup [Krok $STEP/$MAX_STEP]" \
|
|
--title "POTVRDENIE" \
|
|
--ok-button "Inštalovať" --cancel-button "Späť" \
|
|
--yesno "$confirm_text\nPokračovať s inštaláciou?" 20 58; then
|
|
break
|
|
else
|
|
((STEP--))
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Nastavenie premenných z wizardu
|
|
HN="$_hn"
|
|
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}"
|