Create Debian 11 (Bullseye) KVM Guest From Cloud Image
This tutorial will show you how to install Debian 11 on your KVM server through the use of one of the official Debian cloud images.
Download the Debian 11 cloud Image:
sudo mkdir /var/lib/libvirt/images/templates wget https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-nocloud-amd64.qcow2 sudo mv -i debian-11-nocloud-amd64.qcow2 \ /var/lib/libvirt/images/templates/debian-11.qcow2
genericcloud image, but had to use an image I could log into with.
Unfortunately, it looks like genericcloud is expecting one to just set an SSH key and use that to log in,
but I need to be able to log in before I can fix up the networking within my Hetzner KVM.
We need to ensure we have cloud-utils and whois packages for later.
sudo apt update && sudo apt install cloud-utils whois -y
cloud-utils package is required for Debian 11 to be able to run the
cloud-localds command, and the
whois package is required for us to be able to run
Your distro may have a different name for the required packages.
First, pick a name for your new VPS, and what you would want the username/password combo to be for the default user that will be set up:
VM_NAME="debian-11-cloud-image" USERNAME="programster" PASSWORD="thisIsMyPassword"
Create an area for our new VM and copy the template cloud image into it, which will be used by the new VM.
sudo mkdir /var/lib/libvirt/images/$VM_NAME \ && sudo qemu-img convert \ -f qcow2 \ -O qcow2 \ /var/lib/libvirt/images/templates/debian-11.qcow2 \ /var/lib/libvirt/images/$VM_NAME/root-disk.qcow2
Increase the disk size to whatever you want for the VM, in this case I'm setting 20 GB
sudo qemu-img resize \ /var/lib/libvirt/images/$VM_NAME/root-disk.qcow2 \ 20G
Create a cloud-init configuration so we can set the password and the hostname etc.
sudo echo "#cloud-config hostname: $VM_NAME " | sudo tee /var/lib/libvirt/images/$VM_NAME/cloud-init.cfg
Create the ISO file from the cloud config file we just created:
sudo cloud-localds \ /var/lib/libvirt/images/$VM_NAME/cloud-init.iso \ /var/lib/libvirt/images/$VM_NAME/cloud-init.cfg
sudo virt-install \ --name $VM_NAME \ --memory 1024 \ --disk /var/lib/libvirt/images/$VM_NAME/root-disk.qcow2,device=disk,bus=virtio \ --disk /var/lib/libvirt/images/$VM_NAME/cloud-init.iso,device=cdrom \ --os-type linux \ --os-variant debian10 \ --virt-type kvm \ --graphics none \ --network network=default,model=virtio \ --import
debian10 because my Debian 10 KVM does not have
debian11 in the list outputted from running
sudo osinfo-query os
(which I could only run after installing the
After running the previous command, you will be taken to the login screen in the console, which you can log in with the username
root. You will not be prompted for a password.
Now you really need to manually create your account username, and set a strong random password for the root user.
Changing Network Settings
One of the first things I wanted to do is change the network settings. This is best done by editing the single file within the following folder:
If you need to get out of the console just press
After that, it's probably a good idea to cleanup so raw passwords aren't lying around.
sudo rm /var/lib/libvirt/images/$VM_NAME/cloud-init.iso \ && sudo rm /var/lib/libvirt/images/$VM_NAME/cloud-init.cfg
Hostname And Hosts File
It appears that setting the hostname in the cloud-init config will set the hostname that the machine will boot as.
However, it will not add the entry to the
/etc/hosts file, so you may wish to do this quickly to prevent your machine taking unnecessarily long when performing some operations.
Alternatively, you may figure out how to update the cloud-init.cfg file to update the hosts file correctly using the Etc hosts module.
SSH Not Working
You will need to run the following command to get your server to generate its host key so that you can SSH into the server. More info here.
sudo dpkg-reconfigure openssh-server
I would also suggest checking that you are happy with your
/etc/ssh/sshd_config file's settings.
Another thing that you may wish to do immediately is set the timezone:
sudo dpkg-reconfigure tzdata
- The Urban Penguin - Using Cloud Images in KVM
- Serverfault - How to change default user (ubuntu) via CloudInit on AWS
First published: 20th August 2021