From patchwork Mon Jan 19 10:20:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= X-Patchwork-Id: 25842 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id 8BFBFC3220 for ; Mon, 19 Jan 2026 10:20:51 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 64E9E61FBB; Mon, 19 Jan 2026 11:20:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="Nw5TBvfU"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 1D41F61FBC for ; Mon, 19 Jan 2026 11:20:44 +0100 (CET) Received: from pb-laptop.local (185.221.143.114.nat.pool.zt.hu [185.221.143.114]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id D2A2F10D8 for ; Mon, 19 Jan 2026 11:20:13 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1768818013; bh=cuVq6zgdO8brfCPFxggoLSx1kOKtG2mFEVEmRhk/AZE=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Nw5TBvfUsF6Ga2Elfg89r4DQt87AvwUdInRK0CXF8NgS8JhJNLKslwOIRiFNx8o7G zKM+MfuU2ddZOA7QGu5AE5wsnVlgaFVz6IRvKVv/f5/f1+AFTjjwSQs8AegnNdiW8c LPWSsuBNqLU7ALBtBbVA9lSj5+PtFOzPdci2Zw7c= From: =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= To: libcamera-devel@lists.libcamera.org Subject: [libcamera-ci] [RFC PATCH v1 3/5] Add job to build debian rootfs Date: Mon, 19 Jan 2026 11:20:37 +0100 Message-ID: <20260119102039.3521673-4-barnabas.pocze@ideasonboard.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> References: <20260119102039.3521673-1-barnabas.pocze@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a job that builds a debian rootfs and uploads it to the gitlab container registry, with the dependencies needed by libcamera created in the build-debian-cross job. Signed-off-by: Barnabás Pőcze --- .gitlab-ci/build-debian-rootfs.sh | 79 +++++++++++++++++++++++++++++++ gitlab-ci.yml | 47 ++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100755 .gitlab-ci/build-debian-rootfs.sh -- 2.52.0 diff --git a/.gitlab-ci/build-debian-rootfs.sh b/.gitlab-ci/build-debian-rootfs.sh new file mode 100755 index 0000000..800ba5f --- /dev/null +++ b/.gitlab-ci/build-debian-rootfs.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# based on https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/fb9d50ccb3cbbb4c6dc5f9ef53a0ad3cb0d8a177/bootstrap/cbuild + +set -ex + +packages=( + # misc. + ca-certificates + coreutils + chrony + curl + iproute2 + kmod + moreutils + openssh-server + v4l-utils + wget + + # runtime dependencies + libevent-2.1-7 + libevent-pthreads-2.1-7 + libpisp1 + libssl3t64 + libudev1 + libyaml-0-2 + udev +) + +podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY +skopeo login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + +deb_distribution="$1" +deb_arch="$2" +container_image_path="$3" +container_image_tag="$4" +overlay_dir="$5" + +container_image_name="$CI_REGISTRY_IMAGE/$container_image_path:$container_image_tag" + +if skopeo inspect --no-tags --retry-times 3 "docker://$container_image_name"; then + echo "container image exists" + exit 0 +fi + +# TODO: Check if image already exists in the registry of $FDO_UPSTREAM_REPO? + +newcontainer=$(buildah from scratch) +scratchmnt=$(buildah mount "$newcontainer") + +debootstrap --arch="$deb_arch" --variant=minbase "$deb_distribution" "$scratchmnt" + +buildah run --isolation=chroot "$newcontainer" apt update -y +buildah run --isolation=chroot "$newcontainer" apt install -y --no-install-recommends systemd systemd-sysv +buildah run --isolation=chroot "$newcontainer" apt install -y --no-install-recommends "${packages[@]}" +buildah run --isolation=chroot "$newcontainer" bash -c 'printf "root\nroot\n" | passwd root' +buildah run --isolation=chroot "$newcontainer" bash -c 'echo "PermitRootLogin yes" > /etc/ssh/sshd_config.d/10-allow-root-password.conf' +buildah run --isolation=chroot "$newcontainer" apt autoclean -y +buildah run --isolation=chroot "$newcontainer" apt autopurge -y + +buildah run --isolation=chroot "$newcontainer" rm -rf /var/cache/ +buildah run --isolation=chroot "$newcontainer" rm -rf /var/lib/apt/ + +if [[ -d "$overlay_dir" ]]; then + rsync -av --chown=root:root "$overlay_dir/" "$scratchmnt/" +fi + +buildah unmount "$newcontainer" + +buildah config -l fdo.pipeline_id="$CI_PIPELINE_ID" "$newcontainer" +buildah config -l fdo.job_id="$CI_JOB_ID" "$newcontainer" +buildah config -l fdo.project="$CI_PROJECT_PATH" "$newcontainer" +buildah config -l fdo.commit="$CI_COMMIT_SHA" "$newcontainer" +buildah config --entrypoint '["/sbin/init"]' "$newcontainer" + +buildah commit --format=docker "$newcontainer" "$container_image_name" + +podman image inspect "$container_image_name" + +podman push --compression-format=gzip "$container_image_name" diff --git a/gitlab-ci.yml b/gitlab-ci.yml index b7362d7..36032e3 100644 --- a/gitlab-ci.yml +++ b/gitlab-ci.yml @@ -144,6 +144,33 @@ container-build-debian-cross: .gitlab-ci/setup-debian-cross-container.sh "$ARCH" ; gem install fpm ; +.container-build-debian-rootfs: + variables: + FDO_DISTRIBUTION_VERSION: 'trixie' + FDO_DISTRIBUTION_TAG: 'build-debian-rootfs-2026-01-12.0' + +container-build-debian-rootfs: + extends: + - .fdo.container-build@debian + - .container-build-debian-rootfs + stage: container + needs: [] + variables: + GIT_STRATEGY: none + FDO_DISTRIBUTION_PACKAGES: >- + buildah + ca-certificates + debootstrap + dpkg-dev + findutils + fuse-overlayfs + git + jq + meson + podman + rsync + skopeo + # ------------------------------------------------------------------------------ # Build stage - Build libcamera for various platforms and configurations # ------------------------------------------------------------------------------ @@ -432,6 +459,26 @@ build-debian-cross: - build/build.ninja - "*.deb" +build-debian-rootfs: + extends: + - .fdo.distribution-image@debian + - .container-build-debian-rootfs + - .debian-cross-build + - .debian-cross-build-architectures + - .libcamera-ci.scripts + stage: build + needs: + - job: container-build-debian-rootfs + artifacts: false + variables: + GIT_STRATEGY: none + script: + - $CI_PROJECT_DIR/.gitlab-ci/build-debian-rootfs.sh + "$CROSS_BUILD_DISTRIBUTION_VERSION" + "$ARCH" + "$CROSS_BUILD_IMAGE" + "$CROSS_BUILD_TAG-$ARCH" + # ------------------------------------------------------------------------------ # Lint stage - Run checkstyle.py and check merge suitability # ------------------------------------------------------------------------------