Files
proxmox-vm-template/ubuntu-lts.sh
T
2026-06-05 14:19:33 +02:00

98 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
DIR=$(
cd "$(dirname "$0")" || exit 1
pwd
)
mapfile -t LTS_RELEASES < <(curl -s https://changelogs.ubuntu.com/meta-release-lts | grep "^Dist:" | awk '{print $2}')
if [ ${#LTS_RELEASES[@]} -eq 0 ]; then
echo "Error: Could not fetch LTS release list from Ubuntu"
exit 1
fi
LAST_LTS_RELEASE="${LTS_RELEASES[-1]}"
if [ -n "$1" ]; then
SELECTED_RELEASE="$1"
VALID=0
for r in "${LTS_RELEASES[@]}"; do
[ "$r" = "$SELECTED_RELEASE" ] && VALID=1 && break
done
if [ "$VALID" -eq 0 ]; then
echo "Error: '$SELECTED_RELEASE' is not a valid LTS release."
echo "Available: ${LTS_RELEASES[*]}"
exit 1
fi
else
echo ""
echo "Available Ubuntu LTS versions:"
for i in "${!LTS_RELEASES[@]}"; do
if [ "${LTS_RELEASES[$i]}" = "$SELECTED_RELEASE" ]; then
echo " $((i+1))) ${LTS_RELEASES[$i]} (latest)"
else
echo " $((i+1))) ${LTS_RELEASES[$i]}"
fi
done
echo ""
read -rp "Select version [1-${#LTS_RELEASES[@]}, default: ${#LTS_RELEASES[@]}]: " SELECTION
SELECTION="${SELECTION:-${#LTS_RELEASES[@]}}"
if ! [[ "$SELECTION" =~ ^[0-9]+$ ]] || [ "$SELECTION" -lt 1 ] || [ "$SELECTION" -gt "${#LTS_RELEASES[@]}" ]; then
echo "Error: Invalid selection"
exit 1
fi
SELECTED_RELEASE="${LTS_RELEASES[$((SELECTION-1))]}"
fi
echo ""
echo "This script will download and setup a VM with Ubuntu LTS: $SELECTED_RELEASE"
echo ""
if [ "$EUID" -ne 0 ]; then
echo "Please run as root"
exit
fi
if [ ! -f "$DIR/ssh-keys.pub" ]; then
echo "Warning ssh-keys.pub doesn't exists"
echo "Will abort now"
exit
fi
echo "Check and re-download Image $SELECTED_RELEASE-server-cloudimg-amd64.img if there is a newer img file"
wget -N "https://cloud-images.ubuntu.com/$SELECTED_RELEASE/current/$SELECTED_RELEASE-server-cloudimg-amd64.img" -P /tmp/
echo "Enter VM ID"
read -r VM_ID
echo "Enter VM Name"
read -r VM_NAME
echo "Ensure libguestfs-tools is installed"
apt install libguestfs-tools -y
echo "Create copy of $SELECTED_RELEASE-server-cloudimg-amd64 for image modification"
cp -r "/tmp/$SELECTED_RELEASE-server-cloudimg-amd64.img" "/tmp/$SELECTED_RELEASE-server-cloudimg-amd64.modified.img"
echo "Install qemu-guest-agent on Ubuntu image"
virt-customize -a "/tmp/$SELECTED_RELEASE-server-cloudimg-amd64.modified.img" --install qemu-guest-agent
echo "Create Proxmox VM image from Ubuntu Cloud Image"
qm create "$VM_ID" --memory 1024 --balloon 0 --cores 2 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
qm set "$VM_ID" --scsi0 local-lvm:0,import-from="/tmp/$SELECTED_RELEASE-server-cloudimg-amd64.modified.img"
qm set "$VM_ID" --agent enabled=1,fstrim_cloned_disks=1
echo "Create Cloud-Init Disk and configure boot"
qm set "$VM_ID" --ide2 local-lvm:cloudinit
qm set "$VM_ID" --boot order=scsi0
echo "Configure vm"
qm set "$VM_ID" \
--name "$VM_NAME" \
--onboot 1 \
--ciuser "devops" \
--sshkeys "$DIR/ssh-keys.pub" \
--ipconfig0 "ip=dhcp,ip6=dhcp"
echo "Cleanup: delete modified cloudimg"
rm -f "/tmp/$SELECTED_RELEASE-server-cloudimg-amd64.modified.img"