public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
* [PATCH v2 00/24] Sbuild/Schroot migration
@ 2021-11-19 12:13 Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 01/24] dpkg: Install raw package files to source root Uladzimir Bely
                   ` (25 more replies)
  0 siblings, 26 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

This is a patchset showing how sbuild/schroot tools can be integrated
into Isar build system.

Base schroot image is created with sbuild-chroot-target (or
sbuild-chroot-host in case of cross-build) recipe. These images are based
on isar-bootstrap ones, but include some build-related stuff preinstalled.

To use this changes you need to have sbuild and schroot installed and
configured. Current user should be added to sbuild group.

Changes since v1:
- parallel builds with different BUILD_DIR are supported
- parallel multiconfig targets in one build are supported
- per-task schroot configuration in /etc/schroot/ is now used
- patchset now passes Jenkins CI (so patches changes RFC => PATCH)

Current limitations:
- there is an unsolved problem with building foreigh architectures
using kas-docker.

- qemuamd64 images are buildable in kas-docker, but some changes
in kas are reqired (like installing additional packages and adding
'builder' user to 'sbuild group). I used the following changes to
build ghcr.io/siemens/kas/kas-isar:2.6.2-sbuild image based on
current ghcr.io/siemens/kas/kas-isar:2.6.2:
https://github.com/WiseLord/kas/commit/5b7b02aa33

- parallel building of several packages requires more free space
than current buildchroot-based architecture uses. This happens due
the sbuild architecture which uses some basic layer (common for all
packages) and per-package separate layer (where builddeps are downloaded
and installed).

- recently merged to 'next' ccache support is not yet implemented
in case of sbuild used.

For experiments, the code can be taken from Isar 'ubely/sbuild' branch.
This is an dev branch, so sometimes it can be force-pushed when some
fixes are applied of rebased to 'next' branch.

Anton Mikanovich (12):
  dpkg: Install raw package files to source root
  isar-bootstrap: Export bootstrap to schroot config
  linux-module: Do not use shell environment
  u-boot: Do not use shell environment
  trusted-firmware: Do not use shell environment
  optee-os: Do not use shell environment
  kselftest: Do not use shell environment
  dpkg: Build packages with sbuild
  sbuild: Introduce environment variables export API
  dpkg-gbp: Migrate to schroot
  linux-mainline: Move cfg fragment test to debian/rules
  linux-custom: Prepare kernel config inside sbuild

Uladzimir Bely (12):
  dpkg-gbp: Use separate command to export tarball
  sbuild: Add recipes for host and target rootfs to run sbuild
  sbuild: Mount base-apt in schroot
  sbuild: Add sbuildshell task
  dpkg-gbp: Preinstall gbp utils in schroot
  dpkg: Remove builddeps install task.
  dpkg-base: Switch devshell to use schroot
  dpkg-base: Switch apt_fetch and apt_unpack to use schroot
  dpkg-base: Cleanup from buildchroot parts.
  dpkg-gbp: Use host tools for dsc preparation
  doc: Add sbuild-related documentation
  sbuild: Replace isar-apt mounting with copying

 doc/user_manual.md                            |  22 ++-
 .../optee-os/optee-os-stm32mp15x_3.11.0.bb    |   2 +-
 .../linux/linux-mainline_5.4.70.bb            |  16 +-
 meta/classes/dpkg-base.bbclass                |  80 ++------
 meta/classes/dpkg-gbp.bbclass                 |  25 +--
 meta/classes/dpkg-raw.bbclass                 |   8 +-
 meta/classes/dpkg.bbclass                     |  56 +++---
 meta/classes/sbuild.bbclass                   | 177 ++++++++++++++++++
 meta/conf/bitbake.conf                        |   2 +
 .../files/debian/{rules => rules.tmpl}        |   4 +-
 meta/recipes-bsp/optee-os/optee-os-custom.inc |  10 +-
 .../files/debian/{rules => rules.tmpl}        |   4 +-
 .../trusted-firmware-a-custom.inc             |  10 +-
 .../u-boot/files/debian/{rules => rules.tmpl} |   2 +-
 meta/recipes-bsp/u-boot/u-boot-custom.inc     |  10 +-
 .../sbuild-chroot/sbuild-chroot-host.bb       |  13 ++
 .../sbuild-chroot/sbuild-chroot-target.bb     |  10 +
 .../sbuild-chroot/sbuild-chroot.inc           |  36 ++++
 .../kselftest/files/{rules => rules.tmpl}     |   0
 meta/recipes-kernel/kselftest/kselftest.inc   |  21 +--
 .../files/debian/{rules => rules.tmpl}        |  14 +-
 meta/recipes-kernel/linux-module/module.inc   |  23 +--
 meta/recipes-kernel/linux/linux-custom.inc    |   7 +-
 23 files changed, 382 insertions(+), 170 deletions(-)
 create mode 100644 meta/classes/sbuild.bbclass
 rename meta/recipes-bsp/optee-os/files/debian/{rules => rules.tmpl} (75%)
 rename meta/recipes-bsp/trusted-firmware-a/files/debian/{rules => rules.tmpl} (77%)
 rename meta/recipes-bsp/u-boot/files/debian/{rules => rules.tmpl} (94%)
 create mode 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot-host.bb
 create mode 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot-target.bb
 create mode 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
 rename meta/recipes-kernel/kselftest/files/{rules => rules.tmpl} (100%)
 rename meta/recipes-kernel/linux-module/files/debian/{rules => rules.tmpl} (50%)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 01/24] dpkg: Install raw package files to source root
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 02/24] dpkg-gbp: Use separate command to export tarball Uladzimir Bely
                   ` (24 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To get rid of using absolute paths in debian/rules move D to source
root. This is default location for dh_install, so now there is no need
in mention it in debian/rules.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 meta/classes/dpkg-raw.bbclass | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/meta/classes/dpkg-raw.bbclass b/meta/classes/dpkg-raw.bbclass
index dd7b761f..73356fa0 100644
--- a/meta/classes/dpkg-raw.bbclass
+++ b/meta/classes/dpkg-raw.bbclass
@@ -5,7 +5,7 @@
 
 inherit dpkg
 
-D = "${WORKDIR}/image"
+D = "${S}"
 
 # Populate folder that will be picked up as package
 do_install() {
@@ -22,10 +22,4 @@ do_prepare_build() {
 		sed 's:^./::' > ${S}/debian/${PN}.install
 
 	deb_debianize
-
-	cat <<EOF >> ${S}/debian/rules
-
-override_dh_install:
-	dh_install --sourcedir=${PP}/image
-EOF
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 02/24] dpkg-gbp: Use separate command to export tarball
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 01/24] dpkg: Install raw package files to source root Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 03/24] isar-bootstrap: Export bootstrap to schroot config Uladzimir Bely
                   ` (23 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

We don't actually build the package with gbp, but only prepare it for
the building with external dpkg-buildpackage command. In case there is
no need in real build we can perform only export which will produce
upstream tarball to pass for later building.
This allows to use any build tool for later processing.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-gbp.bbclass | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
index d956e8c3..ddf23ca5 100644
--- a/meta/classes/dpkg-gbp.bbclass
+++ b/meta/classes/dpkg-gbp.bbclass
@@ -30,5 +30,9 @@ do_install_builddeps_append() {
 }
 
 dpkg_runbuild_prepend() {
-    export GBP_PREFIX="gbp buildpackage --git-ignore-new ${GBP_EXTRA_OPTIONS} --git-builder="
+    sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
+        sh -c "cd ${PP}/${PPS} && gbp buildpackage --git-builder=/bin/true ${GBP_EXTRA_OPTIONS}"
+    # NOTE: `buildpackage --git-builder=/bin/true --git-pristine-tar` is used
+    # for compatibility with gbp version froms debian-stretch. In newer distros
+    # it's possible to use a subcommand `export-orig --pristine-tar`
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 03/24] isar-bootstrap: Export bootstrap to schroot config
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 01/24] dpkg: Install raw package files to source root Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 02/24] dpkg-gbp: Use separate command to export tarball Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 04/24] linux-module: Do not use shell environment Uladzimir Bely
                   ` (22 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To use isar-bootstrap with sbuild and schroot tools we need to export
the path to schroot config.

We also need to put isar-apt and downloads into fstab for sbuild
profile to have it mounted inside schroot.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/sbuild.bbclass                   | 87 +++++++++++++++++++
 .../isar-bootstrap/isar-bootstrap.inc         | 10 ++-
 2 files changed, 96 insertions(+), 1 deletion(-)
 create mode 100644 meta/classes/sbuild.bbclass

diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
new file mode 100644
index 00000000..d6e5b926
--- /dev/null
+++ b/meta/classes/sbuild.bbclass
@@ -0,0 +1,87 @@
+# This software is a part of ISAR.
+# Copyright (C) 2021 ilbers GmbH
+
+SCHROOT_CONF ?= "/etc/schroot"
+
+python __anonymous() {
+    import pwd
+    d.setVar('SCHROOT_USER', pwd.getpwuid(os.geteuid()).pw_name)
+    d.setVar('SCHROOT_USER_HOME', pwd.getpwuid(os.geteuid()).pw_dir)
+
+    mode = d.getVar('ISAR_CROSS_COMPILE', True)
+    distro_arch = d.getVar('DISTRO_ARCH')
+    if mode == "0" or d.getVar('HOST_ARCH') ==  distro_arch or \
+       (d.getVar('HOST_DISTRO') == "debian-stretch" and distro_arch == "i386"):
+        d.setVar('SBUILD_HOST_ARCH', distro_arch)
+    else:
+        d.setVar('SBUILD_HOST_ARCH', d.getVar('HOST_ARCH'))
+}
+
+SBUILD_CHROOT ?= "${DEBDISTRONAME}-${SCHROOT_USER}-${DISTRO}-${SBUILD_HOST_ARCH}"
+SBUILD_CHROOT_RW ?= "${SBUILD_CHROOT}-rw"
+
+SBUILD_CONF_DIR ?= "${SCHROOT_CONF}/${SBUILD_CHROOT}"
+SCHROOT_CONF_FILE ?= "${SCHROOT_CONF}/chroot.d/${SBUILD_CHROOT}"
+
+SCHROOT_DIR ?= "${DEPLOY_DIR_BOOTSTRAP}/${DISTRO}-${SBUILD_HOST_ARCH}"
+
+schroot_create_configs() {
+    sudo -s <<'EOSUDO'
+        set -e
+
+        cat << EOF > "${SCHROOT_CONF_FILE}"
+[${SBUILD_CHROOT}]
+type=directory
+directory=${SCHROOT_DIR}
+profile=${SBUILD_CHROOT}
+users=${SCHROOT_USER}
+groups=root,sbuild
+root-users=${SCHROOT_USER}
+root-groups=root,sbuild
+source-root-users=${SCHROOT_USER}
+source-root-groups=root,sbuild
+union-type=overlay
+preserve-environment=true
+
+[${SBUILD_CHROOT_RW}]
+type=directory
+directory=${SCHROOT_DIR}
+profile=${SBUILD_CHROOT}
+users=${SCHROOT_USER}
+groups=root,sbuild
+root-users=${SCHROOT_USER}
+root-groups=root,sbuild
+preserve-environment=true
+EOF
+
+        mkdir -p "${SCHROOT_DIR}/etc/apt/preferences.d"
+        cat << EOF > "${SCHROOT_DIR}/etc/apt/preferences.d/isar-apt"
+Package: *
+Pin: release n=${DEBDISTRONAME}
+Pin-Priority: 1000
+EOF
+
+        # Prepare mount points
+        cp -rf "${SCHROOT_CONF}/sbuild" "${SBUILD_CONF_DIR}"
+        sbuild_fstab="${SBUILD_CONF_DIR}/fstab"
+
+        fstab_isarapt="${DEPLOY_DIR}/isar-apt /isar-apt none rw,bind 0 0"
+        grep -qxF "${fstab_isarapt}" ${sbuild_fstab} || echo "${fstab_isarapt}" >> ${sbuild_fstab}
+
+        if [ -d ${DL_DIR} ]; then
+            fstab_downloads="${DL_DIR} /downloads none rw,bind 0 0"
+            grep -qxF "${fstab_downloads}" ${sbuild_fstab} || echo "${fstab_downloads}" >> ${sbuild_fstab}
+        fi
+EOSUDO
+}
+
+schroot_delete_configs() {
+    sudo -s <<'EOSUDO'
+        set -e
+        if [ -d "${SBUILD_CONF_DIR}" ]; then
+            rm -rf "${SBUILD_CONF_DIR}"
+        fi
+        rm -f "${SCHROOT_DIR}/etc/apt/preferences.d/isar-apt"
+        rm -f "${SCHROOT_CONF_FILE}"
+EOSUDO
+}
diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
index e9f92916..39e9c007 100644
--- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
+++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
@@ -25,13 +25,14 @@ APTSRCS_INIT = "${WORKDIR}/apt-sources-init"
 DISTRO_BOOTSTRAP_KEYFILES = ""
 THIRD_PARTY_APT_KEYFILES = ""
 DEPLOY_ISAR_BOOTSTRAP ?= ""
-DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales"
+DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales,fakeroot,build-essential,debhelper"
 DISTRO_BOOTSTRAP_BASE_PACKAGES_append_gnupg = ",gnupg"
 DISTRO_BOOTSTRAP_BASE_PACKAGES_append_https-support = "${@https_support(d)}"
 DISTRO_VARS_PREFIX ?= "${@'HOST_' if d.getVar('BOOTSTRAP_FOR_HOST') == '1' else ''}"
 BOOTSTRAP_DISTRO = "${@d.getVar('HOST_DISTRO' if d.getVar('BOOTSTRAP_FOR_HOST') == '1' else 'DISTRO')}"
 
 inherit deb-dl-dir
+inherit sbuild
 
 python () {
     distro_bootstrap_keys = (d.getVar("DISTRO_BOOTSTRAP_KEYS") or "").split()
@@ -398,6 +399,13 @@ EOSUDO
 
 addtask bootstrap before do_build after do_generate_keyrings
 
+do_schroot_config() {
+    schroot_create_configs
+}
+
+addtask schroot_config before do_bootstrap after do_generate_keyrings
+# TODO: remove configs from /etc/schroot
+
 CLEANFUNCS = "clean_deploy"
 clean_deploy() {
     rm -f "${DEPLOY_ISAR_BOOTSTRAP}"
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 04/24] linux-module: Do not use shell environment
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (2 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 03/24] isar-bootstrap: Export bootstrap to schroot config Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:44   ` Jan Kiszka
  2021-11-19 12:13 ` [PATCH v2 05/24] u-boot: " Uladzimir Bely
                   ` (21 subsequent siblings)
  25 siblings, 1 reply; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To make package build process independent of the shell environment we
should remove KDIR and PN passing through export call.
KDIR can be prepared during package build. This also will allow not to
rely on previous builddeps install task.
To pass PN variable we can just migrate to template-based debian/rules
file.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 .../files/debian/{rules => rules.tmpl}        | 14 ++++++++++-
 meta/recipes-kernel/linux-module/module.inc   | 23 +++++++------------
 2 files changed, 21 insertions(+), 16 deletions(-)
 rename meta/recipes-kernel/linux-module/files/debian/{rules => rules.tmpl} (50%)

diff --git a/meta/recipes-kernel/linux-module/files/debian/rules b/meta/recipes-kernel/linux-module/files/debian/rules.tmpl
similarity index 50%
rename from meta/recipes-kernel/linux-module/files/debian/rules
rename to meta/recipes-kernel/linux-module/files/debian/rules.tmpl
index 59720b37..d8f1d48a 100755
--- a/meta/recipes-kernel/linux-module/files/debian/rules
+++ b/meta/recipes-kernel/linux-module/files/debian/rules.tmpl
@@ -24,14 +24,26 @@ ifneq (,$(findstring 86,$(DEB_HOST_GNU_CPU)))
 export ARCH=x86
 endif
 
+# Custom kernels contain the build folder directly.
+KDIR := $(shell dpkg -L linux-headers-${KERNEL_NAME} | grep "/lib/modules/.*/build")
+ifeq ($(KDIR),)
+# Debian kernels install that folder indirectly via a dependency.
+KERNEL_DEP := $(shell dpkg-query -W -f '$${Depends}' linux-headers-${KERNEL_NAME} | sed 's/.*\(linux-headers-[[:graph:]]*\).*/\1/')
+KDIR := $(shell dpkg -L $(KERNEL_DEP) | grep "/lib/modules/.*/build")
+endif
+
+# With sbuild `dh clean` is called before chroot's apt database updated. So,
+# KDIR is empty at that moment and the override causes error. Will skip it.
+ifneq ($(KDIR),)
 override_dh_auto_clean:
 	$(MAKE) -C $(KDIR) M=$(PWD) clean
+endif
 
 override_dh_auto_build:
 	$(MAKE) -C $(KDIR) M=$(PWD) modules
 
 override_dh_auto_install:
-	$(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(PWD)/debian/$(PN) modules_install
+	$(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(PWD)/debian/${PN} modules_install
 
 %:
 	CFLAGS= LDFLAGS= dh $@ --parallel
diff --git a/meta/recipes-kernel/linux-module/module.inc b/meta/recipes-kernel/linux-module/module.inc
index 0515621a..5b086233 100644
--- a/meta/recipes-kernel/linux-module/module.inc
+++ b/meta/recipes-kernel/linux-module/module.inc
@@ -22,8 +22,9 @@ AUTOLOAD ?= ""
 inherit dpkg
 
 TEMPLATE_FILES = "debian/control.tmpl \
-                  debian/changelog.tmpl"
-TEMPLATE_VARS += "KERNEL_NAME"
+                  debian/changelog.tmpl \
+                  debian/rules.tmpl"
+TEMPLATE_VARS += "KERNEL_NAME PN"
 
 do_prepare_build() {
     cp -r ${WORKDIR}/debian ${S}/
@@ -31,18 +32,10 @@ do_prepare_build() {
     for module in "${AUTOLOAD}"; do
         echo "echo $module >> /etc/modules" >> ${S}/debian/postinst
     done
-}
 
-dpkg_runbuild_prepend() {
-    # Custom kernels contain the build folder directly.
-    export KDIR=$(dpkg -L --root=${BUILDCHROOT_DIR} linux-headers-${KERNEL_NAME} | \
-                  grep "/lib/modules/.*/build")
-    if [ -z "$KDIR" ]; then
-        # Debian kernels install that folder indirectly via a dependency.
-        KERNEL_DEP=$(dpkg-query -W -f '${Depends}' --admindir=${BUILDCHROOT_DIR}/var/lib/dpkg \
-                     linux-headers-${KERNEL_NAME} | sed 's/.*\(linux-headers-[[:graph:]]*\).*/\1/')
-        export KDIR=$(dpkg -L --root=${BUILDCHROOT_DIR} ${KERNEL_DEP} | \
-                      grep "/lib/modules/.*/build")
-    fi
-    export PN=${PN}
+    # remove templates from the source tree
+    find ${S}/debian -name *.tmpl | xargs rm -f
+
+    # restore execute permissions
+    chmod a+x ${S}/debian/rules
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 05/24] u-boot: Do not use shell environment
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (3 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 04/24] linux-module: Do not use shell environment Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 06/24] trusted-firmware: " Uladzimir Bely
                   ` (20 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To make package build process independent of the shell environment we
should remove U_BOOT_CONFIG and U_BOOT_BIN passing through export call.
So we migrate to template-based debian/rules file.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 .../u-boot/files/debian/{rules => rules.tmpl}          |  2 +-
 meta/recipes-bsp/u-boot/u-boot-custom.inc              | 10 ++++------
 2 files changed, 5 insertions(+), 7 deletions(-)
 rename meta/recipes-bsp/u-boot/files/debian/{rules => rules.tmpl} (94%)

diff --git a/meta/recipes-bsp/u-boot/files/debian/rules b/meta/recipes-bsp/u-boot/files/debian/rules.tmpl
similarity index 94%
rename from meta/recipes-bsp/u-boot/files/debian/rules
rename to meta/recipes-bsp/u-boot/files/debian/rules.tmpl
index 3d667620..806b01fe 100755
--- a/meta/recipes-bsp/u-boot/files/debian/rules
+++ b/meta/recipes-bsp/u-boot/files/debian/rules.tmpl
@@ -13,7 +13,7 @@ SET_CROSS_BUILD_TOOLS=CROSS_BUILD_TOOLS=y
 endif
 
 override_dh_auto_build:
-	$(MAKE) $(PARALLEL_MAKE) $(U_BOOT_CONFIG)
+	$(MAKE) $(PARALLEL_MAKE) ${U_BOOT_CONFIG}
 	$(MAKE) $(PARALLEL_MAKE) ${U_BOOT_BIN}
 	$(MAKE) -n u-boot-initial-env >/dev/null 2>&1; if [ $$? -ne 2 ]; then \
 		$(MAKE) $(PARALLEL_MAKE) u-boot-initial-env; \
diff --git a/meta/recipes-bsp/u-boot/u-boot-custom.inc b/meta/recipes-bsp/u-boot/u-boot-custom.inc
index 9984d8cc..819206af 100644
--- a/meta/recipes-bsp/u-boot/u-boot-custom.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-custom.inc
@@ -26,8 +26,8 @@ python() {
 
 DEBIAN_BUILD_DEPENDS ?= "bc, bison, flex, device-tree-compiler, git"
 
-TEMPLATE_FILES = "debian/control.tmpl"
-TEMPLATE_VARS += "MACHINE DEBIAN_BUILD_DEPENDS"
+TEMPLATE_FILES = "debian/control.tmpl debian/rules.tmpl"
+TEMPLATE_VARS += "MACHINE DEBIAN_BUILD_DEPENDS U_BOOT_CONFIG U_BOOT_BIN"
 
 U_BOOT_TOOLS_PACKAGE ?= "0"
 U_BOOT_CONFIG_PACKAGE ?= "0"
@@ -70,9 +70,7 @@ u-boot-initial-env /etc
 fw_env.config      /etc
 EOF
     fi
-}
 
-dpkg_runbuild_prepend() {
-    export U_BOOT_CONFIG="${U_BOOT_CONFIG}"
-    export U_BOOT_BIN="${U_BOOT_BIN}"
+    # restore execute permissions
+    chmod a+x ${S}/debian/rules
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 06/24] trusted-firmware: Do not use shell environment
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (4 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 05/24] u-boot: " Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 07/24] optee-os: " Uladzimir Bely
                   ` (19 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To make package build process independent of the shell environment we
should remove TF_A_PLATFORM and TF_A_EXTRA_BUILDARGS passing through
export call. So we migrate to template-based debian/rules file.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 .../files/debian/{rules => rules.tmpl}                 |  4 ++--
 .../trusted-firmware-a/trusted-firmware-a-custom.inc   | 10 ++++------
 2 files changed, 6 insertions(+), 8 deletions(-)
 rename meta/recipes-bsp/trusted-firmware-a/files/debian/{rules => rules.tmpl} (77%)

diff --git a/meta/recipes-bsp/trusted-firmware-a/files/debian/rules b/meta/recipes-bsp/trusted-firmware-a/files/debian/rules.tmpl
similarity index 77%
rename from meta/recipes-bsp/trusted-firmware-a/files/debian/rules
rename to meta/recipes-bsp/trusted-firmware-a/files/debian/rules.tmpl
index 70e1dd66..6dbf44db 100755
--- a/meta/recipes-bsp/trusted-firmware-a/files/debian/rules
+++ b/meta/recipes-bsp/trusted-firmware-a/files/debian/rules.tmpl
@@ -12,8 +12,8 @@ export CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)-
 endif
 
 override_dh_auto_build:
-	CFLAGS= LDFLAGS= $(MAKE) $(PARALLEL_MAKE) PLAT=$(TF_A_PLATFORM) \
-		$(TF_A_EXTRA_BUILDARGS)
+	CFLAGS= LDFLAGS= $(MAKE) $(PARALLEL_MAKE) PLAT=${TF_A_PLATFORM} \
+		${TF_A_EXTRA_BUILDARGS}
 
 %:
 	dh $@
diff --git a/meta/recipes-bsp/trusted-firmware-a/trusted-firmware-a-custom.inc b/meta/recipes-bsp/trusted-firmware-a/trusted-firmware-a-custom.inc
index 1142bfce..3fe4c415 100644
--- a/meta/recipes-bsp/trusted-firmware-a/trusted-firmware-a-custom.inc
+++ b/meta/recipes-bsp/trusted-firmware-a/trusted-firmware-a-custom.inc
@@ -22,8 +22,8 @@ DEBIAN_BUILD_DEPENDS ?= ""
 
 PROVIDES += "trusted-firmware-a-${TF_A_NAME}"
 
-TEMPLATE_FILES = "debian/control.tmpl"
-TEMPLATE_VARS += "TF_A_NAME DEBIAN_BUILD_DEPENDS"
+TEMPLATE_FILES = "debian/control.tmpl debian/rules.tmpl"
+TEMPLATE_VARS += "TF_A_NAME DEBIAN_BUILD_DEPENDS TF_A_PLATFORM TF_A_EXTRA_BUILDARGS"
 
 do_prepare_build() {
     cp -r ${WORKDIR}/debian ${S}/
@@ -35,9 +35,7 @@ do_prepare_build() {
         echo "build/${TF_A_PLATFORM}/$binary /usr/lib/trusted-firmware-a/${TF_A_NAME}/" >> \
             ${S}/debian/trusted-firmware-a-${TF_A_NAME}.install
     done
-}
 
-dpkg_runbuild_prepend() {
-    export TF_A_PLATFORM="${TF_A_PLATFORM}"
-    export TF_A_EXTRA_BUILDARGS="${TF_A_EXTRA_BUILDARGS}"
+    # restore execute permissions
+    chmod a+x ${S}/debian/rules
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 07/24] optee-os: Do not use shell environment
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (5 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 06/24] trusted-firmware: " Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 08/24] kselftest: " Uladzimir Bely
                   ` (18 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To make package build process independent of the shell environment we
should remove OPTEE_PLATFORM and OPTEE_EXTRA_BUILDARGS passing through
export call. So we migrate to template-based debian/rules file.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 .../optee-os/files/debian/{rules => rules.tmpl}        |  4 ++--
 meta/recipes-bsp/optee-os/optee-os-custom.inc          | 10 ++++------
 2 files changed, 6 insertions(+), 8 deletions(-)
 rename meta/recipes-bsp/optee-os/files/debian/{rules => rules.tmpl} (75%)

diff --git a/meta/recipes-bsp/optee-os/files/debian/rules b/meta/recipes-bsp/optee-os/files/debian/rules.tmpl
similarity index 75%
rename from meta/recipes-bsp/optee-os/files/debian/rules
rename to meta/recipes-bsp/optee-os/files/debian/rules.tmpl
index d2e9900f..9ab80dfe 100755
--- a/meta/recipes-bsp/optee-os/files/debian/rules
+++ b/meta/recipes-bsp/optee-os/files/debian/rules.tmpl
@@ -12,8 +12,8 @@ export CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)-
 endif
 
 override_dh_auto_build:
-	CFLAGS= LDFLAGS= $(MAKE) $(PARALLEL_MAKE) PLATFORM=$(OPTEE_PLATFORM) \
-		$(OPTEE_EXTRA_BUILDARGS)
+	CFLAGS= LDFLAGS= $(MAKE) $(PARALLEL_MAKE) PLATFORM=${OPTEE_PLATFORM} \
+		${OPTEE_EXTRA_BUILDARGS}
 
 %:
 	dh $@
diff --git a/meta/recipes-bsp/optee-os/optee-os-custom.inc b/meta/recipes-bsp/optee-os/optee-os-custom.inc
index 1bd51969..e9eed54d 100644
--- a/meta/recipes-bsp/optee-os/optee-os-custom.inc
+++ b/meta/recipes-bsp/optee-os/optee-os-custom.inc
@@ -22,8 +22,8 @@ DEBIAN_BUILD_DEPENDS ?= "python3-pycryptodome:native, python3-pyelftools"
 
 PROVIDES += "optee-os-${OPTEE_NAME}"
 
-TEMPLATE_FILES = "debian/control.tmpl"
-TEMPLATE_VARS += "OPTEE_NAME DEBIAN_BUILD_DEPENDS"
+TEMPLATE_FILES = "debian/control.tmpl debian/rules.tmpl"
+TEMPLATE_VARS += "OPTEE_NAME DEBIAN_BUILD_DEPENDS OPTEE_PLATFORM OPTEE_EXTRA_BUILDARGS"
 
 # split strip platform flavor, if any, from the specified platform string
 OPTEE_PLATFORM_BASE = "${@d.getVar('OPTEE_PLATFORM').split('-')[0]}"
@@ -38,9 +38,7 @@ do_prepare_build() {
         echo "out/arm-plat-${OPTEE_PLATFORM_BASE}/core/$binary /usr/lib/optee-os/${OPTEE_NAME}/" >> \
             ${S}/debian/optee-os-${OPTEE_NAME}.install
     done
-}
 
-dpkg_runbuild_prepend() {
-    export OPTEE_PLATFORM="${OPTEE_PLATFORM}"
-    export OPTEE_EXTRA_BUILDARGS="${OPTEE_EXTRA_BUILDARGS}"
+    # restore execute permissions
+    chmod a+x ${S}/debian/rules
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 08/24] kselftest: Do not use shell environment
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (6 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 07/24] optee-os: " Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 09/24] dpkg: Build packages with sbuild Uladzimir Bely
                   ` (17 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

To make package build process independent of the shell environment we
should remove KSELFTEST_ARGS passing through export call. The same
logic can be done by internal recipe parser and then pass variable to
template-based debian/rules file.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 .../kselftest/files/{rules => rules.tmpl}     |  0
 meta/recipes-kernel/kselftest/kselftest.inc   | 21 +++++++------------
 2 files changed, 8 insertions(+), 13 deletions(-)
 rename meta/recipes-kernel/kselftest/files/{rules => rules.tmpl} (100%)

diff --git a/meta/recipes-kernel/kselftest/files/rules b/meta/recipes-kernel/kselftest/files/rules.tmpl
similarity index 100%
rename from meta/recipes-kernel/kselftest/files/rules
rename to meta/recipes-kernel/kselftest/files/rules.tmpl
diff --git a/meta/recipes-kernel/kselftest/kselftest.inc b/meta/recipes-kernel/kselftest/kselftest.inc
index 2a76028b..6187d8e4 100644
--- a/meta/recipes-kernel/kselftest/kselftest.inc
+++ b/meta/recipes-kernel/kselftest/kselftest.inc
@@ -33,26 +33,21 @@ DEBIAN_BUILD_DEPENDS ?= " \
     llvm:native, \
 "
 
-SRC_URI += "file://rules"
+SRC_URI += "file://rules.tmpl"
 S = "${WORKDIR}/linux-${PV}"
 
+TEMPLATE_FILES = "rules.tmpl"
+TEMPLATE_VARS += "KSELFTEST_ARGS"
+
 KSELFTEST_TARGETS ?= ""
 KSELFTEST_SKIP_TARGETS ?= ""
 KSELFTEST_FORCE_TARGETS ?= "0"
 
+KSELFTEST_ARGS = "${@ "TARGETS=\"${KSELFTEST_TARGETS}\"" if d.getVar('KSELFTEST_TARGETS', True) else ''}"
+KSELFTEST_ARGS_append = "${@ " FORCE_TARGETS=1" if d.getVar('KSELFTEST_FORCE_TARGETS', True) == '1' else ''}"
+KSELFTEST_ARGS_append .= "${@ " SKIP_TARGETS=\"${KSELFTEST_SKIP_TARGETS}\"" if d.getVar('KSELFTEST_SKIP_TARGETS', True) else ''}"
+
 do_prepare_build[cleandirs] += "${S}/debian"
 do_prepare_build() {
     deb_debianize
 }
-
-dpkg_runbuild_prepend() {
-    if [ -n "${KSELFTEST_TARGETS}" ];then
-        export KSELFTEST_ARGS="TARGETS=\"${KSELFTEST_TARGETS}\""
-    fi
-    if [ ${KSELFTEST_FORCE_TARGETS} -eq 1 ];then
-        export KSELFTEST_ARGS="${KSELFTEST_ARGS} FORCE_TARGETS=1"
-    fi
-    if [ -n "${KSELFTEST_SKIP_TARGETS}" ];then
-        export KSELFTEST_ARGS="${KSELFTEST_ARGS} SKIP_TARGETS=\"${KSELFTEST_SKIP_TARGETS}\""
-    fi
-}
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 09/24] dpkg: Build packages with sbuild
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (7 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 08/24] kselftest: " Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 10/24] sbuild: Introduce environment variables export API Uladzimir Bely
                   ` (16 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

Use previously exported to schroot rootfs to build the package with
sbuild tool. Provide isar-apt as extra repository to be automatically
add to apt sources.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 meta/classes/dpkg.bbclass | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index 86b47c28..e021e546 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -2,6 +2,7 @@
 # Copyright (C) 2015-2018 ilbers GmbH
 
 inherit dpkg-base
+inherit sbuild
 
 PACKAGE_ARCH ?= "${DISTRO_ARCH}"
 
@@ -28,10 +29,16 @@ do_install_builddeps[lockfiles] += "${REPO_ISAR_DIR}/isar.lock"
 
 addtask devshell after do_install_builddeps
 
+ISAR_APT_REPO ?= "deb [trusted=yes] file:///isar-apt/${DISTRO}-${DISTRO_ARCH}/apt/${DISTRO} ${DEBDISTRONAME} main"
+
 # Build package from sources using build script
 dpkg_runbuild() {
     E="${@ isar_export_proxies(d)}"
     export PARALLEL_MAKE="${PARALLEL_MAKE}"
-    sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
-         /isar/build.sh ${PP}/${PPS} ${PACKAGE_ARCH} ${USE_CCACHE}
+
+    sbuild -A -n -c ${SBUILD_CHROOT} --extra-repository="${ISAR_APT_REPO}" \
+        --host=${PACKAGE_ARCH} --build=${SBUILD_HOST_ARCH} \
+        --starting-build-commands="runuser -u ${SCHROOT_USER} -- sh -c \"${SBUILD_PREBUILD:-:}\"" \
+        --no-run-lintian --no-run-piuparts --no-run-autopkgtest \
+        --build-dir=${WORKDIR} ${WORKDIR}/${PPS}
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 10/24] sbuild: Introduce environment variables export API
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (8 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 09/24] dpkg: Build packages with sbuild Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-21  9:07   ` Jan Kiszka
  2021-11-19 12:13 ` [PATCH v2 11/24] dpkg-gbp: Migrate to schroot Uladzimir Bely
                   ` (15 subsequent siblings)
  25 siblings, 1 reply; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

In case there is no ability to pass variables through template
mechanism we need to keep fallback API to migrate from bare export.
Using it with optee-os-stm32mp15x recipe as example.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 .../optee-os/optee-os-stm32mp15x_3.11.0.bb          |  2 +-
 meta/classes/sbuild.bbclass                         | 13 +++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb b/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb
index 0fa2005d..19aa763a 100644
--- a/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb
+++ b/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb
@@ -21,5 +21,5 @@ OPTEE_BINARIES = "tee-header_v2.stm32 tee-pageable_v2.stm32 tee-pager_v2.stm32"
 # Set version manually to PV, the tarball does not contain any hint.
 # Alternative: pull from git and add git as build dependency.
 dpkg_runbuild_prepend() {
-    export TEE_IMPL_VERSION=${PV}
+    sbuild_export TEE_IMPL_VERSION=${PV}
 }
diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index d6e5b926..5f9f7691 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -85,3 +85,16 @@ schroot_delete_configs() {
         rm -f "${SCHROOT_CONF_FILE}"
 EOSUDO
 }
+
+sbuild_export() {
+    SBUILD_CONFIG="${WORKDIR}/sbuild.conf"
+    VAR_LINE="'${1%%=*}' => '${1#*=}',"
+    if [ -s "${SBUILD_CONFIG}" ]; then
+        sed -i -e "\$i\\" -e "${VAR_LINE}" ${SBUILD_CONFIG}
+    else
+        echo "\$build_environment = {" > ${SBUILD_CONFIG}
+        echo "${VAR_LINE}" >> ${SBUILD_CONFIG}
+        echo "};" >> ${SBUILD_CONFIG}
+    fi
+    export SBUILD_CONFIG="${SBUILD_CONFIG}"
+}
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 11/24] dpkg-gbp: Migrate to schroot
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (9 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 10/24] sbuild: Introduce environment variables export API Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 12/24] linux-mainline: Move cfg fragment test to debian/rules Uladzimir Bely
                   ` (14 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

Use schroot instead of chroot for git-buildpackage.

Also added /home/.git-downloads mount while it's used
as git alternates location.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-gbp.bbclass | 21 ++++------------
 meta/classes/sbuild.bbclass   | 45 +++++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
index ddf23ca5..7ebbf2e0 100644
--- a/meta/classes/dpkg-gbp.bbclass
+++ b/meta/classes/dpkg-gbp.bbclass
@@ -13,25 +13,14 @@ GBP_DEPENDS ?= "git-buildpackage pristine-tar"
 GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
 
 do_install_builddeps_append() {
-    dpkg_do_mounts
-    distro="${DISTRO}"
-    if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then
-       distro="${HOST_DISTRO}"
-    fi
-    deb_dl_dir_import "${BUILDCHROOT_DIR}" "${distro}"
-    sudo -E chroot ${BUILDCHROOT_DIR} \
-        apt-get install -y -o Debug::pkgProblemResolver=yes \
-                        --no-install-recommends --download-only ${GBP_DEPENDS}
-    deb_dl_dir_export "${BUILDCHROOT_DIR}" "${distro}"
-    sudo -E chroot ${BUILDCHROOT_DIR} \
-        apt-get install -y -o Debug::pkgProblemResolver=yes \
-                        --no-install-recommends ${GBP_DEPENDS}
-    dpkg_undo_mounts
+    schroot_install "${GBP_DEPENDS}"
 }
 
+SCHROOT_MOUNTS = "${WORKDIR}:${PP} ${GITDIR}:/home/.git-downloads"
+
 dpkg_runbuild_prepend() {
-    sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
-        sh -c "cd ${PP}/${PPS} && gbp buildpackage --git-builder=/bin/true ${GBP_EXTRA_OPTIONS}"
+    schroot_run -d ${PP}/${PPS} -c ${SBUILD_CHROOT} -- \
+        gbp buildpackage --git-builder=/bin/true ${GBP_EXTRA_OPTIONS}
     # NOTE: `buildpackage --git-builder=/bin/true --git-pristine-tar` is used
     # for compatibility with gbp version froms debian-stretch. In newer distros
     # it's possible to use a subcommand `export-orig --pristine-tar`
diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index 5f9f7691..b7a349e6 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -3,6 +3,8 @@
 
 SCHROOT_CONF ?= "/etc/schroot"
 
+SCHROOT_MOUNTS ?= ""
+
 python __anonymous() {
     import pwd
     d.setVar('SCHROOT_USER', pwd.getpwuid(os.geteuid()).pw_name)
@@ -98,3 +100,46 @@ sbuild_export() {
     fi
     export SBUILD_CONFIG="${SBUILD_CONFIG}"
 }
+
+schroot_install() {
+    APTS="$1"
+    #TODO deb_dl_dir_import "${BUILDCHROOT_DIR}" "${distro}"
+    schroot -d / -c ${SBUILD_CHROOT_RW} -u root -- \
+        apt install -y -o Debug::pkgProblemResolver=yes \
+                    --no-install-recommends --download-only ${APTS}
+    #TODO deb_dl_dir_export "${BUILDCHROOT_DIR}" "${distro}"
+    schroot -d / -c ${SBUILD_CHROOT_RW} -u root -- \
+        apt install -y -o Debug::pkgProblemResolver=yes \
+                    --no-install-recommends ${APTS}
+}
+
+insert_mounts() {
+    sudo -s <<'EOSUDO'
+        ( flock 9
+        set -e
+        for mp in ${SCHROOT_MOUNTS}; do
+            FSTAB_LINE="${mp%%:*} ${mp#*:} none rw,bind 0 0"
+            grep -qxF "${FSTAB_LINE}" ${SBUILD_CONF_DIR}/fstab || \
+                echo "${FSTAB_LINE}" >> ${SBUILD_CONF_DIR}/fstab
+        done
+        ) 9>'${SCHROOT_LOCKFILE}'
+EOSUDO
+}
+
+remove_mounts() {
+    sudo -s <<'EOSUDO'
+        ( flock 9
+        set -e
+        for mp in ${SCHROOT_MOUNTS}; do
+            FSTAB_LINE="${mp%%:*} ${mp#*:} none rw,bind 0 0"
+            sed -i "\|${FSTAB_LINE}|d" ${SBUILD_CONF_DIR}/fstab
+        done
+        ) 9>'${SCHROOT_LOCKFILE}'
+EOSUDO
+}
+
+schroot_run() {
+    insert_mounts
+    schroot $@
+    remove_mounts
+}
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 12/24] linux-mainline: Move cfg fragment test to debian/rules
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (10 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 11/24] dpkg-gbp: Migrate to schroot Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 13/24] linux-custom: Prepare kernel config inside sbuild Uladzimir Bely
                   ` (13 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

Perform all config fragments checking in Debian way.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 .../linux/linux-mainline_5.4.70.bb               | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/meta-isar/recipes-kernel/linux/linux-mainline_5.4.70.bb b/meta-isar/recipes-kernel/linux/linux-mainline_5.4.70.bb
index 980e137b..28e51c0d 100644
--- a/meta-isar/recipes-kernel/linux/linux-mainline_5.4.70.bb
+++ b/meta-isar/recipes-kernel/linux/linux-mainline_5.4.70.bb
@@ -25,11 +25,13 @@ LINUX_VERSION_EXTENSION = "-isar"
 
 # For testing purposes only
 dpkg_configure_kernel_append() {
-    if ! grep "# CONFIG_MTD is not set" ${S}/${KERNEL_BUILD_DIR}/.config && \
-       ! grep "# CONFIG_MTD_UBI is not set" ${S}/${KERNEL_BUILD_DIR}/.config; then
-        grep "# CONFIG_UBIFS_FS is not set" ${S}/${KERNEL_BUILD_DIR}/.config || \
-            bbfatal "Self-check failed: CONFIG_UBIFS_FS still enabled"
-    fi
-    grep "CONFIG_ROOT_NFS=y" ${S}/${KERNEL_BUILD_DIR}/.config || \
-        bbfatal "Self-check failed: CONFIG_ROOT_NFS not enabled"
+cat << EOF | sed -i '/^override_dh_auto_build/ r /dev/stdin' ${S}/debian/rules
+	if ! grep "# CONFIG_MTD is not set" \$(O)/.config && \\
+	   ! grep "# CONFIG_MTD_UBI is not set" \$(O)/.config; then \\
+	    grep "# CONFIG_UBIFS_FS is not set" \$(O)/.config || \\
+	        (echo "Self-check failed: CONFIG_UBIFS_FS still enabled" && exit 1); \\
+	fi
+	grep "CONFIG_ROOT_NFS=y" \$(O)/.config || \\
+	    (echo "Self-check failed: CONFIG_ROOT_NFS not enabled" && exit 1)
+EOF
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 13/24] linux-custom: Prepare kernel config inside sbuild
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (11 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 12/24] linux-mainline: Move cfg fragment test to debian/rules Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 14/24] sbuild: Add recipes for host and target rootfs to run sbuild Uladzimir Bely
                   ` (12 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

From: Anton Mikanovich <amikan@ilbers.de>

Move prepare code inside sbuild hook to perform all the operations
inside schroot.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 meta/classes/dpkg.bbclass                           |  4 ++++
 meta/classes/sbuild.bbclass                         | 10 +++++-----
 meta/recipes-core/isar-bootstrap/isar-bootstrap.inc |  8 --------
 meta/recipes-kernel/linux/linux-custom.inc          |  7 +++++--
 4 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index e021e546..6da61185 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -36,9 +36,13 @@ dpkg_runbuild() {
     E="${@ isar_export_proxies(d)}"
     export PARALLEL_MAKE="${PARALLEL_MAKE}"
 
+    schroot_create_configs
+
     sbuild -A -n -c ${SBUILD_CHROOT} --extra-repository="${ISAR_APT_REPO}" \
         --host=${PACKAGE_ARCH} --build=${SBUILD_HOST_ARCH} \
         --starting-build-commands="runuser -u ${SCHROOT_USER} -- sh -c \"${SBUILD_PREBUILD:-:}\"" \
         --no-run-lintian --no-run-piuparts --no-run-autopkgtest \
         --build-dir=${WORKDIR} ${WORKDIR}/${PPS}
+
+    schroot_delete_configs
 }
diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index b7a349e6..a03883f0 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -19,7 +19,7 @@ python __anonymous() {
         d.setVar('SBUILD_HOST_ARCH', d.getVar('HOST_ARCH'))
 }
 
-SBUILD_CHROOT ?= "${DEBDISTRONAME}-${SCHROOT_USER}-${DISTRO}-${SBUILD_HOST_ARCH}"
+SBUILD_CHROOT ?= "${DEBDISTRONAME}-${SCHROOT_USER}-${@os.getpid()}"
 SBUILD_CHROOT_RW ?= "${SBUILD_CHROOT}-rw"
 
 SBUILD_CONF_DIR ?= "${SCHROOT_CONF}/${SBUILD_CHROOT}"
@@ -102,6 +102,7 @@ sbuild_export() {
 }
 
 schroot_install() {
+    schroot_create_configs
     APTS="$1"
     #TODO deb_dl_dir_import "${BUILDCHROOT_DIR}" "${distro}"
     schroot -d / -c ${SBUILD_CHROOT_RW} -u root -- \
@@ -111,35 +112,34 @@ schroot_install() {
     schroot -d / -c ${SBUILD_CHROOT_RW} -u root -- \
         apt install -y -o Debug::pkgProblemResolver=yes \
                     --no-install-recommends ${APTS}
+    schroot_delete_configs
 }
 
 insert_mounts() {
     sudo -s <<'EOSUDO'
-        ( flock 9
         set -e
         for mp in ${SCHROOT_MOUNTS}; do
             FSTAB_LINE="${mp%%:*} ${mp#*:} none rw,bind 0 0"
             grep -qxF "${FSTAB_LINE}" ${SBUILD_CONF_DIR}/fstab || \
                 echo "${FSTAB_LINE}" >> ${SBUILD_CONF_DIR}/fstab
         done
-        ) 9>'${SCHROOT_LOCKFILE}'
 EOSUDO
 }
 
 remove_mounts() {
     sudo -s <<'EOSUDO'
-        ( flock 9
         set -e
         for mp in ${SCHROOT_MOUNTS}; do
             FSTAB_LINE="${mp%%:*} ${mp#*:} none rw,bind 0 0"
             sed -i "\|${FSTAB_LINE}|d" ${SBUILD_CONF_DIR}/fstab
         done
-        ) 9>'${SCHROOT_LOCKFILE}'
 EOSUDO
 }
 
 schroot_run() {
+    schroot_create_configs
     insert_mounts
     schroot $@
     remove_mounts
+    schroot_delete_configs
 }
diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
index 39e9c007..1b227028 100644
--- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
+++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
@@ -32,7 +32,6 @@ DISTRO_VARS_PREFIX ?= "${@'HOST_' if d.getVar('BOOTSTRAP_FOR_HOST') == '1' else
 BOOTSTRAP_DISTRO = "${@d.getVar('HOST_DISTRO' if d.getVar('BOOTSTRAP_FOR_HOST') == '1' else 'DISTRO')}"
 
 inherit deb-dl-dir
-inherit sbuild
 
 python () {
     distro_bootstrap_keys = (d.getVar("DISTRO_BOOTSTRAP_KEYS") or "").split()
@@ -399,13 +398,6 @@ EOSUDO
 
 addtask bootstrap before do_build after do_generate_keyrings
 
-do_schroot_config() {
-    schroot_create_configs
-}
-
-addtask schroot_config before do_bootstrap after do_generate_keyrings
-# TODO: remove configs from /etc/schroot
-
 CLEANFUNCS = "clean_deploy"
 clean_deploy() {
     rm -f "${DEPLOY_ISAR_BOOTSTRAP}"
diff --git a/meta/recipes-kernel/linux/linux-custom.inc b/meta/recipes-kernel/linux/linux-custom.inc
index ed89aa09..21115840 100644
--- a/meta/recipes-kernel/linux/linux-custom.inc
+++ b/meta/recipes-kernel/linux/linux-custom.inc
@@ -125,6 +125,9 @@ do_prepare_build_prepend() {
 	# remove templates from the source tree
 	find ${S}/debian -name *.tmpl | xargs rm -f
 
+	# restore execute permissions
+	chmod a+x ${S}/debian/rules
+
 	# rename install/remove hooks to match user-specified name for our linux-image package
 	mv ${S}/debian/linux-image.postinst ${S}/debian/linux-image-${KERNEL_NAME_PROVIDED}.postinst
 	mv ${S}/debian/linux-image.postrm ${S}/debian/linux-image-${KERNEL_NAME_PROVIDED}.postrm
@@ -164,9 +167,9 @@ dpkg_configure_kernel() {
 		(cd ${WORKDIR} && cp ${src_frags} ${S}/debian/fragments/)
 	fi
 
-	sudo -E chroot --userspec=$(id -u):$(id -g) ${BUILDCHROOT_DIR} sh -c " \
+	SBUILD_PREBUILD="                                                      \
 		export ARCH=${KERNEL_ARCH} &&                                  \
-		cd ${PP}/${PPS} &&                                             \
+		cd %p &&                                                       \
 		make O=${KERNEL_BUILD_DIR} ${config_target} &&                 \
 		./scripts/kconfig/merge_config.sh                              \
 			-O ${KERNEL_BUILD_DIR}/                                \
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 14/24] sbuild: Add recipes for host and target rootfs to run sbuild
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (12 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 13/24] linux-custom: Prepare kernel config inside sbuild Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 15/24] sbuild: Mount base-apt in schroot Uladzimir Bely
                   ` (11 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

Similar to buildchroot, we need a separate rootfs to be used
for schroot.

It's based on bootstrapped rootfs, but includes several
common build-related packages.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-base.bbclass                |  3 ++
 meta/classes/dpkg.bbclass                     |  1 -
 meta/classes/sbuild.bbclass                   |  7 ++--
 meta/conf/bitbake.conf                        |  2 ++
 .../isar-bootstrap/isar-bootstrap.inc         |  2 +-
 .../sbuild-chroot/sbuild-chroot-host.bb       | 13 +++++++
 .../sbuild-chroot/sbuild-chroot-target.bb     | 10 ++++++
 .../sbuild-chroot/sbuild-chroot.inc           | 36 +++++++++++++++++++
 8 files changed, 70 insertions(+), 4 deletions(-)
 create mode 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot-host.bb
 create mode 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot-target.bb
 create mode 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc

diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
index 8bbc4165..acf967ac 100644
--- a/meta/classes/dpkg-base.bbclass
+++ b/meta/classes/dpkg-base.bbclass
@@ -4,6 +4,7 @@
 #
 # SPDX-License-Identifier: MIT
 
+inherit sbuild
 inherit buildchroot
 inherit debianize
 inherit terminal
@@ -214,6 +215,8 @@ python do_dpkg_build() {
 
 addtask dpkg_build before do_build
 
+do_dpkg_build[depends] = "${SCHROOT_DEP}"
+
 KEEP_INSTALLED_ON_CLEAN ?= "0"
 
 CLEANFUNCS += "deb_clean"
diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index 6da61185..d49648be 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -2,7 +2,6 @@
 # Copyright (C) 2015-2018 ilbers GmbH
 
 inherit dpkg-base
-inherit sbuild
 
 PACKAGE_ARCH ?= "${DISTRO_ARCH}"
 
diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index a03883f0..80f9ef25 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -15,8 +15,13 @@ python __anonymous() {
     if mode == "0" or d.getVar('HOST_ARCH') ==  distro_arch or \
        (d.getVar('HOST_DISTRO') == "debian-stretch" and distro_arch == "i386"):
         d.setVar('SBUILD_HOST_ARCH', distro_arch)
+        d.setVar('SCHROOT_DIR', d.getVar('SCHROOT_TARGET_DIR'))
+        dep = "sbuild-chroot-target:do_build"
     else:
         d.setVar('SBUILD_HOST_ARCH', d.getVar('HOST_ARCH'))
+        d.setVar('SCHROOT_DIR', d.getVar('SCHROOT_HOST_DIR'))
+        dep = "sbuild-chroot-host:do_build"
+    d.setVar('SCHROOT_DEP', dep)
 }
 
 SBUILD_CHROOT ?= "${DEBDISTRONAME}-${SCHROOT_USER}-${@os.getpid()}"
@@ -25,8 +30,6 @@ SBUILD_CHROOT_RW ?= "${SBUILD_CHROOT}-rw"
 SBUILD_CONF_DIR ?= "${SCHROOT_CONF}/${SBUILD_CHROOT}"
 SCHROOT_CONF_FILE ?= "${SCHROOT_CONF}/chroot.d/${SBUILD_CHROOT}"
 
-SCHROOT_DIR ?= "${DEPLOY_DIR_BOOTSTRAP}/${DISTRO}-${SBUILD_HOST_ARCH}"
-
 schroot_create_configs() {
     sudo -s <<'EOSUDO'
         set -e
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index dce467b2..83508ccc 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -57,6 +57,8 @@ DL_DIR ?= "${TOPDIR}/downloads"
 SSTATE_DIR ?= "${TMPDIR}/sstate-cache"
 BUILDCHROOT_HOST_DIR = "${DEPLOY_DIR_BUILDCHROOT}-host/${HOST_DISTRO}-${HOST_ARCH}_${DISTRO}-${DISTRO_ARCH}"
 BUILDCHROOT_TARGET_DIR = "${DEPLOY_DIR_BUILDCHROOT}-target/${DISTRO}-${DISTRO_ARCH}"
+SCHROOT_HOST_DIR = "${DEPLOY_DIR}/schroot-host/${HOST_DISTRO}-${HOST_ARCH}_${DISTRO}-${DISTRO_ARCH}"
+SCHROOT_TARGET_DIR = "${DEPLOY_DIR}/schroot-target/${DISTRO}-${DISTRO_ARCH}"
 SDKCHROOT_DIR = "${DEPLOY_DIR_SDKCHROOT}/${DISTRO}-${DISTRO_ARCH}"
 CACHE = "${TMPDIR}/cache"
 KERNEL_FILE ?= "vmlinuz"
diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
index 1b227028..e9f92916 100644
--- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
+++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc
@@ -25,7 +25,7 @@ APTSRCS_INIT = "${WORKDIR}/apt-sources-init"
 DISTRO_BOOTSTRAP_KEYFILES = ""
 THIRD_PARTY_APT_KEYFILES = ""
 DEPLOY_ISAR_BOOTSTRAP ?= ""
-DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales,fakeroot,build-essential,debhelper"
+DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales"
 DISTRO_BOOTSTRAP_BASE_PACKAGES_append_gnupg = ",gnupg"
 DISTRO_BOOTSTRAP_BASE_PACKAGES_append_https-support = "${@https_support(d)}"
 DISTRO_VARS_PREFIX ?= "${@'HOST_' if d.getVar('BOOTSTRAP_FOR_HOST') == '1' else ''}"
diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot-host.bb b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot-host.bb
new file mode 100644
index 00000000..aa82846b
--- /dev/null
+++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot-host.bb
@@ -0,0 +1,13 @@
+# Root filesystem for packages building
+#
+# This software is a part of ISAR.
+# Copyright (C) 2015-2021 ilbers GmbH
+
+DESCRIPTION = "Isar sbuild/schroot filesystem for host"
+
+SBUILD_VARIANT = "host"
+
+require sbuild-chroot.inc
+
+ROOTFS_ARCH = "${HOST_ARCH}"
+ROOTFS_DISTRO = "${HOST_DISTRO}"
diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot-target.bb b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot-target.bb
new file mode 100644
index 00000000..d75d783b
--- /dev/null
+++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot-target.bb
@@ -0,0 +1,10 @@
+# Root filesystem for packages building
+#
+# This software is a part of ISAR.
+# Copyright (C) 2015-2021 ilbers GmbH
+
+DESCRIPTION = "Isar sbuild/schroot filesystem for target"
+
+SBUILD_VARIANT = "target"
+
+require sbuild-chroot.inc
diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
new file mode 100644
index 00000000..177a8a6d
--- /dev/null
+++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
@@ -0,0 +1,36 @@
+# Common part for build chroot filesystem.
+#
+# This software is a part of ISAR.
+# Copyright (C) 2015-2021 ilbers GmbH
+
+LICENSE = "gpl-2.0"
+LIC_FILES_CHKSUM = "file://${LAYERDIR_core}/licenses/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe"
+
+PV = "1.0"
+
+inherit rootfs
+
+SBUILD_CHROOT_PREINSTALL_COMMON = " \
+    fakeroot \
+    build-essential \
+    debhelper \
+"
+
+SBUILD_CHROOT_PREINSTALL ?= " \
+    ${SBUILD_CHROOT_PREINSTALL_COMMON} \
+"
+
+SBUILD_CHROOT_DIR = "${WORKDIR}/rootfs"
+ROOTFSDIR = "${SBUILD_CHROOT_DIR}"
+ROOTFS_PACKAGES = "${SBUILD_CHROOT_PREINSTALL}"
+
+# We don't need /etc/apt/sources.list.d/isar-apt.list' while it's handled by sbuild
+ROOTFS_CONFIGURE_COMMAND_remove = "rootfs_configure_isar_apt"
+
+DEPLOY_SCHROOT = "${@d.getVar('SCHROOT_' + d.getVar('SBUILD_VARIANT').upper() + '_DIR')}"
+
+do_sbuildchroot_deploy[dirs] = "${DEPLOY_DIR}/schroot-${SBUILD_VARIANT}"
+do_sbuildchroot_deploy() {
+    ln -Tfsr "${ROOTFSDIR}" "${DEPLOY_SCHROOT}"
+}
+addtask sbuildchroot_deploy before do_build after do_rootfs
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 15/24] sbuild: Mount base-apt in schroot
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (13 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 14/24] sbuild: Add recipes for host and target rootfs to run sbuild Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 16/24] sbuild: Add sbuildshell task Uladzimir Bely
                   ` (10 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

This adds mounts for base-apt inside schroot and
adds import/export deb files to/from schroot.

So that it becomes possible to run second `cached` build
from local base-apt repo.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/sbuild.bbclass | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index 80f9ef25..474333e7 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -72,6 +72,8 @@ EOF
 
         fstab_isarapt="${DEPLOY_DIR}/isar-apt /isar-apt none rw,bind 0 0"
         grep -qxF "${fstab_isarapt}" ${sbuild_fstab} || echo "${fstab_isarapt}" >> ${sbuild_fstab}
+        fstab_baseapt="${REPO_BASE_DIR} /base-apt none rw,bind 0 0"
+        grep -qxF "${fstab_baseapt}" ${sbuild_fstab} || echo "${fstab_baseapt}" >> ${sbuild_fstab}
 
         if [ -d ${DL_DIR} ]; then
             fstab_downloads="${DL_DIR} /downloads none rw,bind 0 0"
@@ -107,11 +109,18 @@ sbuild_export() {
 schroot_install() {
     schroot_create_configs
     APTS="$1"
-    #TODO deb_dl_dir_import "${BUILDCHROOT_DIR}" "${distro}"
+
+    distro="${DISTRO}"
+    if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then
+       distro="${HOST_DISTRO}"
+    fi
+
+    deb_dl_dir_import ${SCHROOT_DIR} ${distro}
     schroot -d / -c ${SBUILD_CHROOT_RW} -u root -- \
         apt install -y -o Debug::pkgProblemResolver=yes \
                     --no-install-recommends --download-only ${APTS}
-    #TODO deb_dl_dir_export "${BUILDCHROOT_DIR}" "${distro}"
+    deb_dl_dir_export ${SCHROOT_DIR} ${distro}
+
     schroot -d / -c ${SBUILD_CHROOT_RW} -u root -- \
         apt install -y -o Debug::pkgProblemResolver=yes \
                     --no-install-recommends ${APTS}
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 16/24] sbuild: Add sbuildshell task
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (14 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 15/24] sbuild: Mount base-apt in schroot Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 17/24] dpkg-gbp: Preinstall gbp utils in schroot Uladzimir Bely
                   ` (9 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

Similar to devshell for buildchroot, sbuildshell allows
to enter schroot environment with interactive terminal

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/sbuild.bbclass | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index 474333e7..dcdd638b 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -155,3 +155,22 @@ schroot_run() {
     remove_mounts
     schroot_delete_configs
 }
+
+python do_sbuildshell() {
+    import sys
+
+    oe_lib_path = os.path.join(d.getVar('LAYERDIR_core'), 'lib')
+    sys.path.insert(0, oe_lib_path)
+
+    bb.build.exec_func('schroot_create_configs', d)
+
+    buildchroot = d.getVar('SBUILD_CHROOT')
+    rundir = "/"
+    termcmd = "schroot -d / -c {0} -u root -- sh -c 'cd {1}; $SHELL -i'"
+    oe_terminal(termcmd.format(buildchroot, rundir), "Isar devshell", d)
+
+    bb.build.exec_func('schroot_delete_configs', d)
+}
+
+addtask sbuildshell after do_prepare_build
+do_sbuildshell[nostamp] = "1"
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 17/24] dpkg-gbp: Preinstall gbp utils in schroot
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (15 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 16/24] sbuild: Add sbuildshell task Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 18/24] dpkg: Remove builddeps install task Uladzimir Bely
                   ` (8 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

This preinstalls gbp depends like git-buildpackage and pristine-tar
in basic schroot environment.

So, there is no need to do such kind of installation
with every gpb recipe like cowsay.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-gbp.bbclass                         | 4 ----
 meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc | 2 ++
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
index 7ebbf2e0..436fad0f 100644
--- a/meta/classes/dpkg-gbp.bbclass
+++ b/meta/classes/dpkg-gbp.bbclass
@@ -12,10 +12,6 @@ PATCHTOOL ?= "git"
 GBP_DEPENDS ?= "git-buildpackage pristine-tar"
 GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
 
-do_install_builddeps_append() {
-    schroot_install "${GBP_DEPENDS}"
-}
-
 SCHROOT_MOUNTS = "${WORKDIR}:${PP} ${GITDIR}:/home/.git-downloads"
 
 dpkg_runbuild_prepend() {
diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
index 177a8a6d..b6b73550 100644
--- a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
+++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
@@ -12,6 +12,8 @@ inherit rootfs
 
 SBUILD_CHROOT_PREINSTALL_COMMON = " \
     fakeroot \
+    git-buildpackage \
+    pristine-tar \
     build-essential \
     debhelper \
 "
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 18/24] dpkg: Remove builddeps install task.
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (16 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 17/24] dpkg-gbp: Preinstall gbp utils in schroot Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 19/24] dpkg-base: Switch devshell to use schroot Uladzimir Bely
                   ` (7 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

While builddeps are now handled interlnally by sbuild, we don't need
a task to preinstall them in buildchroot.

But for the second local (base-apt) build we need a way to keep
all dependencies in form of .deb files in DL_DIR. This is done
by executing additional commands in sbuild that copy them to/from
an externally mounted folder.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg.bbclass | 43 ++++++++++++++++++---------------------
 1 file changed, 20 insertions(+), 23 deletions(-)

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index d49648be..d80deeab 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -5,29 +5,6 @@ inherit dpkg-base
 
 PACKAGE_ARCH ?= "${DISTRO_ARCH}"
 
-# Install build dependencies for package
-do_install_builddeps() {
-    dpkg_do_mounts
-    E="${@ isar_export_proxies(d)}"
-    distro="${DISTRO}"
-    if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then
-       distro="${HOST_DISTRO}"
-    fi
-    deb_dl_dir_import "${BUILDCHROOT_DIR}" "${distro}"
-    sudo -E chroot ${BUILDCHROOT_DIR} /isar/deps.sh \
-        ${PP}/${PPS} ${PACKAGE_ARCH} --download-only
-    deb_dl_dir_export "${BUILDCHROOT_DIR}" "${distro}"
-    sudo -E chroot ${BUILDCHROOT_DIR} /isar/deps.sh \
-        ${PP}/${PPS} ${PACKAGE_ARCH}
-    dpkg_undo_mounts
-}
-
-addtask install_builddeps after do_prepare_build before do_dpkg_build
-# apt and reprepro may not run in parallel, acquire the Isar lock
-do_install_builddeps[lockfiles] += "${REPO_ISAR_DIR}/isar.lock"
-
-addtask devshell after do_install_builddeps
-
 ISAR_APT_REPO ?= "deb [trusted=yes] file:///isar-apt/${DISTRO}-${DISTRO_ARCH}/apt/${DISTRO} ${DEBDISTRONAME} main"
 
 # Build package from sources using build script
@@ -37,11 +14,31 @@ dpkg_runbuild() {
 
     schroot_create_configs
 
+    distro="${DISTRO}"
+    if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then
+        distro="${HOST_DISTRO}"
+    fi
+
+    deb_dl_dir_import "${WORKDIR}/rootfs" "${distro}"
+
+    deb_dir="/var/cache/apt/archives/"
+    ext_deb_dir="/home/builder/${PN}/rootfs/${deb_dir}"
+
+    ( flock 9
+        grep -qxF '$apt_keep_downloaded_packages = 1;' ${SCHROOT_USER_HOME}/.sbuildrc ||
+            echo '$apt_keep_downloaded_packages = 1;' >> ${SCHROOT_USER_HOME}/.sbuildrc
+    ) 9>"${TMPDIR}/sbuildrc.lock"
+
     sbuild -A -n -c ${SBUILD_CHROOT} --extra-repository="${ISAR_APT_REPO}" \
         --host=${PACKAGE_ARCH} --build=${SBUILD_HOST_ARCH} \
         --starting-build-commands="runuser -u ${SCHROOT_USER} -- sh -c \"${SBUILD_PREBUILD:-:}\"" \
         --no-run-lintian --no-run-piuparts --no-run-autopkgtest \
+        --chroot-setup-commands="cp -n --no-preserve=owner ${ext_deb_dir}/*.deb -t ${deb_dir}/" \
+        --finished-build-commands="rm -f ${deb_dir}/sbuild-build-depends-main-dummy_*.deb" \
+        --finished-build-commands="cp -n --no-preserve=owner ${deb_dir}/*.deb -t ${ext_deb_dir}/" \
         --build-dir=${WORKDIR} ${WORKDIR}/${PPS}
 
+    deb_dl_dir_export "${WORKDIR}/rootfs" "${distro}"
+
     schroot_delete_configs
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 19/24] dpkg-base: Switch devshell to use schroot
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (17 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 18/24] dpkg: Remove builddeps install task Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 20/24] dpkg-base: Switch apt_fetch and apt_unpack " Uladzimir Bely
                   ` (6 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

While packages are now build in schroot with sbuild, devshell
task should make terminal open inside sbuild environment.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-base.bbclass | 10 +++++-----
 meta/classes/sbuild.bbclass    |  3 +++
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
index acf967ac..861b2cb7 100644
--- a/meta/classes/dpkg-base.bbclass
+++ b/meta/classes/dpkg-base.bbclass
@@ -256,16 +256,16 @@ python do_devshell() {
     oe_lib_path = os.path.join(d.getVar('LAYERDIR_core'), 'lib')
     sys.path.insert(0, oe_lib_path)
 
-    bb.build.exec_func('dpkg_do_mounts', d)
+    bb.build.exec_func('schroot_create_configs', d)
 
     isar_export_proxies(d)
 
-    buildchroot = d.getVar('BUILDCHROOT_DIR')
+    schroot = d.getVar('SBUILD_CHROOT')
     pp_pps = os.path.join(d.getVar('PP'), d.getVar('PPS'))
-    termcmd = "sudo -E chroot {0} sh -c 'cd {1}; $SHELL -i'"
-    oe_terminal(termcmd.format(buildchroot, pp_pps), "Isar devshell", d)
+    termcmd = "schroot -d / -c {0} -u root -- sh -c 'cd {1}; $SHELL -i'"
+    oe_terminal(termcmd.format(schroot, pp_pps), "Isar devshell", d)
 
-    bb.build.exec_func('dpkg_undo_mounts', d)
+    bb.build.exec_func('schroot_delete_configs', d)
 }
 
 addtask devshell after do_prepare_build
diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index dcdd638b..799f210e 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -75,6 +75,9 @@ EOF
         fstab_baseapt="${REPO_BASE_DIR} /base-apt none rw,bind 0 0"
         grep -qxF "${fstab_baseapt}" ${sbuild_fstab} || echo "${fstab_baseapt}" >> ${sbuild_fstab}
 
+        fstab_pkgdir="${WORKDIR} /home/builder/${PN} none rw,bind 0 0"
+        grep -qxF "${fstab_pkgdir}" ${sbuild_fstab} || echo "${fstab_pkgdir}" >> ${sbuild_fstab}
+
         if [ -d ${DL_DIR} ]; then
             fstab_downloads="${DL_DIR} /downloads none rw,bind 0 0"
             grep -qxF "${fstab_downloads}" ${sbuild_fstab} || echo "${fstab_downloads}" >> ${sbuild_fstab}
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 20/24] dpkg-base: Switch apt_fetch and apt_unpack to use schroot
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (18 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 19/24] dpkg-base: Switch devshell to use schroot Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 21/24] dpkg-base: Cleanup from buildchroot parts Uladzimir Bely
                   ` (5 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

This moves downloading and unpacking deb-src to schroot environment.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-base.bbclass | 26 ++++++++------------------
 1 file changed, 8 insertions(+), 18 deletions(-)

diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
index 861b2cb7..f530df58 100644
--- a/meta/classes/dpkg-base.bbclass
+++ b/meta/classes/dpkg-base.bbclass
@@ -97,34 +97,25 @@ python() {
 }
 
 do_apt_fetch() {
-    dpkg_do_mounts
-    E="${@ isar_export_proxies(d)}"
-    sudo -E chroot ${BUILDCHROOT_DIR} /usr/bin/apt-get update \
-        -o Dir::Etc::SourceList="sources.list.d/isar-apt.list" \
-        -o Dir::Etc::SourceParts="-" \
-        -o APT::Get::List-Cleanup="0"
-
+    schroot_create_configs
     for uri in "${SRC_APT}"; do
-        sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
+        schroot -d / -c ${SBUILD_CHROOT} -- \
             sh -c 'mkdir -p /downloads/deb-src/"$1"/"$2" && cd /downloads/deb-src/"$1"/"$2" && apt-get -y --download-only --only-source source "$2"' my_script "${DISTRO}" "${uri}"
     done
-
-    dpkg_undo_mounts
+    schroot_delete_configs
 }
 
 addtask apt_fetch after do_unpack before do_apt_unpack
 do_apt_fetch[lockfiles] += "${REPO_ISAR_DIR}/isar.lock"
 
-# Add dependency from the correct buildchroot: host or target
-do_apt_fetch[depends] = "${BUILDCHROOT_DEP}"
+# Add dependency from the correct schroot: host or target
+do_apt_fetch[depends] = "${SCHROOT_DEP}"
 
 do_apt_unpack() {
     rm -rf ${S}
-    dpkg_do_mounts
-    E="${@ isar_export_proxies(d)}"
-
+    schroot_create_configs
     for uri in "${SRC_APT}"; do
-        sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
+        schroot -d / -c ${SBUILD_CHROOT} -- \
             sh -c ' \
                 set -e
                 dscfile="$(apt-get -y -qq --print-uris --only-source source "${2}" | cut -d " " -f2 | grep -E "*.dsc")"
@@ -133,8 +124,7 @@ do_apt_unpack() {
                 dpkg-source -x "${dscfile}" "${PPS}"' \
                     my_script "${DISTRO}" "${uri}"
     done
-
-    dpkg_undo_mounts
+    schroot_delete_configs
 }
 
 addtask apt_unpack after do_apt_fetch before do_patch
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 21/24] dpkg-base: Cleanup from buildchroot parts.
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (19 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 20/24] dpkg-base: Switch apt_fetch and apt_unpack " Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 22/24] dpkg-gbp: Use host tools for dsc preparation Uladzimir Bely
                   ` (4 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

This removes remaining buildchroot-related tasks and variables
from dpkg-base class while there are not used anymore.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg-base.bbclass | 43 +++-------------------------------
 meta/classes/dpkg.bbclass      |  4 ----
 2 files changed, 3 insertions(+), 44 deletions(-)

diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
index f530df58..d01ef5e8 100644
--- a/meta/classes/dpkg-base.bbclass
+++ b/meta/classes/dpkg-base.bbclass
@@ -5,7 +5,6 @@
 # SPDX-License-Identifier: MIT
 
 inherit sbuild
-inherit buildchroot
 inherit debianize
 inherit terminal
 inherit repository
@@ -163,29 +162,7 @@ addtask prepare_build after do_patch do_transform_template before do_dpkg_build
 # deployed to isar-apt
 do_prepare_build[deptask] = "do_deploy_deb"
 
-BUILDROOT = "${BUILDCHROOT_DIR}/${PP}"
-
-dpkg_do_mounts() {
-    mkdir -p ${BUILDROOT}
-    sudo mount --bind ${WORKDIR} ${BUILDROOT}
-
-    buildchroot_do_mounts
-}
-
-dpkg_undo_mounts() {
-    i=0
-    while ! sudo umount ${BUILDROOT}; do
-        sleep 0.1
-        if [ `expr $i % 100` -eq 0 ] ; then
-            bbwarn "${BUILDROOT}: Couldn't unmount ($i), retrying..."
-        fi
-        if [ $i -ge 10000 ]; then
-            bbfatal "${BUILDROOT}: Couldn't unmount after timeout"
-        fi
-        i=`expr $i + 1`
-    done
-    sudo rmdir ${BUILDROOT}
-}
+do_prepare_build[depends] = "${SCHROOT_DEP}"
 
 # Placeholder for actual dpkg_runbuild() implementation
 dpkg_runbuild() {
@@ -193,22 +170,17 @@ dpkg_runbuild() {
 }
 
 python do_dpkg_build() {
-    lock = bb.utils.lockfile(d.getVar("REPO_ISAR_DIR") + "/isar.lock",
-                             shared=True)
-    bb.build.exec_func("dpkg_do_mounts", d)
+    bb.build.exec_func('schroot_create_configs', d)
     try:
         bb.build.exec_func("dpkg_runbuild", d)
     finally:
-        bb.build.exec_func("dpkg_undo_mounts", d)
-        bb.utils.unlockfile(lock)
+        bb.build.exec_func('schroot_delete_configs', d)
 }
 
 addtask dpkg_build before do_build
 
 do_dpkg_build[depends] = "${SCHROOT_DEP}"
 
-KEEP_INSTALLED_ON_CLEAN ?= "0"
-
 CLEANFUNCS += "deb_clean"
 
 deb_clean() {
@@ -217,15 +189,6 @@ deb_clean() {
         for d in ${DEBS}; do
             repo_del_package "${REPO_ISAR_DIR}"/"${DISTRO}" \
                 "${REPO_ISAR_DB_DIR}"/"${DISTRO}" "${DEBDISTRONAME}" "${d}"
-            if [ "${KEEP_INSTALLED_ON_CLEAN}" = "1" ]; then
-                continue;
-            fi
-            package=$(basename "${d}")
-            package_remove="/usr/bin/apt-get remove -y ${package%%_*}"
-            sudo -E chroot ${BUILDCHROOT_DIR} ${package_remove} || true
-            if [ "${BUILDCHROOT_DIR}" != "${BUILDCHROOT_TARGET_DIR}" ]; then
-                    sudo -E chroot ${BUILDCHROOT_TARGET_DIR} ${package_remove} || true
-            fi
         done
     fi
 }
diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index d80deeab..355da541 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -12,8 +12,6 @@ dpkg_runbuild() {
     E="${@ isar_export_proxies(d)}"
     export PARALLEL_MAKE="${PARALLEL_MAKE}"
 
-    schroot_create_configs
-
     distro="${DISTRO}"
     if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then
         distro="${HOST_DISTRO}"
@@ -39,6 +37,4 @@ dpkg_runbuild() {
         --build-dir=${WORKDIR} ${WORKDIR}/${PPS}
 
     deb_dl_dir_export "${WORKDIR}/rootfs" "${distro}"
-
-    schroot_delete_configs
 }
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 22/24] dpkg-gbp: Use host tools for dsc preparation
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (20 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 21/24] dpkg-base: Cleanup from buildchroot parts Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 23/24] doc: Add sbuild-related documentation Uladzimir Bely
                   ` (3 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

Instead of preinstalling gbp-related packages in sbuild chroot
we will use their host versions in order to keep sbuild environment
as clean as possible.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 doc/user_manual.md                                    | 4 +++-
 meta/classes/dpkg-gbp.bbclass                         | 4 +++-
 meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc | 2 --
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/doc/user_manual.md b/doc/user_manual.md
index 535d456a..84c99604 100644
--- a/doc/user_manual.md
+++ b/doc/user_manual.md
@@ -78,7 +78,9 @@ apt install \
   qemu \
   qemu-user-static \
   reprepro \
-  sudo
+  sudo \
+  git-buildpackage \
+  pristine-tar
 ```
 
 If your host is >= buster, also install the following package.
diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
index 436fad0f..c9cc487e 100644
--- a/meta/classes/dpkg-gbp.bbclass
+++ b/meta/classes/dpkg-gbp.bbclass
@@ -15,8 +15,10 @@ GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
 SCHROOT_MOUNTS = "${WORKDIR}:${PP} ${GITDIR}:/home/.git-downloads"
 
 dpkg_runbuild_prepend() {
-    schroot_run -d ${PP}/${PPS} -c ${SBUILD_CHROOT} -- \
+    sh -c "
+        cd ${WORKDIR}/${PPS}
         gbp buildpackage --git-builder=/bin/true ${GBP_EXTRA_OPTIONS}
+    "
     # NOTE: `buildpackage --git-builder=/bin/true --git-pristine-tar` is used
     # for compatibility with gbp version froms debian-stretch. In newer distros
     # it's possible to use a subcommand `export-orig --pristine-tar`
diff --git a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
index b6b73550..177a8a6d 100644
--- a/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
+++ b/meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc
@@ -12,8 +12,6 @@ inherit rootfs
 
 SBUILD_CHROOT_PREINSTALL_COMMON = " \
     fakeroot \
-    git-buildpackage \
-    pristine-tar \
     build-essential \
     debhelper \
 "
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 23/24] doc: Add sbuild-related documentation
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (21 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 22/24] dpkg-gbp: Use host tools for dsc preparation Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 12:13 ` [PATCH v2 24/24] sbuild: Replace isar-apt mounting with copying Uladzimir Bely
                   ` (2 subsequent siblings)
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 doc/user_manual.md | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/doc/user_manual.md b/doc/user_manual.md
index 84c99604..01a7c5be 100644
--- a/doc/user_manual.md
+++ b/doc/user_manual.md
@@ -83,6 +83,24 @@ apt install \
   pristine-tar
 ```
 
+Additional setup is required since `sbuild` is now used for package build.
+Install the following packages:
+```
+apt install \
+  sbuild \
+  schroot
+```
+Also, user who runs isar should be added to `sbuild` group.
+
+**NOTE:** sbuild version (<=0.78.1) packaged in Debian Buster doesn't support
+`$apt_keep_downloaded_packages` option which is required in Isar for
+populating `${DL_DIR}/deb`. So, host `sbuild` in this case should be manually
+upgraded to >=0.81.2 version from Debian Bullseye.
+
+```
+sudo gpasswd -a <username> sbuild
+```
+
 If your host is >= buster, also install the following package.
 ```
 apt install python3-distutils
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* [PATCH v2 24/24] sbuild: Replace isar-apt mounting with copying
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (22 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 23/24] doc: Add sbuild-related documentation Uladzimir Bely
@ 2021-11-19 12:13 ` Uladzimir Bely
  2021-11-19 21:48 ` [PATCH v2 00/24] Sbuild/Schroot migration Henning Schild
  2021-11-23 13:05 ` Uladzimir Bely
  25 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-19 12:13 UTC (permalink / raw)
  To: isar-users

sbuild internally doesn apt-get update and apt-get install <builddeps>.
If isar-apt repo is changed at that time by deploy_deb task for another
package going in parallel, apt won't be able to download dependency
from this repo.
We may copletely lock isar-apt completely for dpkg_build, but this
slows (serializes) the whole build. Instead, it's better to copy
current isar-apt into the package workidir under the lock and use
copied isar-apt repo for building.
While "-l' option for `cp` is used, it won't occupy much additional
space on disk.

Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
---
 meta/classes/dpkg.bbclass   | 13 ++++++++++++-
 meta/classes/sbuild.bbclass |  2 --
 2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index 355da541..a9a2b3e2 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -5,7 +5,18 @@ inherit dpkg-base
 
 PACKAGE_ARCH ?= "${DISTRO_ARCH}"
 
-ISAR_APT_REPO ?= "deb [trusted=yes] file:///isar-apt/${DISTRO}-${DISTRO_ARCH}/apt/${DISTRO} ${DEBDISTRONAME} main"
+ISAR_APT_REPO ?= "deb [trusted=yes] file:///home/builder/${PN}/isar-apt/${DISTRO}-${DISTRO_ARCH}/apt/${DISTRO} ${DEBDISTRONAME} main"
+
+# Install build dependencies for package
+do_install_isarapt() {
+    # Make local copy of isar-apt not affected by other parallel tasks
+    mkdir -p ${WORKDIR}/isar-apt/${DISTRO}-${DISTRO_ARCH}
+    rm -rf ${WORKDIR}/isar-apt/${DISTRO}-${DISTRO_ARCH}/*
+    cp -Rl ${REPO_ISAR_DIR} ${WORKDIR}/isar-apt/${DISTRO}-${DISTRO_ARCH}
+}
+
+addtask install_isarapt after do_prepare_build before do_dpkg_build
+do_install_isarapt[lockfiles] += "${REPO_ISAR_DIR}/isar.lock"
 
 # Build package from sources using build script
 dpkg_runbuild() {
diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
index 799f210e..73a5fd6a 100644
--- a/meta/classes/sbuild.bbclass
+++ b/meta/classes/sbuild.bbclass
@@ -70,8 +70,6 @@ EOF
         cp -rf "${SCHROOT_CONF}/sbuild" "${SBUILD_CONF_DIR}"
         sbuild_fstab="${SBUILD_CONF_DIR}/fstab"
 
-        fstab_isarapt="${DEPLOY_DIR}/isar-apt /isar-apt none rw,bind 0 0"
-        grep -qxF "${fstab_isarapt}" ${sbuild_fstab} || echo "${fstab_isarapt}" >> ${sbuild_fstab}
         fstab_baseapt="${REPO_BASE_DIR} /base-apt none rw,bind 0 0"
         grep -qxF "${fstab_baseapt}" ${sbuild_fstab} || echo "${fstab_baseapt}" >> ${sbuild_fstab}
 
-- 
2.20.1


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 04/24] linux-module: Do not use shell environment
  2021-11-19 12:13 ` [PATCH v2 04/24] linux-module: Do not use shell environment Uladzimir Bely
@ 2021-11-19 12:44   ` Jan Kiszka
  2021-11-19 12:45     ` Jan Kiszka
                       ` (2 more replies)
  0 siblings, 3 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-11-19 12:44 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 19.11.21 13:13, Uladzimir Bely wrote:
> From: Anton Mikanovich <amikan@ilbers.de>
> 
> To make package build process independent of the shell environment we
> should remove KDIR and PN passing through export call.
> KDIR can be prepared during package build. This also will allow not to
> rely on previous builddeps install task.
> To pass PN variable we can just migrate to template-based debian/rules
> file.
> 
> Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
> Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
> ---
>  .../files/debian/{rules => rules.tmpl}        | 14 ++++++++++-
>  meta/recipes-kernel/linux-module/module.inc   | 23 +++++++------------
>  2 files changed, 21 insertions(+), 16 deletions(-)
>  rename meta/recipes-kernel/linux-module/files/debian/{rules => rules.tmpl} (50%)
> 
> diff --git a/meta/recipes-kernel/linux-module/files/debian/rules b/meta/recipes-kernel/linux-module/files/debian/rules.tmpl
> similarity index 50%
> rename from meta/recipes-kernel/linux-module/files/debian/rules
> rename to meta/recipes-kernel/linux-module/files/debian/rules.tmpl
> index 59720b37..d8f1d48a 100755
> --- a/meta/recipes-kernel/linux-module/files/debian/rules
> +++ b/meta/recipes-kernel/linux-module/files/debian/rules.tmpl
> @@ -24,14 +24,26 @@ ifneq (,$(findstring 86,$(DEB_HOST_GNU_CPU)))
>  export ARCH=x86
>  endif
>  
> +# Custom kernels contain the build folder directly.
> +KDIR := $(shell dpkg -L linux-headers-${KERNEL_NAME} | grep "/lib/modules/.*/build")
> +ifeq ($(KDIR),)
> +# Debian kernels install that folder indirectly via a dependency.
> +KERNEL_DEP := $(shell dpkg-query -W -f '$${Depends}' linux-headers-${KERNEL_NAME} | sed 's/.*\(linux-headers-[[:graph:]]*\).*/\1/')

Could we wrap this long line?

> +KDIR := $(shell dpkg -L $(KERNEL_DEP) | grep "/lib/modules/.*/build")
> +endif
> +
> +# With sbuild `dh clean` is called before chroot's apt database updated. So,
> +# KDIR is empty at that moment and the override causes error. Will skip it.
> +ifneq ($(KDIR),)
>  override_dh_auto_clean:
>  	$(MAKE) -C $(KDIR) M=$(PWD) clean
> +endif

This looks wrong, or at least fragile. Why can we live without a proper
clean on the kernel tree?

>  
>  override_dh_auto_build:
>  	$(MAKE) -C $(KDIR) M=$(PWD) modules
>  
>  override_dh_auto_install:
> -	$(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(PWD)/debian/$(PN) modules_install
> +	$(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(PWD)/debian/${PN} modules_install
>  
>  %:
>  	CFLAGS= LDFLAGS= dh $@ --parallel
> diff --git a/meta/recipes-kernel/linux-module/module.inc b/meta/recipes-kernel/linux-module/module.inc
> index 0515621a..5b086233 100644
> --- a/meta/recipes-kernel/linux-module/module.inc
> +++ b/meta/recipes-kernel/linux-module/module.inc
> @@ -22,8 +22,9 @@ AUTOLOAD ?= ""
>  inherit dpkg
>  
>  TEMPLATE_FILES = "debian/control.tmpl \
> -                  debian/changelog.tmpl"
> -TEMPLATE_VARS += "KERNEL_NAME"
> +                  debian/changelog.tmpl \
> +                  debian/rules.tmpl"
> +TEMPLATE_VARS += "KERNEL_NAME PN"
>  
>  do_prepare_build() {
>      cp -r ${WORKDIR}/debian ${S}/
> @@ -31,18 +32,10 @@ do_prepare_build() {
>      for module in "${AUTOLOAD}"; do
>          echo "echo $module >> /etc/modules" >> ${S}/debian/postinst
>      done
> -}
>  
> -dpkg_runbuild_prepend() {
> -    # Custom kernels contain the build folder directly.
> -    export KDIR=$(dpkg -L --root=${BUILDCHROOT_DIR} linux-headers-${KERNEL_NAME} | \
> -                  grep "/lib/modules/.*/build")
> -    if [ -z "$KDIR" ]; then
> -        # Debian kernels install that folder indirectly via a dependency.
> -        KERNEL_DEP=$(dpkg-query -W -f '${Depends}' --admindir=${BUILDCHROOT_DIR}/var/lib/dpkg \
> -                     linux-headers-${KERNEL_NAME} | sed 's/.*\(linux-headers-[[:graph:]]*\).*/\1/')
> -        export KDIR=$(dpkg -L --root=${BUILDCHROOT_DIR} ${KERNEL_DEP} | \
> -                      grep "/lib/modules/.*/build")
> -    fi
> -    export PN=${PN}
> +    # remove templates from the source tree
> +    find ${S}/debian -name *.tmpl | xargs rm -f

Hmm...

> +
> +    # restore execute permissions
> +    chmod a+x ${S}/debian/rules

The mode should be fixed (aligned to the template) in template.bbclass
to avoid bothering every recipe with such boilerplate code. I'm seeing
this in other changes as well.

With all those "do not use shell env" - how will a downstream user
detect that a recipe is not properly converted? That looks like a nice
trap during migration to sbuild (because of silent / non-obvious errors).

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 04/24] linux-module: Do not use shell environment
  2021-11-19 12:44   ` Jan Kiszka
@ 2021-11-19 12:45     ` Jan Kiszka
  2021-11-23 12:24     ` Uladzimir Bely
  2021-11-25  5:47     ` Uladzimir Bely
  2 siblings, 0 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-11-19 12:45 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 19.11.21 13:44, Jan Kiszka wrote:
> On 19.11.21 13:13, Uladzimir Bely wrote:
>> From: Anton Mikanovich <amikan@ilbers.de>
>>
>> To make package build process independent of the shell environment we
>> should remove KDIR and PN passing through export call.
>> KDIR can be prepared during package build. This also will allow not to
>> rely on previous builddeps install task.
>> To pass PN variable we can just migrate to template-based debian/rules
>> file.
>>
>> Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
>> Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
>> ---
>>  .../files/debian/{rules => rules.tmpl}        | 14 ++++++++++-
>>  meta/recipes-kernel/linux-module/module.inc   | 23 +++++++------------
>>  2 files changed, 21 insertions(+), 16 deletions(-)
>>  rename meta/recipes-kernel/linux-module/files/debian/{rules => rules.tmpl} (50%)
>>
>> diff --git a/meta/recipes-kernel/linux-module/files/debian/rules b/meta/recipes-kernel/linux-module/files/debian/rules.tmpl
>> similarity index 50%
>> rename from meta/recipes-kernel/linux-module/files/debian/rules
>> rename to meta/recipes-kernel/linux-module/files/debian/rules.tmpl
>> index 59720b37..d8f1d48a 100755
>> --- a/meta/recipes-kernel/linux-module/files/debian/rules
>> +++ b/meta/recipes-kernel/linux-module/files/debian/rules.tmpl
>> @@ -24,14 +24,26 @@ ifneq (,$(findstring 86,$(DEB_HOST_GNU_CPU)))
>>  export ARCH=x86
>>  endif
>>  
>> +# Custom kernels contain the build folder directly.
>> +KDIR := $(shell dpkg -L linux-headers-${KERNEL_NAME} | grep "/lib/modules/.*/build")
>> +ifeq ($(KDIR),)
>> +# Debian kernels install that folder indirectly via a dependency.
>> +KERNEL_DEP := $(shell dpkg-query -W -f '$${Depends}' linux-headers-${KERNEL_NAME} | sed 's/.*\(linux-headers-[[:graph:]]*\).*/\1/')
> 
> Could we wrap this long line?
> 
>> +KDIR := $(shell dpkg -L $(KERNEL_DEP) | grep "/lib/modules/.*/build")
>> +endif
>> +
>> +# With sbuild `dh clean` is called before chroot's apt database updated. So,
>> +# KDIR is empty at that moment and the override causes error. Will skip it.
>> +ifneq ($(KDIR),)
>>  override_dh_auto_clean:
>>  	$(MAKE) -C $(KDIR) M=$(PWD) clean
>> +endif
> 
> This looks wrong, or at least fragile. Why can we live without a proper
> clean on the kernel tree?
> 
>>  
>>  override_dh_auto_build:
>>  	$(MAKE) -C $(KDIR) M=$(PWD) modules
>>  
>>  override_dh_auto_install:
>> -	$(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(PWD)/debian/$(PN) modules_install
>> +	$(MAKE) -C $(KDIR) M=$(PWD) INSTALL_MOD_PATH=$(PWD)/debian/${PN} modules_install
>>  
>>  %:
>>  	CFLAGS= LDFLAGS= dh $@ --parallel
>> diff --git a/meta/recipes-kernel/linux-module/module.inc b/meta/recipes-kernel/linux-module/module.inc
>> index 0515621a..5b086233 100644
>> --- a/meta/recipes-kernel/linux-module/module.inc
>> +++ b/meta/recipes-kernel/linux-module/module.inc
>> @@ -22,8 +22,9 @@ AUTOLOAD ?= ""
>>  inherit dpkg
>>  
>>  TEMPLATE_FILES = "debian/control.tmpl \
>> -                  debian/changelog.tmpl"
>> -TEMPLATE_VARS += "KERNEL_NAME"
>> +                  debian/changelog.tmpl \
>> +                  debian/rules.tmpl"
>> +TEMPLATE_VARS += "KERNEL_NAME PN"
>>  
>>  do_prepare_build() {
>>      cp -r ${WORKDIR}/debian ${S}/
>> @@ -31,18 +32,10 @@ do_prepare_build() {
>>      for module in "${AUTOLOAD}"; do
>>          echo "echo $module >> /etc/modules" >> ${S}/debian/postinst
>>      done
>> -}
>>  
>> -dpkg_runbuild_prepend() {
>> -    # Custom kernels contain the build folder directly.
>> -    export KDIR=$(dpkg -L --root=${BUILDCHROOT_DIR} linux-headers-${KERNEL_NAME} | \
>> -                  grep "/lib/modules/.*/build")
>> -    if [ -z "$KDIR" ]; then
>> -        # Debian kernels install that folder indirectly via a dependency.
>> -        KERNEL_DEP=$(dpkg-query -W -f '${Depends}' --admindir=${BUILDCHROOT_DIR}/var/lib/dpkg \
>> -                     linux-headers-${KERNEL_NAME} | sed 's/.*\(linux-headers-[[:graph:]]*\).*/\1/')
>> -        export KDIR=$(dpkg -L --root=${BUILDCHROOT_DIR} ${KERNEL_DEP} | \
>> -                      grep "/lib/modules/.*/build")
>> -    fi
>> -    export PN=${PN}
>> +    # remove templates from the source tree
>> +    find ${S}/debian -name *.tmpl | xargs rm -f
> 
> Hmm...
> 
>> +
>> +    # restore execute permissions
>> +    chmod a+x ${S}/debian/rules
> 
> The mode should be fixed (aligned to the template) in template.bbclass
> to avoid bothering every recipe with such boilerplate code. I'm seeing
> this in other changes as well.
> 
> With all those "do not use shell env" - how will a downstream user
> detect that a recipe is not properly converted? That looks like a nice
> trap during migration to sbuild (because of silent / non-obvious errors).
> 

Oh, and then you still also add sbuild_export - why not use that for
cases that are ugly to convert (like this one)?

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (23 preceding siblings ...)
  2021-11-19 12:13 ` [PATCH v2 24/24] sbuild: Replace isar-apt mounting with copying Uladzimir Bely
@ 2021-11-19 21:48 ` Henning Schild
  2021-11-21  9:07   ` Jan Kiszka
  2021-11-23 13:05 ` Uladzimir Bely
  25 siblings, 1 reply; 41+ messages in thread
From: Henning Schild @ 2021-11-19 21:48 UTC (permalink / raw)
  To: Uladzimir Bely; +Cc: isar-users

Did not look into any of the patches so far ... but the number 24 makes
it close to impossible to review. Can this q be split up to ease review?

Henning

Am Fri, 19 Nov 2021 13:13:09 +0100
schrieb Uladzimir Bely <ubely@ilbers.de>:

> This is a patchset showing how sbuild/schroot tools can be integrated
> into Isar build system.
> 
> Base schroot image is created with sbuild-chroot-target (or
> sbuild-chroot-host in case of cross-build) recipe. These images are
> based on isar-bootstrap ones, but include some build-related stuff
> preinstalled.
> 
> To use this changes you need to have sbuild and schroot installed and
> configured. Current user should be added to sbuild group.
> 
> Changes since v1:
> - parallel builds with different BUILD_DIR are supported
> - parallel multiconfig targets in one build are supported
> - per-task schroot configuration in /etc/schroot/ is now used
> - patchset now passes Jenkins CI (so patches changes RFC => PATCH)
> 
> Current limitations:
> - there is an unsolved problem with building foreigh architectures
> using kas-docker.
> 
> - qemuamd64 images are buildable in kas-docker, but some changes
> in kas are reqired (like installing additional packages and adding
> 'builder' user to 'sbuild group). I used the following changes to
> build ghcr.io/siemens/kas/kas-isar:2.6.2-sbuild image based on
> current ghcr.io/siemens/kas/kas-isar:2.6.2:
> https://github.com/WiseLord/kas/commit/5b7b02aa33
> 
> - parallel building of several packages requires more free space
> than current buildchroot-based architecture uses. This happens due
> the sbuild architecture which uses some basic layer (common for all
> packages) and per-package separate layer (where builddeps are
> downloaded and installed).
> 
> - recently merged to 'next' ccache support is not yet implemented
> in case of sbuild used.
> 
> For experiments, the code can be taken from Isar 'ubely/sbuild'
> branch. This is an dev branch, so sometimes it can be force-pushed
> when some fixes are applied of rebased to 'next' branch.
> 
> Anton Mikanovich (12):
>   dpkg: Install raw package files to source root
>   isar-bootstrap: Export bootstrap to schroot config
>   linux-module: Do not use shell environment
>   u-boot: Do not use shell environment
>   trusted-firmware: Do not use shell environment
>   optee-os: Do not use shell environment
>   kselftest: Do not use shell environment
>   dpkg: Build packages with sbuild
>   sbuild: Introduce environment variables export API
>   dpkg-gbp: Migrate to schroot
>   linux-mainline: Move cfg fragment test to debian/rules
>   linux-custom: Prepare kernel config inside sbuild
> 
> Uladzimir Bely (12):
>   dpkg-gbp: Use separate command to export tarball
>   sbuild: Add recipes for host and target rootfs to run sbuild
>   sbuild: Mount base-apt in schroot
>   sbuild: Add sbuildshell task
>   dpkg-gbp: Preinstall gbp utils in schroot
>   dpkg: Remove builddeps install task.
>   dpkg-base: Switch devshell to use schroot
>   dpkg-base: Switch apt_fetch and apt_unpack to use schroot
>   dpkg-base: Cleanup from buildchroot parts.
>   dpkg-gbp: Use host tools for dsc preparation
>   doc: Add sbuild-related documentation
>   sbuild: Replace isar-apt mounting with copying
> 
>  doc/user_manual.md                            |  22 ++-
>  .../optee-os/optee-os-stm32mp15x_3.11.0.bb    |   2 +-
>  .../linux/linux-mainline_5.4.70.bb            |  16 +-
>  meta/classes/dpkg-base.bbclass                |  80 ++------
>  meta/classes/dpkg-gbp.bbclass                 |  25 +--
>  meta/classes/dpkg-raw.bbclass                 |   8 +-
>  meta/classes/dpkg.bbclass                     |  56 +++---
>  meta/classes/sbuild.bbclass                   | 177
> ++++++++++++++++++ meta/conf/bitbake.conf                        |
> 2 + .../files/debian/{rules => rules.tmpl}        |   4 +-
>  meta/recipes-bsp/optee-os/optee-os-custom.inc |  10 +-
>  .../files/debian/{rules => rules.tmpl}        |   4 +-
>  .../trusted-firmware-a-custom.inc             |  10 +-
>  .../u-boot/files/debian/{rules => rules.tmpl} |   2 +-
>  meta/recipes-bsp/u-boot/u-boot-custom.inc     |  10 +-
>  .../sbuild-chroot/sbuild-chroot-host.bb       |  13 ++
>  .../sbuild-chroot/sbuild-chroot-target.bb     |  10 +
>  .../sbuild-chroot/sbuild-chroot.inc           |  36 ++++
>  .../kselftest/files/{rules => rules.tmpl}     |   0
>  meta/recipes-kernel/kselftest/kselftest.inc   |  21 +--
>  .../files/debian/{rules => rules.tmpl}        |  14 +-
>  meta/recipes-kernel/linux-module/module.inc   |  23 +--
>  meta/recipes-kernel/linux/linux-custom.inc    |   7 +-
>  23 files changed, 382 insertions(+), 170 deletions(-)
>  create mode 100644 meta/classes/sbuild.bbclass
>  rename meta/recipes-bsp/optee-os/files/debian/{rules => rules.tmpl}
> (75%) rename meta/recipes-bsp/trusted-firmware-a/files/debian/{rules
> => rules.tmpl} (77%) rename
> meta/recipes-bsp/u-boot/files/debian/{rules => rules.tmpl} (94%)
> create mode 100644
> meta/recipes-devtools/sbuild-chroot/sbuild-chroot-host.bb create mode
> 100644 meta/recipes-devtools/sbuild-chroot/sbuild-chroot-target.bb
> create mode 100644
> meta/recipes-devtools/sbuild-chroot/sbuild-chroot.inc rename
> meta/recipes-kernel/kselftest/files/{rules => rules.tmpl} (100%)
> rename meta/recipes-kernel/linux-module/files/debian/{rules =>
> rules.tmpl} (50%)
> 


^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 10/24] sbuild: Introduce environment variables export API
  2021-11-19 12:13 ` [PATCH v2 10/24] sbuild: Introduce environment variables export API Uladzimir Bely
@ 2021-11-21  9:07   ` Jan Kiszka
  0 siblings, 0 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-11-21  9:07 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 19.11.21 13:13, Uladzimir Bely wrote:
> From: Anton Mikanovich <amikan@ilbers.de>
> 
> In case there is no ability to pass variables through template
> mechanism we need to keep fallback API to migrate from bare export.
> Using it with optee-os-stm32mp15x recipe as example.
> 
> Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
> ---
>  .../optee-os/optee-os-stm32mp15x_3.11.0.bb          |  2 +-
>  meta/classes/sbuild.bbclass                         | 13 +++++++++++++
>  2 files changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb b/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb
> index 0fa2005d..19aa763a 100644
> --- a/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb
> +++ b/meta-isar/recipes-bsp/optee-os/optee-os-stm32mp15x_3.11.0.bb
> @@ -21,5 +21,5 @@ OPTEE_BINARIES = "tee-header_v2.stm32 tee-pageable_v2.stm32 tee-pager_v2.stm32"
>  # Set version manually to PV, the tarball does not contain any hint.
>  # Alternative: pull from git and add git as build dependency.
>  dpkg_runbuild_prepend() {
> -    export TEE_IMPL_VERSION=${PV}
> +    sbuild_export TEE_IMPL_VERSION=${PV}

build_export - avoids having to rename this once again when we should
switch to something != sbuild.

Again, I think this is the nicer way to make the recipes sbuild
compatible (less invasive, less boilerplate than templating).

Jan

>  }
> diff --git a/meta/classes/sbuild.bbclass b/meta/classes/sbuild.bbclass
> index d6e5b926..5f9f7691 100644
> --- a/meta/classes/sbuild.bbclass
> +++ b/meta/classes/sbuild.bbclass
> @@ -85,3 +85,16 @@ schroot_delete_configs() {
>          rm -f "${SCHROOT_CONF_FILE}"
>  EOSUDO
>  }
> +
> +sbuild_export() {
> +    SBUILD_CONFIG="${WORKDIR}/sbuild.conf"
> +    VAR_LINE="'${1%%=*}' => '${1#*=}',"
> +    if [ -s "${SBUILD_CONFIG}" ]; then
> +        sed -i -e "\$i\\" -e "${VAR_LINE}" ${SBUILD_CONFIG}
> +    else
> +        echo "\$build_environment = {" > ${SBUILD_CONFIG}
> +        echo "${VAR_LINE}" >> ${SBUILD_CONFIG}
> +        echo "};" >> ${SBUILD_CONFIG}
> +    fi
> +    export SBUILD_CONFIG="${SBUILD_CONFIG}"
> +}
> 

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-19 21:48 ` [PATCH v2 00/24] Sbuild/Schroot migration Henning Schild
@ 2021-11-21  9:07   ` Jan Kiszka
  0 siblings, 0 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-11-21  9:07 UTC (permalink / raw)
  To: Henning Schild, Uladzimir Bely; +Cc: isar-users

On 19.11.21 22:48, Henning Schild wrote:
> Did not look into any of the patches so far ... but the number 24 makes
> it close to impossible to review. Can this q be split up to ease review?

I don't think 24 is a show-stopper per se. The preparatory changes to
recipes are split along the recipe types, and that adds a certain
length. In that sense, the series is already split, but I also do not
see that those preparatory patches need to come separately.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 04/24] linux-module: Do not use shell environment
  2021-11-19 12:44   ` Jan Kiszka
  2021-11-19 12:45     ` Jan Kiszka
@ 2021-11-23 12:24     ` Uladzimir Bely
  2021-11-24  6:13       ` Jan Kiszka
  2021-11-25  5:47     ` Uladzimir Bely
  2 siblings, 1 reply; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-23 12:24 UTC (permalink / raw)
  To: isar-users, Jan Kiszka

In the email from Friday, 19 Nov 2021. 15:44:12 +03 user Jan Kiszka wrote:
> On 19.11.21 13:13, Uladzimir Bely wrote:
> 
> > +KDIR := $(shell dpkg -L $(KERNEL_DEP) | grep "/lib/modules/.*/build")
> > +endif
> > +
> > +# With sbuild `dh clean` is called before chroot's apt database updated.
> > So, +# KDIR is empty at that moment and the override causes error. Will
> > skip it. +ifneq ($(KDIR),)
> > 
> >  override_dh_auto_clean:
> >  	$(MAKE) -C $(KDIR) M=$(PWD) clean
> > 
> > +endif
> 
> This looks wrong, or at least fragile. Why can we live without a proper
> clean on the kernel tree?
> 
> Jan

Actually, this workaround with `ifneq ($(KDIR),)` I added to the patch after 
the commit https://github.com/ilbers/isar/commit/248436880eb2 was applied to 
`next`.

This change doesn't cancel a proper clean on the kernel. Here are some example 
logs:

`next`: https://gist.github.com/WiseLord/0fb98bc036532ec03e4f763b2ba06a41
`sbuild`: https://gist.github.com/WiseLord/3c35d477efc025bcc9cd3c5cbd3dbc5d

On current `next` code dh_clean (and override-related `make ... clean` on 
kernel code) is executed by dpkg-buildpackage. At this point KDIR is set to a 
proper value, so it works as expected.

With sbuild dh_clean happens to be executed twice:
- 1: immediately after sbuild is run, executed by sbuild itself
- 2: after few stages (like downloading deps and so on), executed by dpkg-
buildpackage.

The issue is that at 1st execution KDIR is not set, so `make ... clean` 
(coming with override) produces wrong command.

That's why this workaround (skip `make ... clean` in case of empty KDIR) was 
added. Proper cleaning is still performed, but on the second call of dh_clean.

Probably, there is a way to say sbuild not to run this 'generic' dh_clean and 
use just one from dpkg-buildpackage later...

-- 
Uladzimir Bely
Promwad Ltd.
External service provider of ilbers GmbH
Maria-Merian-Str. 8
85521 Ottobrunn, Germany
+49 (89) 122 67 24-0
Commercial register Munich, HRB 214197
General Manager: Baurzhan Ismagulov



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
                   ` (24 preceding siblings ...)
  2021-11-19 21:48 ` [PATCH v2 00/24] Sbuild/Schroot migration Henning Schild
@ 2021-11-23 13:05 ` Uladzimir Bely
  2021-11-26  6:43   ` Jan Kiszka
  2021-11-26 12:09   ` Michael Adler
  25 siblings, 2 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-23 13:05 UTC (permalink / raw)
  To: isar-users

In the email from Friday, 19 Nov 2021 г. 15:13:09 +03 user Uladzimir Bely 
wrote:
> This is a patchset showing how sbuild/schroot tools can be integrated
> into Isar build system.
>
> ...
> 
> Current limitations:
> - there is an unsolved problem with building foreigh architectures
> using kas-docker.
> 
> - qemuamd64 images are buildable in kas-docker, but some changes
> in kas are reqired (like installing additional packages and adding
> 'builder' user to 'sbuild group). I used the following changes to
> build ghcr.io/siemens/kas/kas-isar:2.6.2-sbuild image based on
> current ghcr.io/siemens/kas/kas-isar:2.6.2:
> https://github.com/WiseLord/kas/commit/5b7b02aa33
> 
> ...
> meta/recipes-kernel/linux-module/files/debian/{rules => rules.tmpl} (50%)

Here I would like to add some info regarding running the patchset with `kas-
docker` and/or using Gitlab CI.

Initially, the patchset was checked in Jenkins CI (that doesn't use docker) 
and sent to the maillist then. But there are some docker-related issues solved 
a bit later. So here I'll try to explain them (and this is to be added to user 
docs in the following patchset version), so someone could play with sbuild 
patchset.

1. Additional packages required.

The patchset requires 'schroot' and 'sbuild' packages to be installed on the 
host. Also, they both should have at least "bullseye" version, otherwise some 
things won't work properly (like caching .deb via 'sbuild' or foreign 
architectures support in 'schroot').

While current (ghcr.io/siemens/kas/kas-isar:2.6.2) image doesn't include the 
required packages, I temporary prepared and upuloaded one based on it 
(ghcr.io/wiselord/kas-isar:2.6.2-sbuild). Look at Dockerfile.isar.sbuild chunk 
in the patch https://github.com/WiseLord/kas/commit/38f4f11f11 for details.

Gitlab

Gitlab uses .gitlab-ci.yml for setup. So, to use modified image in Gitlab CI 
user should simply change the first line:

> - image: ghcr.io/siemens/kas/kas-isar:latest
> + image: ghcr.io/wiselord/kas-isar:2.6.2-sbuild

This is required until official kas-isar image have everything included.

2. User should be added to 'sbuild' group.

In case of 'kas-docker' it happend to be a bit tricky, because 'builder' user 
is created 'on the fly', when container is run. I'm not an expert in 'kas' so 
I simply pathced container-entrypoint to add user to sbuild group. Look at
`container.entrypoint` chunk in the patch for details.

3. Overlayfs restrictions.

Docker uses overlayfs to mount dockerimage rootfs. Schroot uses /var/lib/
schroot/union/{overlay,underlay} directories to keep 'basic' image and 
temporary layers on top of it.

So we happen to have 'overlayfs over overlayfs' situation that is not 
supported by overlayfs kernel driver.

The solutionis to use an external volume for the /var/lib/schroot/union/. Look 
at 'kas-container' chunk in the patch for details.

Gitlab

It seems there is no way to say gitlab using external volume via the 
configuration file `.gitlab-ci.yml`. But it can be done by the following 
changes in /etc/gitlab/runner/config.toml:

> -volumes = ["/cache"]
> +volumes = ["/m/ws-10/schroot-10a/union:/var/lib/schroot/union", "/cache"]

So, gitlab will use external ("/m/ws-10/schroot-10a/union") directory on host. 
Also, there should be empty "overlay" and "underlay" directories created in 
it.

-- 
Uladzimir Bely
Promwad Ltd.
External service provider of ilbers GmbH
Maria-Merian-Str. 8
85521 Ottobrunn, Germany
+49 (89) 122 67 24-0
Commercial register Munich, HRB 214197
General Manager: Baurzhan Ismagulov



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 04/24] linux-module: Do not use shell environment
  2021-11-23 12:24     ` Uladzimir Bely
@ 2021-11-24  6:13       ` Jan Kiszka
  0 siblings, 0 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-11-24  6:13 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 23.11.21 13:24, Uladzimir Bely wrote:
> In the email from Friday, 19 Nov 2021. 15:44:12 +03 user Jan Kiszka wrote:
>> On 19.11.21 13:13, Uladzimir Bely wrote:
>>
>>> +KDIR := $(shell dpkg -L $(KERNEL_DEP) | grep "/lib/modules/.*/build")
>>> +endif
>>> +
>>> +# With sbuild `dh clean` is called before chroot's apt database updated.
>>> So, +# KDIR is empty at that moment and the override causes error. Will
>>> skip it. +ifneq ($(KDIR),)
>>>
>>>  override_dh_auto_clean:
>>>  	$(MAKE) -C $(KDIR) M=$(PWD) clean
>>>
>>> +endif
>>
>> This looks wrong, or at least fragile. Why can we live without a proper
>> clean on the kernel tree?
>>
>> Jan
> 
> Actually, this workaround with `ifneq ($(KDIR),)` I added to the patch after 
> the commit https://github.com/ilbers/isar/commit/248436880eb2 was applied to 
> `next`.
> 
> This change doesn't cancel a proper clean on the kernel. Here are some example 
> logs:
> 
> `next`: https://gist.github.com/WiseLord/0fb98bc036532ec03e4f763b2ba06a41
> `sbuild`: https://gist.github.com/WiseLord/3c35d477efc025bcc9cd3c5cbd3dbc5d
> 
> On current `next` code dh_clean (and override-related `make ... clean` on 
> kernel code) is executed by dpkg-buildpackage. At this point KDIR is set to a 
> proper value, so it works as expected.
> 
> With sbuild dh_clean happens to be executed twice:
> - 1: immediately after sbuild is run, executed by sbuild itself
> - 2: after few stages (like downloading deps and so on), executed by dpkg-
> buildpackage.
> 
> The issue is that at 1st execution KDIR is not set, so `make ... clean` 
> (coming with override) produces wrong command.
> 
> That's why this workaround (skip `make ... clean` in case of empty KDIR) was 
> added. Proper cleaning is still performed, but on the second call of dh_clean.
> 
> Probably, there is a way to say sbuild not to run this 'generic' dh_clean and 
> use just one from dpkg-buildpackage later...
> 

Thanks for the explanation. How about clarifying that no clean is lost
in the commit message?

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 04/24] linux-module: Do not use shell environment
  2021-11-19 12:44   ` Jan Kiszka
  2021-11-19 12:45     ` Jan Kiszka
  2021-11-23 12:24     ` Uladzimir Bely
@ 2021-11-25  5:47     ` Uladzimir Bely
  2 siblings, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-25  5:47 UTC (permalink / raw)
  To: isar-users, Jan Kiszka

In mail from Friday, 19 Nov 2021 г. 15:44:12 +03 user Jan Kiszka wrote:
> On 19.11.21 13:13, Uladzimir Bely wrote:
> > +
> > +    # restore execute permissions
> > +    chmod a+x ${S}/debian/rules
> 
> The mode should be fixed (aligned to the template) in template.bbclass
> to avoid bothering every recipe with such boilerplate code. I'm seeing
> this in other changes as well.
> 
> With all those "do not use shell env" - how will a downstream user
> detect that a recipe is not properly converted? That looks like a nice
> trap during migration to sbuild (because of silent / non-obvious errors).
> 
> Jan

Regarding restoring permissions: this case can be covered by `[PATCH] 
template: Make templates passthrough` (https://groups.google.com/u/0/g/isar-users/c/Pmr2jUjviz8) which automatically keeps debian/<file>.tmpl permissions 
when transforming it to debian/<file>. Internally, I've included this patch 
and removed all these parts with `chmod` from the recipes and it looks working 
(anyway, CI tests are still needed).

And you are right, there might be some way to warn users about non-converted 
downstream recipes. It is worth thinking.

-- 
Uladzimir Bely
Promwad Ltd.
External service provider of ilbers GmbH
Maria-Merian-Str. 8
85521 Ottobrunn, Germany
+49 (89) 122 67 24-0
Commercial register Munich, HRB 214197
General Manager: Baurzhan Ismagulov



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-23 13:05 ` Uladzimir Bely
@ 2021-11-26  6:43   ` Jan Kiszka
  2021-11-26  8:03     ` Uladzimir Bely
  2021-11-26 12:09   ` Michael Adler
  1 sibling, 1 reply; 41+ messages in thread
From: Jan Kiszka @ 2021-11-26  6:43 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 23.11.21 14:05, Uladzimir Bely wrote:
> In the email from Friday, 19 Nov 2021 г. 15:13:09 +03 user Uladzimir Bely 
> wrote:
>> This is a patchset showing how sbuild/schroot tools can be integrated
>> into Isar build system.
>>
>> ...
>>
>> Current limitations:
>> - there is an unsolved problem with building foreigh architectures
>> using kas-docker.

What exactly is the problem here?

>>
>> - qemuamd64 images are buildable in kas-docker, but some changes
>> in kas are reqired (like installing additional packages and adding
>> 'builder' user to 'sbuild group). I used the following changes to
>> build ghcr.io/siemens/kas/kas-isar:2.6.2-sbuild image based on
>> current ghcr.io/siemens/kas/kas-isar:2.6.2:
>> https://github.com/WiseLord/kas/commit/5b7b02aa33
>>
>> ...
>> meta/recipes-kernel/linux-module/files/debian/{rules => rules.tmpl} (50%)
> 
> Here I would like to add some info regarding running the patchset with `kas-
> docker` and/or using Gitlab CI.
> 
> Initially, the patchset was checked in Jenkins CI (that doesn't use docker) 
> and sent to the maillist then. But there are some docker-related issues solved 
> a bit later. So here I'll try to explain them (and this is to be added to user 
> docs in the following patchset version), so someone could play with sbuild 
> patchset.
> 
> 1. Additional packages required.
> 
> The patchset requires 'schroot' and 'sbuild' packages to be installed on the 
> host. Also, they both should have at least "bullseye" version, otherwise some 
> things won't work properly (like caching .deb via 'sbuild' or foreign 
> architectures support in 'schroot').
> 
> While current (ghcr.io/siemens/kas/kas-isar:2.6.2) image doesn't include the 
> required packages, I temporary prepared and upuloaded one based on it 
> (ghcr.io/wiselord/kas-isar:2.6.2-sbuild). Look at Dockerfile.isar.sbuild chunk 
> in the patch https://github.com/WiseLord/kas/commit/38f4f11f11 for details.
> 
> Gitlab
> 
> Gitlab uses .gitlab-ci.yml for setup. So, to use modified image in Gitlab CI 
> user should simply change the first line:
> 
>> - image: ghcr.io/siemens/kas/kas-isar:latest
>> + image: ghcr.io/wiselord/kas-isar:2.6.2-sbuild
> 
> This is required until official kas-isar image have everything included.
> 
> 2. User should be added to 'sbuild' group.
> 
> In case of 'kas-docker' it happend to be a bit tricky, because 'builder' user 
> is created 'on the fly', when container is run. I'm not an expert in 'kas' so 
> I simply pathced container-entrypoint to add user to sbuild group. Look at
> `container.entrypoint` chunk in the patch for details.
> 
> 3. Overlayfs restrictions.
> 
> Docker uses overlayfs to mount dockerimage rootfs. Schroot uses /var/lib/
> schroot/union/{overlay,underlay} directories to keep 'basic' image and 
> temporary layers on top of it.
> 
> So we happen to have 'overlayfs over overlayfs' situation that is not 
> supported by overlayfs kernel driver.
> 
> The solutionis to use an external volume for the /var/lib/schroot/union/. Look 
> at 'kas-container' chunk in the patch for details.
> 

I've commented on some aspects of you kas patch. It generally looks
feasible, just some smaller details should be improved.

> Gitlab
> 
> It seems there is no way to say gitlab using external volume via the 
> configuration file `.gitlab-ci.yml`. But it can be done by the following 
> changes in /etc/gitlab/runner/config.toml:
> 
>> -volumes = ["/cache"]
>> +volumes = ["/m/ws-10/schroot-10a/union:/var/lib/schroot/union", "/cache"]
> 
> So, gitlab will use external ("/m/ws-10/schroot-10a/union") directory on host. 
> Also, there should be empty "overlay" and "underlay" directories created in 
> it.

That's also not unrealistic, given that we already need to provide
special runners for the purpose of granting privileges and allowing
binfmt_misc. One target would be
https://gitlab.com/cip-project/cip-testing/gitlab-cloud-ci, the backend
for many of our gitlab CI runners that are Isar-compatible.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-26  6:43   ` Jan Kiszka
@ 2021-11-26  8:03     ` Uladzimir Bely
  2021-11-26  8:50       ` Jan Kiszka
  0 siblings, 1 reply; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-26  8:03 UTC (permalink / raw)
  To: isar-users, Jan Kiszka

In mail from Friday, 26 Nov 2021. 09:43:58 +03 user Jan Kiszka wrote:
> On 23.11.21 14:05, Uladzimir Bely wrote:
> >> Current limitations:
> >> - there is an unsolved problem with building foreigh architectures
> >> using kas-docker.
> 
> What exactly is the problem here?
> 

Actually, the problem was related to UsrMerge. Our Jenkins root is also based 
on buster, but /bin, /lib are symlinks to /usr/bin, /usr/lib and so on. While 
in buster-slim used in kas-docker /bin, /lib are separate directories. And 
schroot version used in buster couldn't work in this case (qemu-*-static 
packages couldn't find some libraries).

But when I schroot version from bullseye seems to support both kinds of 
rootfs. So, no changes were needed in sbuild patches, I just preinstalled 
newer schroot (from bullseye) in kas-docker image (in addition to a newer 
sbuild), and it works.

> >> ...
> 
> I've commented on some aspects of you kas patch. It generally looks
> feasible, just some smaller details should be improved.
> 

Yes, I saw your comments on github. I'm not yet experienced in kas 
development, so my implementation is not ideal.

> > ...
> > So, gitlab will use external ("/m/ws-10/schroot-10a/union") directory on
> > host. Also, there should be empty "overlay" and "underlay" directories
> > created in it.
> 
> That's also not unrealistic, given that we already need to provide
> special runners for the purpose of granting privileges and allowing
> binfmt_misc. One target would be
> https://gitlab.com/cip-project/cip-testing/gitlab-cloud-ci, the backend
> for many of our gitlab CI runners that are Isar-compatible.
> 
> Jan

Ok, I'll take a look at it.

Currently I'm trying to find/fix possible issues in downstreams. I took meta-
iot2050 for experiments. For now it seems to use quite old docker image and 
isar codebase. At first, I made sure it can build with no errors current Isar 
'next' branch with using my modified docker image. But for now it is not yet 
able to build even partial (preparation patches only) sbuild patchset and I'm 
trying to understand and fix the issues.

-- 
Uladzimir Bely
Promwad Ltd.
External service provider of ilbers GmbH
Maria-Merian-Str. 8
85521 Ottobrunn, Germany
+49 (89) 122 67 24-0
Commercial register Munich, HRB 214197
General Manager: Baurzhan Ismagulov



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-26  8:03     ` Uladzimir Bely
@ 2021-11-26  8:50       ` Jan Kiszka
  2021-12-01 12:11         ` Jan Kiszka
  0 siblings, 1 reply; 41+ messages in thread
From: Jan Kiszka @ 2021-11-26  8:50 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 26.11.21 09:03, Uladzimir Bely wrote:
> In mail from Friday, 26 Nov 2021. 09:43:58 +03 user Jan Kiszka wrote:
>> On 23.11.21 14:05, Uladzimir Bely wrote:
>>>> Current limitations:
>>>> - there is an unsolved problem with building foreigh architectures
>>>> using kas-docker.
>>
>> What exactly is the problem here?
>>
> 
> Actually, the problem was related to UsrMerge. Our Jenkins root is also based 
> on buster, but /bin, /lib are symlinks to /usr/bin, /usr/lib and so on. While 
> in buster-slim used in kas-docker /bin, /lib are separate directories. And 
> schroot version used in buster couldn't work in this case (qemu-*-static 
> packages couldn't find some libraries).
> 
> But when I schroot version from bullseye seems to support both kinds of 
> rootfs. So, no changes were needed in sbuild patches, I just preinstalled 
> newer schroot (from bullseye) in kas-docker image (in addition to a newer 
> sbuild), and it works.

Ah, ok. Then we will be automatically fine when moving the complete kas
image to bullseye.

> 
>>>> ...
>>
>> I've commented on some aspects of you kas patch. It generally looks
>> feasible, just some smaller details should be improved.
>>
> 
> Yes, I saw your comments on github. I'm not yet experienced in kas 
> development, so my implementation is not ideal.
> 

No problem, that can be sorted out. If you have questions, just drop
them on kas mailing list.

>>> ...
>>> So, gitlab will use external ("/m/ws-10/schroot-10a/union") directory on
>>> host. Also, there should be empty "overlay" and "underlay" directories
>>> created in it.
>>
>> That's also not unrealistic, given that we already need to provide
>> special runners for the purpose of granting privileges and allowing
>> binfmt_misc. One target would be
>> https://gitlab.com/cip-project/cip-testing/gitlab-cloud-ci, the backend
>> for many of our gitlab CI runners that are Isar-compatible.
>>
>> Jan
> 
> Ok, I'll take a look at it.
> 
> Currently I'm trying to find/fix possible issues in downstreams. I took meta-
> iot2050 for experiments. For now it seems to use quite old docker image and 
> isar codebase. At first, I made sure it can build with no errors current Isar 
> 'next' branch with using my modified docker image. But for now it is not yet 
> able to build even partial (preparation patches only) sbuild patchset and I'm 
> trying to understand and fix the issues.
> 

Yeah, meta-io2050 dependencies were frozen for an upcoming release. Try
bumping them first and building those with unpatched Isar and unpatched
kas 2.6.2 (that should work, see
https://github.com/siemens/meta-iot2050/pull/205), then modify kas and
finally patch isar. If there are issues already in the first step, let
me know.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-23 13:05 ` Uladzimir Bely
  2021-11-26  6:43   ` Jan Kiszka
@ 2021-11-26 12:09   ` Michael Adler
  2021-11-26 12:57     ` Uladzimir Bely
  2021-11-26 14:58     ` Jan Kiszka
  1 sibling, 2 replies; 41+ messages in thread
From: Michael Adler @ 2021-11-26 12:09 UTC (permalink / raw)
  To: Uladzimir Bely; +Cc: isar-users

Hi Uladzimir,

> It seems there is no way to say gitlab using external volume via the configuration file `.gitlab-ci.yml`

yes, because it is not universally applicable: there are various runner implementations [1] and the "volumes" feature is
not supported by every runner (e.g. SSH-based).

For CIP, we use custom Kubernetes runners. Although it is possible to setup custom volumes [2], that's only half of the
story: the other half is to ensure that these directories actually exist on the host, which in the case of
gitlab-cloud-ci [3] (used by CIP and Siemens) are ephemeral, i.e. they are dynamically created and destroyed based on
on the CI workload. It should be possible to support such volumes but it's definitely extra engineering/maintenance
effort.

> So, gitlab will use external ("/m/ws-10/schroot-10a/union") directory on host.

What happens if I choose not to provide such a volume? Is it mandatory for the build? Do I also need this for local
containerized builds?

Kind regards,
Michael

[1] https://docs.gitlab.com/runner/executors/
[2] https://docs.gitlab.com/runner/executors/kubernetes.html#using-volumes
[3] https://gitlab.com/cip-project/cip-testing/gitlab-cloud-ci

-- 
Michael Adler

Siemens AG
T RDA IOT SES-DE
Otto-Hahn-Ring 6
81739 M�nchen, Deutschland

Siemens Aktiengesellschaft: Vorsitzender des Aufsichtsrats: Jim Hagemann Snabe; Vorstand: Roland Busch, Vorsitzender; Klaus Helmrich, Cedrik Neike, Matthias Rebellius, Ralf P. Thomas, Judith Wiese; Sitz der Gesellschaft: Berlin und M�nchen, Deutschland; Registergericht: Berlin-Charlottenburg, HRB 12300, M�nchen, HRB 6684; WEEE-Reg.-Nr. DE 23691322

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-26 12:09   ` Michael Adler
@ 2021-11-26 12:57     ` Uladzimir Bely
  2021-11-26 14:58     ` Jan Kiszka
  1 sibling, 0 replies; 41+ messages in thread
From: Uladzimir Bely @ 2021-11-26 12:57 UTC (permalink / raw)
  To: Michael Adler; +Cc: isar-users

In mail from Friday, 26 Nov 2021. 15:09:21 +03 user Michael Adler wrote:
> Hi Uladzimir,
> 
> > It seems there is no way to say gitlab using external volume via the
> > configuration file `.gitlab-ci.yml`
> yes, because it is not universally applicable: there are various runner
> implementations [1] and the "volumes" feature is not supported by every
> runner (e.g. SSH-based).
> 
> For CIP, we use custom Kubernetes runners. Although it is possible to setup
> custom volumes [2], that's only half of the story: the other half is to
> ensure that these directories actually exist on the host, which in the case
> of gitlab-cloud-ci [3] (used by CIP and Siemens) are ephemeral, i.e. they
> are dynamically created and destroyed based on on the CI workload. It
> should be possible to support such volumes but it's definitely extra
> engineering/maintenance effort.
> 
> > So, gitlab will use external ("/m/ws-10/schroot-10a/union") directory on
> > host.
> What happens if I choose not to provide such a volume? Is it mandatory for
> the build? Do I also need this for local containerized builds?
>

As I wrote, the problem that docker uses overlayfs to produce a working 
chroot. So, /var/lib/schroot/union/ happens to be on overlayfs. Sbuild also 
uses overlayfs - it mounts rootfs to /var/lib/schroot/union/underlay (as a 
lower, read-only layer) and uses /var/lib/schroot/union/overlay/ handle rw 
layer.
But, it is not supported by overlayfs (owerdir=/lower,upperdir=/
upper,workdir=/work) when upperdir is on overlayfs (from docker).

> 
> Kind regards,
> Michael
> 
> [1] https://docs.gitlab.com/runner/executors/
> [2] https://docs.gitlab.com/runner/executors/kubernetes.html#using-volumes
> [3] https://gitlab.com/cip-project/cip-testing/gitlab-cloud-ci


-- 
Uladzimir Bely
Promwad Ltd.
External service provider of ilbers GmbH
Maria-Merian-Str. 8
85521 Ottobrunn, Germany
+49 (89) 122 67 24-0
Commercial register Munich, HRB 214197
General Manager: Baurzhan Ismagulov



^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-26 12:09   ` Michael Adler
  2021-11-26 12:57     ` Uladzimir Bely
@ 2021-11-26 14:58     ` Jan Kiszka
  1 sibling, 0 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-11-26 14:58 UTC (permalink / raw)
  To: Michael Adler, Uladzimir Bely; +Cc: isar-users

On 26.11.21 13:09, Michael Adler wrote:
> Hi Uladzimir,
> 
>> It seems there is no way to say gitlab using external volume via the configuration file `.gitlab-ci.yml`
> 
> yes, because it is not universally applicable: there are various runner implementations [1] and the "volumes" feature is
> not supported by every runner (e.g. SSH-based).
> 
> For CIP, we use custom Kubernetes runners. Although it is possible to setup custom volumes [2], that's only half of the
> story: the other half is to ensure that these directories actually exist on the host, which in the case of
> gitlab-cloud-ci [3] (used by CIP and Siemens) are ephemeral, i.e. they are dynamically created and destroyed based on
> on the CI workload. It should be possible to support such volumes but it's definitely extra engineering/maintenance
> effort.

We would not need those union mounts to be persist across jobs - just
like the rest the container generated during job execution and that is
not explicitly exported otherwise (artifacts, local cache,
self-uploads). We just need that union to be on something else than an
overlayfs.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

* Re: [PATCH v2 00/24] Sbuild/Schroot migration
  2021-11-26  8:50       ` Jan Kiszka
@ 2021-12-01 12:11         ` Jan Kiszka
  0 siblings, 0 replies; 41+ messages in thread
From: Jan Kiszka @ 2021-12-01 12:11 UTC (permalink / raw)
  To: Uladzimir Bely, isar-users

On 26.11.21 09:50, Jan Kiszka wrote:
> On 26.11.21 09:03, Uladzimir Bely wrote:
>> In mail from Friday, 26 Nov 2021. 09:43:58 +03 user Jan Kiszka wrote:
>>> On 23.11.21 14:05, Uladzimir Bely wrote:
>>>>> Current limitations:
>>>>> - there is an unsolved problem with building foreigh architectures
>>>>> using kas-docker.
>>>
>>> What exactly is the problem here?
>>>
>>
>> Actually, the problem was related to UsrMerge. Our Jenkins root is also based 
>> on buster, but /bin, /lib are symlinks to /usr/bin, /usr/lib and so on. While 
>> in buster-slim used in kas-docker /bin, /lib are separate directories. And 
>> schroot version used in buster couldn't work in this case (qemu-*-static 
>> packages couldn't find some libraries).
>>
>> But when I schroot version from bullseye seems to support both kinds of 
>> rootfs. So, no changes were needed in sbuild patches, I just preinstalled 
>> newer schroot (from bullseye) in kas-docker image (in addition to a newer 
>> sbuild), and it works.
> 
> Ah, ok. Then we will be automatically fine when moving the complete kas
> image to bullseye.
> 

FYI: kas 3.x development has started, 'next' is now on bullseye.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux

^ permalink raw reply	[flat|nested] 41+ messages in thread

end of thread, other threads:[~2021-12-01 12:11 UTC | newest]

Thread overview: 41+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-19 12:13 [PATCH v2 00/24] Sbuild/Schroot migration Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 01/24] dpkg: Install raw package files to source root Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 02/24] dpkg-gbp: Use separate command to export tarball Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 03/24] isar-bootstrap: Export bootstrap to schroot config Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 04/24] linux-module: Do not use shell environment Uladzimir Bely
2021-11-19 12:44   ` Jan Kiszka
2021-11-19 12:45     ` Jan Kiszka
2021-11-23 12:24     ` Uladzimir Bely
2021-11-24  6:13       ` Jan Kiszka
2021-11-25  5:47     ` Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 05/24] u-boot: " Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 06/24] trusted-firmware: " Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 07/24] optee-os: " Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 08/24] kselftest: " Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 09/24] dpkg: Build packages with sbuild Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 10/24] sbuild: Introduce environment variables export API Uladzimir Bely
2021-11-21  9:07   ` Jan Kiszka
2021-11-19 12:13 ` [PATCH v2 11/24] dpkg-gbp: Migrate to schroot Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 12/24] linux-mainline: Move cfg fragment test to debian/rules Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 13/24] linux-custom: Prepare kernel config inside sbuild Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 14/24] sbuild: Add recipes for host and target rootfs to run sbuild Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 15/24] sbuild: Mount base-apt in schroot Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 16/24] sbuild: Add sbuildshell task Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 17/24] dpkg-gbp: Preinstall gbp utils in schroot Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 18/24] dpkg: Remove builddeps install task Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 19/24] dpkg-base: Switch devshell to use schroot Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 20/24] dpkg-base: Switch apt_fetch and apt_unpack " Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 21/24] dpkg-base: Cleanup from buildchroot parts Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 22/24] dpkg-gbp: Use host tools for dsc preparation Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 23/24] doc: Add sbuild-related documentation Uladzimir Bely
2021-11-19 12:13 ` [PATCH v2 24/24] sbuild: Replace isar-apt mounting with copying Uladzimir Bely
2021-11-19 21:48 ` [PATCH v2 00/24] Sbuild/Schroot migration Henning Schild
2021-11-21  9:07   ` Jan Kiszka
2021-11-23 13:05 ` Uladzimir Bely
2021-11-26  6:43   ` Jan Kiszka
2021-11-26  8:03     ` Uladzimir Bely
2021-11-26  8:50       ` Jan Kiszka
2021-12-01 12:11         ` Jan Kiszka
2021-11-26 12:09   ` Michael Adler
2021-11-26 12:57     ` Uladzimir Bely
2021-11-26 14:58     ` Jan Kiszka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox