| #!/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 |