From e20fb377fcd85616c6f2a76a665aa378e84c6412 Mon Sep 17 00:00:00 2001 From: Jacek Tomasiak Date: Thu, 8 May 2025 16:26:22 +0200 Subject: [PATCH] osbuilder: ubuntu: Switch from multistrap to mmdebstrap Multistrap requires usrmerge package which was dropped in Ubuntu 24.04 (Noble). Based on details from [0], the rootfs build process was switched to mmdebstrap. Some additional minor tweaks were needed around chrony as the version from Noble has very strict systemd sandboxing configured and it doesn't work with readonly root by default. [0] https://lists.debian.org/debian-dpkg/2023/05/msg00080.html Fixes: #11245 Signed-off-by: Jacek Tomasiak Signed-off-by: Jacek Tomasiak --- tools/osbuilder/rootfs-builder/rootfs.sh | 4 ++ .../rootfs-builder/ubuntu/Dockerfile.in | 2 +- .../rootfs-builder/ubuntu/rootfs_lib.sh | 39 +++++-------------- 3 files changed, 14 insertions(+), 31 deletions(-) diff --git a/tools/osbuilder/rootfs-builder/rootfs.sh b/tools/osbuilder/rootfs-builder/rootfs.sh index 4ec5429e9f..d490a2567f 100755 --- a/tools/osbuilder/rootfs-builder/rootfs.sh +++ b/tools/osbuilder/rootfs-builder/rootfs.sh @@ -700,6 +700,10 @@ EOF -e '/^\[Unit\]/a ConditionPathExists=\/dev\/ptp0' \ -e 's/^ReadWritePaths=\(.\+\) \/var\/lib\/chrony \(.\+\)$/ReadWritePaths=\1 -\/var\/lib\/chrony \2/m' \ ${chrony_systemd_service} + # Disable automatic directory creation + sed -i -e 's/^\(StateDirectory=\)/#\1/g' \ + -e 's/^\(LogsDirectory=\)/#\1/g' \ + ${chrony_systemd_service} fi AGENT_DIR="${ROOTFS_DIR}/usr/bin" diff --git a/tools/osbuilder/rootfs-builder/ubuntu/Dockerfile.in b/tools/osbuilder/rootfs-builder/ubuntu/Dockerfile.in index 16fa213eb8..9698eb5bc0 100644 --- a/tools/osbuilder/rootfs-builder/ubuntu/Dockerfile.in +++ b/tools/osbuilder/rootfs-builder/ubuntu/Dockerfile.in @@ -42,7 +42,7 @@ RUN apt-get update && \ libclang-dev \ make \ makedev \ - multistrap \ + mmdebstrap \ musl \ musl-dev \ musl-tools \ diff --git a/tools/osbuilder/rootfs-builder/ubuntu/rootfs_lib.sh b/tools/osbuilder/rootfs-builder/ubuntu/rootfs_lib.sh index 5843ffa6c0..8d9745384f 100644 --- a/tools/osbuilder/rootfs-builder/ubuntu/rootfs_lib.sh +++ b/tools/osbuilder/rootfs-builder/ubuntu/rootfs_lib.sh @@ -4,43 +4,22 @@ # # SPDX-License-Identifier: Apache-2.0 -build_dbus() { - local rootfs_dir=$1 - ln -sf /lib/systemd/system/dbus.service $rootfs_dir/etc/systemd/system/dbus.service - ln -sf /lib/systemd/system/dbus.socket $rootfs_dir/etc/systemd/system/dbus.socket -} - build_rootfs() { local rootfs_dir=$1 - local multistrap_conf=multistrap.conf - - # For simplicity's sake, use multistrap for foreign and native bootstraps. - cat > "$multistrap_conf" << EOF -[General] -cleanup=true -aptsources=Ubuntu -bootstrap=Ubuntu - -[Ubuntu] -source=$REPO_URL -keyring=ubuntu-keyring -suite=$OS_VERSION -packages=$PACKAGES $EXTRA_PKGS -EOF # This fixes the spurious error # E: Can't find a source to download version '2021.03.26' of 'ubuntu-keyring:amd64' apt update - - if ! multistrap -a "$DEB_ARCH" -d "$rootfs_dir" -f "$multistrap_conf"; then - if [ "$OS_VERSION" = "focal" ]; then - echo "WARN: multistrap failed, proceed with hack for Ubuntu 20.04" - build_dbus $rootfs_dir - else - echo "ERROR: multistrap failed, cannot proceed" && exit 1 - fi + # focal version of mmdebstrap only supports comma separated package lists + if [ "$OS_VERSION" = "focal" ]; then + PACKAGES=$(echo "$PACKAGES" | tr ' ' ',') + EXTRA_PKGS=$(echo "$EXTRA_PKGS" | tr ' ' ',') + fi + if ! mmdebstrap --mode auto --arch "$DEB_ARCH" --variant required \ + --include "$PACKAGES,$EXTRA_PKGS" "$OS_VERSION" "$rootfs_dir" "$REPO_URL"; then + echo "ERROR: mmdebstrap failed, cannot proceed" && exit 1 else - echo "INFO: multistrap succeeded" + echo "INFO: mmdebstrap succeeded" fi rm -rf "$rootfs_dir/var/run" ln -s /run "$rootfs_dir/var/run"