[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: ntpd -q retry timeout
From:       Denys Vlasenko <vda.linux () googlemail ! com>
Date:       2010-08-27 0:09:38
Message-ID: 201008270209.38126.vda.linux () googlemail ! com
[Download RAW message or body]

On Wednesday 25 August 2010 23:05, Rob Landley wrote:
> A note on the advisability of using ntpd's -q option from /dev/console, a 
> context in which ctrl-c doesn't work:
> 
> # ntpd -nq -p north-america.pool.ntp.org
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> ntpd: send failed: Network is unreachable
> 
> This was the point at which I came back and rebooted the machine.

This is how upstream ntpd works too.
But OTOH, upstream is not fully sane...

Please try attached patch. +16 bytes.
-- 
vda

["4.patch" (text/x-diff)]

diff -ad -urpN busybox.3/networking/ntpd.c busybox.4/networking/ntpd.c
--- busybox.3/networking/ntpd.c	2010-08-23 03:05:35.000000000 +0200
+++ busybox.4/networking/ntpd.c	2010-08-27 02:02:38.000000000 +0200
@@ -1920,9 +1920,28 @@ static NOINLINE void ntp_init(char **arg
 	if (opts & OPT_N)
 		setpriority(PRIO_PROCESS, 0, -15);
 
-	bb_signals((1 << SIGTERM) | (1 << SIGINT), record_signo);
-	/* Removed SIGHUP here: */
-	bb_signals((1 << SIGPIPE) | (1 << SIGCHLD), SIG_IGN);
+	/* If network is up, syncronization occurs in ~10 seconds.
+	 * We give "ntpd -q" a full minute to finish, then we exit.
+	 *
+	 * I tested ntpd 4.2.6p1 and apparently it never exits
+	 * (will try forever), but it does not feel right.
+	 * The goal of -q is to act like ntpdate: set time
+	 * after a reasonably small period of polling, or fail.
+	 */
+	if (opts & OPT_q)
+		alarm(60);
+
+	bb_signals(0
+		| (1 << SIGTERM)
+		| (1 << SIGINT)
+		| (1 << SIGALRM)
+		, record_signo
+	);
+	bb_signals(0
+		| (1 << SIGPIPE)
+		| (1 << SIGCHLD)
+		, SIG_IGN
+	);
 }
 
 int ntpd_main(int argc UNUSED_PARAM, char **argv) MAIN_EXTERNALLY_VISIBLE;


_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic