From 272d95f0f1445053b0e3c316e703d1ca744dc85a Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Thu, 27 Oct 2011 00:21:53 +0000
Subject: base-files: remove rdate integration, add busybox ntpd init script
 and server list in /etc/config/system The rdate applet proved to be too
 unreliable to obtain the current time on boot: - public time servers are rare
 and often unreachable or overloaded - rdate does not daemonize, it needs a
 network connection the moment it is started, leading to race conditions - the
 /etc/config/timeserver configuration is overly complex and there is no
 reliable way to disable rdate invocations - the time protocol as specified in
 RFC 868 is considered obsolete This commit adds an init script
 /etc/init.d/sysntpd which starts and stops the busybox ntpd accordingly. The
 builtin ntpd can be disabled by either disabling the init script, removing
 the symlink to busybox or by clearing the timeserver list in
 /etc/config/system.

SVN-Revision: 28612
---
 package/base-files/Makefile                        |  2 +-
 package/base-files/files/etc/config/system         |  7 ++-
 package/base-files/files/etc/config/timeserver     | 15 ------
 .../base-files/files/etc/hotplug.d/iface/40-rdate  | 63 ----------------------
 package/base-files/files/etc/init.d/sysntpd        | 35 ++++++++++++
 5 files changed, 41 insertions(+), 81 deletions(-)
 delete mode 100644 package/base-files/files/etc/config/timeserver
 delete mode 100644 package/base-files/files/etc/hotplug.d/iface/40-rdate
 create mode 100755 package/base-files/files/etc/init.d/sysntpd

(limited to 'package')

diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index b19f694a09..002d51674d 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=82
+PKG_RELEASE:=83
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
diff --git a/package/base-files/files/etc/config/system b/package/base-files/files/etc/config/system
index 30055eaf31..ad51db5bd8 100644
--- a/package/base-files/files/etc/config/system
+++ b/package/base-files/files/etc/config/system
@@ -2,5 +2,8 @@ config system
 	option hostname	OpenWrt
 	option timezone	UTC
 
-config rdate
-	option interface	wan
+config timeserver
+	list server	0.openwrt.pool.ntp.org
+	list server	1.openwrt.pool.ntp.org
+	list server	2.openwrt.pool.ntp.org
+	list server	3.openwrt.pool.ntp.org
diff --git a/package/base-files/files/etc/config/timeserver b/package/base-files/files/etc/config/timeserver
deleted file mode 100644
index 294631ee0c..0000000000
--- a/package/base-files/files/etc/config/timeserver
+++ /dev/null
@@ -1,15 +0,0 @@
-config timeserver
-	option hostname	ptbtime1.ptb.de
-#	option interface	wan
-
-config timeserver
-	option hostname	time-a.nist.gov
-
-config timeserver
-	option hostname	ntp.xs4all.nl
-
-config timeserver
-	option hostname	ptbtime2.ptb.de
-
-config timeserver
-	option hostname	time-b.nist.gov
diff --git a/package/base-files/files/etc/hotplug.d/iface/40-rdate b/package/base-files/files/etc/hotplug.d/iface/40-rdate
deleted file mode 100644
index c5abaf011e..0000000000
--- a/package/base-files/files/etc/hotplug.d/iface/40-rdate
+++ /dev/null
@@ -1,63 +0,0 @@
-IFACE_GLOBAL=$(uci_get "system.@rdate[0].interface")
-SERVERS=
-MAX=0
-SYNCED=
-
-do_rdate()
-{
-	local server="$1"
-
-	rdate -s "$server" >/dev/null 2>/dev/null && {
-		logger -t rdate "Synced with $server"
-		SYNCED="$server"
-	} || {
-		logger -t rdate "Failed to sync with $server"
-	}
-}
-
-add_server()
-{
-	local section="$1"
-
-	local server
-	config_get server "$section" hostname
-	[ -z "$server" ] && return
-
-	local iface
-	config_get iface "$section" interface
-	[ -z "$iface" ] && iface=$IFACE_GLOBAL
-	[ -n "$iface" ] && {
-		[ "$iface" = "$INTERFACE" ] || return
-	}
-
-	SERVERS="${SERVERS} $server"; : $((MAX++))
-}
-
-sync_time()
-{
-	local server
-	server=$(uci_get_state "network.$INTERFACE.lease_timesrv")
-	[ -n "$server" ] && do_rdate "$server"
-	[ -n "$SYNCED" ] && return
-
-	config_load timeserver
-	config_foreach add_server timeserver
-
-	local servers
-	while [ $MAX -gt 0 ] && [ -z "$SYNCED" ]; do
-		unset servers; random=$(awk "BEGIN { srand(); print int(rand() * $MAX + 1); }")
-		for server in $SERVERS; do
-			[ $((--random)) -eq 0 ] && { do_rdate "$server"; continue; }
-			servers="${servers} $server"
-		done
-		SERVERS="${servers}"; : $((MAX--))
-	done
-
-	[ -z "$SYNCED" ] && logger -t rdate "No usable time server for $INTERFACE found"
-}
-
-case "${ACTION:-ifup}" in
-	ifup)
-		sync_time
-	;;
-esac
diff --git a/package/base-files/files/etc/init.d/sysntpd b/package/base-files/files/etc/init.d/sysntpd
new file mode 100755
index 0000000000..fefb48fb19
--- /dev/null
+++ b/package/base-files/files/etc/init.d/sysntpd
@@ -0,0 +1,35 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2011 OpenWrt.org
+
+START=98
+
+BIN=/usr/sbin/ntpd
+PID=/var/run/sysntpd.pid
+
+start() {
+	[ -x $BIN ] || exit 0
+
+	local peers
+
+	getpeers() {
+		config_get peers "$1" server
+	}
+
+	config_load system
+	config_foreach getpeers timeserver
+
+	if [ -n "$peers" ]; then
+		local peer
+		local args="-n"
+		for peer in $peers; do
+			append args "-p $peer"
+		done
+
+		start-stop-daemon -x $BIN -m -p $PID -b -S -- $args
+	fi
+}
+
+stop() {
+	service_kill ${BIN##*/} $PID
+	rm -f $PID
+}
-- 
cgit v1.2.3