Debian

Run Debian 13 (Trixie) on OpenStack or KVM

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 openstack CLI 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, and cloud-localds (from cloud-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.

Related Articles

Openstack Automatically Confirm Openstack Instance Resizing Debian Configure Rsyslog Centralized Log Server on Ubuntu 22.04|20.04|18.04 Containers Automatically replace unhealthy nodes on Magnum Kubernetes using magnum-auto-healer Arch Linux Configure i3pystatus on Linux

Press ESC to close