From 11da93b7590f0dce66620553492d6729b8905974 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 27 Feb 2023 22:34:43 +0100 Subject: [PATCH] Add support for Finit specific tmpfiles.d/ The tmpfilesd() glob sorts files according to name, we could name our .conf as 00finit.conf to prevent ordering issues with, e.g. dnsmasq, but this is more elegant and allows for multi-level override. NOTE: bootmisc depends on the pidfile plugins since the latter need to set up its iwatches of /run before bootmisc creates /run. Depending on if it's a system with /var/run or /run we need to drop /var/run before recreating it. Signed-off-by: Joachim Wiberg --- configure.ac | 4 ++++ plugins/bootmisc.c | 9 --------- src/tmpfiles.c | 10 +++++++++- tmpfiles.d/Makefile.am | 3 +++ tmpfiles.d/finit.conf | 14 ++++++++++++++ 5 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 tmpfiles.d/finit.conf diff --git a/configure.ac b/configure.ac index d705f570..14907fa2 100644 --- a/configure.ac +++ b/configure.ac @@ -285,6 +285,10 @@ AC_EXPAND_DIR(tmpfiles_path, "$libdir/tmpfiles.d") AC_SUBST(tmpfiles_path) AC_DEFINE_UNQUOTED(TMPFILES_PATH, "$tmpfiles_path", [Main tmpfiles.d/, override in /etc]) +AC_EXPAND_DIR(finit_tmpfiles, "$pkglibdir/tmpfiles.d") +AC_SUBST(finit_tmpfiles) +AC_DEFINE_UNQUOTED(FINIT_TMPFILES, "$finit_tmpfiles", [Finit tmpfiles.d/ .conf path]) + AC_EXPAND_DIR(rescue_conf, "$pkglibdir/rescue.conf") AC_DEFINE_UNQUOTED(RESCUE_CONF, "$rescue_conf", [Finit rescue mode .conf]) AC_EXPAND_DIR(sample_conf, "$pkglibdir/sample.conf") diff --git a/plugins/bootmisc.c b/plugins/bootmisc.c index 2e084949..c996b4a6 100644 --- a/plugins/bootmisc.c +++ b/plugins/bootmisc.c @@ -159,15 +159,6 @@ static void setup(void *arg) prev = umask(0); - /* - * REQUIRED for compatibility with, e.g. _PATH_VARRUN! - * Should be set up by OS/dist, this is a fallback. - */ - if (fismnt("/run")) { - rmdir("/var/run"); - ln("../run", "/var/run"); - } - /* Kernel symlinks, e.g. /proc/self/fd -> /dev/fd */ kernel_links(); diff --git a/src/tmpfiles.c b/src/tmpfiles.c index 1e10b122..7909c3d7 100644 --- a/src/tmpfiles.c +++ b/src/tmpfiles.c @@ -439,11 +439,18 @@ static void tmpfiles(char *line) warn("Failed %s operation on path %s", type, path); } +/* + * Only the three last tmpfiles.d/ directories are defined in + * tmpfiles.d(5) as system search paths. Finit adds two more + * before that to have Finit specific ones sorted first, and + * a configure prefix specific one after that for user needs. + */ void tmpfilesd(void) { /* in priority order */ char *dir[] = { - TMPFILES_PATH "/*.conf", /* Finit specific, not in tmpfiles.d(5) */ + FINIT_TMPFILES "/*.conf", + TMPFILES_PATH "/*.conf", "/usr/lib/tmpfiles.d/*.conf", "/run/tmpfiles.d/*.conf", "/etc/tmpfiles.d/*.conf", /* local admin overrides */ @@ -477,6 +484,7 @@ void tmpfilesd(void) if (!fp) continue; +// info("Parsing %s ...", fn); while (!feof(fp)) { char *line; diff --git a/tmpfiles.d/Makefile.am b/tmpfiles.d/Makefile.am index bb6487c3..0ab60a8a 100644 --- a/tmpfiles.d/Makefile.am +++ b/tmpfiles.d/Makefile.am @@ -1,3 +1,6 @@ +finitdir = $(finit_tmpfiles) +dist_finit_DATA = finit.conf + tmpfilesdir = $(tmpfiles_path) dist_tmpfiles_DATA = etc.conf legacy.conf var.conf x11.conf dist_tmpfiles_DATA += dnsmasq.conf frr.conf lldpd.conf openswan.conf \ diff --git a/tmpfiles.d/finit.conf b/tmpfiles.d/finit.conf new file mode 100644 index 00000000..dc5988fb --- /dev/null +++ b/tmpfiles.d/finit.conf @@ -0,0 +1,14 @@ +# Finit expects to run on a Linux FHS compatible system. +# Preferably one where /run is used and is a RAM disk. + +# This should be set up but OS/dist but is sometimes missing +# Note: l+ == only if ../run exists, if so, rm -rf /var/run +l+ /var/run - - - - ../run + +# Finit directories +d /run/finit 0755 - - - +d /run/finit/cond 0755 - - - +d /run/finit/cond/pid 0755 - - - +d /run/finit/cond/sys 0755 - - - +d /run/finit/cond/usr 0755 - - - +