From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 19/20] system: make systemd work on a read-only rootfs
Date: Mon, 24 Jul 2017 17:45:52 +0200 [thread overview]
Message-ID: <20170724154552.GC2918@scaer> (raw)
In-Reply-To: <f137feaf-3cb1-4a9a-0331-d51bca014f50@mind.be>
Arnout, All,
On 2017-07-24 00:18 +0200, Arnout Vandecappelle spake thusly:
> On 18-07-17 19:25, Yann E. MORIN wrote:
> [snip]
> > With a line like:
> >
> > C /var/something - - - -
> >
> > it will look for /usr/share/factory/something and copy it (recursively
> > if it is a directory) to /var/something, but only if it does not already
> > exist there.
>
> So we could just have a line
>
> C /var - - - -
>
> and be done with it?
No, because systemd-tmpfiles will only act if the entry does not exist.
But our case, /var does exist, and it is a mount point. We must have
/var to exist, because / is read-only.
If we were to use your construct, then systemd-tmpfiles would never do
anything at all.
From TMPFILES.D(5):
C
Recursively copy a file or directory, if the destination files
or directories do not exist yet. Note that this command will
not descend into subdirectories if the destination directory
already exists. Instead, the entire copy operation is skipped.
If the argument is omitted, files from the source directory
/usr/share/factory/ with the same name are copied. Does not
follow symlinks.
So we must have one tmpfile entry for each entry we need in /var/.
> [snip]
> > Note that we treat symlinks a little bit specially, by creating symlinks
> > to the factory defaults rather than copying them.
>
> You forgot to explain why. I guess because a relative symlink that was created
> based on the /usr/share/factory location wouldn't work any more.
>
> However, it is possible that a package creates a relative symlink based on the
> /var location. Most symlinks that we create in Buildroot stupidly assume that
> all the path components are not symlinks. So a package could for example do
>
> ln -sf ../srv/www $DESTDIR/var/www
>
> This will now create a broken symlink. It's fine as long as it is copied as-is
> to /var, but not with your approach...
Hmm... I'll have to think about that a bit more, even though I think I
have taken that into account...
At least I did see no breakage so far, but the set of packages I built
was arguably rather limited...
> [snip]
> > +define SKELETON_SYSTEMD_ROOT_RO_OR_RW
> > + mkdir -p $(TARGET_DIR)/etc/systemd/tmpfiles.d
> > + mkdir -p $(TARGET_DIR)/usr/share/factory
> > + ln -s usr/share/factory $(TARGET_DIR)/var
>
> Since other stuff may also want to put things in /usr/share/factory, I think it
> should be
> mkdir -p $(TARGET_DIR)/usr/share/factory/var
> ln -s usr/share/factory/var $(TARGET_DIR)/var
Not really, because systemd-tmpfile will look in exactly the factory
path to find the source of the copy/link. See the exerpt I pasted above.
So, given this entry, for example:
C /var/foo - - - -
systemd-tmpfiles will see if it can find /usr/share/factory/foo not
/usr/share/factory/var/foo
And if other packages install things in factory, they would most
probably install their own tmpfile description to copy it in place on
boot, becasue factory *is* for factory settings.
Thanks!
Regards,
Yann E. MORIN.
> Regards,
> Arnout
>
> [snip]
>
> --
> 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 15:45 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
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 [this message]
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=20170724154552.GC2918@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox