OpenStack is an free to use and open source cloud computing infrastructure platform that unifies the administration of Compute, Network and Storage resources to build and manage private and public clouds. The OpenStack project has support through contributions and finances from large companies such as AT&T, Huawei, Red Hat, Microsoft, Cisco, Intel, VMware, Dell, among many other companies.

How To Run Debian 12 or Debian 11 on OpenStack

For you to run Debian 12 or Debian 11 on OpenStack, you must meet the following requirements:

  • Have a working OpenStack Cloud Platform
  • Access to OpenStack Platform from Horizon Web UI Dashboard or openstack command line tool
  • Configured Compute Node, Network and Storage backend(Cinder or Ephemeral storage)
  • Configured Glance service where we will store Debian 11 cloud template
  • Uploaded SSH Key pair
  • Security group has to be created before instance
  • Created Compute flavors

Step 1 – Download Debian Cloud image

The simplest way to get a virtual machine image for OpenStack Platform is to download pre-created ones. The default Debian Cloud image contain the cloud-init package that enables SSH key pair and user data injection.

Let’s download the latest Debian 12(Bookworm) Cloud image or Debian 11 (Bullseye) Cloud image from the URL manually, or with wget/curl tools:

### Debian 12 ###
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2

### Debian 11 ###
wget https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-generic-amd64.qcow2

You can as well use Debian Genericcloud image:

### Debian 12 ###
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2

### Debian 11 ###
wget https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-genericcloud-amd64.qcow2

Step 2: Upload OS image to Glance

Next we upload downloaded Debian 11 Cloud image to Glance. This is the command I’ll run to push the image to Glance storage backend

### Debian 12 ###
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-12-generic-amd64.qcow2 \
    debian-12

### Debian 11 ###
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-11-generic-amd64.qcow2 \
    debian-11

Give it a few seconds for the image to be active and available on Glance service.

$ openstack image list
+--------------------------------------+-----------------+--------+
| ID                                   | Name            | Status |
+--------------------------------------+-----------------+--------+
| 3193094d-3e5b-4abe-a2fa-875c5ef615f7 | Arch-Linux      | active |
| c7e795e9-c002-400c-90a1-bfcdc82d0bfc | Ubuntu-20.04    | active |
| 448ff933-c695-4eea-b312-c4aee1bb569f | debian-11       | active |
+--------------------------------------+-----------------+--------+

Step 3: Get Network, Flavor, Security group, and keypair

We should have the following details before creation of a Debian 11 VM instance on OpenStack

  • Glance Image ID / name
  • Neutron network ID / name
  • Compute flavor ID / Name
  • Security group ID / Name
  • Keypair name

Use the commands provided in this section to get the required information from your OpenStack Cloud Platform. For any, not configured you’ll have to fix it before you can proceed with the guide.

List networks:

$ openstack network list
+--------------------------------------+---------+--------------------------------------+
| ID                                   | Name    | Subnets                              |
+--------------------------------------+---------+--------------------------------------+
| 34baac2e-2393-4607-b1c9-2d7044d40978 | private | 48789ed8-d7b7-4606-8ed8-0f1036312463 |
| 8fb37281-9c89-4110-ac84-44179011767d | public  | 23357ddf-d536-49d4-81e6-f80f6c4d2434 |
+--------------------------------------+---------+--------------------------------------+

List compute flavors:

$ openstack flavor list
+----+-----------+-------+------+-----------+-------+-----------+
| ID | Name      |   RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+-----------+-------+------+-----------+-------+-----------+
| 0  | m1.tiny   |   512 |    5 |         0 |     1 | True      |
| 1  | m1.small  |  1024 |   10 |         0 |     1 | True      |
| 2  | m1.medium |  2048 |   20 |         0 |     2 | True      |
| 3  | m1.large  |  4096 |   30 |         0 |     2 | True      |
| 4  | m1.xlarge |  8192 |   40 |         0 |     4 | True      |
| 5  | m1.jumbo  | 16384 |   50 |         0 |     6 | True      |
| 7  | m1.16     | 16384 |   40 |         0 |     4 | True      |
+----+-----------+-------+------+-----------+-------+-----------+

List configured Security groups:

$ openstack security group list
+--------------------------------------+------------+------------------------+----------------------------------+------+
| ID                                   | Name       | Description            | Project                          | Tags |
+--------------------------------------+------------+------------------------+----------------------------------+------+
| 2cc466c8-56a9-4540-bacb-9fcba39f6079 | default    | Default security group | d87ec405cf8d409cb351e8a5a966aa3d | []   |
| b9348b10-e183-41ad-b1a6-ab15c4a3cf99 | permit_all | Allow all ports        | d87ec405cf8d409cb351e8a5a966aa3d | []   |
| ca6aee3a-53c6-4ce0-a2c4-d2d39532556a | default    | Default security group | 3109267d83094ae1a9f2bf165b48bed0 | []   |
+--------------------------------------+------------+------------------------+----------------------------------+------+

List keypairs on OpenStack:

$ openstack keypair list
+---------+-------------------------------------------------+------+
| Name    | Fingerprint                                     | Type |
+---------+-------------------------------------------------+------+
| admin   | 19:7b:5c:14:a2:21:7a:a3:dd:56:c6:e4:3a:22:e8:3f | ssh  |
| jmutai  | 19:7b:5c:14:a2:21:7a:a3:dd:56:c6:e4:3a:22:e8:3f | ssh  |
+---------+-------------------------------------------------+------+

Step 4: Create Debian VM instance on OpenStack

I’ve gathered below facts that will be used to create an instance off Debian cloud image:

  • Compute flavor – m1.medium
  • Glance Image name – debian-11
  • Network name – private
  • Keypair name – admin
  • Security group name – permit_all
  • VM to be created name – debian-bullseye-01

The command to create the Virtual Machine with above variables will be:

openstack server create \
  	--flavor m1.medium \
 	--image "debian-11" \
  	--network private \
  	--key-name admin \
  	--security-group permit_all \
  	debian-bullseye-01

The scheduling and build process starts immediately and you should get an output similar to one shared below.

+-------------------------------------+--------------------------------------------------+
| Field                               | Value                                            |
+-------------------------------------+--------------------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                                           |
| OS-EXT-AZ:availability_zone         |                                                  |
| OS-EXT-SRV-ATTR:host                | None                                             |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None                                             |
| OS-EXT-SRV-ATTR:instance_name       |                                                  |
| OS-EXT-STS:power_state              | NOSTATE                                          |
| OS-EXT-STS:task_state               | scheduling                                       |
| OS-EXT-STS:vm_state                 | building                                         |
| OS-SRV-USG:launched_at              | None                                             |
| OS-SRV-USG:terminated_at            | None                                             |
| accessIPv4                          |                                                  |
| accessIPv6                          |                                                  |
| addresses                           |                                                  |
| adminPass                           | 3K2g2mSbRN3U                                     |
| config_drive                        |                                                  |
| created                             | 2021-08-15T21:14:36Z                             |
| flavor                              | m1.medium (2)                                    |
| hostId                              |                                                  |
| id                                  | 50a6d57f-c8ad-4299-b9dc-2bb697c03bdd             |
| image                               | debian-11 (448ff933-c695-4eea-b312-c4aee1bb569f) |
| key_name                            | admin                                            |
| name                                | debian-bullseye-01                               |
| progress                            | 0                                                |
| project_id                          | d87ec405cf8d409cb351e8a5a966aa3d                 |
| properties                          |                                                  |
| security_groups                     | name='b9348b10-e183-41ad-b1a6-ab15c4a3cf99'      |
| status                              | BUILD                                            |
| updated                             | 2021-08-15T21:14:36Z                             |
| user_id                             | a4cf64e81be5456b81af0f05b33707eb                 |
| volumes_attached                    |                                                  |
+-------------------------------------+--------------------------------------------------+

After the VM is in Active state confirm with below commands:

$ openstack server list --column Name --column Status --column Networks
+--------------------+--------+--------------------------------------+
| Name               | Status | Networks                             |
+--------------------+--------+--------------------------------------+
| debian-bullseye-01 | ACTIVE | private=172.10.10.149                |
+--------------------+--------+--------------------------------------+

Step 5: Connect to VM instance created

The default login username for OpenStack Debian cloud image is debian

Test ssh connection to the virtual machine:

$ ssh debian@172.10.10.149 
Warning: Permanently added '172.10.10.149 ' (ED25519) to the list of known hosts.
Enter passphrase for key '/Users/kmutai/.ssh/id_rsa':
Linux debian-bullseye-01 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
debian@debian-bullseye-01:~$

Check OS release release details from /etc/os-release file.

$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Update and Upgrade your Debian instance by running the commands:

sudo apt update
sudo apt upgrade -y

