From c3249ae0c9777e8d16c90ce1ca441e90ad4fcf7b Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 22 Jul 2018 20:55:34 +0200 Subject: [PATCH] Add swclock service for systems without a hardware RTC Some systems don't have a hardware real time clock and don't know the time after bootin. An obvious soulution for this is to use time from an ntp server. Unfortunately that requires domain name resolution, which resolvers like unbound won't do for us, if the DNSSEC certificates aren't valid, which they aren't if we start out with a time around 1970-1-1. The "software clock" service tries to provide a workaround by restoring a reasonably valid time from a backup file during boot, which we update when shuting down. If we wan't a more correct time, we have to update it from NTP in between. Signed-off-by: David Oberhollenzer --- .gitignore | 2 ++ configure.ac | 3 +++ services/Makemodule.am | 3 ++- services/swclock.in | 6 ++++++ services/swclocksave.in | 7 +++++++ 5 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 services/swclock.in create mode 100644 services/swclocksave.in diff --git a/.gitignore b/.gitignore index f1b0640..e28328d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,8 @@ services/ifcfg services/ifdown services/modules services/hostapd +services/swclock +services/swclocksave scripts/devfs.sh scripts/ifrename.sh diff --git a/configure.ac b/configure.ac index f6fd637..564689a 100644 --- a/configure.ac +++ b/configure.ac @@ -56,6 +56,7 @@ AC_DEFINE_DIR(SOCKDIR, localstatedir/run, [Directory for initd socket]) AC_DEFINE_DIR(BINPATH, bindir, [Fully evaluated bin directory]) AC_DEFINE_DIR(SBINPATH, sbindir, [Fully evaluated sbin directory]) AC_DEFINE_DIR(ETCPATH, sysconfdir, [Fulle evaluated etc directory]) +AC_DEFINE_DIR(STATEFILESPATH, prefix/var/lib, [Path for persistent state files]) AC_CONFIG_FILES([services/sigkill]) AC_CONFIG_FILES([services/sigterm]) @@ -67,6 +68,8 @@ AC_CONFIG_FILES([services/ifcfg]) AC_CONFIG_FILES([services/ifdown]) AC_CONFIG_FILES([services/modules]) AC_CONFIG_FILES([services/hostapd]) +AC_CONFIG_FILES([services/swclock]) +AC_CONFIG_FILES([services/swclocksave]) AC_CONFIG_FILES([scripts/devfs.sh]) AC_CONFIG_FILES([scripts/ifrename.sh]) AC_CONFIG_FILES([scripts/ifcfg.sh]) diff --git a/services/Makemodule.am b/services/Makemodule.am index 8f22675..3625715 100644 --- a/services/Makemodule.am +++ b/services/Makemodule.am @@ -7,7 +7,8 @@ init_DATA += services/sysfs services/procfs services/tmpfs init_DATA += services/vfs services/ifrename services/ifcfg init_DATA += services/dhcpcd services/dhcpcdmaster services/unbound init_DATA += services/dnsmasq services/ifdown services/modules -init_DATA += services/network services/hostapd +init_DATA += services/network services/hostapd services/swclock +init_DATA += services/swclocksave if USYSLOGD init_DATA += services/usyslogd diff --git a/services/swclock.in b/services/swclock.in new file mode 100644 index 0000000..02c4c27 --- /dev/null +++ b/services/swclock.in @@ -0,0 +1,6 @@ +description restore saved time from last shutdown +type wait +target boot +before sysinit +after vfs modules +exec xargs -a @STATEFILESPATH@/swclock date --utc diff --git a/services/swclocksave.in b/services/swclocksave.in new file mode 100644 index 0000000..683ded7 --- /dev/null +++ b/services/swclocksave.in @@ -0,0 +1,7 @@ +description write current time to backup file +type wait +target %0 +after sigkill +before sync +tty truncate @STATEFILESPATH@/swclock +exec date --utc +%%m%%d%%H%%M%%Y.%%S