From: Jan Kiszka <jan.kiszka@siemens.com>
To: chombourger@gmail.com, isar-users <isar-users@googlegroups.com>
Subject: Re: [PATCH v3 1/3] dpkg: move installation of dependencies into dpkg_prepare
Date: Fri, 31 Aug 2018 10:21:17 +0200 [thread overview]
Message-ID: <f4c8fce0-b383-9001-6116-c41f3c71dc5e@siemens.com> (raw)
In-Reply-To: <1bb4283f-ac5c-444c-8890-f36231f0e66c@googlegroups.com>
On 2018-08-31 10:15, chombourger@gmail.com wrote:
> Hi Jan,
>
> if your recipe is editing files in debian/, you would then want them to
> be done before we install build dependencies
> this can be done by using a "do_prepare_prepend" to make the tweaks you need
>
> maybe we could add a do_amend_debian_meta (defaulting to a no-op) to
> make it easy for people to tweak meta-data and not having to know about
> do_prepare?
Ah, so every ad-hoc debianization is now a preparation task - that
should probably be stated somewhere more explicitly, it's a fairly
common pattern.
As I received internal complaints already: Now would be a good time to
start documenting recipe API changes in a central file. Then users can
quickly look up what they need to do in order to make their layers
compatible with the latest version.
Thanks,
Jan
>
> Cedric
>
> On Friday, August 31, 2018 at 10:10:45 AM UTC+2, Jan Kiszka wrote:
>
> On 2018-08-26 08:21, Cedric Hombourger wrote:
> > In preparation for a rework of locking mechanisms around apt
> > operations (installation of packages or inclusion of new
> > packages into the isar-apt database), move the code for
> > installing build dependencies out of dpkg_runbuild and into
> > a new function: dpkg_prepare.
> >
> > Signed-off-by: Cedric Hombourger <Cedric_H...@mentor.com
> <javascript:>>
> > ---
> > doc/technical_overview.md | 29
> ++++++++++----
> > meta/classes/dpkg-base.bbclass | 30
> +++++++++++---
> > meta/classes/dpkg-raw.bbclass | 15 ++++---
> > meta/classes/dpkg.bbclass | 8 +++-
> > meta/recipes-devtools/buildchroot/buildchroot.inc | 9 ++++-
> > meta/recipes-devtools/buildchroot/files/build.sh | 48
> +----------------------
> > meta/recipes-devtools/buildchroot/files/common.sh | 28
> +++++++++++++
> > meta/recipes-devtools/buildchroot/files/deps.sh | 32
> +++++++++++++++
> > meta/recipes-kernel/linux-module/module.inc | 2 +-
> > 9 files changed, 128 insertions(+), 73 deletions(-)
> > create mode 100644
> meta/recipes-devtools/buildchroot/files/common.sh
> > create mode 100644 meta/recipes-devtools/buildchroot/files/deps.sh
> >
> > diff --git a/doc/technical_overview.md b/doc/technical_overview.md
> > index ddd2c79..4f6d954 100644
> > --- a/doc/technical_overview.md
> > +++ b/doc/technical_overview.md
> > @@ -217,24 +217,37 @@ Both consist of the following steps:
> > 3. Task `do_install` _only_ for `dpkg-raw`: copy all you want
> in your
> > debian package to `${D}`, install hooks in `${D}/DEBIAN`
> >
> > -4. Task `do_build`: mount folder with unpacked files to
> buildchroot, execute
> > - the actual build function `dpkg_runbuild`, and finally umount
> again
> > +4. Task `do_prepare': perform any preparation steps to the
> unpacked/patched
> > + sources before the build. This task calls the dpkg_prepare
> shell function
> > + with the buildchroot mounts in place (`dpkg_do_mounts')
> >
> > - 4.1. the `dpkg_runbuild` function of `dpkg.bbclass` runs
> `build.sh` in the
> > - buildchroot. That performs the following:
> > + 4.1. the `dpkg_prepare` function of `dpkg.bbclass` runs
> `/isar/deps.sh` in
> > + the buildchroot. That performs the following:
> >
> > 1. Go to `/home/build/${PN}`
> >
> > 2. Get list of dependencies from debian/control and
> install them
> >
> > - 3. Run dpkg-buildpackage
> > + 4.2. the `dpkg_prepare` function of `dpkg-raw.bbclass`
> translate the
> > + recipe meta-data into a debian/control file suitable for
> packaging
> > + with dpkg-deb
> > +
> > +5. Task `do_build`: mount folder (`dpkg_do_mounts') with
> unpacked files to buildchroot,
> > + execute the actual build function `dpkg_runbuild`, and
> finally umount again
> > + (`dpkg_undo_mounts')
> > +
> > + 5.1. the `dpkg_runbuild` function of `dpkg.bbclass` runs
> `build.sh` in the
> > + buildchroot. That performs the following:
> > +
> > + 1. Go to `/home/build/${PN}`
> > +
> > + 2. Run dpkg-buildpackage
> >
> > - 4.2. the `dpkg_runbuild` function of `dpkg-raw.bbclass`
> basically runs
> > + 5.2. the `dpkg_runbuild` function of `dpkg-raw.bbclass`
> basically runs
> > `dpkg-deb` to construct a Debian package from a folder
> of files,
> > without compiling anything
> >
> > -
> > -5. Task `do_deploy_deb`: install successfully built packages
> > +6. Task `do_deploy_deb`: install successfully built packages
> > `${WORKDIR}/*.deb` to deploy directory `${DEPLOY_DIR_DEB}`
> >
> > ## 3.6 Populate Target Filesystem
> > diff --git a/meta/classes/dpkg-base.bbclass
> b/meta/classes/dpkg-base.bbclass
> > index a41df2c..5826357 100644
> > --- a/meta/classes/dpkg-base.bbclass
> > +++ b/meta/classes/dpkg-base.bbclass
> > @@ -13,7 +13,7 @@ python __anonymous() {
> > dep = "buildchroot-host:do_build"
> > rootfs = d.getVar('BUILDCHROOT_HOST_DIR', True)
> >
> > - d.setVarFlag('do_build', 'depends', dep)
> > + d.setVarFlag('do_prepare', 'depends', dep)
> > d.setVar('BUILDCHROOT_DIR', rootfs)
> > }
> >
> > @@ -32,7 +32,7 @@ addtask patch after do_adjust_git before do_build
> >
> > # Add dependency between Isar recipes
> > DEPENDS ?= ""
> > -do_build[deptask] = "do_deploy_deb"
> > +do_prepare[deptask] = "do_deploy_deb"
> >
> > def get_package_srcdir(d):
> > s = d.getVar("S", True)
> > @@ -50,7 +50,10 @@ PPS ?= "${@get_package_srcdir(d)}"
> > BUILDROOT = "${BUILDCHROOT_DIR}/${PP}"
> > do_build[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
> >
> > -# default to "emtpy" implementation
> > +# default to "emtpy" implementation for dpkg_prepare() and
> dpkg_runbuild()
> > +dpkg_prepare() {
> > + true
> > +}
> > dpkg_runbuild() {
> > die "This should never be called, overwrite it in your
> derived class"
> > }
> > @@ -58,7 +61,7 @@ dpkg_runbuild() {
> > MOUNT_LOCKFILE = "${BUILDCHROOT_DIR}/mount.lock"
> >
> > # Wrap the function dpkg_runbuild with the bind mount for
> buildroot
> > -do_build() {
> > +dpkg_do_mounts() {
> > mkdir -p ${BUILDROOT}
> > sudo mount --bind ${WORKDIR} ${BUILDROOT}
> >
> > @@ -70,13 +73,28 @@ do_build() {
> > mount -t devtmpfs -o mode=0755,nosuid devtmpfs
> ${BUILDCHROOT_DIR}/dev
> > mount -t proc none ${BUILDCHROOT_DIR}/proc
> > fi'
> > +}
> >
> > - dpkg_runbuild
> > -
> > +dpkg_undo_mounts() {
> > sudo umount ${BUILDROOT} 2>/dev/null || true
> > sudo rmdir ${BUILDROOT} 2>/dev/null || true
> > }
> >
> > +do_prepare() {
> > + dpkg_do_mounts
> > + dpkg_prepare
> > + dpkg_undo_mounts
> > +}
> > +
> > +addtask prepare after do_patch before do_build
> > +do_prepare[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
> > +
> > +do_build() {
> > + dpkg_do_mounts
> > + dpkg_runbuild
> > + dpkg_undo_mounts
> > +}
> > +
> > CLEANFUNCS += "repo_clean"
> >
> > repo_clean() {
> > diff --git a/meta/classes/dpkg-raw.bbclass
> b/meta/classes/dpkg-raw.bbclass
> > index 28233ac..c5f1c88 100644
> > --- a/meta/classes/dpkg-raw.bbclass
> > +++ b/meta/classes/dpkg-raw.bbclass
> > @@ -14,9 +14,9 @@ do_install() {
> > }
> >
> > do_install[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
> > -addtask install after do_unpack before do_deb_package_prepare
> > +addtask install after do_unpack before do_prepare
> >
> > -do_deb_package_prepare() {
> > +deb_package_prepare() {
> > sudo rm -rf ${D}/DEBIAN
> > mkdir -p ${D}/DEBIAN
> > cat<<-__EOF__ > ${D}/DEBIAN/control
> > @@ -42,17 +42,16 @@ do_deb_package_prepare() {
> > done
> > }
> >
> > -do_deb_package_prepare[stamp-extra-info] =
> "${DISTRO}-${DISTRO_ARCH}"
> > -addtask deb_package_prepare after do_install before
> do_deb_package_conffiles
> > -
> > -do_deb_package_conffiles() {
> > +deb_package_conffiles() {
> > CONFFILES=${D}/DEBIAN/conffiles
> > find ${D} -type f -path '${D}/etc/*' | sed -e
> 's|^${D}|/|' >> $CONFFILES
> > test -s $CONFFILES || rm $CONFFILES
> > }
> >
> > -do_deb_package_conffiles[stamp-extra-info] =
> "${DISTRO}-${DISTRO_ARCH}"
> > -addtask deb_package_conffiles after do_deb_package_prepare
> before do_build
> > +dpkg_prepare() {
> > + deb_package_prepare
> > + deb_package_conffiles
> > +}
> >
> > dpkg_runbuild() {
> > sudo chown -R root:root ${D}/DEBIAN/
> > diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> > index ab70645..e8bd6ba 100644
> > --- a/meta/classes/dpkg.bbclass
> > +++ b/meta/classes/dpkg.bbclass
> > @@ -3,8 +3,14 @@
> >
> > inherit dpkg-base
> >
> > +# Install build dependencies for package
> > +dpkg_prepare() {
> > + E="${@ bb.utils.export_proxies(d)}"
> > + sudo -E chroot ${BUILDCHROOT_DIR} /isar/deps.sh ${PP}/${PPS}
> ${DISTRO_ARCH}
> > +}
> > +
> > # Build package from sources using build script
> > dpkg_runbuild() {
> > E="${@ bb.utils.export_proxies(d)}"
> > - sudo -E chroot ${BUILDCHROOT_DIR} /build.sh ${PP}/${PPS}
> ${DISTRO_ARCH}
> > + sudo -E chroot ${BUILDCHROOT_DIR} /isar/build.sh
> ${PP}/${PPS} ${DISTRO_ARCH}
> > }
> > diff --git a/meta/recipes-devtools/buildchroot/buildchroot.inc
> b/meta/recipes-devtools/buildchroot/buildchroot.inc
> > index 43e3cd6..7dd909e 100644
> > --- a/meta/recipes-devtools/buildchroot/buildchroot.inc
> > +++ b/meta/recipes-devtools/buildchroot/buildchroot.inc
> > @@ -8,7 +8,9 @@ LIC_FILES_CHKSUM =
> "file://${LAYERDIR_isar}/licenses/COPYING.GPLv2;md5=751419260
> >
> > FILESPATH_prepend := "${THISDIR}/files:"
> > SRC_URI = "file://configscript.sh \
> > - file://build.sh"
> > + file://build.sh \
> > + file://common.sh \
> > + file://deps.sh"
> > PV = "1.0"
> >
> > inherit isar-bootstrap-helper
> > @@ -27,7 +29,10 @@ do_build() {
> >
> > # Install package builder script
> > sudo chmod -R a+rw "${BUILDCHROOT_DIR}/home/builder"
> > - sudo install -m 755 ${WORKDIR}/build.sh ${BUILDCHROOT_DIR}
> > + sudo install -m 755 -d ${BUILDCHROOT_DIR}/isar
> > + sudo install -m 755 ${WORKDIR}/build.sh
> ${BUILDCHROOT_DIR}/isar/
> > + sudo install -m 755 ${WORKDIR}/common.sh
> ${BUILDCHROOT_DIR}/isar/
> > + sudo install -m 755 ${WORKDIR}/deps.sh ${BUILDCHROOT_DIR}/isar/
> >
> > # Configure root filesystem
> > sudo install -m 755 ${WORKDIR}/configscript.sh
> ${BUILDCHROOT_DIR}
> > diff --git a/meta/recipes-devtools/buildchroot/files/build.sh
> b/meta/recipes-devtools/buildchroot/files/build.sh
> > index e2dabab..3c80bd7 100644
> > --- a/meta/recipes-devtools/buildchroot/files/build.sh
> > +++ b/meta/recipes-devtools/buildchroot/files/build.sh
> > @@ -4,53 +4,7 @@
> > # Copyright (C) 2015-2017 ilbers GmbH
> > # Copyright (c) 2018 Siemens AG
> >
> > -set -e
> > -
> > -# Create human-readable names
> > -target_arch=$2
> > -
> > -# Notes:
> > -# mk-build-deps for jessie and jtretch has different parameter
> name to specify
> > -# host architecture.
> > -debian_version=$(cut -c1 /etc/debian_version)
> > -if [ $(($debian_version)) -ge 9 ]; then
> > - set_arch="--host-arch $target_arch"
> > -else
> > - set_arch="-a $target_arch"
> > -fi
> > -
> > -# Go to build directory
> > -cd $1
> > -
> > -# To avoid Perl locale warnings:
> > -export LC_ALL=C
> > -export LANG=C
> > -export LANGUAGE=C
> > -
> > -# Install command to be used by mk-build-deps
> > -# Notes:
> > -# 1) everything before the -y switch is unchanged from the
> defaults
> > -# 2) we add -y to go non-interactive
> > -install_cmd="apt-get -o Debug::pkgProblemResolver=yes
> --no-install-recommends -y"
> > -
> > -(
> > - # Lock-protected because apt and dpkg do not wait in case of
> contention
> > - flock 42 || exit 1
> > -
> > - # Make sure that we have latest isar-apt content.
> > - # Options meaning:
> > - # Dir::Etc::sourcelist - specifies which source to be used
> > - # Dir::Etc::sourceparts - disables looking for the other
> sources
> > - # APT::Get::List-Cleanup - do not erase obsolete packages
> list for
> > - # upstream in '/var/lib/apt/lists'
> > - apt-get update \
> > - -o Dir::Etc::sourcelist="sources.list.d/isar-apt.list" \
> > - -o Dir::Etc::sourceparts="-" \
> > - -o APT::Get::List-Cleanup="0"
> > -
> > - # Install all build deps
> > - mk-build-deps $set_arch -t "${install_cmd}" -i -r
> debian/control
> > -) 42>/dpkg.lock
> > +source /isar/common.sh
> >
> > # If autotools files have been created, update their timestamp to
> > # prevent them from being regenerated
> > diff --git a/meta/recipes-devtools/buildchroot/files/common.sh
> b/meta/recipes-devtools/buildchroot/files/common.sh
> > new file mode 100644
> > index 0000000..b7551eb
> > --- /dev/null
> > +++ b/meta/recipes-devtools/buildchroot/files/common.sh
> > @@ -0,0 +1,28 @@
> > +#!/bin/bash
> > +#
> > +# This software is a part of ISAR.
> > +# Copyright (C) 2015-2017 ilbers GmbH
> > +# Copyright (c) 2018 Siemens AG
> > +
> > +set -e
> > +
> > +# Create human-readable names
> > +target_arch=$2
> > +
> > +# Notes:
> > +# mk-build-deps for jessie and jtretch has different parameter
> name to specify
> > +# host architecture.
> > +debian_version=$(cut -c1 /etc/debian_version)
> > +if [ $(($debian_version)) -ge 9 ]; then
> > + set_arch="--host-arch $target_arch"
> > +else
> > + set_arch="-a $target_arch"
> > +fi
> > +
> > +# Go to build directory
> > +cd $1
> > +
> > +# To avoid Perl locale warnings:
> > +export LC_ALL=C
> > +export LANG=C
> > +export LANGUAGE=C
> > diff --git a/meta/recipes-devtools/buildchroot/files/deps.sh
> b/meta/recipes-devtools/buildchroot/files/deps.sh
> > new file mode 100644
> > index 0000000..854a4d5
> > --- /dev/null
> > +++ b/meta/recipes-devtools/buildchroot/files/deps.sh
> > @@ -0,0 +1,32 @@
> > +#!/bin/bash
> > +#
> > +# This software is a part of ISAR.
> > +# Copyright (C) 2015-2017 ilbers GmbH
> > +# Copyright (c) 2018 Siemens AG
> > +
> > +source /isar/common.sh
> > +
> > +# Install command to be used by mk-build-deps
> > +# Notes:
> > +# 1) everything before the -y switch is unchanged from the
> defaults
> > +# 2) we add -y to go non-interactive
> > +install_cmd="apt-get -o Debug::pkgProblemResolver=yes
> --no-install-recommends -y"
> > +
> > +(
> > + # Lock-protected because apt and dpkg do not wait in case of
> contention
> > + flock 42 || exit 1
> > +
> > + # Make sure that we have latest isar-apt content.
> > + # Options meaning:
> > + # Dir::Etc::sourcelist - specifies which source to be used
> > + # Dir::Etc::sourceparts - disables looking for the other
> sources
> > + # APT::Get::List-Cleanup - do not erase obsolete packages
> list for
> > + # upstream in '/var/lib/apt/lists'
> > + apt-get update \
> > + -o Dir::Etc::sourcelist="sources.list.d/isar-apt.list" \
> > + -o Dir::Etc::sourceparts="-" \
> > + -o APT::Get::List-Cleanup="0"
> > +
> > + # Install all build deps
> > + mk-build-deps $set_arch -t "${install_cmd}" -i -r
> debian/control
> > +) 42>/dpkg.lock
> > diff --git a/meta/recipes-kernel/linux-module/module.inc
> b/meta/recipes-kernel/linux-module/module.inc
> > index 3075f44..3a3cab1 100644
> > --- a/meta/recipes-kernel/linux-module/module.inc
> > +++ b/meta/recipes-kernel/linux-module/module.inc
> > @@ -17,7 +17,7 @@ AUTOLOAD ?= "0"
> >
> > inherit dpkg
> >
> > -dpkg_runbuild_prepend() {
> > +do_prepare_prepend() {
> > cp -r ${WORKDIR}/debian ${S}/
> > sed -i -e 's/@PN@/${PN}/g' -e 's/@PV@/${PV}/g' \
> > -e 's/@KERNEL_NAME@/${KERNEL_NAME}/g' \
> >
>
> This patches causes regression with jailhouse-images which I do not
> understand yet:
>
> 2018-08-31 07:53:54 - ERROR - ERROR:
> mc:espressobin-jailhouse:non-root-initramfs-2018.05.1-r0 do_prepare:
> Function failed: do_prepare (log file is located at
> /out/build/tmp/work/debian-stretch-arm64/non-root-initramfs-2018.05.1-r0/temp/log.do_prepare.28928)
>
> 2018-08-31 07:53:54 - ERROR - ERROR: Logfile of failure stored
> in:
> /out/build/tmp/work/debian-stretch-arm64/non-root-initramfs-2018.05.1-r0/temp/log.do_prepare.28928
>
> 2018-08-31 07:53:54 - INFO - Log data follows:
> 2018-08-31 07:53:54 - INFO - | DEBUG: Executing shell function
> do_prepare
> 2018-08-31 07:53:54 - INFO - | Get:1 file:/isar-apt isar InRelease
> 2018-08-31 07:53:54 - INFO - | Ign:1 file:/isar-apt isar InRelease
> 2018-08-31 07:53:54 - INFO - | Get:2 file:/isar-apt isar Release
> [3554 B]
> 2018-08-31 07:53:54 - INFO - | Get:2 file:/isar-apt isar Release
> [3554 B]
> 2018-08-31 07:53:54 - INFO - | Get:3 file:/isar-apt isar
> Release.gpg
> 2018-08-31 07:53:54 - INFO - | Ign:3 file:/isar-apt isar
> Release.gpg
> 2018-08-31 07:53:54 - INFO - | Reading package lists...
> 2018-08-31 07:53:54 - INFO - | E: You must put some 'source'
> URIs in your sources.list
> 2018-08-31 07:53:54 - INFO - | mk-build-deps: Unable to find
> package name in `apt-cache showsrc debian/control'
> 2018-08-31 07:53:54 - INFO - | WARNING: exit code 29 from a
> shell command.
> 2018-08-31 07:53:54 - INFO - | ERROR: Function failed:
> do_prepare (log file is located at
> /out/build/tmp/work/debian-stretch-arm64/non-root-initramfs-2018.05.1-r0/temp/log.do_prepare.28928)
>
> 2018-08-31 07:53:54 - INFO - NOTE: recipe
> non-root-initramfs-2018.05.1-r0: task do_prepare: Failed
> 2018-08-31 07:53:54 - ERROR - ERROR: Task
> (multiconfig:espressobin-jailhouse:/jailhouse-images/recipes-core/non-root-initramfs/non-root-initramfs_2018.05.1.bb:do_prepare)
> failed with exit code '1'
>
>
> I also wonder why this didn't trigger with the isar core tests. Any
> idea?
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE
> Corporate Competence Center Embedded Linux
>
> --
> You received this message because you are subscribed to the Google
> Groups "isar-users" group.
> To unsubscribe from this group and stop receiving emails from it, send
> an email to isar-users+unsubscribe@googlegroups.com
> <mailto:isar-users+unsubscribe@googlegroups.com>.
> To post to this group, send email to isar-users@googlegroups.com
> <mailto:isar-users@googlegroups.com>.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/isar-users/1bb4283f-ac5c-444c-8890-f36231f0e66c%40googlegroups.com
> <https://groups.google.com/d/msgid/isar-users/1bb4283f-ac5c-444c-8890-f36231f0e66c%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.
--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2018-08-31 8:21 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-22 11:34 [PATCH 0/1] acquire database lock when calling reprepro Cedric Hombourger
2018-08-22 11:34 ` [PATCH 1/1] dpkg: acquire " Cedric Hombourger
2018-08-22 12:20 ` Jan Kiszka
2018-08-22 12:48 ` Hombourger, Cedric
2018-08-22 13:41 ` Henning Schild
2018-08-22 13:47 ` Hombourger, Cedric
2018-08-22 13:48 ` Jan Kiszka
2018-08-26 6:21 ` [PATCH v3 1/3] dpkg: move installation of dependencies into dpkg_prepare Cedric Hombourger
2018-08-26 6:21 ` [PATCH v3 2/3] linux: leverage dpkg_prepare to install build dependencies Cedric Hombourger
2018-08-26 6:21 ` [PATCH v3 3/3] dpkg+linux: use Isar's lock via do_prepare[lockfiles] instead of flock Cedric Hombourger
2018-08-28 12:12 ` [PATCH v3 1/3] dpkg: move installation of dependencies into dpkg_prepare Maxim Yu. Osipov
2018-08-31 8:10 ` Jan Kiszka
2018-08-31 8:15 ` chombourger
2018-08-31 8:21 ` Jan Kiszka [this message]
2018-08-31 8:28 ` Jan Kiszka
2018-08-31 8:33 ` chombourger
2018-08-31 8:41 ` Jan Kiszka
2018-08-31 9:05 ` Jan Kiszka
2018-09-01 6:58 ` Jan Kiszka
2018-09-01 8:44 ` Cedric Hombourger
2018-09-01 9:31 ` Jan Kiszka
2018-08-22 11:58 ` [PATCH 0/1] acquire database lock when calling reprepro Alexander Smirnov
2018-08-22 12:07 ` Hombourger, Cedric
2018-08-22 12:47 ` [PATCH v2] dpkg: acquire " Cedric Hombourger
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=f4c8fce0-b383-9001-6116-c41f3c71dc5e@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=chombourger@gmail.com \
--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