Configuration and scripts for building official Debian cloud images.
Find a file
Noah Meyerhans a43397ded9 Merge branch 'master' into 'master'
bullseye-backports fixes

See merge request cloud-team/debian-cloud-images!482
2026-01-05 18:10:19 +00:00
.gitlab/ci Add minimal support for s390x 2025-11-22 21:25:58 +01:00
bin Use debian-cloud-images tool wrapper 2019-01-05 11:45:50 +01:00
config_space bullseye-backports: fix kernel package selection 2026-01-05 13:01:29 -05:00
doc Move grub setup into architecture classes 2024-02-27 22:48:09 +00:00
localdebs Support loading locally injected debs 2019-01-03 13:07:53 +01:00
package/debian fix grub installation on forky/arm64 2025-12-01 09:03:13 -05:00
src override the plan ID for 11-backports/amd64 2025-12-08 11:36:41 -05:00
system_tests Fix some missing type annotations 2025-02-12 10:32:17 +01:00
tests Make Azure client the common parent of the objects 2025-03-23 12:38:59 +01:00
.gitignore Add image-*.build-fai.json to gitignore 2020-03-13 15:51:02 +01:00
.gitlab-ci.yml Setup qemu-user by hand 2025-11-11 09:27:50 +01:00
COPYING Add licence 2018-09-23 18:30:36 +02:00
copyright add myself to copyright 2017-10-17 15:57:45 -04:00
Makefile Add minimal support for s390x 2025-11-22 21:25:58 +01:00
MANIFEST.in Install system tests 2019-04-10 11:03:41 +02:00
pyproject.toml Fix some missing type annotations 2025-02-12 10:32:17 +01:00
README.md Add missing python3-httpx dependency 2025-08-21 20:37:07 -04:00
setup.cfg Use old marshmallow the new one is incompatible 2025-05-20 13:20:58 +02:00
setup.py Add SPDX header to many files 2024-02-17 11:46:05 +01:00
update-ci Verify generated ci files are up-to-date 2024-07-07 19:21:20 +00:00

FAI Cloud image builder

This repository aims to build Debian images for all cloud providers

Getting started

You will need a checkout of this repository on your disk and a recent fai-server package (at least 5.7) installed. Install the necessary fai packages without the recommends (which avoids turning your host into a DHCP server!).

  # git clone https://salsa.debian.org/cloud-team/debian-cloud-images.git
  # sudo apt install --no-install-recommends ca-certificates debsums dosfstools \
    fai-server fai-setup-storage fdisk make python3 python3-httpx python3-libcloud \
    python3-marshmallow python3-pytest python3-yaml qemu-utils udev

Call make help and follow the instructions

Example 1:

   # make image_sid_nocloud_amd64

This will create some log output and the following files:

  • image_sid_nocloud_amd64.build.json
  • image_sid_nocloud_amd64.info
  • image_sid_nocloud_amd64.raw
  • image_sid_nocloud_amd64.tar

Example 2:

    # make image_sid_genericcloud_amd64
  • image_sid_genericcloud_amd64.build.json
  • image_sid_genericcloud_amd64.info
  • image_sid_genericcloud_amd64.raw
  • image_sid_genericcloud_amd64.tar

These images can be used with QEMU-KVM, Virtualbox or any other virtualization backend that support raw disk images.

You can login as root on the VM console without a password (but not over SSH), and there are no other users. You can add new users using adduser as usual, and you probably want to add them to the sudo group.

After the disk image is created you can try it with kvm, and wait 5s for the boot sequence to start:

    # kvm -nic user,model=virtio -m 1024 -drive format=raw,file=image-sid-genericcloud-amd64.raw

Supported image types

As shown above, various types of images can be built for different use cases. Each type of image can be built with the following command:

    # make image_<suite>_<type>_<arch>

where <suite> is a supported Debian release codename (e.g. bookworm, trixie, or sid). <type> can be any of the following:

  • azure: Optimized for Microsoft's cloud computing platform Azure
  • ec2: Optimized for the Amazon Elastic Compute Cloud (EC2)
  • gce: Optimized for the Google Cloud Engine
  • generic: Should run in any environment
  • genericcloud: Should run in any virtualised environment. Is smaller than generic by excluding drivers for physical hardware.
  • nocloud: Mostly useful for testing the build process itself. Doesn't have cloud-init installed, but instead allows root login without a password.

Documentation

New cloud vendor how-to

First of all, we are pretty confident that generic-vm-image should boot mostly everywhere. If you really need adjustments for your image, start looking at the directory structure and only drop in adjustments where really required. Our CLOUD (base) class should already take care of the most of what is needed for a cloud image.