aboutsummaryrefslogtreecommitdiff
path: root/archive/vm-new
blob: 3955c6caea3029c0dcf1bc547a8b72562d4351db (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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"