Introduce save_time_interval config (in seconds) to set a
max on how often time is saved to flash (default 30 days)
Introduce save_time_file config, default to
/etc/config/sysfixtime, so it's included in backups
(time is saved by touching save_time_file)
Use busybox ntpd -S option so time is saved regularly
and not only on clean shutdown/reboot
Fix time on startup if system time is inferior to
stored time

Signed-off-by: Etienne CHAMPETIER <etienne.champet...@free.fr>
---
 package/utils/busybox/Makefile              |  8 +++++
 package/utils/busybox/files/sysfixtime      | 45 +++++++++++++++++++++++++++++
 package/utils/busybox/files/sysfixtime.conf |  3 ++
 package/utils/busybox/files/sysntpd         |  3 +-
 4 files changed, 58 insertions(+), 1 deletion(-)
 create mode 100755 package/utils/busybox/files/sysfixtime
 create mode 100644 package/utils/busybox/files/sysfixtime.conf

diff --git a/package/utils/busybox/Makefile b/package/utils/busybox/Makefile
index cf4f1f2..86a359f 100644
--- a/package/utils/busybox/Makefile
+++ b/package/utils/busybox/Makefile
@@ -50,6 +50,10 @@ define Package/busybox/config
        source "$(SOURCE)/Config.in"
 endef
 
+define Package/busybox/conffiles
+/etc/config/sysfixtime
+endef
+
 CONFIG_TEMPLATE:=./config/default
 
 LDLIBS:=m crypt
@@ -114,6 +118,10 @@ define Package/busybox/install
        $(INSTALL_BIN) ./files/cron $(1)/etc/init.d/cron
        $(INSTALL_BIN) ./files/telnet $(1)/etc/init.d/telnet
        $(INSTALL_BIN) ./files/sysntpd $(1)/etc/init.d/sysntpd
+       $(INSTALL_BIN) ./files/sysfixtime $(1)/etc/init.d/sysfixtime
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/sysfixtime.conf $(1)/etc/config/sysfixtime
+       touch $(1)/etc/config/sysfixtime
        -rm -rf $(1)/lib64
 endef
 
diff --git a/package/utils/busybox/files/sysfixtime 
b/package/utils/busybox/files/sysfixtime
new file mode 100755
index 0000000..15d0a36
--- /dev/null
+++ b/package/utils/busybox/files/sysfixtime
@@ -0,0 +1,45 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013-2014 OpenWrt.org
+
+START=05
+STOP=95
+
+config_load sysfixtime
+config_get save_time_file sysfixtime save_time_file "/etc/config/sysfixtime"
+config_get save_time_interval sysfixtime save_time_interval 2592000
+
+EXTRA_COMMANDS="save save2 step stratum periodic unsync"
+EXTRA_HELP="   save    save time to flash by touching $save_time_file
+       save2   save time to flash by touching $save_time_file
+               if not saved in the last $save_time_interval seconds
+               disabled if save_time_interval = 0"
+
+start() {
+       CURTIME=`date '+%Y%m%d%H%M'`
+       SAVEDTIME=`date '+%Y%m%d%H%M' -r $save_time_file`
+       [[ $CURTIME -lt $SAVEDTIME ]] && \
+               date -s $SAVEDTIME && \
+               /usr/bin/logger -t sysfixtime -p daemon.notice "Time fixed"
+}
+
+save2() {
+       [[ $save_time_interval -eq 0 ]] && exit
+       CURTIME=`date +%s`
+       SAVEDTIME=`date +%s -r $save_time_file`
+
+       [[ $((CURTIME - SAVEDTIME)) -gt $save_time_interval ]] && save
+}
+
+save() {
+       cat /dev/null >> $save_time_file && \
+               touch $save_time_file && \
+               /usr/bin/logger -t sysfixtime -p daemon.notice "Time saved to 
flash"
+}
+
+stop() { save2; }
+
+step() { save2; }
+stratum() { save2; }
+periodic() { save2; }
+unsync() { exit; }
+
diff --git a/package/utils/busybox/files/sysfixtime.conf 
b/package/utils/busybox/files/sysfixtime.conf
new file mode 100644
index 0000000..6e0fc3f
--- /dev/null
+++ b/package/utils/busybox/files/sysfixtime.conf
@@ -0,0 +1,3 @@
+config sysfixtime sysfixtime
+       option save_time_file "/etc/config/sysfixtime"
+       option save_time_interval 2592000
diff --git a/package/utils/busybox/files/sysntpd 
b/package/utils/busybox/files/sysntpd
index add7762..2612bc6 100755
--- a/package/utils/busybox/files/sysntpd
+++ b/package/utils/busybox/files/sysntpd
@@ -1,5 +1,5 @@
 #!/bin/sh /etc/rc.common
-# Copyright (C) 2011 OpenWrt.org
+# Copyright (C) 2011-2014 OpenWrt.org
 
 START=98
 
@@ -24,6 +24,7 @@ start_service() {
        procd_open_instance
        procd_set_param command "$PROG" -n
        [ "$enable_server" = "1" ] && procd_append_param command -l
+       procd_append_param command -S /etc/init.d/sysfixtime
        for peer in "$server"; do
                procd_append_param command -p $peer
        done
-- 
1.8.4.2
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to