Debian 13 (Trixie) is the latest stable release of the Debian GNU/Linux distribution. Official cloud images are available from the Debian Cloud team, pre-configured with cloud-init for automated provisioning on both OpenStack and KVM/libvirt environments.
This guide covers two deployment methods – running Debian 13 on OpenStack by uploading the cloud image to Glance, and running it on KVM/libvirt using virt-install with cloud-init. Both approaches use the official Debian 13 cloud images in qcow2 format.
Prerequisites
For OpenStack deployment:
- A working OpenStack deployment with Glance, Nova, Neutron, and Cinder (or ephemeral storage)
- Access to the
openstackCLI client with valid credentials sourced - An uploaded SSH keypair, a security group, a compute flavor, and a configured network
For KVM/libvirt deployment:
- A Linux host with KVM and libvirt installed
virt-install,virsh, andcloud-localds(fromcloud-image-utils) available on the host- A configured libvirt network (NAT or bridged)
- At least 1 vCPU, 1 GB RAM, and 10 GB disk (2 vCPUs, 2 GB RAM recommended)
Step 1: Download the Debian 13 Cloud Image
Debian provides two cloud image variants. The generic image includes more drivers and firmware for broader hardware compatibility. The genericcloud image is smaller and optimized for virtual environments. Either works for OpenStack and KVM.
Download the generic image:
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-generic-amd64.qcow2
Or the smaller genericcloud image:
wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
Run Debian 13 on OpenStack
Step 2: Upload the Image to Glance
Upload the downloaded qcow2 image to the OpenStack Glance image service:
openstack image create \
--container-format bare \
--disk-format qcow2 \
--property hw_disk_bus=scsi \
--property hw_scsi_model=virtio-scsi \
--property os_type=linux \
--property os_distro=debian \
--property os_admin_user=debian \
--public \
--file debian-13-generic-amd64.qcow2 \
debian-13
Wait a few seconds for the upload to complete, then confirm the image is active:
$ openstack image list
+--------------------------------------+-----------+--------+
| ID | Name | Status |
+--------------------------------------+-----------+--------+
| a3f1c8b2-7e4d-4a91-b5c6-9d2e8f3a1b4c | debian-13 | active |
+--------------------------------------+-----------+--------+
Step 3: Gather Network, Flavor, Security Group, and Keypair Details
Before creating the instance, collect the required resource names or IDs from your OpenStack environment.
List available networks:
openstack network list
List compute flavors:
openstack flavor list
List security groups:
openstack security group list
List keypairs:
openstack keypair list
Step 4: Create the Debian 13 Instance on OpenStack
With the required details gathered, create the instance. Adjust the flavor, network, key-name, and security group to match your environment:
openstack server create \
--flavor m1.medium \
--image debian-13 \
--network private \
--key-name admin \
--security-group default \
debian-trixie-01
The instance begins building immediately. Check the status until it shows ACTIVE:
$ openstack server list --column Name --column Status --column Networks
+------------------+--------+-------------------------+
| Name | Status | Networks |
+------------------+--------+-------------------------+
| debian-trixie-01 | ACTIVE | private=172.10.10.55 |
+------------------+--------+-------------------------+
Step 5: Connect to the OpenStack Instance
The default SSH username for Debian cloud images is debian. Connect using the private key that matches the keypair you specified:
ssh [email protected]
Verify the OS version after connecting:
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Update the system packages:
sudo apt update && sudo apt upgrade -y
Run Debian 13 on KVM with Cloud-Init
For KVM/libvirt, we use the same cloud image with virt-install and a cloud-init seed ISO. This avoids the full installer and gives you a ready-to-use VM in under a minute.
Step 6: Install Required Packages
Make sure virt-install and cloud-image-utils are installed on your KVM host:
### Debian/Ubuntu ###
sudo apt install -y virtinst cloud-image-utils
### RHEL/Rocky/AlmaLinux ###
sudo dnf install -y virt-install cloud-utils
Step 7: Prepare the Cloud-Init Configuration
Create a cloud-init user-data file that sets the hostname, creates a user with sudo access, and injects your SSH public key. Open a new file:
vi /tmp/cloud-init-userdata.yaml
Add the following content, replacing the SSH key with your own:
#cloud-config
hostname: debian-trixie
manage_etc_hosts: true
users:
- name: sysadmin
sudo: ALL=(ALL) NOPASSWD:ALL
groups: sudo
shell: /bin/bash
lock_passwd: false
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleKeyHere user@workstation
chpasswd:
expire: false
users:
- name: sysadmin
password: ChangeMeNow!
type: text
package_update: true
package_upgrade: true
packages:
- qemu-guest-agent
- vim
- curl
Generate the cloud-init seed ISO from the user-data file:
cloud-localds /tmp/debian13-seed.img /tmp/cloud-init-userdata.yaml
Step 8: Prepare the VM Disk
Copy the downloaded cloud image to the libvirt images directory and resize it to your desired disk size:
sudo cp debian-13-generic-amd64.qcow2 /var/lib/libvirt/images/debian-trixie.qcow2
sudo qemu-img resize /var/lib/libvirt/images/debian-trixie.qcow2 30G
Also copy the seed ISO to the images directory:
sudo cp /tmp/debian13-seed.img /var/lib/libvirt/images/debian13-seed.img
Step 9: Create the Debian 13 VM with virt-install
Launch the VM using virt-install with the cloud image as the primary disk and the seed ISO as a second disk. For a Linux bridge network:
sudo virt-install \
--name debian-trixie \
--ram 2048 \
--vcpus 2 \
--os-variant debian12 \
--disk /var/lib/libvirt/images/debian-trixie.qcow2,device=disk,bus=virtio \
--disk /var/lib/libvirt/images/debian13-seed.img,device=cdrom \
--network bridge=virbr0,model=virtio \
--graphics none \
--import \
--noautoconsole
The --import flag tells virt-install to boot directly from the existing disk image instead of running an installer. The --noautoconsole flag returns control to your terminal immediately.
For an Open vSwitch bridge, replace the network line:
sudo virt-install \
--name debian-trixie \
--ram 2048 \
--vcpus 2 \
--os-variant debian12 \
--disk /var/lib/libvirt/images/debian-trixie.qcow2,device=disk,bus=virtio \
--disk /var/lib/libvirt/images/debian13-seed.img,device=cdrom \
--network=bridge:ovsbr0,model=virtio,virtualport_type=openvswitch \
--graphics none \
--import \
--noautoconsole
Step 10: Verify the VM and Connect
Check that the VM is running:
$ sudo virsh list
Id Name State
-------------------------------
1 debian-trixie running
Get the VM’s IP address from the DHCP lease:
sudo virsh domifaddr debian-trixie
Connect via SSH using the username defined in your cloud-init configuration:
ssh [email protected]
Alternatively, use the serial console:
sudo virsh console debian-trixie
Verify the OS release:
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
NAME="Debian GNU/Linux"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Step 11: Post-Deployment Configuration
After the VM is running, update the system and enable the guest agent for better integration with the hypervisor:
sudo apt update && sudo apt upgrade -y
sudo systemctl enable --now qemu-guest-agent
If you used cloud-init user data on OpenStack, the same user-data approach works for injecting packages, scripts, and configuration at boot time.
Conclusion
Debian 13 (Trixie) is now running on your OpenStack or KVM environment using the official cloud image. The cloud-init approach gives you a fully provisioned VM without manual installer steps.
For production deployments, configure firewall rules to restrict SSH access (TCP port 22), set up automated backups of the VM disk, and enable monitoring with tools like Prometheus or Zabbix.