From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 1/1] manual/faq: add section about why no binary packages
Date: Tue, 18 Feb 2014 21:37:38 +0100 [thread overview]
Message-ID: <20140218213738.08f54542@skate> (raw)
In-Reply-To: <430595ea81c22aef392d3aec25cc93ef9af7bd47.1392659250.git.yann.morin.1998@free.fr>
Dear Yann E. MORIN,
On Mon, 17 Feb 2014 18:52:12 +0100, Yann E. MORIN wrote:
> +In general, most people think it is easy to do: just track which package
> +installed what and remove it when the package is unselected. However, it
> +is much more complicated than that:
> +
> + * It is not only about the +target/+ directory, but also the sysroot in
"It is not only" is a bit vague. Proposal:
* The problem is not limited to files installed in the +target/+
directory: the toolchain sysroot in +host/usr/<tuple>/sysroot+ as
well as host tools installed in +host/+ should also be tracked.
> + +host/usr/<tuple>/sysroot+ and the +host/+ directory itself. All files
> + installed in those directories by various packages must be tracked.
> +
> + * When a package is removed, it is not sufficient to remove just the
> + files it installed.
When a package is unselected from the configuration, it is not
sufficient to...
> One must also remove all its reverse
> + dependencies (i.e packages relying on it) and rebuild all those
> + packages. For example, package A depends optionally on the OpenSSL
> + library. Both are selected, and Buildroot is built. Package A is
> + built with crypto support using OpenSSL. Later on, OpenSSL gets
> + unselected from the configuration, but package A remains (since
> + OpenSSL is an optional dependency, this is possible). If you just
> + remove the OpenSSL files, then the files installed by package A are
> + broken: they use a library that is no longer present on the
> + target. Technically, it is possible to do this (the prototype that
> + Lionel Landwerlin and Thomas Petazzoni have worked on started to do
> + this), but it is difficult and adds a fair bit of complexity.
As Samuel suggested, I don't think mentioning a prototype or even the
names of people who did the prototype belong to an official
documentation.
> + * In addition to the previous problem, there is the case where the
> + optional dependency is not even known to Buildroot. For example,
> + package A in version 1.0 never used OpenSSL, but in version 2.0 it
> + automatically uses OpenSSL if available. If the Buildroot .mk file
> + hasn't been updated to take this into account, then package A will
> + not be part of the reverse dependencies of OpenSSL and will not be
> + removed and rebuilt when OpenSSL is removed. For sure, the .mk file
> + of package A should be fixed to mention this optional dependency,
> + but in the mean time, you can have non-reproducible behaviors.
> +
> + * The whole idea is also to allow changes in the menuconfig to be
> + applied on the output directory without having to rebuild
> + everything from scratch. However, this is very difficult to achieve
> + in a reliable way: what happens when the suboptions of a package
> + are changed (we would have to detect this, and rebuild the package
> + from scratch and potentially all its reverse dependencies), what
> + happens if toolchain options are changed, etc. At the moment, what
> + Buildroot does is clear and simple so its behaviour is very
> + reliable and it is easy to support users. If we start telling users
> + that the configuration changes done in menuconfig are applied after
> + the next make, then it has to work correctly and properly in all
> + situations, and not have some bizarre corner cases. We fear bug
> + reports like "I have enabled package A, B and C, then ran make,
> + then disabled package C and enabled package D and ran make, then
> + re-enabled package C and enabled package E and then there is a
> + build failure". Or worse "I did some configuration, then built,
> + then did some changes, built, some more changes, built, some more
> + changes, built, and now it fails, but I don't remember all the
> + changes I did and in which order". This will be impossible to
> + support.
> +
> +For all these reasons, the conclusion is that adding tracking of
> +installed files to remove them when the package is unselected, or to
> +generate a repository of binary packages, is something that is very
> +hard to achieve reliably and will add a lot of complexity.
> +
> +On this matter, the Buildroot developpers make these position statements:
> +
> + * Buildroot strives at making it easy to generate a root filesystem
> + (hence the name, by the way). That is what we want to make Buildroot
> + good at: building root filesystems.
> +
> + * Buildroot is not meant to be a distribution (or rather, a distribution
> + generator). It is the opinion of most Buildroot developers that this
> + is not a goal we should pursue. We believe that there are other tools
> + better suited to generate a distro than Buildroot is. For example,
> + http://openembedded.org/[Open Embedded], or https://openwrt.org/[openWRT],
> + are such tools.
> +
> + * We prefer to push Buildroot in a direction that makes it easy (or even
> + easier) to generate complete root filesystems. This is what makes
> + Buildroot stands out in the crowd (among other things, of course!).
Additional item (probably the most important one) :
* We believe that for most embedded Linux systems, binary packages are
not necessary, and potentially harmful. When binary packages are
used, it means that the system can be partially upgraded, which
creates an enormous number of possible combinations of package
versions that should be tested before doing the upgrade on the
embedded device. On the other hand, by doing complete system
upgrades by upgrading the entire root filesystem image at once, you
guarantee that the image you deploy to you embedded system is really
the one you have tested and validated.
Best regards,
Thomas
--
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
next prev parent reply other threads:[~2014-02-18 20:37 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-17 17:52 [Buildroot] [PATCH 0/1 v2] FAQ entry about why no binary packages Yann E. MORIN
2014-02-17 17:52 ` [Buildroot] [PATCH 1/1] manual/faq: add section " Yann E. MORIN
2014-02-17 20:21 ` Danomi Manchego
2014-02-17 21:37 ` Yann E. MORIN
2014-02-17 22:48 ` Danomi Manchego
2014-02-17 23:01 ` Arnout Vandecappelle
2014-02-18 20:14 ` Samuel Martin
2014-02-18 20:37 ` Thomas Petazzoni [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-02-20 17:01 [Buildroot] [PATCH 0/1 v3] FAQ entry " Yann E. MORIN
2014-02-20 17:01 ` [Buildroot] [PATCH 1/1] manual/faq: add section " Yann E. MORIN
2014-02-20 21:19 ` Peter Korsgaard
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=20140218213738.08f54542@skate \
--to=thomas.petazzoni@free-electrons.com \
--cc=buildroot@busybox.net \
/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