Files
KEI/VyOS_CloudInit/imageBuild.md
2026-07-12 22:22:43 +02:00

5.8 KiB

Image was built using Debian 12, kernel 6.1.0-50-cloud-amd64, Docker version 29.6.1, build 8900f1d

Built date is 12/07/2026

Install docker

To install Docker, follow the installation tutorial available on the official Docker website

Prepare the VyOS builder container

First download the prerequisites and clone the repository

sudo apt update
sudo apt install git

git clone --branch rolling --single-branch \
    https://github.com/vyos/vyos-build.git

cd vyos-build

Then pull the docker image

sudo docker pull vyos/vyos-build:rolling

And then inside container edit the data/build-flavors/proxmox-cloud.toml file to include

image_format = "qcow2"

packages = [
    "cloud-init",
    "cloud-utils",
    "ifupdown",
    "qemu-guest-agent"
]

[boot_settings]
console_type = "ttyS"
console_num = "0"
console_speed = "115200"

Then add the Cloud-Init configuration

# Create the configuration directory
mkdir -p \
    data/live-build-config/includes.chroot/etc/cloud/cloud.cfg.d
    
# Select Proxmox-compatible data sources
cat > \
data/live-build-config/includes.chroot/etc/cloud/cloud.cfg.d/99-datasource.cfg \
<<'EOF'
datasource_list: [ NoCloud, ConfigDrive ]
EOF

#Disable generic Linux network configuration
cat > \
data/live-build-config/includes.chroot/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg \
<<'EOF'
network:
  config: disabled
EOF

This prevents generic Cloud-Init from creating /etc/network/interfaces configuration that would conflict with VyOS configuration.

After that, add a live-build chroot hook

cat > \
data/live-build-config/hooks/live/19-cloud-init-qemu.chroot \
<<'EOF'
#!/bin/sh

set -e

echo "I: Configuring Cloud-Init"

systemctl enable cloud-init.service

rm -f /etc/network/interfaces.d/50-cloud-init

echo "I: Configuring QEMU Guest Agent"

systemctl enable qemu-guest-agent.service

exit 0
EOF

chmod +x \
    data/live-build-config/hooks/live/19-cloud-init-qemu.chroot

Thereafter, start the docker build container

sudo docker run --rm -it \
    --privileged \
    --sysctl net.ipv6.conf.lo.disable_ipv6=0 \
    -v "$PWD":/vyos \
    -w /vyos \
    vyos/vyos-build:rolling \
    bash

Then we come to building the qcow disk image. In this example flag --disk-size 10 means that we are creating a 10 GB virtual disk.

sudo make clean

sudo ./build-vyos-image \
    --architecture amd64 \
    --build-by "yuru@shupogaki.org" \
    --disk-size 10 \
    proxmox-cloud

After the build completes, run the following command

find build -maxdepth 1 -type f \
    \( -name '*.qcow2' -o -name 'manifest.json' \) \
    -ls

to verify that it resembles the following text

build/vyos-1.x-rolling-YYYYMMDDHHMM-proxmox-cloud-amd64.qcow2

Errors

Missing --allow-downgrades flag

If you get the following error when building the qcow2 virtual disk

E: Packages were downgraded and -y was used without --allow-downgrades.
E: An unexpected failure occurred, exiting...

Re-clone the repository and follow the commands and text below

Then it means that during bootstrap, Debian installed its current openssl and libssl3 packages. After the VyOS rolling repository was enabled, APT selected VyOS-provided versions that it classified as downgrades.

To fix it, run the following command from the root of the cloned vyos-build repository and check the current line

grep -n -- '--apt-options' scripts/image-build/build-vyos-image

You shold see a result that looks simmilar to this

vyos_bld@93f129e939ac:/vyos$ grep -n -- '--apt-options' scripts/image-build/build-vyos-image
655:                --apt-options "--yes" \

This means in file scripts/image-build/build-vyos-image on line 655 a --yes --allow-downgrades flag is missing. You can add it manually, or run the following command

sed -i \
  's/--apt-options "--yes"/--apt-options "--yes --allow-downgrades"/' \
  scripts/image-build/build-vyos-image

After that, apply the fix for the second error and start from the begining

Missmatched shim package version

If you get the following error

The following packages have unmet dependencies:
 shim-helpers-amd64-signed : Depends: shim-unsigned (>= 16.1-2~deb12u1) but 16.0-1+vyos1 is to be installed
E: Unable to correct problems, you have held broken packages.
E: An unexpected failure occurred, exiting...
P: Begin unmounting filesystems...
P: Saving caches...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Traceback (most recent call last):
  File "/vyos/./build-vyos-image", line 810, in <module>
    build()
  File "/vyos/./build-vyos-image", line 721, in build
    cmd("lb build 2>&1")
  File "/vyos/scripts/image-build/utils.py", line 89, in cmd
    raise OSError(f"Command '{command}' failed")
OSError: Command 'lb build 2>&1' failed

First, re-clone the respository and run the following command

cat > \
data/live-build-config/archives/debian-shim.pref.chroot \
<<'EOF'
Package: shim-unsigned shim-signed shim-signed-common shim-helpers-amd64-signed
Pin: release o=Debian
Pin-Priority: 1001
EOF

Then also apply the fix for the --allow-downgrades problem, and after that start from the beggining