[RFC] Add sbuildchroot class

Message ID 20231128071401.1894962-1-srinuvasan_a@mentor.com
State RFC
Headers show
Series [RFC] Add sbuildchroot class | expand

Commit Message

Srinuvasan Arjunan Nov. 28, 2023, 7:14 a.m. UTC
From: Srinuvasan A <srinuvasan.a@siemens.com>

In present implementation we are using sbuild/schroot to build the
packages, this schroot created via sessions during package build, and
immediatley vanish once build the packages.

Some of the downstream projects uses this chroot at many
places for doing some postprocessing the meta data based on the chroot
path, but unfortunately we cannot refer this path due to creating the
chroot via session.

Hence install the required packages in persistence sbuildchroot, to
access isar-apt and other directories we introduces the sbuildchroot
class.

Signed-off-by: Srinuvasan A <srinuvasan.a@siemens.com>
---
 meta/classes/sbuildchroot.bbclass | 101 ++++++++++++++++++++++++++++++
 1 file changed, 101 insertions(+)
 create mode 100644 meta/classes/sbuildchroot.bbclass

Comments

Srinuvasan Arjunan Dec. 8, 2023, 2:13 p.m. UTC | #1
Hi All,

             Any thoughts on this RFC, If you need additional use case also 
will provide.

Many thanks,
Srinu

On Tuesday, November 28, 2023 at 12:44:22 PM UTC+5:30 Srinuvasan Arjunan 
wrote:

