-
-
Notifications
You must be signed in to change notification settings - Fork 5
rhys: Proxmox Ubuntu VM
rhys is a special machine. Since Feb 2026, it is based on Proxmox VE and host a VM for Github Runner
First simple is straightforward: download ISO, flash on USB key, boot, follow installation wizard.
After boot, we can access UI from http://localhost:8006 (user: root, password: OS password setup during installation)
We do not have an enterprise license, so we have to adjust packages:
- click on the machine, then
Updates, thenRepositories - disable
ceph-squid entreprise - disable
pve-enterprise - add
ceph-squid no-subscription - add
pve-no-subscription
From here, Proxmox VE will only complain that we should not run this machine in a production setup and stop asking for license information.
We will create a template VM based on ubuntu cloud-init ; this makes VM creation way faster. The template contains a custom cloud-init so that we automatically install Guest agent and get VM IP. For some reason, I failed to make this work really correctly and we have to remove Guest agent once we know VM IP to be able to SSH into the VM.
On rhys bash, we can run:
# Create SSH keys file
cat > ~/template_keys << 'EOF'
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByVJVXfimW3nuS/440H0qbr8ZjNBm61OzGV6pNlAlXj reg@faku
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIg/H9tlCW52HZJX/PV9fY0ir0MP3udMM+4Eq2Ro4oCA benoit74@2024
EOF
# Create cloud-init config
cat > /var/lib/vz/snippets/ubuntu-cloud-init.yml << 'EOF'
#cloud-config
packages:
- qemu-guest-agent
runcmd:
- systemctl enable --now qemu-guest-agent
EOF
# Download Ubuntu image
cd ~
wget -q https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
# Destroy old template if exists
qm destroy 9000 2>/dev/null || true
# Create and configure template VM
qm create 9000 --name ubuntu-cloud-noble --memory 8192 --balloon 2048 --sockets 2 --cores 2 --net0 virtio,bridge=vmbr0
qm importdisk 9000 noble-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent 1
qm set 9000 --ciuser ubuntu
qm set 9000 --sshkey ~/template_keys
qm set 9000 --ipconfig0 ip=dhcp
qm set 9000 --cicustom "user=local:snippets/ubuntu-cloud-init.yml"
# Transform VM into a template
qm template 9000
Then create VM:
# Clone template to create VM 100
qm clone 9000 100 --name github-runner
# Start the VM
qm start 100Note that numbers 100 and 9000 are "mostly random" sample values.
Once started, get VM IP in UI or through CLI:
# check that agent is reachable
qm agent 100 ping
# get details of network interfaces
qm agent 100 network-get-interfaces
From here, we need to reboot the VM with default Proxmox VE cloud-init config:
qm stop 100
qm set 100 --delete cicustom
qm cloudinit update 100
qm start 100Setup your SSH config on your dev machine:
Host rhys-github-runner
HostName 192.168.1.179
ProxyJump kathrin
User ubuntu
And you should now be able to SSH into the VM
Follow what is in Github documentation to add a self-hosted runner at organization level.
In order to be able to run mwoffliner CI, I had to apt install build-essentials (needed at least to npm install node-libzim).