public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Anton Mikanovich <amikan@ilbers.de>, isar-users@googlegroups.com
Subject: Re: [PATCH v1 1/5] Revert "dpkg: Make mount buildroot reliable"
Date: Thu, 8 Jul 2021 14:16:19 +0200	[thread overview]
Message-ID: <24c1da80-550c-8e40-aea8-c635a75380e8@siemens.com> (raw)
In-Reply-To: <20210707163851.204296-2-amikan@ilbers.de>

On 07.07.21 18:38, Anton Mikanovich wrote:
> This reverts commit d21d49578e5a3b0019075d1946bd93a95914fcca.

Signed-off and a short reasoning is missing.

Jan

> ---
>  meta/classes/dpkg-base.bbclass | 127 +++++++++++++--------------------
>  meta/classes/dpkg-gbp.bbclass  |   8 ++-
>  meta/classes/dpkg.bbclass      |  14 ++--
>  3 files changed, 59 insertions(+), 90 deletions(-)
> 
> diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass
> index ed162b3..97661a6 100644
> --- a/meta/classes/dpkg-base.bbclass
> +++ b/meta/classes/dpkg-base.bbclass
> @@ -61,7 +61,12 @@ addtask patch before do_adjust_git
>  
>  SRC_APT ?= ""
>  
> -fetch_apt() {
> +do_apt_fetch() {
> +    if [ -z "${@d.getVar("SRC_APT", True).strip()}" ]; then
> +        return 0
> +    fi
> +    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="-" \
> @@ -71,25 +76,21 @@ fetch_apt() {
>          sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
>              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
> -}
> -
> -python do_apt_fetch() {
> -    src_apt = d.getVar("SRC_APT", True)
> -    if not src_apt:
> -        return 0
>  
> -    dpkg_do_mounts(d)
> -    try:
> -        isar_export_proxies(d)
> -        bb.build.exec_func("fetch_apt", d)
> -    finally:
> -        dpkg_undo_mounts(d)
> +    dpkg_undo_mounts
>  }
>  
>  addtask apt_fetch after do_unpack before do_apt_unpack
>  do_apt_fetch[lockfiles] += "${REPO_ISAR_DIR}/isar.lock"
>  
> -unpack_apt() {
> +do_apt_unpack() {
> +    if [ -z "${@d.getVar("SRC_APT", True).strip()}" ]; then
> +        return 0
> +    fi
> +    rm -rf ${S}
> +    dpkg_do_mounts
> +    E="${@ isar_export_proxies(d)}"
> +
>      for uri in "${SRC_APT}"; do
>          sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \
>              sh -c ' \
> @@ -100,25 +101,8 @@ unpack_apt() {
>                  dpkg-source -x "${dscfile}" "${PPS}"' \
>                      my_script "${DISTRO}" "${uri}"
>      done
> -}
>  
> -python do_apt_unpack() {
> -    import shutil
> -
> -    src_apt = d.getVar("SRC_APT", True)
> -    if not src_apt:
> -        return 0
> -
> -    srcsubdir = d.getVar('S', True)
> -    if os.path.exists(srcsubdir):
> -        shutil.rmtree(srcsubdir)
> -
> -    dpkg_do_mounts(d)
> -    try:
> -        isar_export_proxies(d)
> -        bb.build.exec_func("unpack_apt", d)
> -    finally:
> -        dpkg_undo_mounts(d)
> +    dpkg_undo_mounts
>  }
>  
>  addtask apt_unpack after do_apt_fetch before do_patch
> @@ -162,38 +146,25 @@ do_prepare_build[deptask] = "do_deploy_deb"
>  
>  BUILDROOT = "${BUILDCHROOT_DIR}/${PP}"
>  
> -def ismount(path):
> -    real = os.path.realpath(path)
> -    with open('/proc/mounts') as f:
> -        for line in f.readlines():
> -            if len(line.split()) > 2 and real == line.split()[1]:
> -                return True
> -    return False
> -
> -def dpkg_do_mounts(d):
> -    buildroot = d.getVar('BUILDROOT', True)
> -    if ismount(buildroot):
> -        bb.warn('Path %s already mounted!' % buildroot)
> -        return
> -    workdir = d.getVar('WORKDIR', True)
> -    os.makedirs(buildroot, exist_ok=True)
> -    os.system('sudo mount --bind %s %s' % (workdir, buildroot))
> -    bb.build.exec_func("buildchroot_do_mounts", d)
> -
> -def dpkg_undo_mounts(d):
> -    bb.build.exec_func("buildchroot_undo_mounts", d)
> -    buildroot = d.getVar('BUILDROOT', True)
> -    if not ismount(buildroot):
> -        bb.warn('Path %s not mounted!' % buildroot)
> -        return
> -    for i in range(200):
> -        if not os.system('sudo umount %s' % buildroot):
> -            os.rmdir(buildroot)
> -            return
> -        if i % 100 == 0:
> -            bb.warn("%s: Couldn't unmount, retrying..." % buildroot)
> -        time.sleep(0.1)
> -    bb.fatal("Couldn't unmount, exiting...")
> +dpkg_do_mounts() {
> +    mkdir -p ${BUILDROOT}
> +    sudo mount --bind ${WORKDIR} ${BUILDROOT}
> +
> +    buildchroot_do_mounts
> +}
> +
> +dpkg_undo_mounts() {
> +    i=1
> +    while ! sudo umount ${BUILDROOT}; do
> +        sleep 0.1
> +        i=`expr $i + 1`
> +        if [ $i -gt 100 ]; then
> +            bbwarn "${BUILDROOT}: Couldn't unmount, retrying..."
> +            i=1
> +        fi
> +    done
> +    sudo rmdir ${BUILDROOT}
> +}
>  
>  # Placeholder for actual dpkg_runbuild() implementation
>  dpkg_runbuild() {
> @@ -203,12 +174,10 @@ dpkg_runbuild() {
>  python do_dpkg_build() {
>      lock = bb.utils.lockfile(d.getVar("REPO_ISAR_DIR") + "/isar.lock",
>                               shared=True)
> -    dpkg_do_mounts(d)
> -    try:
> -        bb.build.exec_func("dpkg_runbuild", d)
> -    finally:
> -        dpkg_undo_mounts(d)
> -        bb.utils.unlockfile(lock)
> +    bb.build.exec_func("dpkg_do_mounts", d)
> +    bb.build.exec_func("dpkg_runbuild", d)
> +    bb.build.exec_func("dpkg_undo_mounts", d)
> +    bb.utils.unlockfile(lock)
>  }
>  
>  addtask dpkg_build before do_build
> @@ -252,16 +221,16 @@ python do_devshell() {
>      oe_lib_path = os.path.join(d.getVar('LAYERDIR_core'), 'lib')
>      sys.path.insert(0, oe_lib_path)
>  
> -    dpkg_do_mounts(d)
> -    try:
> -        isar_export_proxies(d)
> +    bb.build.exec_func('dpkg_do_mounts', d)
> +
> +    isar_export_proxies(d)
> +
> +    buildchroot = d.getVar('BUILDCHROOT_DIR')
> +    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)
>  
> -        buildchroot = d.getVar('BUILDCHROOT_DIR')
> -        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)
> -    finally:
> -        dpkg_undo_mounts(d)
> +    bb.build.exec_func('dpkg_undo_mounts', d)
>  }
>  
>  addtask devshell after do_prepare_build
> diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass
> index 20d2d4c..d956e8c 100644
> --- a/meta/classes/dpkg-gbp.bbclass
> +++ b/meta/classes/dpkg-gbp.bbclass
> @@ -12,7 +12,12 @@ PATCHTOOL ?= "git"
>  GBP_DEPENDS ?= "git-buildpackage pristine-tar"
>  GBP_EXTRA_OPTIONS ?= "--git-pristine-tar"
>  
> -builddeps_install_append() {
> +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 \
> @@ -21,6 +26,7 @@ builddeps_install_append() {
>      sudo -E chroot ${BUILDCHROOT_DIR} \
>          apt-get install -y -o Debug::pkgProblemResolver=yes \
>                          --no-install-recommends ${GBP_DEPENDS}
> +    dpkg_undo_mounts
>  }
>  
>  dpkg_runbuild_prepend() {
> diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> index 29e2b89..4e7c2f7 100644
> --- a/meta/classes/dpkg.bbclass
> +++ b/meta/classes/dpkg.bbclass
> @@ -6,7 +6,9 @@ inherit dpkg-base
>  PACKAGE_ARCH ?= "${DISTRO_ARCH}"
>  
>  # Install build dependencies for package
> -builddeps_install() {
> +do_install_builddeps() {
> +    dpkg_do_mounts
> +    E="${@ isar_export_proxies(d)}"
>      distro="${DISTRO}"
>      if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then
>         distro="${HOST_DISTRO}"
> @@ -17,15 +19,7 @@ builddeps_install() {
>      deb_dl_dir_export "${BUILDCHROOT_DIR}" "${distro}"
>      sudo -E chroot ${BUILDCHROOT_DIR} /isar/deps.sh \
>          ${PP}/${PPS} ${PACKAGE_ARCH}
> -}
> -
> -python do_install_builddeps() {
> -    dpkg_do_mounts(d)
> -    isar_export_proxies(d)
> -    try:
> -        bb.build.exec_func("builddeps_install", d)
> -    finally:
> -        dpkg_undo_mounts(d)
> +    dpkg_undo_mounts
>  }
>  
>  addtask install_builddeps after do_prepare_build before do_dpkg_build
> 

  reply	other threads:[~2021-07-08 12:16 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-07 16:38 [PATCH v1 0/5] Restore downstream mounts compatibility Anton Mikanovich
2021-07-07 16:38 ` [PATCH v1 1/5] Revert "dpkg: Make mount buildroot reliable" Anton Mikanovich
2021-07-08 12:16   ` Jan Kiszka [this message]
2021-07-07 16:38 ` [PATCH v1 2/5] mount: Allow calling unmount on not mounted paths Anton Mikanovich
2021-07-08 12:17   ` Jan Kiszka
2021-07-07 16:38 ` [PATCH v1 3/5] dpkg: Remove unmount loop Anton Mikanovich
2021-07-08 12:21   ` Jan Kiszka
2021-07-08 14:35     ` Anton Mikanovich
2021-07-08 16:16       ` Jan Kiszka
2021-08-17 13:02     ` Anton Mikanovich
2021-07-07 16:38 ` [PATCH v1 4/5] image: Add reference counter Anton Mikanovich
2021-07-07 16:38 ` [PATCH v1 5/5] events: Unmount all lost mounts at task fail Anton Mikanovich
2021-07-08 12:24   ` Jan Kiszka
2021-07-08 14:41     ` Anton Mikanovich
2021-07-08 16:28       ` Jan Kiszka
2021-07-12 16:08         ` Baurzhan Ismagulov

Reply instructions:

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

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

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

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

  git send-email \
    --in-reply-to=24c1da80-550c-8e40-aea8-c635a75380e8@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=amikan@ilbers.de \
    --cc=isar-users@googlegroups.com \
    /path/to/YOUR_REPLY

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

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