To this far you should have a running Instance of Debian 11 (Bullseye) on OpenStack. In case of technical issues/errors, feel free to contact us through the comments sections.

How To Run Debian 12 or Debian 11 on KVM

For KVM you should have below pre-reqs met:

  • KVM hypervisor installed and configured
  • Configured Linux / OVS Bridge
  • Configured Libivirt Storage pool
  • Virsh command line tool

Step 1: Confirm all pre-reqs are okay

Check libivrtd service status:

$ systemctl status libvirtd
● libvirtd.service - Virtualization daemon
   Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-09-27 00:41:00 EAT; 1 months 13 days ago
     Docs: man:libvirtd(8)
           https://libvirt.org
 Main PID: 521154 (libvirtd)
    Tasks: 26 (limit: 32768)
   Memory: 138.2M
   CGroup: /system.slice/libvirtd.service
....

List Linux / OVS bridges configured on the system if any:

$ brctl show
bridge name	bridge id		STP enabled	interfaces
private01		8000.5254000b0e1d	yes		private01-nic
							vnet0
							vnet25
							vnet32
							vnet33
							vnet35
							vnet36
							vnet37
							vnet38
							vnet39
							vnet54
							vnet57
							vnet58
storage		8000.52540058dd87	yes		storage-nic
							vnet26
virbr0		8000.525400021ab5	yes		virbr0-nic
virbr1		8000.525400c6803a	yes		virbr1-nic

List KVM Storage pools

$ sudo virsh pool-list
 Name     State    Autostart
------------------------------
 images   active   yes

Step 2: Download Debian 11 DVD / CD ISO image

Visit Debian DVD and CD Downloads image URL.

### Debian 12 ###
wget https://cdimage.debian.org/mirror/cdimage/archive/12.1.0/amd64/iso-dvd/debian-12.1.0-amd64-DVD-1.iso
sudo mv debian-12.1.0-amd64-DVD-1.iso /var/lib/libvirt/images

### Debian 11 ###
wget https://cdimage.debian.org/mirror/cdimage/archive/11.8.0/amd64/iso-dvd/debian-11.8.0-amd64-DVD-1.iso
sudo mv debian-11.8.0-amd64-DVD-1.iso /var/lib/libvirt/images

Create Debian 11(Bullseye) Virtual Machine on KVM

For Linux Bridge Networking:

sudo virt-install \
--name debian-bullseye \
--ram 2096 \
--disk path=/var/lib/libvirt/images/debian-bullseye.qcow2,size=40 \
--vcpus 2 \
--os-variant debian11 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location /var/lib/libvirt/images/debian-11.8.0-amd64-DVD-1.iso \
--extra-args 'console=ttyS0,115200n8 serial' 

For Open vSwitch Bridge Networking:

sudo virt-install \
--name debian-bullseye \
--ram 2096 \
--disk path=/var/lib/libvirt/images/debian-bullseye.qcow2,size=40 \
--vcpus 2 \
--os-variant debian11 \
--network=bridge:private01,model=virtio,virtualport_type=openvswitch \
--graphics none \
--console pty,target_type=serial \
--location /var/lib/libvirt/images/debian-11.8.0-amd64-DVD-1.iso \
--extra-args 'console=ttyS0,115200n8 serial' 

A VM will be created with:

  • Name – debian-bullseye
  • Memory – 2GB
  • VCPUs – 2
  • Hard disk – 40GB
  • Bridge name – virtbr0 for Linux bridge and private01 for OVS bridge
  • DVD ISO file Path – /var/lib/libvirt/images/debian-11.1.0-amd64-DVD-1.iso

The installation process of Debian 11 on KVM should now begin.

Starting install...
Retrieving file vmlinuz...                                                                                                                                                     | 6.5 MB  00:00:00
Retrieving file initrd.gz...                                                                                                                                                   |  17 MB  00:00:00
Allocating 'debian-bullseye.qcow2'                                                                                                                                             |  40 GB  00:00:00
Connected to domain debian-bullseye
Escape character is ^]
[    0.000000] Linux version 5.10.0-9-amd64 ([email protected]) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.70-1 (2021-09-30)
[    0.000000] Command line: console=ttyS0,115200n8 serial
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] BIOS-provided physical RAM map:
....

Follow installation process to completion to have a running instance of Debian 11 on KVM.

Set Language to be used during installation process.

install debian kvm 01

Set Continent and Country

install debian kvm 02 01
install debian kvm 02 02

Set Keymap to use