From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 18/20] fs: add pre- and post-command hooks
Date: Mon, 24 Jul 2017 18:01:23 +0200 [thread overview]
Message-ID: <20170724160123.GE2918@scaer> (raw)
In-Reply-To: <d549596f-af21-640b-4196-fcc96557c14c@mind.be>
On 2017-07-23 23:51 +0200, Arnout Vandecappelle spake thusly:
>
>
> On 23-07-17 16:17, Yann E. MORIN wrote:
> > Arnout, All,
> >
> > On 2017-07-23 15:42 +0200, Arnout Vandecappelle spake thusly:
> [snip]
> >> $$(call PRINTF,$$(ROOTFS_SKELETON_PRE_CMD_HOOK)) >> $$(FAKEROOT_SCRIPT)
> >>
> >> You may want to change the variable name, obviously.
> >
> > And it also means that the declaration of ROOTFS_SKELETON_PRE_CMD_HOOK
> > be conditional in the skeleton-systemd package, like:
> >
> > ifeq ($(BR2_PACKAGE_SKELETON_SYSTEMD),y)
> > define ROOTFS_SKELETON_PRE_CMD_HOOK
> > blabla
> > endef
> > endif
> >
> > But I do not like these kind of constructs in the packages themselves,
> > because they are too easy to miss...
>
> I'm not sure if it's that hard to miss. You just grep for
> ROOTFS_SKELETON_PRE_CMD_HOOK to get the context.
>
>
> > Alternatively, I would rather move that logic into the filesystem code
> > itself, because after all that is its responsibility, and guard its use
> > with something like (with a proper variable name, of course):
> >
> > ifeq ($(ROOTFS_VAR_FACTORY_BLABLA),YES)
> > blabla...
> > endif
> >
> > And then have the packages that need it just set:
> > ROOTFS_VAR_FACTORY_BLABLA = YES
>
> I'm not so sure I like that better...
I'm not sure either, but I'll further explain below, so you get a better
picture than the blurred one I posted yesterday...
> > All that, because Thomas already suggested (last year in Toulouse) that
> > we could re-use the same factory mechanism for the other init systems as
> > well (on read-only rootfs). In this case, the code would then be guarded
> > by an test against an empty $(BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW),
> > because then there would be no relation to an init system at all.
>
> You completely lost me here.
Ah...
So, the factory is something that is indeed specific to systemd.
However, it allows for a systemd-based rootfs to start with a known
first-boot state, that is put in place early, before
applications/services need them.
IWith this patch, it means that every boot if a first-boot, but at least
the content of /var is what packages isntalled, and they know it is
writable.
But with the other init systems (busybox, syysvinit) we do not have a
factory. Instead /var contains only symlinks to /tmp, which is clean on
boot. So packages won't find what they need in /var, either:
- it is redirected to /tmp, in which case it is empty, or
- it is not redirected to /tmp, and it is read-only.
So Thomas suggested that we apply the factory feature to all init
systems. With systemd, it would be built-in (by mean of tmpfiles),
while for the others we'd need some extra startup scripts to mount a
tmpfs on /var and populate it.
> > But the tmpfiles format is very specific to systemd; we'd have to write
> > our own parser for that (not too difficult, I think, but it'd run on
> > the target so it'd have to be really dead-simple).
> >
> > So in the end, I'd remove the hooks and move the code to the fs
> > handling, protected by a conditional that so far only systemd would set.
> >
> > OK with this new approach?
>
> I'm not so convinced. I mean, if you're putting systemd-specific code into
> ROOTFS_TARGET_INTERNAL, you might just as well make that bit depend on
> BR2_INIT_SYSTEMD directly.
But then it is no longer systemd-specific, see above.
> But then it becomes really too intertwined for my
> liking. I think my ROOTFS_SKELETON_PRE_CMD_HOOK proposal is a better middle
> ground between complexity and abstraction. If you really don't like that, I
> prefer the original ROOTFS_PRE_CMD_HOOKS approach. I just think that giving the
> possibility of defining more than one hook is useless. Particularly since the
> systemd hook hinges on being the very last thing before rootfs creation.
>
>
> > Still, there is yet ine thing that I dislike in this solution, whether
> > it be with hooks or the variable, and that noone has seen so far: it is
> > not atomic and the target/ directory will be broken if the filesystem
> > command fails right in the middle, before the var symlink was restored.
>
> Can we create the symlink early in the build process, every time? I.e. run
> SKELETON_SYSTEMD_POST_ROOTFS_VAR somehwere at the start of the build as well?
> Only, I'm not sure where we could put it.
Hmm... Good point. I'll try to find a place. But I'm not sure that would
be possible.
Maybe with the step-hooks, that are called very early for all steps, and
then we'd use that to create the symlink if missing. But I do not like
that too much...
I'll investigate.
In the meantime, I'll drop the read-only patches from the series, to
avoid too much noise for now, and so we concentrate on the skeleton
stuff for this release.
Thanks!
Regards,
Yann E. MORIN.
> Regards,
> Arnout
>
>
> > I have seen no solution to this issue, except doing a copy of target
> > first, right before assembling the image(s), becasue in that case, we
> > wouldn't care about restoring the previous status, so we would no longer
> > need atomicity.
>
> --
> Arnout Vandecappelle arnout at mind be
> Senior Embedded Software Architect +32-16-286500
> Essensium/Mind http://www.mind.be
> G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven
> LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
> GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF
--
.-----------------.--------------------.------------------.--------------------.
| 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:[~2017-07-24 16:01 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-18 17:25 [Buildroot] [PATCH 00/20] system: properly handle systemd as init system Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 01/20] support/tests: allow properly indented config fragment Yann E. MORIN
2017-07-18 20:45 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 02/20] core/pkg-generic: add variable to skip skeleton dependency Yann E. MORIN
2017-07-22 12:27 ` Arnout Vandecappelle
2017-07-23 9:12 ` Peter Korsgaard
2017-07-23 9:21 ` Yann E. MORIN
2017-07-23 13:01 ` Peter Korsgaard
2017-07-22 13:41 ` Thomas Petazzoni
2017-07-18 17:25 ` [Buildroot] [PATCH 03/20] package/skeleton: add macro to rsync skeleton directory Yann E. MORIN
2017-07-22 12:34 ` Arnout Vandecappelle
2017-07-22 13:02 ` Arnout Vandecappelle
2017-07-22 14:33 ` Yann E. MORIN
2017-07-22 13:42 ` Thomas Petazzoni
2017-07-18 17:25 ` [Buildroot] [PATCH 04/20] package/skeleton: make SKELETON_LIB_SYMLINK a macro Yann E. MORIN
2017-07-22 12:56 ` Arnout Vandecappelle
2017-07-22 19:47 ` Thomas Petazzoni
2017-07-22 21:02 ` [Buildroot] Is MIPS_NABI32 a 64-bit architecture? [was: [PATCH 04/20] package/skeleton: make SKELETON_LIB_SYMLINK a macro] Arnout Vandecappelle
2017-07-22 13:50 ` [Buildroot] [PATCH 04/20] package/skeleton: make SKELETON_LIB_SYMLINK a macro Thomas Petazzoni
2017-07-22 14:23 ` Yann E. MORIN
2017-07-22 19:45 ` Thomas Petazzoni
2017-07-18 17:25 ` [Buildroot] [PATCH 05/20] system: provide package-wide system variables and macros Yann E. MORIN
2017-07-22 13:00 ` Arnout Vandecappelle
2017-07-18 17:25 ` [Buildroot] [PATCH 06/20] system: move setting getty to the corresponding init systems Yann E. MORIN
2017-07-22 13:11 ` Arnout Vandecappelle
2017-07-22 19:57 ` Thomas Petazzoni
2017-07-22 21:13 ` Arnout Vandecappelle
2017-07-22 20:34 ` Thomas Petazzoni
2017-07-18 17:25 ` [Buildroot] [PATCH 07/20] system: move remounting / " Yann E. MORIN
2017-07-22 13:16 ` Arnout Vandecappelle
2017-07-22 20:36 ` Thomas Petazzoni
2017-07-18 17:25 ` [Buildroot] [PATCH 08/20] system: with no init system, only allow custom skeleton Yann E. MORIN
2017-07-22 13:28 ` Arnout Vandecappelle
2017-07-22 13:53 ` Yann E. MORIN
2017-07-22 21:18 ` Arnout Vandecappelle
2017-07-22 22:12 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 09/20] package/skeleton: drop dependency on host-mkpasswd Yann E. MORIN
2017-07-22 21:24 ` Arnout Vandecappelle
2017-07-22 22:32 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 10/20] package/skeleton: select it rather than default to y Yann E. MORIN
2017-07-22 21:47 ` Arnout Vandecappelle
2017-07-18 17:25 ` [Buildroot] [PATCH 11/20] package/skeleton: split out into skeleton-custom Yann E. MORIN
2017-07-22 22:31 ` Arnout Vandecappelle
2017-07-22 22:38 ` Arnout Vandecappelle
2017-07-23 9:45 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 12/20] package/skeleton: split out into skeleton-common Yann E. MORIN
2017-07-22 23:06 ` Arnout Vandecappelle
2017-07-23 9:48 ` Yann E. MORIN
2017-07-23 20:32 ` Arnout Vandecappelle
2017-07-24 7:19 ` Thomas Petazzoni
2017-07-24 15:19 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 13/20] package/skeleton: make it a virtual package Yann E. MORIN
2017-07-22 23:36 ` Arnout Vandecappelle
2017-07-23 10:13 ` Yann E. MORIN
2017-07-23 20:48 ` Arnout Vandecappelle
2017-07-18 17:25 ` [Buildroot] [PATCH 14/20] package/skeleton-common: simplify staging install Yann E. MORIN
2017-07-22 23:38 ` Arnout Vandecappelle
2017-07-18 17:25 ` [Buildroot] [PATCH 15/20] package/skeleton: introduce sysv- and systemd-specific skeletons Yann E. MORIN
2017-07-22 23:49 ` Arnout Vandecappelle
2017-07-23 10:15 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 16/20] system: separate sysv and systemd parts of the skeleton Yann E. MORIN
2017-07-23 0:08 ` Arnout Vandecappelle
2017-07-23 0:13 ` Arnout Vandecappelle
2017-07-23 10:31 ` Yann E. MORIN
2017-07-23 10:24 ` Yann E. MORIN
2017-07-23 13:32 ` Arnout Vandecappelle
2017-07-23 13:39 ` Arnout Vandecappelle
2017-07-23 13:41 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 17/20] sytem: no-init systems may use our default, common skeleton Yann E. MORIN
2017-07-23 0:18 ` Arnout Vandecappelle
2017-07-23 10:37 ` Yann E. MORIN
2017-07-18 17:25 ` [Buildroot] [PATCH 18/20] fs: add pre- and post-command hooks Yann E. MORIN
2017-07-23 13:42 ` Arnout Vandecappelle
2017-07-23 14:17 ` Yann E. MORIN
2017-07-23 21:51 ` Arnout Vandecappelle
2017-07-24 16:01 ` Yann E. MORIN [this message]
2017-07-24 22:23 ` Arnout Vandecappelle
2017-07-18 17:25 ` [Buildroot] [PATCH 19/20] system: make systemd work on a read-only rootfs Yann E. MORIN
2017-07-23 22:18 ` Arnout Vandecappelle
2017-07-24 15:45 ` Yann E. MORIN
2017-07-24 22:44 ` Arnout Vandecappelle
2017-07-25 16:07 ` Yann E. MORIN
2017-07-25 22:24 ` Arnout Vandecappelle
2017-07-18 17:25 ` [Buildroot] [PATCH 20/20] support/testing: add runtime testing for init systems Yann E. MORIN
2017-07-22 14:32 ` Arnout Vandecappelle
2017-07-22 14:45 ` Yann E. MORIN
2017-07-22 19:30 ` Thomas Petazzoni
2017-07-22 19:53 ` Arnout Vandecappelle
2017-07-22 20:10 ` Thomas Petazzoni
2017-07-22 22:50 ` Yann E. MORIN
2017-07-23 7:58 ` Thomas Petazzoni
2017-07-23 9:26 ` Yann E. MORIN
2017-07-23 18:13 ` [Buildroot] TestIso9660GrubExternal and TestIso9660GrubInternal failing Ricardo Martincoski
2017-07-23 20:02 ` Yann E. MORIN
2017-07-23 20:28 ` Yann E. MORIN
2017-07-23 20:39 ` Yann E. MORIN
2017-07-24 7:13 ` Thomas Petazzoni
2017-07-24 11:07 ` Ricardo Martincoski
2017-07-24 15:18 ` Yann E. MORIN
2017-07-24 15:20 ` [Buildroot] [PATCH 20/20] support/testing: add runtime testing for init systems Andrey Smirnov
2017-07-24 15:50 ` Yann E. MORIN
2017-07-19 20:14 ` [Buildroot] [PATCH 00/20] system: properly handle systemd as init system Andrey Yurovsky
2017-07-19 20:53 ` Thomas Petazzoni
2017-07-19 22:17 ` Andrey Yurovsky
2017-07-20 7:32 ` Thomas Petazzoni
2017-07-21 22:15 ` Marcus Hoffmann
2017-07-28 20:41 ` Marcus Hoffmann
2017-07-28 20:54 ` Thomas Petazzoni
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=20170724160123.GE2918@scaer \
--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.