67 lines
1.6 KiB
Bash
Executable File
67 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
DEFAULT_ENV_FILE="$SCRIPT_DIR/../secrets/deploy.secrets.env"
|
|
|
|
if [ "$#" -gt 1 ]; then
|
|
echo "usage: $0 [ /path/to/deploy.secrets.env ]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ENV_FILE="${1:-$DEFAULT_ENV_FILE}"
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo "env file not found: $ENV_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# shellcheck disable=SC1090
|
|
. "$ENV_FILE"
|
|
|
|
required_vars="CT_ID CT_HOSTNAME CT_STORAGE CT_TEMPLATE CT_ROOTFS_SIZE CT_CORES CT_MEMORY CT_SWAP CT_BRIDGE CT_IP CT_GW CT_PASSWORD CT_UNPRIVILEGED CT_ONBOOT CT_FEATURES"
|
|
for var_name in $required_vars; do
|
|
eval "var_value=\${$var_name:-}"
|
|
if [ -z "$var_value" ]; then
|
|
echo "missing required variable: $var_name" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
if pct status "$CT_ID" >/dev/null 2>&1; then
|
|
echo "CT $CT_ID already exists" >&2
|
|
exit 1
|
|
fi
|
|
|
|
NET0="name=eth0,bridge=$CT_BRIDGE,ip=$CT_IP,gw=$CT_GW"
|
|
if [ -n "${CT_VLAN:-}" ]; then
|
|
NET0="$NET0,tag=$CT_VLAN"
|
|
fi
|
|
|
|
pct create "$CT_ID" "$CT_TEMPLATE" \
|
|
--hostname "$CT_HOSTNAME" \
|
|
--cores "$CT_CORES" \
|
|
--memory "$CT_MEMORY" \
|
|
--swap "$CT_SWAP" \
|
|
--rootfs "$CT_STORAGE:$CT_ROOTFS_SIZE" \
|
|
--password "$CT_PASSWORD" \
|
|
--unprivileged "$CT_UNPRIVILEGED" \
|
|
--onboot "$CT_ONBOOT" \
|
|
--features "$CT_FEATURES" \
|
|
--net0 "$NET0" \
|
|
--nameserver "${CT_NAMESERVER:-}" \
|
|
--searchdomain "${CT_SEARCHDOMAIN:-}" \
|
|
--ostype debian
|
|
|
|
pct start "$CT_ID"
|
|
sleep 5
|
|
|
|
pct exec "$CT_ID" -- bash -lc '
|
|
set -eu
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get update
|
|
apt-get install -y curl ca-certificates bash unzip xz-utils jq
|
|
mkdir -p /root/bootstrap /etc/activitywatch
|
|
'
|
|
|
|
echo "CT $CT_ID created and bootstrapped"
|