#!/usr/bin/env bash # Ubuntu-24.04-Cloud-Image als VM-Template auf einem Knoten anlegen (Git-Bash auf dem Laptop # oder auf ops). Idempotent: Ein vorhandenes Template bleibt unverändert. # # make-template.sh [speicher] # # laut sites/knaster/proxmox.yaml (cluster.templates), z. B. 9044 für pve44 # [speicher] Ziel für Template-Disks (Standard: local-lvm) # # Das Image wird gegen SHA256SUMS von cloud-images.ubuntu.com (HTTPS) geprüft. Kein Secure Boot # (pre-enrolled-keys=0), weil die NVIDIA-DKMS-Module in den GPU-VMs nicht signiert sind. set -euo pipefail node=${1:?Aufruf: make-template.sh [speicher]} vmid=${2:?Aufruf: make-template.sh [speicher]} storage=${3:-local-lvm} ssh -T -o BatchMode=yes "$node" "VMID=$vmid STORAGE=$storage bash -s" <<'REMOTE' set -euo pipefail if qm status "$VMID" >/dev/null 2>&1; then echo "Template $VMID existiert schon auf $(hostname)"; exit 0; fi base=https://cloud-images.ubuntu.com/noble/current img=noble-server-cloudimg-amd64.img dir=/var/lib/vz/import mkdir -p "$dir" && cd "$dir" curl -fsSL -o SHA256SUMS "$base/SHA256SUMS" want=$(awk -v f="*$img" '$2 == f {print $1}' SHA256SUMS) [ -n "$want" ] || { echo "FEHLER: $img fehlt in SHA256SUMS" >&2; exit 1; } if ! echo "$want $img" | sha256sum -c --quiet >/dev/null 2>&1; then curl -fsSL -o "$img" "$base/$img" echo "$want $img" | sha256sum -c --quiet fi qm create "$VMID" --name "ubuntu-2404-tpl-$(hostname)" --ostype l26 --machine q35 --bios ovmf \ --cpu host --cores 2 --memory 2048 --scsihw virtio-scsi-single \ --efidisk0 "$STORAGE:0,efitype=4m,pre-enrolled-keys=0" \ --scsi0 "$STORAGE:0,import-from=$dir/$img,discard=on,ssd=1" \ --ide2 "$STORAGE:cloudinit" --boot order=scsi0 --serial0 socket \ --net0 virtio,bridge=vmbr0 --agent enabled=1 --tags "knaster;template" >/dev/null qm template "$VMID" echo "Template $VMID auf $(hostname) fertig ($(sha256sum "$img" | cut -c1-12))" REMOTE