General Build Prerequisites for Image Creation Tools#

This document describes the general dependencies for the image creation tools and the steps to install them.


ukify#

  1. Install all the required dependencies for ukify:

sudo apt install git python3 python3-cryptography python3-pefile python3-pillow \
  python3-setuptools libssl-dev libzstd-dev uuid-dev gnu-efi python3-packaging \
  libelf-dev lz4 pkg-config meson ninja-build
  1. Clone the systemd repository for ukify, and then check out the version you want:

git clone https://github.com/systemd/systemd.git
cd systemd
git checkout v255
  1. Install ukify by copying the ukify.py script to a directory in your PATH:

cd src/ukify
sudo cp ukify.py /usr/local/bin/ukify
  1. For environments that require ukify in /usr/bin (e.g., ICT build systems), copy it to /usr/bin

sudo cp /usr/local/bin/ukify /usr/bin/ukify
  1. Verify the installation by running the following command:

ukify --help

You should see the usage instructions for ukify.


mmdebstrap#

  1. Download the mmdebstrap package:

wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mmdebstrap/mmdebstrap_1.4.3-6_all.deb
  1. Install the package:

sudo dpkg -i mmdebstrap_1.4.3-6_all.deb
  1. If dpkg reports missing dependencies, you can try to automatically resolve them using this command:

sudo apt --fix-broken install

util-linux (lsblk) and e2fsprogs (resize2fs)#

Overlay-mode disk resize (overlayPolicy.allowDiskResize) requires lsblk from util-linux >= 2.38 (it reads partition start sectors via lsblk -o PATH,START,TYPE) and a resize2fs build new enough to grow the baseline’s filesystem. Ubuntu 22.04 ships util-linux 2.37 and e2fsprogs 1.46.5, and neither is available as a newer version via apt. Build both from source instead.

Upgrade util-linux (lsblk)#

  1. Download and build util-linux v2.38:

wget https://www.kernel.org/pub/linux/utils/util-linux/v2.38/util-linux-2.38.tar.xz
tar -xf util-linux-2.38.tar.xz
cd util-linux-2.38
./configure --prefix=/usr/local
make -j$(nproc)
sudo make install
  1. Divert the distro lsblk and point /usr/bin/lsblk at the new build. dpkg-divert keeps the diversion registered so a later apt upgrade of util-linux writes to the diverted path instead of clobbering your symlink:

sudo dpkg-divert --divert /usr/bin/lsblk.distrib --rename /usr/bin/lsblk
sudo ln -s /usr/local/bin/lsblk /usr/bin/lsblk
  1. Verify the installation:

lsblk --version

Upgrade e2fsprogs (resize2fs)#

  1. Install the build dependencies:

sudo apt-get install -y build-essential pkg-config git
  1. Clone and build e2fsprogs v1.47.0:

git clone --depth 1 --branch v1.47.0 https://github.com/tytso/e2fsprogs.git
cd e2fsprogs && mkdir build && cd build
../configure
make
  1. Install resize2fs over the distro version in /usr/sbin (the overlay resize path shells out only to resize2fs):

sudo make install-libs
sudo install -m0755 resize/resize2fs /usr/sbin/resize2fs
  1. Verify the installation:

/usr/sbin/resize2fs 2>&1 | head -1
# expect: resize2fs 1.47.0 (...)