summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2012-05-16 10:49:39 -0400
committerjim-p <jimp@pfsense.org>2012-05-16 10:49:39 -0400
commit90df3bd8097c3d8f21175fd215a6e27ef50b2584 (patch)
tree6acd2f26cce1d237973531db237c745921bca6e1
parent317d1c0bb59d64690441b840f44e5dcad8ccdcca (diff)
downloadpfsense-90df3bd8097c3d8f21175fd215a6e27ef50b2584.zip
pfsense-90df3bd8097c3d8f21175fd215a6e27ef50b2584.tar.gz
On its own, ntpd does not sync fast enough at bootup, so bring back the ntpdate sync but improve it so it can't get stuck forever.
Conflicts: etc/rc.newwanipv6
-rw-r--r--etc/inc/system.inc8
-rwxr-xr-xetc/rc.bootup11
-rwxr-xr-xetc/rc.newwanip3
-rwxr-xr-xusr/local/sbin/ntpdate_sync_once.sh27
4 files changed, 33 insertions, 16 deletions
diff --git a/etc/inc/system.inc b/etc/inc/system.inc
index 2f04d3d..e343a17 100644
--- a/etc/inc/system.inc
+++ b/etc/inc/system.inc
@@ -1106,7 +1106,7 @@ function system_timezone_configure() {
echo "done.\n";
}
-function system_ntp_configure() {
+function system_ntp_configure($start_ntpd=true) {
global $config, $g;
$driftfile = "/var/db/ntpd.drift";
@@ -1131,6 +1131,10 @@ function system_ntp_configure() {
/* slurp! */
fclose($fd);
+ /* At bootup we just want to write out the config. */
+ if (!$start_ntpd)
+ return;
+
/* if ntpd is running, kill it */
while(is_process_running("ntpd")) {
killbyname("ntpd");
@@ -1145,7 +1149,7 @@ function system_ntp_configure() {
// Note that we are starting up
log_error("NTPD is starting up.");
-
+ return;
}
function sync_system_time() {
diff --git a/etc/rc.bootup b/etc/rc.bootup
index c1749cf..7930da6 100755
--- a/etc/rc.bootup
+++ b/etc/rc.bootup
@@ -278,6 +278,12 @@ system_routing_configure();
/* enable routing */
system_routing_enable();
+/* Do an initial time sync */
+echo "Starting NTP time client...";
+/* At bootup this will just write the config, ntpd will launch from ntpdate_sync_once.sh */
+system_ntp_configure(false);
+mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh");
+
/* start load balancer daemon */
relayd_configure();
@@ -302,11 +308,6 @@ send_event("service reload dyndnsall");
/* Run a filter configure now that most all services have started */
filter_configure_sync();
-/* start the NTP client */
-echo "Starting OpenNTP time client...";
-system_ntp_configure();
-echo "done.\n";
-
/* setup pppoe and pptp */
vpn_setup();
diff --git a/etc/rc.newwanip b/etc/rc.newwanip
index 2c6a641..32af0a5 100755
--- a/etc/rc.newwanip
+++ b/etc/rc.newwanip
@@ -50,7 +50,8 @@ function restart_packages() {
global $oldip, $curwanipi, $g;
/* restart packages */
- system_ntp_configure();
+ system_ntp_configure(false);
+ mwexec_bg("/usr/local/sbin/ntpdate_sync_once.sh");
log_error("{$g['product_name']} package system has detected an ip change $oldip -> $curwanip ... Restarting packages.");
send_event("service reload packages");
}
diff --git a/usr/local/sbin/ntpdate_sync_once.sh b/usr/local/sbin/ntpdate_sync_once.sh
index 7aa20a8..f4a5256 100755
--- a/usr/local/sbin/ntpdate_sync_once.sh
+++ b/usr/local/sbin/ntpdate_sync_once.sh
@@ -1,19 +1,30 @@
#!/bin/sh
NOTSYNCED="true"
-SERVER=`cat /cf/conf/config.xml | grep timeservers | cut -d">" -f2 | cut -d"<" -f1`
-pkill -f ntpdate_sync_once.sh
+MAX_ATTEMPTS=3
+SERVER=`/bin/cat /cf/conf/config.xml | /usr/bin/grep timeservers | /usr/bin/cut -d">" -f2 | /usr/bin/cut -d"<" -f1`
+/bin/pkill -f ntpdate_sync_once.sh
-while [ "$NOTSYNCED" = "true" ]; do
+ATTEMPT=1
+# Loop until we're synchronized, but for a set number of attempts so we don't get stuck here forever.
+while [ "$NOTSYNCED" = "true" ] && [ ${ATTEMPT} -le ${MAX_ATTEMPTS} ]; do
# Ensure that ntpd and ntpdate are not running so that the socket we want will be free.
- killall ntpd 2>/dev/null
- killall ntpdate
+ /usr/bin/killall ntpd 2>/dev/null
+ /usr/bin/killall ntpdate 2>/dev/null
sleep 1
- ntpdate -s -t 5 $SERVER
+ /usr/sbin/ntpdate -s -t 5 ${SERVER}
if [ "$?" = "0" ]; then
NOTSYNCED="false"
+ else
+ sleep 5
+ ATTEMPT=`expr ${ATTEMPT} + 1`
fi
- sleep 5
done
-/usr/local/sbin/ntpd -g -c /var/etc/ntpd.conf \ No newline at end of file
+if [ "$NOTSYNCED" = "true" ]; then
+ echo "Giving up on time sync after ${MAX_ATTEMPTS} attempts." | /usr/bin/logger -t ntp;
+fi
+
+if [ -f /var/etc/ntpd.conf ]; then
+ /usr/sbin/ntpd -g -c /var/etc/ntpd.conf
+fi \ No newline at end of file
OpenPOWER on IntegriCloud