From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 00/24 v2] system: properly handle systemd as init system (branch yem/systemd-skeleton)
Date: Thu, 7 Jul 2016 00:34:31 +0200 [thread overview]
Message-ID: <20160706223431.GG3763@free.fr> (raw)
In-Reply-To: <20160706234940.6a61370f@free-electrons.com>
Thomas, All,
On 2016-07-06 23:49 +0200, Thomas Petazzoni spake thusly:
> On Wed, 22 Jun 2016 21:07:41 +0200, Yann E. MORIN wrote:
> > system: sysvinit only selects busybox-show-others if busybox is enabled
> We decided collectively to not merge this, as other packages would have
> to be changed, and the benefit is not very big.
Yes, I replaced it with a patch that adds a comment for this variable.
> > system: provide no default for custom skeleton path
> Generally agreed, but I'm waiting for a respin since there were some
> comments.
> > system: move the rootfs skeleton choice
> Looks good as well, waiting for the respin (it depends on the previous
> patch).
> > system: do not handle network settings for custom skeleton
> Ditto.
> > system: do not set hostname and issue for custom skeleton
> Also looks good, but waiting for the respin, since it depends on the
> previous patches.
Yep, I'll respin shortly, it's almost ready.
> > core/pkg-generic: allow packages to declare target-finalize hooks
> > packages: use the <PKG>_TARGET_FINALIZE_HOOKS
> Both merged. For the latter, a follow-up patch is needed to also use
> the new mechanism in the toolchain package.
Already done here, will be part of the respin.
> > package/skeleton: split into sysv and custom skeleton
> > package/skeleton: make it a virtual package
> > package/skeleton-sysv: split into skeleton-common
> > system: split skeleton
> > package/skeleton-systemd: new package
> > system/systemd: needs timezone
>
> OK, so this is the first big thing that remains: splitting the skeleton
> into multiple parts. If I summarize your solution, it consists in
> splitting the skeleton in several parts:
>
> * 'skeleton', which becomes a virtual package that depends on the
> actual skeleton.
>
> * 'skeleton-custom', which is used when a custom skeleton is selected,
> and does pretty much nothing except copy the custom skeleton
>
> * 'skeleton-common', which contains the common parts of the systemd
> and sysv skeleton
>
> * 'skeleton-sysv', which depends on skeleton-common and contains the
> sysv specific parts of the skeleton. In practice, this only contains
> the /var sub-directories, /etc/fstab, the /etc/resolv.conf symbolic
> link (which is the same in systemd, so it's not a real difference),
> and the /dev sub-directories.
>
> * 'skeleton-systemd', which depends on skeleton-common, but does not
> copy itself some skeleton, as it instead just creates a bunch of
> directories and files. In practice, the only thing useful that it
> does is create a /etc/fstab file.
>
> In addition, a 'skeleton-net' part is created, which is not a package,
> but just a placeholder with the ifupdown configuration, used by both
> the sysv init case, and the systemd-without-networkd case.
>
> At the very least, I believe:
>
> - the skeleton-net thing should be moved into a ifupdown-config package
>
> - the skeleton-systemd should be simplified to not create directories
> that already exist in skeleton-common
>
> - the /etc/resolv.conf file should be kept in the common skeleton
>
> Once this is done, I continue to wonder if this multiple skeleton
> mechanism is really needed:
>
> - the skeleton-systemd package does essentially nothing, except
> creating the fstab, which the systemd package could do.
>
> - the skeleton-sysv package also doesn't do much, and it could be done
> in the existing initscripts package.
>
> Really, the only thing that bothers me is that "initscripts" isn't a
> very good name for a package that also installs other things than init
> scripts. Perhaps naming it "sysv-base" or something would be clearer.
>
> But maybe before taking a decision on this we simply need to see a
> respin that does the first cleanups suggested above, so that we can
> have a clearer vision of where things are going. The idea of skeleton
> as a virtual package is also not bad, especially if we can get rid of
> the weird skeleton-net situation, and really have
> skeleton-{common,sysv,custom,} be real packages.
I'm not going to do any change right now, to let the dust settle.
Once others have commented one way or another, I'll do the requested
changes.
> > fs: add pre- and post-command hooks
> > system: make systemd work on a read-only rootfs
> > system: allow DHCP interface with systemd-networkd
>
> This is the second big thing: allow a systemd rootfs to be read-only.
> The crux of the problem is that when /var is read-only, systemd
> automatically mounts a tmpfs on /var, which defeats our traditional
Nit: systemd *expects* /var to be a tmpfs (or at least that it be
writable). It does not do the mount; we do it explicitly in the fstab.
> mechanism to handle read-only rootfs.
>
> The solution that Yann has designed consists in having /var be a
> symlink to /usr/share/factory in the systemd skeleton. This way, during
> the Buildroot build, all the packages that create stuff in /var end up
> installing their stuff in /usr/share/factory. And then, thanks to the
> pre/post hooks in the FS infrastructure, the code creates some tmpfiles
> description for systemd for each file in /usr/share/factory and
> replaces /var with a directory. This way, when systemd boots, it mounts
> a tmpfs in /var and copies all the files from /usr/share/factory
> to /var.
>
> I am a bit annoyed by the complexity of this, and the "black magic"
> involved, but on the other hand, I don't really see a better solution.
>
> Another thing that bothers me is that then the solution to handle the
> read-only rootfs problem then becomes radically different between the
> sysv case and the systemd case. Maybe this is expected since the init
> systems are so different.
And now that I had time to think about it, there is even another issue
that I forgot to talk about: this relies on whether the user asked that
the rootfs be remounted R/W at boot (BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW).
If that is that case, we currently still offer a way to build
filesystems that are inherently R/O (cramfs, iso9660, squashfs...) I
would suggest that we hide those filesystems in that case.
Yet, when the option is not selected does not mean that we should not
allow a R/W filesystem either (the user may well want to boot a R/O ext4
but remount it for local upgrades, like a GPS database for example).
But surely, when the users asks / to be remounte R/W at boot, we *know*
we can't use a R/O filesystem.
> But on the other hand, our existing mechanism to handle a read-only
> rootfs in sysv land is not great: we create /var/log as a symlink
> to /tmp, and /tmp is mounted as a tmpfs. This works fines if
> applications just create files in /var/log. But if an application at
> build time create a directory in /var/log, such as /var/log/daemond, it
> might expect to find it at runtime, which will not be the case.
> The /usr/share/factory solution solves this problem.
>
> So, should we move to this /usr/share/factory solution also for sysv
> init ?
I'm OK with that, except we'd have to provide that mechanism ourselves
fot sysv init.
> Yann, what about:
>
> (1) Getting a series that has just the respin of the preparatory
> patches ;
Yep.
> (2) Separate the "skeleton re-org" series from the "systemd read-only
> rootfs" series, so that we can progress on those topics one by
> one ?
Well, "systemd on read-only rootfs" anyway depends on "systemd
skeleton-or-whatever-we're-gonna-do". ;-) But yes, I can do that.
Thanks for the great summary. I'll copy it for the next cover-letter I
need to send for this series. ;-)
Regards,
Yann E. MORIN.
--
.-----------------.--------------------.------------------.--------------------.
| Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ |
| +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. |
'------------------------------^-------^------------------^--------------------'
next prev parent reply other threads:[~2016-07-06 22:34 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-22 19:07 [Buildroot] [PATCH 00/24 v2] system: properly handle systemd as init system (branch yem/systemd-skeleton) Yann E. MORIN
2016-06-22 19:07 ` [Buildroot] [PATCH 01/24 v2] package/skeleton: remove useless .empty file Yann E. MORIN
2016-07-04 7:28 ` Arnout Vandecappelle
2016-07-05 13:57 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 02/24 v2] system: sysvinit only selects busybox-show-others if busybox is enabled Yann E. MORIN
2016-07-03 7:53 ` Romain Naour
2016-07-04 16:49 ` Yann E. MORIN
2016-07-05 13:59 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 03/24 v2] package/skeleton: respect variables namespace Yann E. MORIN
2016-07-03 8:15 ` Romain Naour
2016-07-05 13:28 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 04/24 v2] system/skeleton: update etc/mtab with a more sensible link Yann E. MORIN
2016-07-03 8:28 ` Romain Naour
2016-07-04 7:27 ` Arnout Vandecappelle
2016-07-05 13:28 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 05/24 v2] system: systemd only really supports a R/W rootfs Yann E. MORIN
2016-07-03 8:31 ` Romain Naour
2016-07-05 13:29 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 06/24 v2] package/systemd: disabling tty1 getty is a post-install hook Yann E. MORIN
2016-07-03 8:37 ` Romain Naour
2016-07-04 17:13 ` Yann E. MORIN
2016-07-05 13:41 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 07/24 v2] system: provide no default for custom skeleton path Yann E. MORIN
2016-07-03 8:42 ` Romain Naour
2016-07-04 7:30 ` Arnout Vandecappelle
2016-07-04 17:21 ` Yann E. MORIN
2016-07-05 13:59 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 08/24 v2] system: move the rootfs skeleton choice Yann E. MORIN
2016-07-03 8:50 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 09/24 v2] system: do not handle network settings for custom skeleton Yann E. MORIN
2016-07-03 9:00 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 10/24 v2] package/perl: use dummy hostname Yann E. MORIN
2016-07-03 9:05 ` Romain Naour
2016-07-05 13:59 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 11/24 v2] system: do not set hostname and issue for custom skeleton Yann E. MORIN
2016-07-03 9:11 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 12/24 v2] core/pkg-generic: add variable to skip skeleton dependency Yann E. MORIN
2016-07-03 9:30 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 13/24 v2] package/skeleton: add macro to rsync skeleton directory Yann E. MORIN
2016-07-03 9:39 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 14/24 v2] core/pkg-generic: allow packages to declare target-finalize hooks Yann E. MORIN
2016-07-03 9:53 ` Romain Naour
2016-07-05 14:00 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 15/24 v2] packages: use the <PKG>_TARGET_FINALIZE_HOOKS Yann E. MORIN
2016-07-03 10:02 ` Romain Naour
2016-07-04 18:05 ` Yann E. MORIN
2016-07-05 14:01 ` Thomas Petazzoni
2016-06-22 19:07 ` [Buildroot] [PATCH 16/24 v2] package/skeleton: split into sysv and custom skeleton Yann E. MORIN
2016-07-03 10:27 ` Romain Naour
2016-07-05 7:26 ` Yann E. MORIN
2016-06-22 19:07 ` [Buildroot] [PATCH 17/24 v2] package/skeleton: make it a virtual package Yann E. MORIN
2016-07-03 10:47 ` Romain Naour
2016-07-05 7:45 ` Yann E. MORIN
2016-06-22 19:07 ` [Buildroot] [PATCH 18/24 v2] package/skeleton-sysv: split into skeleton-common Yann E. MORIN
2016-07-03 11:05 ` Romain Naour
2016-07-05 7:49 ` Yann E. MORIN
2016-06-22 19:07 ` [Buildroot] [PATCH 19/24 v2] system: split skeleton Yann E. MORIN
2016-07-03 11:22 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 20/24 v2] package/skeleton-systemd: new package Yann E. MORIN
2016-07-03 11:34 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 21/24 v2] system/systemd: needs timezone Yann E. MORIN
2016-07-03 11:41 ` Romain Naour
2016-07-05 8:03 ` Yann E. MORIN
2016-06-22 19:07 ` [Buildroot] [PATCH 22/24 v2] fs: add pre- and post-command hooks Yann E. MORIN
2016-07-03 11:49 ` Romain Naour
2016-06-22 19:07 ` [Buildroot] [PATCH 23/24 v2] system: make systemd work on a read-only rootfs Yann E. MORIN
2016-07-03 12:54 ` Romain Naour
2016-07-05 8:12 ` Yann E. MORIN
2016-06-22 19:07 ` [Buildroot] [PATCH 24/24 v2] system: allow DHCP interface with systemd-networkd Yann E. MORIN
2016-07-03 12:59 ` Romain Naour
2016-07-06 21:49 ` [Buildroot] [PATCH 00/24 v2] system: properly handle systemd as init system (branch yem/systemd-skeleton) Thomas Petazzoni
2016-07-06 22:34 ` Yann E. MORIN [this message]
2016-07-17 8:49 ` Yann E. MORIN
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=20160706223431.GG3763@free.fr \
--to=yann.morin.1998@free.fr \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.