public inbox for isar-users@googlegroups.com
 help / color / mirror / Atom feed
From: Uladzimir Bely <ubely@ilbers.de>
To: "Moessbauer, Felix" <felix.moessbauer@siemens.com>
Cc: "isar-users@googlegroups.com" <isar-users@googlegroups.com>
Subject: Re: [PATCH v2 0/3] Improving apt cache
Date: Fri, 20 Jan 2023 10:01:24 +0300	[thread overview]
Message-ID: <1889300.7Z3S40VBb9@hp> (raw)
In-Reply-To: <d28cc40f4400ad146c1568c89f87061006c83374.camel@siemens.com>

In mail from пятница, 20 января 2023 г. 08:08:03 +03 user Moessbauer, Felix 
wrote:
> On Fri, 2023-01-20 at 07:44 +0300, Uladzimir Bely wrote:
> 
> > In mail from четверг, 19 января 2023 г. 17:52:37 +03 user Roberto A.
> > Foglietta 
> > wrote:
> > 
> > > On Thu, 19 Jan 2023 at 08:36, Uladzimir Bely <ubely@ilbers.de>
> > > wrote:
> > > 
> > > > I got time to get back to this patches and checked this moment.
> > > > And it
> > > > really
> > > > does not work as I expected.
> > > > 
> > > > Original patch includes the following:
> > > > 
> > > > -        --chroot-setup-commands="cp -n --no-preserve=owner
> > > > ${ext_deb_dir}/
> > > > *.deb -t ${deb_dir}/ || :" \
> > > > +        --chroot-setup-commands="ln -Pf ${ext_deb_dir}/*.deb -t
> > > > ${deb_dir}/
> > > > 2>/dev/null || :" \
> > > > 
> > > > This results to to failing "ReproTest" in CI with the following
> > > > error (for
> > > > libhello, for example):
> > > > 
> > > > sbuild-build-depends-dose3-dummy:armhf : Depends: dose-
> > > > distcheck:amd64 but
> > > > it
> > > > is not installable
> > > > E: Unable to correct problems, you have held broken packages.
> > > > 
> > > > To debug it, I removed `2>/dev/null` and found, that hardlinks
> > > > simply
> > > > don't
> > > > work and the following errors are now seen earlier:
> > > > 
> > > > ln: failed to create hard link
> > > > '/var/cache/apt/archives/adduser_3.118_all.deb'
> > > > => '/home/builder/libhello/rootfs/var/cache/apt/archives/
> > > > adduser_3.118_all.deb': Invalid cross-device link
> > > > ... #tons of similar errors...
> > > > ln: failed to create hard link '/var/cache/apt/archives/
> > > > zlib1g_1%3a1.2.11.dfsg-2+deb11u2_mipsel.deb' =>
> > > > '/home/builder/libhello/
> > > > rootfs/var/cache/apt/archives/zlib1g_1%3a1.2.11.dfsg-
> > > > 2+deb11u2_mipsel.deb'
> > > > 
> > > > :
> > > > 
> > > > 
> > > > Invalid cross-device link
> > > > 
> > > > I: Finished running 'ln -Pf
> > > > /home/builder/libhello/rootfs/var/cache/apt/
> > > > archives/*.deb -t /var/cache/apt/archives/ || :'.
> > > > 
> > > > So, it works for network builds (when missing packages always can
> > > > be
> > > > downloaded by apt), but it fails for local builds from apt-cache
> > > > (when, at
> > > > first network build, sbuild dependencies are simply not exported
> > > > to
> > > > download
> > > > directory due to non-working hardlinks, plus with hidden stderr)
> > > 
> > > 
> > > Hi, first of all I do not fully understand why we use ln -P instead
> > > of ln
> > > -Pf in the exporting debs.
> > > 
> > >         --finished-build-commands="ln -P ${deb_dir}/*.deb -t
> > > ${ext_deb_dir}/ 2>/dev/null || :" \
> > > 
> > > This code's goal is to build a deb that should be exported
> > > otherwise we are
> > > continuing using the old package. It seems that breaks things but -
> > > again -
> > > I did fully not understand what and why but simply accepted the
> > > suggestion.
> > > Now, I have reverted back to ln -Pf.
> > > 
> > > Second, those lines are supposed to fail - and obviously fail in
> > > both
> > > directions: import and export - but the following
> > > 
> > > (a) if export fail we will not have the custom packages but we have
> > > them
> > > (b) removing that lines and the code will always fail
> > > 
> > > These mean that ln -Pf complains to fail but make a difference and
> > > make the
> > > difference that we want. However, I might not have understood the
> > > case in
> > > which it fails completely so:
> > > 
> > > mv build/downloads .
> > > rm -rf build
> > > ./build.sh basic-os (DONE)
> > > ./clean.sh isar
> > > ./build.sh (DONE)
> > > ./clean.sh all
> > > ./build.sh (DONE)
> > > 
> > > remove that two lines about ln -Pf that are supposed to do nothing
> > > than fail
> > > 
> > > ./clean.sh all
> > > ./build.sh (DONE with the same building time)
> > > 
> > > rm -rf build/downloads
> > > mv downloads build
> > > 
> > > ./clean.sh isar
> > > ./build.sh complete (FAIL)
> > > 
> > > put back those two command lines with ln -Pf and
> > > 
> > > ./clean.sh all
> > > ./build.sh (DONE)
> > > 
> > > I do not say you are wrong and I see ln -Pf complains on stderr but
> > > nothing
> > > that tin my private fork cannot be solved using a stderr
> > > redirection to
> > > /dev/null
> > > 
> > > However there are some other ways to do this thing:
> > > 
> > > 1. sbuild uses schroot by default, using chroot instead
> > > 2. keep the default in schroot, elsewhere it uses upper folder that
> > > can be
> > > populated in advance
> > > 
> > > I did not make any changes because I did not identified the issue.
> > > 
> > > Best regards, R-
> > 
> > 
> > I'll try to make things clear. Isar supports local builds from 'base-
> > apt' repo 
> > with.
> > 
> > First build user does as usual.
> > 
> > Second build is done with the following changes (at least):
> > 
> > ISAR_USE_CACHED_BASE_REPO = "1"
> > BB_NO_NETWORK = "1"
> > 
> > In this case every .deb we downloaded from Debian mirrors at first
> > build goes 
> > to local 'base-apt' and second build use it, but not remote mirrors.
> > 
> > That's the reason of using this "cp/ln magic" inside of sbuild. While
> > building 
> > some package, multipe dependencies might be downloaded inside of
> > sbuild. And 
> > we need a way to extract them from "internal" apt-cache in sbuild
> > schroot and 
> > put to the package workdir, where deb-dl-dir export will pass them to
> > DL_DIR 
> > later.
> > 
> > When we replace copying to hardlinks, that actually don't work due to
> > different filesystems, we come to the situation, when multiple debian
> > packages 
> > (dependencies of what we are building or some packages that sbuild
> > requires 
> > itself) are not present in DL_DIR. So, second "cached" build from
> > local repo 
> > simply fails.
> > 
> > I see the following possible solutions that allows to save space.
> > 1. Since hardlinks don't work, try to use symlinks.
> 
> 
> If that works, it clearly is the simplest solution.
> 

Yes, approach with symlinks inside sbuild chroot seems to be working, so I'm 
going to use it in patchset v3.

> 
> > 2. Don't use import with sbuild at all, but only export. But this has
> > a 
> > drawback, when all packages we build with sbuild might download the
> > similar 
> > dependencies in parallel.
> 
> 
> A third solution might be to mount the cache into the schroot, similar
> to how we handle the sstate cache today.
> 
> Anyways, I would appreciate if we could merge this series even if it
> still does not fully solve the quadratic behavior. It is very valuable
> and "good enough" even for my biggest layers.
> 
> Felix
> 
> 
> > 
> > 
> 
> 





  reply	other threads:[~2023-01-20  7:00 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-06  6:48 Uladzimir Bely
2023-01-06  6:48 ` [PATCH v2 1/3] Clean apt cache from debootstrapped rootfs dirs Uladzimir Bely
2023-01-06  6:48 ` [PATCH v2 2/3] Use hardlinks in deb-dl-dir functions Uladzimir Bely
2023-01-06  6:48 ` [PATCH v2 3/3] Changes for a faster build using less disk space Uladzimir Bely
2023-01-06 15:58   ` Henning Schild
2023-01-06 17:38     ` Uladzimir Bely
2023-01-06 17:52       ` Roberto A. Foglietta
2023-01-06 18:11       ` Henning Schild
2023-01-09  6:32 ` [PATCH v2 0/3] Improving apt cache Moessbauer, Felix
2023-01-09  7:39   ` Uladzimir Bely
2023-01-19  7:36     ` Uladzimir Bely
2023-01-19 14:52       ` Roberto A. Foglietta
2023-01-19 16:30         ` Roberto A. Foglietta
2023-01-20  4:44         ` Uladzimir Bely
2023-01-20  5:08           ` Moessbauer, Felix
2023-01-20  7:01             ` Uladzimir Bely [this message]
2023-01-20  7:12               ` Roberto A. Foglietta
2023-01-20  7:23                 ` Uladzimir Bely

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=1889300.7Z3S40VBb9@hp \
    --to=ubely@ilbers.de \
    --cc=felix.moessbauer@siemens.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