Re: git: 27b9777c28b4 - main - libexec/rc: Add var_run rc script
Date: Tue, 20 Sep 2022 17:44:05 UTC
On 9/5/2022 6:20 AM, Cy Schubert wrote: > The branch main has been updated by cy: > > URL: https://cgit.FreeBSD.org/src/commit/?id=27b9777c28b4e9474bdc500c28d04feec48fbb84 > > commit 27b9777c28b4e9474bdc500c28d04feec48fbb84 > Author: Cy Schubert <cy@FreeBSD.org> > AuthorDate: 2022-08-28 12:48:25 +0000 > Commit: Cy Schubert <cy@FreeBSD.org> > CommitDate: 2022-09-05 13:19:42 +0000 > > libexec/rc: Add var_run rc script > > Users with a tmpfs /var/run will lose the directory tree state of > /var/run at reboot. This rc script will optionally (by default) > capture the state of the directory structure in /var/run prior to > shutdown and recreate it at system boot. > > Alternatively a user can save the state of the /var/run directories > manually using service var_run save and disable the autosaving of > /var/run state using the var_run_autosave variable, for those > paranoid SSD users. > > PR: 259585, 259699 > Reported by: freebsd@walstatt-de.de, > Reviewed by: philip, gbe (previous version) > MFC after: 1 week > Differential Revision: https://reviews.freebsd.org/D36386 > --- > etc/mtree/BSD.var.dist | 2 ++ > libexec/rc/rc.conf | 6 ++++++ > libexec/rc/rc.d/Makefile | 1 + > libexec/rc/rc.d/var_run | 47 +++++++++++++++++++++++++++++++++++++++++++++++ > share/man/man5/rc.conf.5 | 28 ++++++++++++++++++++++++++++ > 5 files changed, 84 insertions(+) > > diff --git a/etc/mtree/BSD.var.dist b/etc/mtree/BSD.var.dist > index 0f73ba1824ae..24961accf7fb 100644 > --- a/etc/mtree/BSD.var.dist > +++ b/etc/mtree/BSD.var.dist > @@ -46,6 +46,8 @@ > .. > ipf mode=0700 tags=package=ipf > .. > + mtree > + .. > ntp uname=ntpd gname=ntpd > .. > pkg > diff --git a/libexec/rc/rc.conf b/libexec/rc/rc.conf > index 6b2c33792ea7..bc908075d033 100644 > --- a/libexec/rc/rc.conf > +++ b/libexec/rc/rc.conf > @@ -61,6 +61,12 @@ varmfs_flags="-S" # Extra mount options for the mfs /var > mfs_type="auto" # "md", "tmpfs", "auto" to prefer tmpfs with md as fallback > populate_var="AUTO" # Set to YES to always (re)populate /var, NO to never > cleanvar_enable="YES" # Clean the /var directory > +var_run_enable="NO" # Save/restore /var/run structure at shutdown/reboot > +var_run_autosave="NO" # Only restore /var/run structure at shutdown/reboot > + # The user is expected to issue service var_run save to > + # manually save the /var/run mtree > +var_run_mtree="/var/db/mtree/BSD.var-run.mtree" > + # Where to save /var/run mtree > local_startup="${_localbase}/etc/rc.d" # startup script dirs. > script_name_sep=" " # Change if your startup scripts' names contain spaces > rc_conf_files="/etc/rc.conf /etc/rc.conf.local" > diff --git a/libexec/rc/rc.d/Makefile b/libexec/rc/rc.d/Makefile > index 3eabd17df993..e8ee61ffdff8 100644 > --- a/libexec/rc/rc.d/Makefile > +++ b/libexec/rc/rc.d/Makefile > @@ -111,6 +111,7 @@ CONFS= DAEMON \ > ugidfw \ > ${_utx} \ > var \ > + var_run \ > watchdogd > > .if ${MK_NIS} != "no" > diff --git a/libexec/rc/rc.d/var_run b/libexec/rc/rc.d/var_run > new file mode 100755 > index 000000000000..8da3f40a0e7c > --- /dev/null > +++ b/libexec/rc/rc.d/var_run > @@ -0,0 +1,47 @@ > +#!/bin/sh > + > +# PROVIDE: var_run > +# REQUIRE: mountcritlocal > +# BEFORE: cleanvar Don't we need the shutdown keyword too? # KEYWORD: shutdown > + > +. /etc/rc.subr > + > +name=var_run > +rcvar=var_run_enable > +extra_commands="load save" > +start_cmd="_var_run_start" > +load_cmd="_var_run_load" > +save_cmd="_var_run_save" > +stop_cmd="_var_run_stop" > + > +load_rc_config $name > + > +# Set defaults > +: ${var_run_enable:="NO"} > +: ${var_run_mtree:="/var/db/mtree/BSD.var-run.mtree"} > +: ${var_run_autosave:="YES"} > + > +_var_run_load() { > + test -f ${var_run_mtree} && > + mtree -U -i -q -f ${var_run_mtree} -p /var/run > /dev/null > +} > + > +_var_run_save() { > + if [ ! -d $(dirname ${var_run_mtree}) ]; then > + mkdir -p ${var_run_mtree} > + fi > + mtree -dcbj -p /var/run > ${var_run_mtree} > +} > + > +_var_run_start() { > + df -ttmpfs /var/run > /dev/null 2>&1 && > + _var_run_load > +} > + > +_var_run_stop() { > + df -ttmpfs /var/run > /dev/null 2>&1 && > + checkyesno var_run_autosave && > + _var_run_save > +} > + > +run_rc_command "$1" > diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 > index 8592739ccb49..f9ceabc83120 100644 > --- a/share/man/man5/rc.conf.5 > +++ b/share/man/man5/rc.conf.5 > @@ -463,6 +463,34 @@ is mounted on normal systems. > Clean the > .Pa /var > directory. > +.It Va var_run_enable > +.Pq Vt bool > +Set to "YES" to enable saving of the > +.Pa /var/run > +directory strcucture into an mtree file at shutdown and the reload of the > +.Pa /var/run > +directory structure at boot. > +.It Va var_run_autosave > +.Pq Vt bool > +In some cases it may be undesirable to save > +.Pa /var/run > +at shutdown. > +When set to "NO" > +.Pa /var/run > +is loaded at reboot but not saved at shutdown. Typically in this scenario > +a > +.Pa service > +.Pa var_run > +.Pa save > +would be performed to save a copy of the > +.Pa /var/run > +directory structure once, to be reload during all subsequent reboots. > +.It Va var_run_mtree > +.Pq Vt str > +Where to save the > +.Pa /var/run > +mtree. The default location is > +.Pa /var/db/mtree/BSD.var-run.mtree . > .It Va local_startup > .Pq Vt str > List of directories to search for startup script files. -- Bryan Drewery