> From: Srinuvasan A <srinuv...@siemens.com>
>
> In present implementation we are using sbuild/schroot to build the
> packages, this schroot created via sessions during package build, and
> immediatley vanish once build the packages.
>
> Some of the downstream projects uses this chroot at many
> places for doing some postprocessing the meta data based on the chroot
> path, but unfortunately we cannot refer this path due to creating the
> chroot via session.
>
> Hence install the required packages in persistence sbuildchroot, to
> access isar-apt and other directories we introduces the sbuildchroot
> class.
>
> Signed-off-by: Srinuvasan A <srinuv...@siemens.com>
> ---
> meta/classes/sbuildchroot.bbclass | 101 ++++++++++++++++++++++++++++++
> 1 file changed, 101 insertions(+)
> create mode 100644 meta/classes/sbuildchroot.bbclass
>
> diff --git a/meta/classes/sbuildchroot.bbclass 
> b/meta/classes/sbuildchroot.bbclass
> new file mode 100644
> index 00000000..edddd566
> --- /dev/null
> +++ b/meta/classes/sbuildchroot.bbclass
> @@ -0,0 +1,101 @@
> +# This software is a part of ISAR.
> +# Copyright (C) 2018 Siemens AG
> +#
> +# SPDX-License-Identifier: MIT
> +
> +inherit crossvars
> +
> +MOUNT_LOCKFILE = "${SCHROOT_DIR}.lock"
> +
> +sbuildchroot_do_mounts() {
> + if [ "${USE_CCACHE}" = "1" ]; then
> + mkdir -p "${CCACHE_DIR}"
> + if [ "${CCACHE_DEBUG}" = "1" ]; then
> + mkdir -p "${CCACHE_DIR}/debug"
> + fi
> + fi
> +
> + sudo -s <<'EOSUDO'
> + ( flock 9
> + set -e
> +
> + mountpoint -q '${SCHROOT_DIR}/isar-apt' ||
> + mount --bind '${REPO_ISAR_DIR}/${DISTRO}' '${SCHROOT_DIR}/isar-apt'
> + if [ "${USE_CCACHE}" = "1" ]; then
> + mkdir -p '${SCHROOT_DIR}/ccache'
> + mountpoint -q '${SCHROOT_DIR}/ccache' ||
> + mount --bind '${CCACHE_DIR}' '${SCHROOT_DIR}/ccache'
> + fi
> + mountpoint -q '${SCHROOT_DIR}/dev' ||
> + ( mount -o bind,private /dev '${SCHROOT_DIR}/dev' &&
> + mount -t tmpfs none '${SCHROOT_DIR}/dev/shm' &&
> + mount --bind /dev/pts '${SCHROOT_DIR}/dev/pts' )
> + mountpoint -q '${SCHROOT_DIR}/proc' ||
> + mount -t proc none '${SCHROOT_DIR}/proc'
> + mountpoint -q '${SCHROOT_DIR}/sys' ||
> + mount --rbind /sys '${SCHROOT_DIR}/sys'
> + mount --make-rslave '${SCHROOT_DIR}/sys'
> +
> + # Mount base-apt if 'ISAR_USE_CACHED_BASE_REPO' is set
> + if [ 
> "${@repr(bb.utils.to_boolean(d.getVar('ISAR_USE_CACHED_BASE_REPO')))}" = 
> 'True' ]
> + then
> + mkdir -p '${SCHROOT_DIR}/base-apt'
> + mountpoint -q '${SCHROOT_DIR}/base-apt' || \
> + mount --bind '${REPO_BASE_DIR}' '${SCHROOT_DIR}/base-apt'
> + fi
> +
> + # Refresh or remove /etc/resolv.conf at this chance
> + if [ "${@repr(bb.utils.to_boolean(d.getVar('BB_NO_NETWORK')))}" = 'True' 
> ]
> + then
> + rm -rf '${SCHROOT_DIR}/etc/resolv.conf'
> + else
> + cp -L /etc/resolv.conf '${SCHROOT_DIR}/etc'
> + fi
> +
> + ) 9>'${MOUNT_LOCKFILE}'
> +EOSUDO
> +}
> +
> +add_isar_apt() {
> + sudo -s <<'EOSUDO'
> + set -e
> +
> + mkdir -p '${SCHROOT_DIR}/etc/apt/sources.list.d'
> + echo 'deb [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' > \
> + '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list'
> + echo 'deb-src [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' >> \
> + '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list'
> +
> + 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
> +EOSUDO
> +}
> +
> +cleanup_isar_apt() {
> + sudo -s <<'EOSUDO'
> + set -e
> + rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list"
> + rm -f "${SCHROOT_DIR}/etc/apt/preferences.d/isar-apt"
> + rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/base-apt.list"
> + rm -f "${SCHROOT_DIR}/etc/apt/apt.conf.d/50isar"
> +EOSUDO
> +}
> +
> +image_do_mounts() {
> + sudo flock ${MOUNT_LOCKFILE} -c ' \
> + mkdir -p "${BUILDROOT_DEPLOY}" "${BUILDROOT_ROOTFS}" "${BUILDROOT_WORK}"
> + mount --bind "${DEPLOY_DIR_IMAGE}" "${BUILDROOT_DEPLOY}"
> + mount --bind "${IMAGE_ROOTFS}" "${BUILDROOT_ROOTFS}"
> + mount --bind "${WORKDIR}" "${BUILDROOT_WORK}"
> + '
> + sbuildchroot_do_mounts
> +}
> +
> +BUILDROOT = "${SCHROOT_DIR}${PP}"
> +BUILDROOT_DEPLOY = "${SCHROOT_DIR}${PP_DEPLOY}"
> +BUILDROOT_ROOTFS = "${SCHROOT_DIR}${PP_ROOTFS}"
> +BUILDROOT_WORK = "${SCHROOT_DIR}${PP_WORK}"
> -- 
> 2.34.1
>
>
Jan Kiszka Dec. 8, 2023, 2:15 p.m. UTC | #2
On 28.11.23 08:14, Srinuvasan Arjunan wrote:
> From: Srinuvasan A <srinuvasan.a@siemens.com>
> 
> In present implementation we are using sbuild/schroot to build the
> packages, this schroot created via sessions during package build, and
> immediatley vanish once build the packages.
> 
> Some of the downstream projects uses this chroot at many
> places for doing some postprocessing the meta data based on the chroot
> path, but unfortunately we cannot refer this path due to creating the
> chroot via session.

Can you be more specific in the use cases?

> 
> Hence install the required packages in persistence sbuildchroot, to
> access isar-apt and other directories we introduces the sbuildchroot
> class.

Did no one commented yet that we already have SBUILD_FLAVOR to
pre-install common packages into reusable sbuild schroots?

Jan

> 
> Signed-off-by: Srinuvasan A <srinuvasan.a@siemens.com>
> ---
>  meta/classes/sbuildchroot.bbclass | 101 ++++++++++++++++++++++++++++++
>  1 file changed, 101 insertions(+)
>  create mode 100644 meta/classes/sbuildchroot.bbclass
> 
> diff --git a/meta/classes/sbuildchroot.bbclass b/meta/classes/sbuildchroot.bbclass
> new file mode 100644
> index 00000000..edddd566
> --- /dev/null
> +++ b/meta/classes/sbuildchroot.bbclass
> @@ -0,0 +1,101 @@
> +# This software is a part of ISAR.
> +# Copyright (C) 2018 Siemens AG
> +#
> +# SPDX-License-Identifier: MIT
> +
> +inherit crossvars
> +
> +MOUNT_LOCKFILE = "${SCHROOT_DIR}.lock"
> +
> +sbuildchroot_do_mounts() {
> +    if [ "${USE_CCACHE}" = "1" ]; then
> +        mkdir -p "${CCACHE_DIR}"
> +        if [ "${CCACHE_DEBUG}" = "1" ]; then
> +            mkdir -p "${CCACHE_DIR}/debug"
> +        fi
> +    fi
> +
> +    sudo -s <<'EOSUDO'
> +        ( flock 9
> +        set -e
> +
> +        mountpoint -q '${SCHROOT_DIR}/isar-apt' ||
> +            mount --bind '${REPO_ISAR_DIR}/${DISTRO}' '${SCHROOT_DIR}/isar-apt'
> +        if [ "${USE_CCACHE}" = "1" ]; then
> +            mkdir -p '${SCHROOT_DIR}/ccache'
> +            mountpoint -q '${SCHROOT_DIR}/ccache' ||
> +                mount --bind '${CCACHE_DIR}' '${SCHROOT_DIR}/ccache'
> +        fi
> +        mountpoint -q '${SCHROOT_DIR}/dev' ||
> +            ( mount -o bind,private /dev '${SCHROOT_DIR}/dev' &&
> +              mount -t tmpfs none '${SCHROOT_DIR}/dev/shm' &&
> +              mount --bind /dev/pts '${SCHROOT_DIR}/dev/pts' )
> +        mountpoint -q '${SCHROOT_DIR}/proc' ||
> +            mount -t proc none '${SCHROOT_DIR}/proc'
> +        mountpoint -q '${SCHROOT_DIR}/sys' ||
> +            mount --rbind /sys '${SCHROOT_DIR}/sys'
> +        mount --make-rslave '${SCHROOT_DIR}/sys'
> +
> +        # Mount base-apt if 'ISAR_USE_CACHED_BASE_REPO' is set
> +        if [ "${@repr(bb.utils.to_boolean(d.getVar('ISAR_USE_CACHED_BASE_REPO')))}" = 'True' ]
> +        then
> +            mkdir -p '${SCHROOT_DIR}/base-apt'
> +            mountpoint -q '${SCHROOT_DIR}/base-apt' || \
> +                mount --bind '${REPO_BASE_DIR}' '${SCHROOT_DIR}/base-apt'
> +        fi
> +
> +        # Refresh or remove /etc/resolv.conf at this chance
> +        if [ "${@repr(bb.utils.to_boolean(d.getVar('BB_NO_NETWORK')))}" = 'True' ]
> +        then
> +            rm -rf '${SCHROOT_DIR}/etc/resolv.conf'
> +        else
> +            cp -L /etc/resolv.conf '${SCHROOT_DIR}/etc'
> +        fi
> +
> +        ) 9>'${MOUNT_LOCKFILE}'
> +EOSUDO
> +}
> +
> +add_isar_apt() {
> +    sudo -s <<'EOSUDO'
> +    set -e
> +
> +    mkdir -p '${SCHROOT_DIR}/etc/apt/sources.list.d'
> +    echo 'deb [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' > \
> +        '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list'
> +    echo 'deb-src [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' >> \
> +        '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list'
> +
> +    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
> +EOSUDO
> +}
> +
> +cleanup_isar_apt() {
> +    sudo -s <<'EOSUDO'
> +        set -e
> +        rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list"
> +        rm -f "${SCHROOT_DIR}/etc/apt/preferences.d/isar-apt"
> +        rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/base-apt.list"
> +        rm -f "${SCHROOT_DIR}/etc/apt/apt.conf.d/50isar"
> +EOSUDO
> +}
> +
> +image_do_mounts() {
> +    sudo flock ${MOUNT_LOCKFILE} -c ' \
> +        mkdir -p "${BUILDROOT_DEPLOY}" "${BUILDROOT_ROOTFS}" "${BUILDROOT_WORK}"
> +        mount --bind "${DEPLOY_DIR_IMAGE}" "${BUILDROOT_DEPLOY}"
> +        mount --bind "${IMAGE_ROOTFS}" "${BUILDROOT_ROOTFS}"
> +        mount --bind "${WORKDIR}" "${BUILDROOT_WORK}"
> +    '
> +    sbuildchroot_do_mounts
> +}
> +
> +BUILDROOT = "${SCHROOT_DIR}${PP}"
> +BUILDROOT_DEPLOY = "${SCHROOT_DIR}${PP_DEPLOY}"
> +BUILDROOT_ROOTFS = "${SCHROOT_DIR}${PP_ROOTFS}"
> +BUILDROOT_WORK = "${SCHROOT_DIR}${PP_WORK}"
Srinuvasan Arjunan Dec. 12, 2023, 4:55 a.m. UTC | #3
On Friday, December 8, 2023 at 7:45:06 PM UTC+5:30 Jan Kiszka wrote:

