From: Christian Storm <christian.storm@siemens.com>
To: isar-users@googlegroups.com
Subject: Re: Reproducibility of builds
Date: Tue, 14 Nov 2017 17:04:27 +0100 [thread overview]
Message-ID: <20171114160427.xzkzqwc322ih5265@MD1KR9XC.ww002.siemens.net> (raw)
In-Reply-To: <ec5a4a95-1135-1a1f-90b4-55e7106b8491@siemens.com>
Hi,
since I'm very interested in this feature, I'd like to resume this
discussion and to eventually come to an agreed upon proposal on how
to implement it. So, without further ado, here are my thoughts on
the subject:
Regardless of the concrete technical implementation, I guess we can
agree on the need for a local cache/repository/store in which the Debian
binary packages plus their sources have to be stored since one may not
rely on the availability of those files online for eternity.
These files in this cache/repository/store are the union of the Debian
binary packages installed in the resulting image plus their sources as
well as those installed in the buildchroot plus their sources.
The latter is required to be able to rebuild Debian packages built from
source with the same compiler version, libraries, -dev packages, etc. pp.
Having the cache/repository/store at hand, there should be a mechanism
to prime Isar with it, i.e., Isar should only and exclusively use Debian
binary packages and sources from this cache/repository/store.
This is again, irrespective of the technical implementation, be it via
a repository cache or other means like git, a proxy server or whatsoever.
Granted, if one changes, e.g, IMAGE_INSTALL_append, the build fails but
does so rightfully as the set of packages is modified, resulting in a
new version/epoch (=set of Debian packages plus their sources). So,
there should be a convenient "interface" provided by Isar to maintain
the cache/repository/store. For example, one may want to have different
versions/epochs that may correspond to particular versions (git sha) of
the Isar layer. Or one wants to later add a Debian package plus its
source (which is automatically fetched), resulting in a new
version/epoch etc.
The remaining question is how to fill the cache/repository/store. In
order to have a consistent version/epoch (=set of Debian packages plus
their sources), there should not be duplicate packages in it, i.e., the
same Debian package but with different versions.
This could currently happen because there is a "window of vulnerability":
multistrap is run twice, once for isar-image-base.bb and once for
buildchroot.bb. In between those two runs, the Debian mirror used could
get updated, resulting in a different version of the Debian package
being installed in buildchroot than in the resulting image.
This is an inherent problem of relying on the Debian way of distributing
packages as one cannot a priori control what particular package versions
one gets: In contrast to, e.g., Yocto where the particular package
versions are specified in the recipes, this does not hold for Isar as
the particular package versions are defined by the Debian mirror used,
hence, one gets "injected" the particular package versions.
So, what's required to reduce the "window of vulnerability" and to have
a consistent cache/repository/store for a particular version/epoch is to
make a snapshot-type download of the required packages. For this, of
course, one needs to know the concrete set of packages. This list could
be delivered by a "package trace" Isar run since not only multistrap
does install packages but sprinkled apt-get install commands do as well.
Thereafter, knowing the list, the snapshot-type download can happen,
hopefully resulting in a consistent cache/repository/store.
So, what do you think?
Besten Gru�,
Christian
--
Dr. Christian Storm
Siemens AG, Corporate Technology, CT RDA ITP SES-DE
Otto-Hahn-Ring 6, 81739 M�nchen, Germany
next prev parent reply other threads:[~2017-11-14 16:05 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-03 8:13 Claudius Heine
2017-08-21 11:23 ` Claudius Heine
2017-08-28 11:27 ` Claudius Heine
2017-09-05 10:05 ` Alexander Smirnov
2017-09-05 10:38 ` Jan Kiszka
2017-09-05 11:50 ` Alexander Smirnov
2017-09-05 11:54 ` Claudius Heine
2017-09-06 13:39 ` Claudius Heine
2017-09-18 15:05 ` Baurzhan Ismagulov
2017-09-19 8:55 ` Claudius Heine
2017-11-14 16:04 ` Christian Storm [this message]
2017-11-14 16:22 ` Claudius Heine
2017-11-17 16:53 ` [ext] Christian Storm
2017-11-17 18:14 ` Claudius Heine
2017-11-20 8:33 ` [ext] Christian Storm
2017-11-20 9:16 ` Claudius Heine
2017-11-29 18:53 ` Alexander Smirnov
2017-11-29 19:02 ` Jan Kiszka
2017-11-30 8:04 ` Alexander Smirnov
2017-11-30 14:48 ` Jan Kiszka
2017-11-30 9:31 ` Claudius Heine
2017-12-06 16:21 ` Alexander Smirnov
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=20171114160427.xzkzqwc322ih5265@MD1KR9XC.ww002.siemens.net \
--to=christian.storm@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