This commit is contained in:
2026-02-22 05:28:36 +00:00
commit 306b511bd7

84
1 Normal file
View File

@@ -0,0 +1,84 @@
#!/usr/bin/env bash
set -euo pipefail
### ====== SETTINGS ======
VMID="${VMID:-9049}"
NAME="${NAME:-rocky-9-cloud}"
STORAGE="${STORAGE:-local-lvm}" # local-lvm or local
BRIDGE="${BRIDGE:-vmbr0}"
CORES="${CORES:-2}"
MEMORY="${MEMORY:-2048}" # MB
DISK_SIZE="${DISK_SIZE:-40G}"
CIUSER="${CIUSER:-rocky}"
IMG_DIR="${IMG_DIR:-/var/lib/vz/template/iso}"
# Rocky Linux 9 GenericCloud (qcow2)
IMG_URL="${IMG_URL:-https://download.rockylinux.org/pub/rocky/9/images/x86_64/Rocky-9-GenericCloud.latest.x86_64.qcow2}"
IMG_FILE="${IMG_FILE:-Rocky-9-GenericCloud.latest.x86_64.qcow2}"
SSHKEY_SRC="${SSHKEY_SRC:-/root/.ssh/authorized_keys}"
TMP_PUBKEY="/tmp/${NAME}-${VMID}-sshkey.pub"
### =======================
need_cmd() { command -v "$1" >/dev/null 2>&1 || { echo "ERROR: missing command: $1"; exit 1; }; }
need_cmd qm
need_cmd wget
need_cmd awk
echo "==> Checking SSH key: $SSHKEY_SRC"
if [[ ! -f "$SSHKEY_SRC" ]]; then
echo "ERROR: $SSHKEY_SRC not found. Put your key there or set SSHKEY_SRC=/path/key.pub"
exit 1
fi
awk '/^(ssh-rsa|ssh-ed25519|ecdsa-sha2-nistp256) /{print; exit}' "$SSHKEY_SRC" > "$TMP_PUBKEY" || true
if [[ ! -s "$TMP_PUBKEY" ]]; then
echo "ERROR: No SSH key line found in $SSHKEY_SRC"
exit 1
fi
echo "==> Downloading Rocky image (if missing)"
mkdir -p "$IMG_DIR"
if [[ ! -f "$IMG_DIR/$IMG_FILE" ]]; then
wget -O "$IMG_DIR/$IMG_FILE" "$IMG_URL"
else
echo " Exists: $IMG_DIR/$IMG_FILE"
fi
echo "==> Creating VM $VMID ($NAME)"
if qm status "$VMID" >/dev/null 2>&1; then
echo "ERROR: VMID $VMID already exists. export VMID=XXXX"
exit 1
fi
qm create "$VMID" \
--name "$NAME" \
--memory "$MEMORY" \
--cores "$CORES" \
--net0 "virtio,bridge=${BRIDGE}"
echo "==> Importing disk into $STORAGE"
qm importdisk "$VMID" "$IMG_DIR/$IMG_FILE" "$STORAGE"
echo "==> Attaching disk + cloud-init"
qm set "$VMID" --scsihw virtio-scsi-pci
qm set "$VMID" --scsi0 "${STORAGE}:vm-${VMID}-disk-0"
qm set "$VMID" --ide2 "${STORAGE}:cloudinit"
echo "==> Boot + console + agent"
qm set "$VMID" --boot order=scsi0
qm set "$VMID" --serial0 socket --vga serial0
qm set "$VMID" --agent enabled=1
echo "==> Cloud-init (user/ssh/dhcp)"
qm set "$VMID" --ciuser "$CIUSER"
qm set "$VMID" --sshkeys "$TMP_PUBKEY"
qm set "$VMID" --ipconfig0 ip=dhcp
echo "==> Resize disk to $DISK_SIZE"
qm resize "$VMID" scsi0 "$DISK_SIZE"
echo "==> Convert to template"
qm template "$VMID"
echo "✅ DONE: Rocky Linux 9 template created (VMID=$VMID)"
echo "Next: qm clone $VMID <NEWID> --name rocky9-vps --full"