diff --git a/scripts/Makemodule.am b/scripts/Makemodule.am index 6dca6e5..f29f5f9 100644 --- a/scripts/Makemodule.am +++ b/scripts/Makemodule.am @@ -1,4 +1,5 @@ helper_SCRIPTS += scripts/devfs.sh scripts/trymount.sh scripts/ifrename.sh helper_SCRIPTS += scripts/ifcfg.sh scripts/ifdown.sh scripts/modules_load.sh +helper_SCRIPTS += scripts/setntpdate.sh -EXTRA_DIST += scripts/trymount.sh scripts/ifdown.sh +EXTRA_DIST += scripts/trymount.sh scripts/ifdown.sh scripts/setntpdate.sh diff --git a/scripts/setntpdate.sh b/scripts/setntpdate.sh new file mode 100755 index 0000000..c0ed1b4 --- /dev/null +++ b/scripts/setntpdate.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +# Copyright (C) 2018 - David Oberhollenzer +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +resolve() { + local domain="$1" + local server="$2" + + if [ -x "$(command -v dig)" ]; then + if [ -z "$server" ]; then + dig +short "$domain" + else + dig +short "@$server" "$domain" + fi + return $? + fi + + if [ -x "$(command -v drill)" ]; then + if [ -z "$server" ]; then + drill "$domain" | grep "^${domain}." | cut -d$'\t' -f5 + else + drill "@$server" "$domain" | grep "^${domain}." |\ + cut -d$'\t' -f5 + fi + return $? + fi + exit 1 +} + +try_update() { + while read ip; do + if ntpdate -bu "$ip"; then + return 0 + fi + done + + return 1 +} + +pool="pool.ntp.org" +dns="1.1.1.1" + +# try default DNS server first +resolve "$pool" "" | try_update +[ $? -eq 0 ] && exit 0 + +# try fallback public dns server +ping -q -c 1 "$dns" || exit 1 + +resolve "$pool" "$dns" | try_update +exit $?