diff options
Diffstat (limited to 'archive/vm-new')
| -rwxr-xr-x | archive/vm-new | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/archive/vm-new b/archive/vm-new new file mode 100755 index 0000000..3955c6c --- /dev/null +++ b/archive/vm-new @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +set -euo pipefail + +NAME="${1:-}" +RAM="${2:-4096}" # MiB +VCPUS="${3:-2}" + +BASE="/var/lib/libvirt/images/base/work01-base.qcow2" +DIR="/var/lib/libvirt/images/overlays" +DISK="${DIR}/${NAME}.qcow2" + +usage() { + echo "Usage: vm-new <name> [ramMiB=4096] [vcpus=2]" >&2 + exit 2 +} + +[[ -n "$NAME" ]] || usage + +case "$NAME" in + debian13-template|work01|Whonix-Gateway|Whonix-Workstation) + echo "Refusing: protected VM name '$NAME'." >&2 + exit 1 + ;; +esac + +if sudo virsh dominfo "$NAME" >/dev/null 2>&1; then + echo "Refusing: VM '$NAME' already exists in libvirt." >&2 + exit 1 +fi + +if [[ ! -f "$BASE" ]]; then + echo "Base image not found: $BASE" >&2 + exit 1 +fi + +if [[ -e "$DISK" ]]; then + echo "Refusing: disk already exists: $DISK" >&2 + exit 1 +fi + +# Create overlay +sudo qemu-img create -f qcow2 -F qcow2 -b "$BASE" "$DISK" >/dev/null + +# Define + install (import existing disk) +sudo virt-install --connect qemu:///system \ + --name "$NAME" \ + --memory "$RAM" --vcpus "$VCPUS" --cpu host-model \ + --disk "path=$DISK,format=qcow2,bus=virtio" \ + --network network=default,model=virtio \ + --graphics none \ + --import \ + --osinfo linux2024 \ + --noautoconsole + +echo "Created: $NAME" +echo "Disk: $DISK" +echo "Next: sudo virsh start $NAME && sudo virsh domifaddr $NAME" + |
