public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: "'Felix Moessbauer' via isar-users" <isar-users@googlegroups.com>
To: isar-users@googlegroups.com
Cc: jan.kiszka@siemens.com, quirin.gylstorff@siemens.com,
	Felix Moessbauer <felix.moessbauer@siemens.com>
Subject: [PATCH v1 15/15] add support for devshell on unshare backend
Date: Thu, 26 Feb 2026 17:28:41 +0100	[thread overview]
Message-ID: <20260226162843.1642329-17-felix.moessbauer@siemens.com> (raw)
In-Reply-To: <20260226162843.1642329-1-felix.moessbauer@siemens.com>

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
 meta/classes-recipe/dpkg-base.bbclass | 68 ++++++++++++++++++++++-----
 1 file changed, 56 insertions(+), 12 deletions(-)

diff --git a/meta/classes-recipe/dpkg-base.bbclass b/meta/classes-recipe/dpkg-base.bbclass
index c34c96bf..bec2580f 100644
--- a/meta/classes-recipe/dpkg-base.bbclass
+++ b/meta/classes-recipe/dpkg-base.bbclass
@@ -253,13 +253,11 @@ do_deploy_deb[lockfiles] = "${REPO_ISAR_DIR}/isar.lock"
 do_deploy_deb[dirs] = "${S}"
 
 python do_devshell() {
-    bb.build.exec_func('dpkg_schroot_create_configs', d)
-
     isar_export_proxies(d)
     isar_export_ccache(d)
     isar_export_build_settings(d)
-    if bb.utils.to_boolean(d.getVar('USE_CCACHE')):
-        bb.build.exec_func('schroot_configure_ccache', d)
+
+    bb.build.exec_func('devshell_chroot_prepare', d)
 
     schroot = d.getVar('SBUILD_CHROOT')
     pkg_arch = d.getVar('PACKAGE_ARCH')
@@ -271,21 +269,39 @@ python do_devshell() {
         -t \"apt-get -y -q -o Debug::pkgProblemResolver=yes --no-install-recommends --allow-downgrades\" \
         debian/control"
 
-    termcmd = "schroot -d / -c {0} -u root -- sh -c ' \
-        cd {1}; \
+    termcmd = "cd {0}; \
         apt-get -y -q update -o Dir::Etc::SourceList=\"sources.list.d/isar-apt.list\" -o Dir::Etc::SourceParts=\"-\" -o APT::Get::List-Cleanup=\"0\"; \
         apt-get -y upgrade; \
-        {2}; \
+        {1}; \
         if [ -n \"$PATH_PREPEND\" ]; then export PATH=$PATH_PREPEND:$PATH; fi; \
-        $SHELL -i \
-    '"
-    oe_terminal(termcmd.format(schroot, pp_pps, install_deps), "Isar devshell", d)
-
-    bb.build.exec_func('schroot_delete_configs', d)
+        $SHELL -i".format(pp_pps, install_deps)
+
+    if d.getVar('ISAR_CHROOT_MODE') == 'unshare':
+        mounts = d.getVar('SCHROOT_MOUNTS')
+        mounts += ' {}:/home/builder/{}'.format(d.getVar('WORKDIR'), d.getVar('BPN'))
+
+        if bb.utils.to_boolean(d.getVar('USE_CCACHE')):
+            bb.build.exec_func('dpkg_prepare_unshare_ccache', d)
+            mounts += ' {}:/ccache'.format(d.getVar('CCACHE_DIR'))
+
+        termcmd = """{0} \
+sh -c "{1};cp /etc/resolv.conf {2}/etc;chroot {2} sh -c '{3}'"
+""".format(
+        run_privileged_cmd(d),
+        insert_isar_mounts(d, d.getVar('DEVSHELL_UNSHARE_ROOTFS'), mounts),
+        d.getVar('DEVSHELL_UNSHARE_ROOTFS'),
+        termcmd.replace('"', "\\\""))
+    else:
+        termcmd = "schroot -d / -c {0} -u root -- sh -c '{1}'".format(schroot, termcmd)
+    bb.warn(termcmd)
+    oe_terminal(termcmd, "Isar devshell", d)
+
+    bb.build.exec_func('devshell_chroot_finalize', d)
 }
 
 addtask devshell after do_local_isarapt do_prepare_build
 DEVSHELL_STARTDIR ?= "${S}"
+DEVSHELL_UNSHARE_ROOTFS ?= "${WORKDIR}/rootfs-devshell"
 do_devshell[dirs] = "${DEVSHELL_STARTDIR}"
 do_devshell[nostamp] = "1"
 do_devshell[network] = "${TASK_USE_SUDO}"
@@ -299,3 +315,31 @@ addtask devshell_nodeps after do_local_isarapt do_prepare_build
 do_devshell_nodeps[dirs] = "${DEVSHELL_STARTDIR}"
 do_devshell_nodeps[nostamp] = "1"
 do_devshell_nodeps[network] = "${TASK_USE_SUDO}"
+
+devshell_prepare_unshare_chroot() {
+    run_privileged_heredoc <<'EOF'
+        set -e
+        mkdir -p ${DEVSHELL_UNSHARE_ROOTFS}
+        tar -xf ${SBUILD_CHROOT} -C ${DEVSHELL_UNSHARE_ROOTFS}
+EOF
+}
+
+devshell_cleanup_unshare_chroot() {
+    run_privileged rm -rf ${DEVSHELL_UNSHARE_ROOTFS}
+}
+
+python devshell_chroot_prepare() {
+    if d.getVar('ISAR_CHROOT_MODE') == 'unshare':
+        bb.build.exec_func('devshell_prepare_unshare_chroot', d)
+    else:
+        bb.build.exec_func('dpkg_schroot_create_configs', d)
+        if bb.utils.to_boolean(d.getVar('USE_CCACHE')):
+            bb.build.exec_func('schroot_configure_ccache', d)
+}
+
+python devshell_chroot_finalize() {
+    if d.getVar('ISAR_CHROOT_MODE') == 'unshare':
+        bb.build.exec_func('devshell_cleanup_unshare_chroot', d)
+    else:
+        bb.build.exec_func('schroot_delete_configs', d)
+}
-- 
2.51.0

-- 
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/20260226162843.1642329-17-felix.moessbauer%40siemens.com.

  parent reply	other threads:[~2026-02-26 16:30 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-26 16:28 [PATCH v1 00/16] add support to build isar unprivileged 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 01/15] refactor bootstrap: store rootfs tar with user permissions 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 02/15] deb-dl-dir: export without root privileges 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 03/15] download debs without locking 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 04/15] introduce wrappers for privileged execution 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 05/15] bootstrap: move cleanup trap to function 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 06/15] rootfs: rework sstate caching of rootfs artifact 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 07/15] rootfs_generate_initramfs: rework deployment to avoid chowning 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 08/15] use bitbake function to generate mounting scripts 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 09/15] apt-fetcher: prepare for chroot specific fetching 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 10/15] add support for fully rootless builds 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 11/15] add helper script to clean artifacts in build dir 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 12/15] apt-fetcher: implement support for unshare backend 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 13/15] dpkg-source: implement multiarch " 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 14/16] rootfs: remove temporary sstate deploy directory after task execution 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 14/15] use copy of sbom-chroot for sbom creation 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` 'Felix Moessbauer' via isar-users [this message]
2026-02-26 16:28 ` [PATCH v1 15/16] " 'Felix Moessbauer' via isar-users
2026-02-26 16:28 ` [PATCH v1 16/16] add support for devshell on unshare backend 'Felix Moessbauer' via isar-users

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260226162843.1642329-17-felix.moessbauer@siemens.com \
    --to=isar-users@googlegroups.com \
    --cc=felix.moessbauer@siemens.com \
    --cc=jan.kiszka@siemens.com \
    --cc=quirin.gylstorff@siemens.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox