diff options
| author | David Lamparter <equinox@opensourcerouting.org> | 2024-01-25 16:47:31 +0100 |
|---|---|---|
| committer | David Lamparter <equinox@opensourcerouting.org> | 2024-01-27 19:01:19 +0100 |
| commit | a97d0c5875a562a16a9e3cbae03e615c16e47c87 (patch) | |
| tree | 0e2290137a99141de9f3eb683c8f7b3fe13687d6 | |
| parent | 0f79e6b876ef99b5be722a2038f519fbbf3a4a67 (diff) | |
lib: set up `frr_libstatedir`
This needs to be used for persistent state, which currently is misplaced
into `/var/run` / `/run` where it gets deleted across reboots.
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
| -rw-r--r-- | configure.ac | 5 | ||||
| -rw-r--r-- | debian/frr.postinst | 2 | ||||
| -rw-r--r-- | lib/libfrr.c | 4 | ||||
| -rw-r--r-- | lib/libfrr.h | 1 | ||||
| -rw-r--r-- | tests/topotests/kinds.yaml | 1 | ||||
| -rw-r--r-- | tests/topotests/lib/topogen.py | 1 |
6 files changed, 14 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 2d21abb6ef..dd143d0fb4 100644 --- a/configure.ac +++ b/configure.ac @@ -91,6 +91,8 @@ if $path_warn_banner; then AC_MSG_WARN([^]) fi +frr_libstatedir="\${localstatedir}/lib/frr" + dnl ----------------------------------- dnl Get hostname and other information. dnl ----------------------------------- @@ -2718,6 +2720,7 @@ AX_RECURSIVE_EVAL([$frr_sysconfdir], [CFG_SYSCONF]) AX_RECURSIVE_EVAL([$sbindir], [CFG_SBIN]) AX_RECURSIVE_EVAL([$bindir], [CFG_BIN]) AX_RECURSIVE_EVAL([$frr_runstatedir], [CFG_STATE]) +AX_RECURSIVE_EVAL([$frr_libstatedir], [CFG_LIBSTATE]) AX_RECURSIVE_EVAL([$moduledir], [CFG_MODULE]) AX_RECURSIVE_EVAL([$yangmodelsdir], [CFG_YANGMODELS]) AX_RECURSIVE_EVAL([$scriptdir], [CFG_SCRIPT]) @@ -2726,6 +2729,7 @@ AC_SUBST([CFG_SYSCONF]) AC_SUBST([CFG_SBIN]) AC_SUBST([CFG_BIN]) AC_SUBST([CFG_STATE]) +dnl AC_SUBST([CFG_LIBSTATE]) -- not currently used AC_SUBST([CFG_MODULE]) AC_SUBST([CFG_SCRIPT]) AC_SUBST([CFG_YANGMODELS]) @@ -2733,6 +2737,7 @@ AC_DEFINE_UNQUOTED([VTYSH_BIN_PATH], ["$vtysh_bin"], [path to vtysh binary]) AC_DEFINE_UNQUOTED([MODULE_PATH], ["$CFG_MODULE"], [path to modules]) AC_DEFINE_UNQUOTED([SCRIPT_PATH], ["$CFG_SCRIPT"], [path to scripts]) AC_DEFINE_UNQUOTED([FRR_RUNSTATE_PATH], ["$CFG_STATE"], [/run/frr equivalent]) +AC_DEFINE_UNQUOTED([FRR_LIBSTATE_PATH], ["$CFG_LIBSTATE"], [/var/lib/frr equivalent]) AC_DEFINE_UNQUOTED([YANG_MODELS_PATH], ["$CFG_YANGMODELS"], [path to YANG data models]) AC_DEFINE_UNQUOTED([WATCHFRR_SH_PATH], ["${CFG_SBIN%/}/watchfrr.sh"], [path to watchfrr.sh]) diff --git a/debian/frr.postinst b/debian/frr.postinst index eb9ec67dd9..9c9b4a821c 100644 --- a/debian/frr.postinst +++ b/debian/frr.postinst @@ -17,8 +17,10 @@ adduser \ usermod -a -G frrvty frr mkdir -m 0755 -p /var/log/frr +mkdir -m 0700 -p /var/lib/frr mkdir -p /etc/frr +chown frr: /var/lib/frr # only change ownership of files when they were previously owned by root or # quagga; this is to ensure we don't trample over some custom user setup. diff --git a/lib/libfrr.c b/lib/libfrr.c index 8f655eab0d..85a906a7bc 100644 --- a/lib/libfrr.c +++ b/lib/libfrr.c @@ -46,6 +46,7 @@ DEFINE_KOOH(frr_fini, (), ()); const char frr_sysconfdir[] = SYSCONFDIR; char frr_runstatedir[256] = FRR_RUNSTATE_PATH; +char frr_libstatedir[256] = FRR_LIBSTATE_PATH; #ifdef HAVE_SQLITE3 const char frr_dbdir[] = DAEMON_DB_DIR; #endif @@ -497,6 +498,8 @@ static int frr_opt(int opt) snprintf(frr_runstatedir, sizeof(frr_runstatedir), FRR_RUNSTATE_PATH "/%s", di->pathspace); + snprintf(frr_libstatedir, sizeof(frr_libstatedir), + FRR_LIBSTATE_PATH "/%s", di->pathspace); snprintf(pidfile_default, sizeof(pidfile_default), "%s/%s.pid", frr_runstatedir, di->name); if (!di->zpathspace) @@ -754,6 +757,7 @@ struct event_loop *frr_init(void) /* don't mkdir these as root... */ if (!(di->flags & FRR_NO_PRIVSEP)) { + frr_mkdir(frr_libstatedir, false); if (!di->pid_file || !di->vty_path) frr_mkdir(frr_runstatedir, false); if (di->pid_file) diff --git a/lib/libfrr.h b/lib/libfrr.h index c981c297d1..189abf0aec 100644 --- a/lib/libfrr.h +++ b/lib/libfrr.h @@ -174,6 +174,7 @@ extern char config_default[512]; extern char frr_zclientpath[512]; extern const char frr_sysconfdir[]; extern char frr_runstatedir[256]; +extern char frr_libstatedir[256]; extern const char frr_moduledir[]; extern const char frr_scriptdir[]; diff --git a/tests/topotests/kinds.yaml b/tests/topotests/kinds.yaml index 127790ed07..5f4b61d4b7 100644 --- a/tests/topotests/kinds.yaml +++ b/tests/topotests/kinds.yaml @@ -12,6 +12,7 @@ kinds: - "./%NAME%:/etc/frr" - "%RUNDIR%/var.log.frr:/var/log/frr" - "%RUNDIR%/var.run.frr:/var/run/frr" + - "%RUNDIR%/var.lib.frr:/var/lib/frr" cap-add: - SYS_ADMIN - AUDIT_WRITE diff --git a/tests/topotests/lib/topogen.py b/tests/topotests/lib/topogen.py index 7b06f3d127..155d2d0986 100644 --- a/tests/topotests/lib/topogen.py +++ b/tests/topotests/lib/topogen.py @@ -719,6 +719,7 @@ class TopoRouter(TopoGear): "/etc/frr", "/etc/snmp", "/var/run/frr", + "/var/lib/frr", "/var/log", ] |