On 28.11.23 08:14, Srinuvasan Arjunan wrote: 
> From: Srinuvasan A <srinuv...@siemens.com> 
> 
> In present implementation we are using sbuild/schroot to build the 
> packages, this schroot created via sessions during package build, and 
> immediatley vanish once build the packages. 
> 
> Some of the downstream projects uses this chroot at many 
> places for doing some postprocessing the meta data based on the chroot 
> path, but unfortunately we cannot refer this path due to creating the 
> chroot via session. 

Can you be more specific in the use cases?


   In our case we need to install the custom packages in buildchroot,
   once we installed the isar-apt packages, later we refer those and do some
   postprocessing before image creation.


   ISAR provides the provision to pre-install the  upstream packages
   not custom packages and this chroot will be used as a base chroot to
    build the packages or imager_run, hence SBUILD_FLAVOR would not be
   helpful atleast for my scenario.


   SBUILD_CHROOT_PREINSTALL_EXTRA variable directly install the upstream 
   packages in rootfs not custom packages.



> 
> Hence install the required packages in persistence sbuildchroot, to 
> access isar-apt and other directories we introduces the sbuildchroot 
> class. 

Did no one commented yet that we already have SBUILD_FLAVOR to 
pre-install common packages into reusable sbuild schroots? 

Jan 

> 
> Signed-off-by: Srinuvasan A <srinuv...@siemens.com> 
> --- 
> meta/classes/sbuildchroot.bbclass | 101 ++++++++++++++++++++++++++++++ 
> 1 file changed, 101 insertions(+) 
> create mode 100644 meta/classes/sbuildchroot.bbclass 
> 
> diff --git a/meta/classes/sbuildchroot.bbclass 
b/meta/classes/sbuildchroot.bbclass 
> new file mode 100644 
> index 00000000..edddd566 
> --- /dev/null 
> +++ b/meta/classes/sbuildchroot.bbclass 
> @@ -0,0 +1,101 @@ 
> +# This software is a part of ISAR. 
> +# Copyright (C) 2018 Siemens AG 
> +# 
> +# SPDX-License-Identifier: MIT 
> + 
> +inherit crossvars 
> + 
> +MOUNT_LOCKFILE = "${SCHROOT_DIR}.lock" 
> + 
> +sbuildchroot_do_mounts() { 
> + if [ "${USE_CCACHE}" = "1" ]; then 
> + mkdir -p "${CCACHE_DIR}" 
> + if [ "${CCACHE_DEBUG}" = "1" ]; then 
> + mkdir -p "${CCACHE_DIR}/debug" 
> + fi 
> + fi 
> + 
> + sudo -s <<'EOSUDO' 
> + ( flock 9 
> + set -e 
> + 
> + mountpoint -q '${SCHROOT_DIR}/isar-apt' || 
> + mount --bind '${REPO_ISAR_DIR}/${DISTRO}' '${SCHROOT_DIR}/isar-apt' 
> + if [ "${USE_CCACHE}" = "1" ]; then 
> + mkdir -p '${SCHROOT_DIR}/ccache' 
> + mountpoint -q '${SCHROOT_DIR}/ccache' || 
> + mount --bind '${CCACHE_DIR}' '${SCHROOT_DIR}/ccache' 
> + fi 
> + mountpoint -q '${SCHROOT_DIR}/dev' || 
> + ( mount -o bind,private /dev '${SCHROOT_DIR}/dev' && 
> + mount -t tmpfs none '${SCHROOT_DIR}/dev/shm' && 
> + mount --bind /dev/pts '${SCHROOT_DIR}/dev/pts' ) 
> + mountpoint -q '${SCHROOT_DIR}/proc' || 
> + mount -t proc none '${SCHROOT_DIR}/proc' 
> + mountpoint -q '${SCHROOT_DIR}/sys' || 
> + mount --rbind /sys '${SCHROOT_DIR}/sys' 
> + mount --make-rslave '${SCHROOT_DIR}/sys' 
> + 
> + # Mount base-apt if 'ISAR_USE_CACHED_BASE_REPO' is set 
> + if [ 
"${@repr(bb.utils.to_boolean(d.getVar('ISAR_USE_CACHED_BASE_REPO')))}" = 
'True' ] 
> + then 
> + mkdir -p '${SCHROOT_DIR}/base-apt' 
> + mountpoint -q '${SCHROOT_DIR}/base-apt' || \ 
> + mount --bind '${REPO_BASE_DIR}' '${SCHROOT_DIR}/base-apt' 
> + fi 
> + 
> + # Refresh or remove /etc/resolv.conf at this chance 
> + if [ "${@repr(bb.utils.to_boolean(d.getVar('BB_NO_NETWORK')))}" = 
'True' ] 
> + then 
> + rm -rf '${SCHROOT_DIR}/etc/resolv.conf' 
> + else 
> + cp -L /etc/resolv.conf '${SCHROOT_DIR}/etc' 
> + fi 
> + 
> + ) 9>'${MOUNT_LOCKFILE}' 
> +EOSUDO 
> +} 
> + 
> +add_isar_apt() { 
> + sudo -s <<'EOSUDO' 
> + set -e 
> + 
> + mkdir -p '${SCHROOT_DIR}/etc/apt/sources.list.d' 
> + echo 'deb [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' > \ 
> + '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list' 
> + echo 'deb-src [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' >> 
\ 
> + '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list' 
> + 
> + 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 
> +EOSUDO 
> +} 
> + 
> +cleanup_isar_apt() { 
> + sudo -s <<'EOSUDO' 
> + set -e 
> + rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list" 
> + rm -f "${SCHROOT_DIR}/etc/apt/preferences.d/isar-apt" 
> + rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/base-apt.list" 
> + rm -f "${SCHROOT_DIR}/etc/apt/apt.conf.d/50isar" 
> +EOSUDO 
> +} 
> + 
> +image_do_mounts() { 
> + sudo flock ${MOUNT_LOCKFILE} -c ' \ 
> + mkdir -p "${BUILDROOT_DEPLOY}" "${BUILDROOT_ROOTFS}" 
"${BUILDROOT_WORK}" 
> + mount --bind "${DEPLOY_DIR_IMAGE}" "${BUILDROOT_DEPLOY}" 
> + mount --bind "${IMAGE_ROOTFS}" "${BUILDROOT_ROOTFS}" 
> + mount --bind "${WORKDIR}" "${BUILDROOT_WORK}" 
> + ' 
> + sbuildchroot_do_mounts 
> +} 
> + 
> +BUILDROOT = "${SCHROOT_DIR}${PP}" 
> +BUILDROOT_DEPLOY = "${SCHROOT_DIR}${PP_DEPLOY}" 
> +BUILDROOT_ROOTFS = "${SCHROOT_DIR}${PP_ROOTFS}" 
> +BUILDROOT_WORK = "${SCHROOT_DIR}${PP_WORK}"
Jan Kiszka Dec. 12, 2023, 5:08 a.m. UTC | #4
On 12.12.23 05:55, Srinuvasan Arjunan wrote:
> 
> 
> On Friday, December 8, 2023 at 7:45:06 PM UTC+5:30 Jan Kiszka wrote:
> 
>     On 28.11.23 08:14, Srinuvasan Arjunan wrote:
>     > From: Srinuvasan A <srinuv...@siemens.com>
>     >
>     > In present implementation we are using sbuild/schroot to build the
>     > packages, this schroot created via sessions during package build, and
>     > immediatley vanish once build the packages.
>     >
>     > Some of the downstream projects uses this chroot at many
>     > places for doing some postprocessing the meta data based on the
>     chroot
>     > path, but unfortunately we cannot refer this path due to creating the
>     > chroot via session.
> 
>     Can you be more specific in the use cases?
> 
> 
>    In our case we need to install the custom packages in buildchroot,
>    once we installed the isar-apt packages, later we refer those and do some
>    postprocessing before image creation.
> 
> 
>    ISAR provides the provision to pre-install the  upstream packages
>    not custom packages and this chroot will be used as a base chroot to
>     build the packages or imager_run, hence SBUILD_FLAVOR would not be
>    helpful atleast for my scenario.
> 
> 
>    SBUILD_CHROOT_PREINSTALL_EXTRA variable directly install the upstream 
>    packages in rootfs not custom packages.
> 

