From: vijai kumar <vijaikumar.kanagarajan@gmail.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: isar-users <isar-users@googlegroups.com>,
Vijai Kumar K <Vijaikumar_Kanagarajan@mentor.com>
Subject: Re: [PATCH v4 2/2] meta: cache deb srcs as part of postprocessing
Date: Tue, 7 Apr 2020 14:38:11 +0530 [thread overview]
Message-ID: <CALLGG_JKCGnADh_XqpnwuAyXuMzZ3U_j1URugwh=zc+PLT_dLQ@mail.gmail.com> (raw)
In-Reply-To: <aa9e31bb-38f3-0122-8841-1181efd76f81@siemens.com>
On Tue, Apr 7, 2020 at 2:08 PM Jan Kiszka <jan.kiszka@siemens.com> wrote:
>
> On 07.04.20 09:59, vijai kumar wrote:
> > On Tue, Apr 7, 2020 at 12:34 PM Jan Kiszka <jan.kiszka@siemens.com> wrote:
> >>
> >> On 07.04.20 08:58, vijai kumar wrote:
> >>> On Tue, Apr 7, 2020 at 12:14 PM Jan Kiszka <jan.kiszka@siemens.com> wrote:
> >>>>
> >>>> On 03.04.20 15:05, Vijai Kumar K wrote:
> >>>>> Collect the deb sources of the corresponding deb binaries cached
> >>>>> in DEBDIR as part of postprocess for those to be later included
> >>>>> into the final base-apt by do_cache.
> >>>>>
> >>>>> Signed-off-by: Vijai Kumar K <Vijaikumar_Kanagarajan@mentor.com>
> >>>>> ---
> >>>>> meta/classes/image.bbclass | 2 +-
> >>>>> meta/classes/rootfs.bbclass | 46 +++++++++++++++++++++++++++++++++++++
> >>>>> 2 files changed, 47 insertions(+), 1 deletion(-)
> >>>>>
> >>>>> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> >>>>> index 9fa58f8..1c7a527 100644
> >>>>> --- a/meta/classes/image.bbclass
> >>>>> +++ b/meta/classes/image.bbclass
> >>>>> @@ -60,7 +60,7 @@ image_do_mounts() {
> >>>>> }
> >>>>>
> >>>>> ROOTFSDIR = "${IMAGE_ROOTFS}"
> >>>>> -ROOTFS_FEATURES += "copy-package-cache clean-package-cache generate-manifest"
> >>>>> +ROOTFS_FEATURES += "copy-package-cache clean-package-cache generate-manifest cache-deb-src"
> >>>>> ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${IMAGE_INSTALL}"
> >>>>> ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
> >>>>>
> >>>>> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
> >>>>> index 8bb003d..7bfdfc9 100644
> >>>>> --- a/meta/classes/rootfs.bbclass
> >>>>> +++ b/meta/classes/rootfs.bbclass
> >>>>> @@ -201,6 +201,52 @@ rootfs_generate_manifest () {
> >>>>> ${ROOTFS_MANIFEST_DEPLOY_DIR}/"${PF}".manifest
> >>>>> }
> >>>>>
> >>>>> +ROOTFS_POSTPROCESS_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'cache-deb-src', 'cache_deb_src', '', d)}"
> >>>>> +cache_deb_src() {
> >>>>> + if [ "${ISAR_USE_CACHED_BASE_REPO}" = "1" ]; then
> >>>>> + return 0
> >>>>> + fi
> >>>>> +
> >>>>> + mkdir -p "${DEBSRCDIR}"/"${DISTRO}"
> >>>>> +
> >>>>> + sudo -s <<'EOSUDO'
> >>>>> + cp -L /etc/resolv.conf '${ROOTFSDIR}/etc'
> >>>>> + mkdir -p '${ROOTFSDIR}/deb-src'
> >>>>> + mountpoint -q '${ROOTFSDIR}/deb-src' || \
> >>>>> + mount --bind '${DEBSRCDIR}' '${ROOTFSDIR}/deb-src'
> >>>>> +EOSUDO
> >>>>> +
> >>>>> + sudo -E chroot ${ROOTFSDIR} /usr/bin/apt-get update
> >>>>> +
> >>>>> + find "${DEBDIR}"/"${DISTRO}" -name '*\.deb' | while read package; do
> >>>>> + local src="$( dpkg-deb --show --showformat '${Source}' "${package}" )"
> >>>>> + # If the binary package version and source package version are different, then the
> >>>>> + # source package version will be present inside "()" of the Source field.
> >>>>> + local version="$( echo "$src" | cut -sd "(" -f2 | cut -sd ")" -f1 )"
> >>>>> + if [ -z ${version} ]; then
> >>>>> + version="$( dpkg-deb --show --showformat '${Version}' "${package}" )"
> >>>>> + fi
> >>>>> + # Now strip any version information that might be available.
> >>>>> + src="$( echo "$src" | cut -d' ' -f1 )"
> >>>>> + # If there is no source field, then the source package has the same name as the
> >>>>> + # binary package.
> >>>>> + if [ -z "${src}" ];then
> >>>>> + src="$( dpkg-deb --show --showformat '${Package}' "${package}" )"
> >>>>> + fi
> >>>>> +
> >>>>> + sudo -E chroot --userspec=$( id -u ):$( id -g ) ${ROOTFSDIR} \
> >>>>> + sh -c 'mkdir -p "/deb-src/${1}/${2}" && cd "/deb-src/${1}/${2}" && \
> >>>>> + apt-get -y --download-only --only-source source "$2"="$3"' \
> >>>>> + download-src "${DISTRO}" "${src}" "${version}"
> >>>>
> >>>> How did you construct this apt-get command? I'm trying to match it
> >>>> against the man page of apt-get but there is no reference to "download-src".
> >>>
> >>> download-src is just the script name.
> >>> The shell script call is in below format to pass the args.
> >>>
> >>> sh -c '<commands>' <script name> <args>
> >>>
> >>
> >> Oh, I see. What's the benefit of this obfuscation? Or is there even any
> >> technical need?
> >
> > Yes. To run multiple commands from a single chroot call. We can either
> > invoke sh -c or have a script that contains the commands that could be
> > called.
> > We are using sh -c and hence the need for arguments to pass in the variables.
> > It could very well be multiple chroot calls or a script but this is
> > more clean I guess.
>
> It's not technically needed, giving the commands a name is optional. You
> could also unfold the arguments (which would make them more readable).
Ah. Just tried that. Looks like unfolding is just possible. The man
page says read from string, so the
variables part of the string are expanded. Its not like a subshell, if
I understand correctly now.
In that case unfolding does make sense.
Thanks,
Vijai Kumar K
>
> > Also, to note, this style was inherited from the base-apt series by Henning.
> >
>
> Well, if we keep that pattern, then please indent in a more
> reader-friendly way:
>
> sh -c 'mkdir -p "/deb-src/${1}/${2}" && cd "/deb-src/${1}/${2}" && \
> apt-get -y --download-only --only-source source "$2"="$3"' \
> download-src "${DISTRO}" "${src}" "${version}"
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE
> Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2020-04-07 9:08 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-06 14:06 [PATCH] rootfs: Make rootfs_postprocess_finalize the last step Vijai Kumar K
2020-02-06 17:21 ` Jan Kiszka
2020-02-06 17:47 ` vijai kumar
2020-02-06 18:09 ` Jan Kiszka
2020-02-06 18:28 ` vijai kumar
2020-02-10 5:37 ` [PATCH v2] rootfs: Make rootfs finalize a separate task Vijai Kumar K
2020-02-11 11:38 ` Henning Schild
2020-02-11 14:14 ` vijai kumar
2020-02-11 15:20 ` Henning Schild
2020-02-11 18:07 ` Jan Kiszka
2020-02-13 10:08 ` [PATCH v2 1/2] " Vijai Kumar K
2020-02-13 10:08 ` [PATCH v2 2/2] meta: cache deb srcs as part of postprocessing Vijai Kumar K
2020-02-14 5:48 ` [PATCH v3 1/2] rootfs: Make rootfs finalize a separate task Vijai Kumar K
2020-02-14 5:48 ` [PATCH v3 2/2] meta: cache deb srcs as part of postprocessing Vijai Kumar K
2020-02-14 8:19 ` Jan Kiszka
2020-02-14 8:41 ` vijai kumar
2020-02-14 8:45 ` vijai kumar
2020-03-11 7:16 ` [PATCH v3 1/2] rootfs: Make rootfs finalize a separate task vijai kumar
2020-04-01 7:25 ` vijai kumar
2020-04-01 8:19 ` Henning Schild
2020-04-01 10:29 ` vijai kumar
2020-04-03 6:50 ` vijai kumar
2020-04-03 8:30 ` Baurzhan Ismagulov
2020-04-03 8:50 ` vijai kumar
2020-04-03 13:05 ` [PATCH v4 " Vijai Kumar K
2020-04-03 13:05 ` [PATCH v4 2/2] meta: cache deb srcs as part of postprocessing Vijai Kumar K
2020-04-07 6:44 ` Jan Kiszka
2020-04-07 6:58 ` vijai kumar
2020-04-07 7:04 ` Jan Kiszka
2020-04-07 7:59 ` vijai kumar
2020-04-07 8:38 ` Jan Kiszka
2020-04-07 9:08 ` vijai kumar [this message]
2020-04-07 9:40 ` vijai kumar
2020-04-08 8:13 ` Baurzhan Ismagulov
2020-04-08 10:04 ` vijai kumar
2020-04-08 13:32 ` vijai kumar
2020-04-15 6:44 ` vijai kumar
2020-04-15 7:28 ` Jan Kiszka
2020-04-15 13:20 ` vijai kumar
2020-04-15 13:44 ` Jan Kiszka
2020-04-08 10:04 ` Henning Schild
2020-04-08 10:37 ` vijai kumar
2020-04-08 12:30 ` Henning Schild
2020-04-15 12:29 ` vijai kumar
2020-04-15 18:19 ` Henning Schild
2020-04-16 15:57 ` vijai kumar
2020-04-16 17:29 ` Henning Schild
2020-04-07 6:19 ` [PATCH v3 1/2] rootfs: Make rootfs finalize a separate task vijai kumar
2020-04-07 6:45 ` Jan Kiszka
2020-04-07 6:53 ` vijai kumar
2020-04-07 7:12 ` Baurzhan Ismagulov
2020-04-07 8:04 ` vijai kumar
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='CALLGG_JKCGnADh_XqpnwuAyXuMzZ3U_j1URugwh=zc+PLT_dLQ@mail.gmail.com' \
--to=vijaikumar.kanagarajan@gmail.com \
--cc=Vijaikumar_Kanagarajan@mentor.com \
--cc=isar-users@googlegroups.com \
--cc=jan.kiszka@siemens.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox