66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| # (using bashism (arrays) in dhcp config)
 | |
| 
 | |
| #exec >/dev/null
 | |
| exec 2>&1
 | |
| exec </dev/null
 | |
| 
 | |
| user=root
 | |
| start_delay=15
 | |
| net_down_delay=5
 | |
| pool="us.pool.ntp.org" # replace "us" with your country code
 | |
| 
 | |
| service="${PWD##*/}"
 | |
| rundir="/var/run/service/$service"
 | |
| default_p_opt="-p 0.$pool -p 1.$pool -p 2.$pool -p 3.$pool"
 | |
| 
 | |
| echo "* Checking network"
 | |
| test -f /var/run/service/fw/up || exec sleep $net_down_delay
 | |
| 
 | |
| # With multiple interfaces (e.g. wired+wireless) going up,
 | |
| # networking scripts may restart ntpd service several times
 | |
| # in quick succession. Do not be too eager to start sending
 | |
| # NTP requests:
 | |
| sleep $start_delay
 | |
| 
 | |
| # Make sure rundir/ exists
 | |
| mkdir -p "$rundir" 2>/dev/null
 | |
| chown -R "$user": "$rundir"
 | |
| chmod -R a=rX "$rundir"
 | |
| rm -rf rundir 2>/dev/null
 | |
| ln -s "$rundir" rundir
 | |
| 
 | |
| # Grab config from dhcp
 | |
| cfg=-1
 | |
| for f in rundir/*.ntpconf; do
 | |
| 	test -f "$f" || continue
 | |
| 	. "$f"
 | |
| done
 | |
| 
 | |
| # Select peers
 | |
| p_opt=""
 | |
| cfg=0
 | |
| while test x"${ntpip[$cfg]}" != x""; do
 | |
| 	p_opt="$p_opt -p ${ntpip[$cfg]}"
 | |
| 	let cfg=cfg+1
 | |
| done
 | |
| test x"$p_opt" == x"" && p_opt="$default_p_opt"
 | |
| 
 | |
| if test x"$p_opt" == x""; then
 | |
| 	echo "* No NTP peers configured, stopping"
 | |
| 	svc -o .
 | |
| 	exec sleep 1
 | |
| fi
 | |
| 
 | |
| 
 | |
| # Let others know that we are up
 | |
| date '+%Y-%m-%d %H:%M:%S %Z' >rundir/up
 | |
| 
 | |
| # Go go go
 | |
| echo "* Starting ntpd[$$]"
 | |
| exec \
 | |
| env - PATH="$PATH" \
 | |
| softlimit \
 | |
| setuidgid "$user" \
 | |
| ntpd -ddnNl -S ./ntp.script $p_opt
 | 