Understood the use case now - but then why not fixing/enhancing the
existing mechanism? We likely need some SBUILD_CHROOT_INSTALL_EXTRA that
establishes the recipe dependency, and then a custom sbuild should also
be able to pull packages from isar-apt. Did you consider this already?

Jan
Srinuvasan Arjunan Dec. 12, 2023, 5:18 a.m. UTC | #5
On Tuesday, December 12, 2023 at 10:38:08 AM UTC+5:30 Jan Kiszka wrote:

On 12.12.23 05:55, Srinuvasan Arjunan wrote: 
> 
> 
> On Friday, December 8, 2023 at 7:45:06 PM UTC+5:30 Jan Kiszka wrote: 
> 
> On 28.11.23 08:14, Srinuvasan Arjunan wrote: 
> > From: Srinuvasan A <srinuv...@siemens.com> 
> > 
> > In present implementation we are using sbuild/schroot to build the 
> > packages, this schroot created via sessions during package build, and 
> > immediatley vanish once build the packages. 
> > 
> > Some of the downstream projects uses this chroot at many 
> > places for doing some postprocessing the meta data based on the 
> chroot 
> > path, but unfortunately we cannot refer this path due to creating the 
> > chroot via session. 
> 
> Can you be more specific in the use cases? 
> 
> 
>    In our case we need to install the custom packages in buildchroot, 
>    once we installed the isar-apt packages, later we refer those and do 
some 
>    postprocessing before image creation. 
> 
> 
>    ISAR provides the provision to pre-install the  upstream packages 
>    not custom packages and this chroot will be used as a base chroot to 
>     build the packages or imager_run, hence SBUILD_FLAVOR would not be 
>    helpful atleast for my scenario. 
> 
> 
>    SBUILD_CHROOT_PREINSTALL_EXTRA variable directly install the upstream  
>    packages in rootfs not custom packages. 
> 

Understood the use case now - but then why not fixing/enhancing the 
existing mechanism? We likely need some SBUILD_CHROOT_INSTALL_EXTRA that 
establishes the recipe dependency, and then a custom sbuild should also 
be able to pull packages from isar-apt. Did you consider this already?


    Hmm, Understood, but so far i didn't tried this method , i meant pull 
isar-apt packages in custom sbuild  (SBUILD_FLAVOR), i hope this
   will work for my scenario,  Let me try one use cases and update the 
patch ASAP.



Jan

Patch

