[systemd-devel] binding tmpfiles.d to unit startup

Colin Walters walters at verbum.org
Sat Mar 1 06:46:45 PST 2014


Hi,

So for OSTree I am trying to move to a model where services populate 
the contents of /var on *start*.  See previous discussion here:

https://www.mail-archive.com/systemd-devel@lists.freedesktop.org/msg07859.html

The really great part about this is that one is then able to totally 
reset OS state at any time by simply just doing a shutdown of services, 
then "rm -rf /var/*", then  reboot.  (You can also reset /etc, that's a 
separate discussion)

Now while patching the service code itself got me pretty far, 
ultimately there are a lot of RPMs and such out there...so what I ended 
up doing for rpm-ostree was to generate tmpfiles.d snippets from the 
/var content:

https://github.com/cgwalters/rpm-ostree/commit/f8ddf38aa2dce207399d5e485842168eb2540e5f

Basically we end up with a gigantic 
/usr/lib/tmpfiles.d/rpm-ostree-autovar.conf that has stuff like:

d /var/spool/mail 0775 0 12 - -
d /var/lib/dnsmasq 0755 0 0 - -
...

The problem with this is it all happens on boot, and it doesn't really 
scale.  I want the RPMs (and packages in general) to do this by default.

So what's the problem with patching the world to do mkdir() on bootup?

1) Lots of work
2) Loss of association between package data and directory.  While this 
is
    pretty minor, it *is* useful to be able to do rpm -qf /var/kerberos
    and see that it comes from the "krb5-libs" package.
3) SELinux labeling - any service that creates a directory like this 
will
    have to be sure it labels it correctly.  While the latest SELinux 
does have
    support for doing this automatically, it'd still be better if it was
    done at a more trusted level.

What I really want is an easy way to bind tmpfiles.d snippets to unit 
startup.
Something like:

StateDirectory=/var/kerberos 0755 0 0

(Why not full tmpfiles.d syntax?  Well I can't think of a good reason 
to make
 a *file* on startup.  There are packages that ship plain files in /var 
but
 I'd say they're broken.)

With this, it's easy to do without patching the service.  It retains the
association (if a bit indirect) between the service and its state 
directory,
because you can query ownership of the .service file.  And systemd 
ensures
SELinux labeling happens correctly.

Thoughts?  Should be a pretty easy patch.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20140301/55a00487/attachment-0001.html>


More information about the systemd-devel mailing list