{"id":25842,"url":"https://patchwork.libcamera.org/api/patches/25842/?format=json","web_url":"https://patchwork.libcamera.org/patch/25842/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260119102039.3521673-4-barnabas.pocze@ideasonboard.com>","date":"2026-01-19T10:20:37","name":"[libcamera-ci,RFC,v1,3/5] Add job to build debian rootfs","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"64553116d4f4e3c421f6324c189579c3596dc34c","submitter":{"id":216,"url":"https://patchwork.libcamera.org/api/people/216/?format=json","name":"Barnabás Pőcze","email":"barnabas.pocze@ideasonboard.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/25842/mbox/","series":[{"id":5715,"url":"https://patchwork.libcamera.org/api/series/5715/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5715","date":"2026-01-19T10:20:34","name":"on-device-testing proof of concept","version":1,"mbox":"https://patchwork.libcamera.org/series/5715/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/25842/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/25842/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 8BFBFC3220\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 Jan 2026 10:20:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 64E9E61FBB;\n\tMon, 19 Jan 2026 11:20:49 +0100 (CET)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1D41F61FBC\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Jan 2026 11:20:44 +0100 (CET)","from pb-laptop.local (185.221.143.114.nat.pool.zt.hu\n\t[185.221.143.114])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id D2A2F10D8\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 Jan 2026 11:20:13 +0100 (CET)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"Nw5TBvfU\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1768818013;\n\tbh=cuVq6zgdO8brfCPFxggoLSx1kOKtG2mFEVEmRhk/AZE=;\n\th=From:To:Subject:Date:In-Reply-To:References:From;\n\tb=Nw5TBvfUsF6Ga2Elfg89r4DQt87AvwUdInRK0CXF8NgS8JhJNLKslwOIRiFNx8o7G\n\tzKM+MfuU2ddZOA7QGu5AE5wsnVlgaFVz6IRvKVv/f5/f1+AFTjjwSQs8AegnNdiW8c\n\tLPWSsuBNqLU7ALBtBbVA9lSj5+PtFOzPdci2Zw7c=","From":"=?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= <barnabas.pocze@ideasonboard.com>","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","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"Add a job that builds a debian rootfs and uploads it to the gitlab container\nregistry, with the dependencies needed by libcamera created in the\nbuild-debian-cross job.\n\nSigned-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>\n---\n .gitlab-ci/build-debian-rootfs.sh | 79 +++++++++++++++++++++++++++++++\n gitlab-ci.yml                     | 47 ++++++++++++++++++\n 2 files changed, 126 insertions(+)\n create mode 100755 .gitlab-ci/build-debian-rootfs.sh\n\n--\n2.52.0","diff":"diff --git a/.gitlab-ci/build-debian-rootfs.sh b/.gitlab-ci/build-debian-rootfs.sh\nnew file mode 100755\nindex 0000000..800ba5f\n--- /dev/null\n+++ b/.gitlab-ci/build-debian-rootfs.sh\n@@ -0,0 +1,79 @@\n+#!/bin/bash\n+# based on https://gitlab.freedesktop.org/freedesktop/ci-templates/-/blob/fb9d50ccb3cbbb4c6dc5f9ef53a0ad3cb0d8a177/bootstrap/cbuild\n+\n+set -ex\n+\n+packages=(\n+\t# misc.\n+\tca-certificates\n+\tcoreutils\n+\tchrony\n+\tcurl\n+\tiproute2\n+\tkmod\n+\tmoreutils\n+\topenssh-server\n+\tv4l-utils\n+\twget\n+\n+\t# runtime dependencies\n+\tlibevent-2.1-7\n+\tlibevent-pthreads-2.1-7\n+\tlibpisp1\n+\tlibssl3t64\n+\tlibudev1\n+\tlibyaml-0-2\n+\tudev\n+)\n+\n+podman login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n+skopeo login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY\n+\n+deb_distribution=\"$1\"\n+deb_arch=\"$2\"\n+container_image_path=\"$3\"\n+container_image_tag=\"$4\"\n+overlay_dir=\"$5\"\n+\n+container_image_name=\"$CI_REGISTRY_IMAGE/$container_image_path:$container_image_tag\"\n+\n+if skopeo inspect --no-tags --retry-times 3 \"docker://$container_image_name\"; then\n+\techo \"container image exists\"\n+\texit 0\n+fi\n+\n+# TODO: Check if image already exists in the registry of $FDO_UPSTREAM_REPO?\n+\n+newcontainer=$(buildah from scratch)\n+scratchmnt=$(buildah mount \"$newcontainer\")\n+\n+debootstrap --arch=\"$deb_arch\" --variant=minbase \"$deb_distribution\" \"$scratchmnt\"\n+\n+buildah run --isolation=chroot \"$newcontainer\" apt update -y\n+buildah run --isolation=chroot \"$newcontainer\" apt install -y --no-install-recommends systemd systemd-sysv\n+buildah run --isolation=chroot \"$newcontainer\" apt install -y --no-install-recommends \"${packages[@]}\"\n+buildah run --isolation=chroot \"$newcontainer\" bash -c 'printf \"root\\nroot\\n\" | passwd root'\n+buildah run --isolation=chroot \"$newcontainer\" bash -c 'echo \"PermitRootLogin yes\" > /etc/ssh/sshd_config.d/10-allow-root-password.conf'\n+buildah run --isolation=chroot \"$newcontainer\" apt autoclean -y\n+buildah run --isolation=chroot \"$newcontainer\" apt autopurge -y\n+\n+buildah run --isolation=chroot \"$newcontainer\" rm -rf /var/cache/\n+buildah run --isolation=chroot \"$newcontainer\" rm -rf /var/lib/apt/\n+\n+if [[ -d \"$overlay_dir\" ]]; then\n+\trsync -av --chown=root:root \"$overlay_dir/\" \"$scratchmnt/\"\n+fi\n+\n+buildah unmount \"$newcontainer\"\n+\n+buildah config -l fdo.pipeline_id=\"$CI_PIPELINE_ID\" \"$newcontainer\"\n+buildah config -l fdo.job_id=\"$CI_JOB_ID\" \"$newcontainer\"\n+buildah config -l fdo.project=\"$CI_PROJECT_PATH\" \"$newcontainer\"\n+buildah config -l fdo.commit=\"$CI_COMMIT_SHA\" \"$newcontainer\"\n+buildah config --entrypoint '[\"/sbin/init\"]' \"$newcontainer\"\n+\n+buildah commit --format=docker \"$newcontainer\" \"$container_image_name\"\n+\n+podman image inspect \"$container_image_name\"\n+\n+podman push --compression-format=gzip \"$container_image_name\"\ndiff --git a/gitlab-ci.yml b/gitlab-ci.yml\nindex b7362d7..36032e3 100644\n--- a/gitlab-ci.yml\n+++ b/gitlab-ci.yml\n@@ -144,6 +144,33 @@ container-build-debian-cross:\n       .gitlab-ci/setup-debian-cross-container.sh \"$ARCH\" ;\n       gem install fpm ;\n\n+.container-build-debian-rootfs:\n+  variables:\n+    FDO_DISTRIBUTION_VERSION: 'trixie'\n+    FDO_DISTRIBUTION_TAG: 'build-debian-rootfs-2026-01-12.0'\n+\n+container-build-debian-rootfs:\n+  extends:\n+    - .fdo.container-build@debian\n+    - .container-build-debian-rootfs\n+  stage: container\n+  needs: []\n+  variables:\n+    GIT_STRATEGY: none\n+    FDO_DISTRIBUTION_PACKAGES: >-\n+      buildah\n+      ca-certificates\n+      debootstrap\n+      dpkg-dev\n+      findutils\n+      fuse-overlayfs\n+      git\n+      jq\n+      meson\n+      podman\n+      rsync\n+      skopeo\n+\n # ------------------------------------------------------------------------------\n # Build stage - Build libcamera for various platforms and configurations\n # ------------------------------------------------------------------------------\n@@ -432,6 +459,26 @@ build-debian-cross:\n       - build/build.ninja\n       - \"*.deb\"\n\n+build-debian-rootfs:\n+  extends:\n+    - .fdo.distribution-image@debian\n+    - .container-build-debian-rootfs\n+    - .debian-cross-build\n+    - .debian-cross-build-architectures\n+    - .libcamera-ci.scripts\n+  stage: build\n+  needs:\n+    - job: container-build-debian-rootfs\n+      artifacts: false\n+  variables:\n+    GIT_STRATEGY: none\n+  script:\n+    - $CI_PROJECT_DIR/.gitlab-ci/build-debian-rootfs.sh\n+        \"$CROSS_BUILD_DISTRIBUTION_VERSION\"\n+        \"$ARCH\"\n+        \"$CROSS_BUILD_IMAGE\"\n+        \"$CROSS_BUILD_TAG-$ARCH\"\n+\n # ------------------------------------------------------------------------------\n # Lint stage - Run checkstyle.py and check merge suitability\n # ------------------------------------------------------------------------------\n","prefixes":["libcamera-ci","RFC","v1","3/5"]}