diff --git a/meta/classes/sbuildchroot.bbclass b/meta/classes/sbuildchroot.bbclass
new file mode 100644
index 00000000..edddd566
--- /dev/null
+++ b/meta/classes/sbuildchroot.bbclass
@@ -0,0 +1,101 @@ 
+# This software is a part of ISAR.
+# Copyright (C) 2018 Siemens AG
+#
+# SPDX-License-Identifier: MIT
+
+inherit crossvars
+
+MOUNT_LOCKFILE = "${SCHROOT_DIR}.lock"
+
+sbuildchroot_do_mounts() {
+    if [ "${USE_CCACHE}" = "1" ]; then
+        mkdir -p "${CCACHE_DIR}"
+        if [ "${CCACHE_DEBUG}" = "1" ]; then
+            mkdir -p "${CCACHE_DIR}/debug"
+        fi
+    fi
+
+    sudo -s <<'EOSUDO'
+        ( flock 9
+        set -e
+
+        mountpoint -q '${SCHROOT_DIR}/isar-apt' ||
+            mount --bind '${REPO_ISAR_DIR}/${DISTRO}' '${SCHROOT_DIR}/isar-apt'
+        if [ "${USE_CCACHE}" = "1" ]; then
+            mkdir -p '${SCHROOT_DIR}/ccache'
+            mountpoint -q '${SCHROOT_DIR}/ccache' ||
+                mount --bind '${CCACHE_DIR}' '${SCHROOT_DIR}/ccache'
+        fi
+        mountpoint -q '${SCHROOT_DIR}/dev' ||
+            ( mount -o bind,private /dev '${SCHROOT_DIR}/dev' &&
+              mount -t tmpfs none '${SCHROOT_DIR}/dev/shm' &&
+              mount --bind /dev/pts '${SCHROOT_DIR}/dev/pts' )
+        mountpoint -q '${SCHROOT_DIR}/proc' ||
+            mount -t proc none '${SCHROOT_DIR}/proc'
+        mountpoint -q '${SCHROOT_DIR}/sys' ||
+            mount --rbind /sys '${SCHROOT_DIR}/sys'
+        mount --make-rslave '${SCHROOT_DIR}/sys'
+
+        # Mount base-apt if 'ISAR_USE_CACHED_BASE_REPO' is set
+        if [ "${@repr(bb.utils.to_boolean(d.getVar('ISAR_USE_CACHED_BASE_REPO')))}" = 'True' ]
+        then
+            mkdir -p '${SCHROOT_DIR}/base-apt'
+            mountpoint -q '${SCHROOT_DIR}/base-apt' || \
+                mount --bind '${REPO_BASE_DIR}' '${SCHROOT_DIR}/base-apt'
+        fi
+
+        # Refresh or remove /etc/resolv.conf at this chance
+        if [ "${@repr(bb.utils.to_boolean(d.getVar('BB_NO_NETWORK')))}" = 'True' ]
+        then
+            rm -rf '${SCHROOT_DIR}/etc/resolv.conf'
+        else
+            cp -L /etc/resolv.conf '${SCHROOT_DIR}/etc'
+        fi
+
+        ) 9>'${MOUNT_LOCKFILE}'
+EOSUDO
+}
+
+add_isar_apt() {
+    sudo -s <<'EOSUDO'
+    set -e
+
+    mkdir -p '${SCHROOT_DIR}/etc/apt/sources.list.d'
+    echo 'deb [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' > \
+        '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list'
+    echo 'deb-src [trusted=yes] file:///isar-apt ${DEBDISTRONAME} main' >> \
+        '${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list'
+
+    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
+EOSUDO
+}
+
+cleanup_isar_apt() {
+    sudo -s <<'EOSUDO'
+        set -e
+        rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/isar-apt.list"
+        rm -f "${SCHROOT_DIR}/etc/apt/preferences.d/isar-apt"
+        rm -f "${SCHROOT_DIR}/etc/apt/sources.list.d/base-apt.list"
+        rm -f "${SCHROOT_DIR}/etc/apt/apt.conf.d/50isar"
+EOSUDO
+}
+
+image_do_mounts() {
+    sudo flock ${MOUNT_LOCKFILE} -c ' \
+        mkdir -p "${BUILDROOT_DEPLOY}" "${BUILDROOT_ROOTFS}" "${BUILDROOT_WORK}"
+        mount --bind "${DEPLOY_DIR_IMAGE}" "${BUILDROOT_DEPLOY}"
+        mount --bind "${IMAGE_ROOTFS}" "${BUILDROOT_ROOTFS}"
+        mount --bind "${WORKDIR}" "${BUILDROOT_WORK}"
+    '
+    sbuildchroot_do_mounts
+}
+
+BUILDROOT = "${SCHROOT_DIR}${PP}"
+BUILDROOT_DEPLOY = "${SCHROOT_DIR}${PP_DEPLOY}"
+BUILDROOT_ROOTFS = "${SCHROOT_DIR}${PP_ROOTFS}"
+BUILDROOT_WORK = "${SCHROOT_DIR}${PP_WORK}"