Skip to content

Instantly share code, notes, and snippets.

@chriswayg
Last active October 22, 2024 17:54
Show Gist options
  • Save chriswayg/b6421dcc69cb3b7e41f2998f1150e1df to your computer and use it in GitHub Desktop.
Save chriswayg/b6421dcc69cb3b7e41f2998f1150e1df to your computer and use it in GitHub Desktop.
Ubuntu and Debian Cloud images in Proxmox

Cloud images in Proxmox

A script which automates these steps for multiple distros incl. CoreOS, CentOS, Arch and ALpine

Steps for creating an Ubuntu 18.04 cloud template

wget https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img

# Create a VM
qm create 9000 --name ubuntu1804-templ --memory 2048 --net0 virtio,bridge=vmbr1

# Import the disk in qcow2 format (as unused disk) 
qm importdisk 9000 bionic-server-cloudimg-amd64.img local -format qcow2

# Attach the disk to the vm using VirtIO SCSI
qm set 9000 --scsihw virtio-scsi-pci --scsi0 /var/lib/vz/images/9000/vm-9000-disk-0.qcow2

# Important settings
qm set 9000 --ide2 local:cloudinit --boot c --bootdisk scsi0 --serial0 socket --vga serial0

# The initial disk is only 2GB, thus we make it larger
qm resize 9000 scsi0 +30G

# Using a  dhcp server on vmbr1 or use static IP
qm set 9000 --ipconfig0 ip=dhcp
#qm set 9000 --ipconfig0 ip=10.10.10.222/24,gw=10.10.10.1

# user authentication for 'ubuntu' user (optional password)
qm set 9000 --sshkey ~/.ssh/id_rsa.pub
#qm set 9000 --cipassword AweSomePassword

# check the cloud-init config
qm cloudinit dump 9000 user

# create tempalte and a linked clone
qm template 9000
qm clone 9000 190 --name ubuntu1804-1
qm start 190

rm -v bionic-server-cloudimg-amd64.img

Steps for creating a Debian 10 cloud template

wget https://cdimage.debian.org/cdimage/openstack/current/debian-10.0.2-20190721-openstack-amd64.qcow2

# Create a VM
qm create 9110 --name debian10-cloud --memory 2048 --net0 virtio,bridge=vmbr1

# Import the disk in qcow2 format (as unused disk) 
qm importdisk 9110 debian-10.0.2-20190721-openstack-amd64.qcow2 local -format qcow2

# Attach the disk to the vm using VirtIO SCSI
qm set 9110 --scsihw virtio-scsi-pci --scsi0 /var/lib/vz/images/9110/vm-9110-disk-0.qcow2

# Important settings
qm set 9110 --ide2 local:cloudinit --boot c --bootdisk scsi0 --serial0 socket --vga serial0

# The initial disk is only 2GB, thus we make it larger
qm resize 9110 scsi0 +30G

# Using a  dhcp server on vmbr1 or use static IP
qm set 9110 --ipconfig0 ip=dhcp
#qm set 9110 --ipconfig0 ip=10.10.10.222/24,gw=10.10.10.1

# user authentication for 'debian' user (optional password)
qm set 9110 --sshkey ~/.ssh/id_rsa.pub
#qm set 9110 --cipassword AweSomePassword

# check the cloud-init config
qm cloudinit dump 9110 user

# create tempalte and a linked clone
qm template 9110
qm clone 9110 191 --name debian10-1
qm start 191

rm -v debian-10.0.2-20190721-openstack-amd64.qcow2

To resize the VM disk later

qm shutdown 190 && qm wait
qm resize 190 scsi0 +8G
qm start 190

To fully disable cloud-init

When booting under systemd, you can disable cloud-init completely by either:

  • creating a file: sudo touch /etc/cloud/cloud-init.disabled
  • or adding cloud-init=disabled to the kernel command line as found in /proc/cmdline

To partially disable cloud-init

To partially disable some functions, modify: /etc/cloud/cloud.cfg, for example to disable network configuration:

sudo su -
echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

To show the Grub Menu on the serial console

sudo nano /etc/default/grub config

GRUB_TERMINAL="console serial"

sudo update-grub

Checking cloud-init

Convert Images

https://docs.openstack.org/image-guide/convert-images.html

qemu-img convert -f raw -O qcow2 bionic-server-cloudimg-amd64.img bionic-server-cloudimg-amd64.qcow2
@gdelanoy
Copy link

worked just fine.
Thanks.

FYI, following your gist with recent images also works fine.
Just

wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-disk-kvm.img
or
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

and adapt the file names where needed, and you're good to go;

@electropolis
Copy link

electropolis commented Feb 5, 2024

How you manage to do this
# Import the disk in qcow2 format (as unused disk) qm importdisk 9000 bionic-server-cloudimg-amd64.img local -format qcow2

When local "storage: storage 'local' does not support vm images" ?

@jgkawell
Copy link

jgkawell commented Mar 7, 2024

@electropolis You should be able to use local-lvm instead of local.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment