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>
This commit is contained in:
David Lamparter 2024-01-25 16:47:31 +01:00
parent 0f79e6b876
commit a97d0c5875
6 changed files with 14 additions and 0 deletions

View File

@ -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])

2
debian/frr.postinst vendored
View File

@ -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.

View File

@ -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)

View File

@ -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[];

View File

@ -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

View File

@ -719,6 +719,7 @@ class TopoRouter(TopoGear):
"/etc/frr",
"/etc/snmp",
"/var/run/frr",
"/var/lib/frr",
"/var/log",
]