fix(build): rename HOSTNAME -> CT_HOSTNAME (shadowed bash builtin), add VLAN_TAG prompt, fail fast on network timeout
HOSTNAME is a bash built-in always containing the host's name, so the "-z HOSTNAME" check never fired and the prompt was silently skipped — containers ended up named after the Proxmox host. Also added an optional VLAN tag prompt (empty = no tag), and the network wait loop now exits with an error if the network never comes up instead of silently proceeding to a guaranteed-broken apt-get update.
This commit is contained in:
+20
-8
@@ -11,6 +11,9 @@
|
|||||||
# and may override the DEFAULT_* values below.
|
# and may override the DEFAULT_* values below.
|
||||||
#
|
#
|
||||||
# Caller may define print_app_summary() to customize the trailing summary.
|
# Caller may define print_app_summary() to customize the trailing summary.
|
||||||
|
#
|
||||||
|
# NB: We use CT_HOSTNAME (not HOSTNAME) because HOSTNAME is a bash built-in
|
||||||
|
# that always holds the current host's name, which would defeat any prompt.
|
||||||
|
|
||||||
# ── colors / logging ─────────────────────────────────────────────────────────
|
# ── colors / logging ─────────────────────────────────────────────────────────
|
||||||
if [[ -z "${_COLORS_LOADED:-}" ]]; then
|
if [[ -z "${_COLORS_LOADED:-}" ]]; then
|
||||||
@@ -61,6 +64,8 @@ show_header() {
|
|||||||
|
|
||||||
# ── prompts ──────────────────────────────────────────────────────────────────
|
# ── prompts ──────────────────────────────────────────────────────────────────
|
||||||
# Each prompt is skipped if the corresponding variable is already set in env.
|
# Each prompt is skipped if the corresponding variable is already set in env.
|
||||||
|
# VLAN_TAG uses ${VLAN_TAG+x} so that explicitly setting it to "" via env
|
||||||
|
# skips the prompt (= "no VLAN, don't ask").
|
||||||
prompt_lxc_config() {
|
prompt_lxc_config() {
|
||||||
if [[ -z "${CTID:-}" ]]; then
|
if [[ -z "${CTID:-}" ]]; then
|
||||||
read -rp "Container ID [auto]: " CTID
|
read -rp "Container ID [auto]: " CTID
|
||||||
@@ -68,9 +73,9 @@ prompt_lxc_config() {
|
|||||||
fi
|
fi
|
||||||
echo " → CTID: $CTID"
|
echo " → CTID: $CTID"
|
||||||
|
|
||||||
if [[ -z "${HOSTNAME:-}" ]]; then
|
if [[ -z "${CT_HOSTNAME:-}" ]]; then
|
||||||
read -rp "Hostname [$DEFAULT_HOSTNAME]: " HOSTNAME
|
read -rp "Hostname [$DEFAULT_HOSTNAME]: " CT_HOSTNAME
|
||||||
HOSTNAME="${HOSTNAME:-$DEFAULT_HOSTNAME}"
|
CT_HOSTNAME="${CT_HOSTNAME:-$DEFAULT_HOSTNAME}"
|
||||||
fi
|
fi
|
||||||
if [[ -z "${DISK_SIZE:-}" ]]; then
|
if [[ -z "${DISK_SIZE:-}" ]]; then
|
||||||
read -rp "Disk size in GB [$DEFAULT_DISK]: " DISK_SIZE
|
read -rp "Disk size in GB [$DEFAULT_DISK]: " DISK_SIZE
|
||||||
@@ -88,6 +93,9 @@ prompt_lxc_config() {
|
|||||||
read -rp "Bridge [$DEFAULT_BRIDGE]: " BRIDGE
|
read -rp "Bridge [$DEFAULT_BRIDGE]: " BRIDGE
|
||||||
BRIDGE="${BRIDGE:-$DEFAULT_BRIDGE}"
|
BRIDGE="${BRIDGE:-$DEFAULT_BRIDGE}"
|
||||||
fi
|
fi
|
||||||
|
if [[ -z "${VLAN_TAG+x}" ]]; then
|
||||||
|
read -rp "VLAN tag (empty for none): " VLAN_TAG
|
||||||
|
fi
|
||||||
if [[ -z "${TEMPLATE_STORAGE:-}" ]]; then
|
if [[ -z "${TEMPLATE_STORAGE:-}" ]]; then
|
||||||
read -rp "Template storage [$DEFAULT_TEMPLATE_STORAGE]: " TEMPLATE_STORAGE
|
read -rp "Template storage [$DEFAULT_TEMPLATE_STORAGE]: " TEMPLATE_STORAGE
|
||||||
TEMPLATE_STORAGE="${TEMPLATE_STORAGE:-$DEFAULT_TEMPLATE_STORAGE}"
|
TEMPLATE_STORAGE="${TEMPLATE_STORAGE:-$DEFAULT_TEMPLATE_STORAGE}"
|
||||||
@@ -127,15 +135,17 @@ create_lxc() {
|
|||||||
ROOT_PASSWORD=$(openssl rand -base64 18)
|
ROOT_PASSWORD=$(openssl rand -base64 18)
|
||||||
|
|
||||||
local net_opts="name=eth0,bridge=$BRIDGE"
|
local net_opts="name=eth0,bridge=$BRIDGE"
|
||||||
|
[[ -n "${VLAN_TAG:-}" ]] && net_opts+=",tag=$VLAN_TAG"
|
||||||
if [[ "$IPCFG" == "dhcp" ]]; then
|
if [[ "$IPCFG" == "dhcp" ]]; then
|
||||||
net_opts+=",ip=dhcp"
|
net_opts+=",ip=dhcp"
|
||||||
else
|
else
|
||||||
net_opts+=",ip=$IPCFG,gw=$GATEWAY"
|
net_opts+=",ip=$IPCFG,gw=$GATEWAY"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
msg_info "Creating unprivileged LXC $CTID ($HOSTNAME)..."
|
msg_info "Creating unprivileged LXC $CTID ($CT_HOSTNAME)..."
|
||||||
|
msg_info " net0: $net_opts"
|
||||||
pct create "$CTID" "$TEMPLATE_STORAGE:vztmpl/$TEMPLATE" \
|
pct create "$CTID" "$TEMPLATE_STORAGE:vztmpl/$TEMPLATE" \
|
||||||
--hostname "$HOSTNAME" \
|
--hostname "$CT_HOSTNAME" \
|
||||||
--cores "$CORES" \
|
--cores "$CORES" \
|
||||||
--memory "$RAM" \
|
--memory "$RAM" \
|
||||||
--swap 512 \
|
--swap 512 \
|
||||||
@@ -156,11 +166,13 @@ create_lxc() {
|
|||||||
local i
|
local i
|
||||||
for i in {1..30}; do
|
for i in {1..30}; do
|
||||||
if pct exec "$CTID" -- getent hosts deb.debian.org >/dev/null 2>&1; then
|
if pct exec "$CTID" -- getent hosts deb.debian.org >/dev/null 2>&1; then
|
||||||
break
|
msg_ok "Network up"
|
||||||
|
return 0
|
||||||
fi
|
fi
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
msg_ok "Network up"
|
msg_err "Network never came up. Check bridge/VLAN/gateway settings."
|
||||||
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── bootstrap installer inside the container ─────────────────────────────────
|
# ── bootstrap installer inside the container ─────────────────────────────────
|
||||||
@@ -189,7 +201,7 @@ print_summary() {
|
|||||||
msg_ok "Installation complete!"
|
msg_ok "Installation complete!"
|
||||||
echo
|
echo
|
||||||
echo "─────────────────────────────────────────────────────────────"
|
echo "─────────────────────────────────────────────────────────────"
|
||||||
echo " $APP LXC #$CTID — $HOSTNAME"
|
echo " $APP LXC #$CTID — $CT_HOSTNAME"
|
||||||
echo "─────────────────────────────────────────────────────────────"
|
echo "─────────────────────────────────────────────────────────────"
|
||||||
print_app_summary
|
print_app_summary
|
||||||
echo
|
echo
|
||||||
|
|||||||
Reference in New Issue
Block a user