3# Sorge dafuer, dass nach einem Boot-Vorgang ein passender Log-Eintrag in
4# die Banner-Datei geschrieben wird.
5# Vor dem Schreiben des Zeitstempels wird geprueft, ob die aktuelle Systemzeit
6# mit der Zeit der konfigurierten Zeitserver grob uebereinstimmt. Falls dies
7# nicht der Fall ist, wird der Log-Vorgang verschoben, bis eine maximale
8# Wartezeit ueberschritten ist. Anschliessend erfolgt die Ausgabe mit einem
9# passenden Text ("no time retrieved").
11# Falls die maximal zulässige Zeit noch nicht abgelaufen ist, wird eine erneute
12# Ausführung via 'schedule_task' veranlasst.
14# shellcheck source=opennet/packages/on-core/files/usr/lib/opennet/on-helper.sh
15.
"${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
19ACCEPTABLE_TIME_OFFSET=180
22get_current_time_offset_milliseconds() {
26 # Die Liste der konfigurierten Zeitserver auslesen und als Argumente fuer ntpd zusammensetzen.
28 [ -z
"$peer" ] || peer_args=
"$peer_args -p $peer"
30 [ -z
"$peer_args" ] &&
return 0
31 # Alle konfigurierten Zeitserver abfragen.
32 # Wir sind lediglich am "offset"-Wert interessiert.
33 # shellcheck disable=SC2086
34 offsets=
$(timeout -s INT 4 ntpd -w -n -q $peer_args 2>&1 \
38 # Keine Zeitserver erreichbar? Abbruch ...
39 [ -z
"$offsets" ] &&
return 0
40 # Durchschnitt der Offsets ermitteln.
41 echo
"$offsets" | awk
'
42 BEGIN { summe=0; zaehler=1; }
43 { summe+=$1; zaehler+=1; }
44 END { print int((summe * 1000) / zaehler) }'
48# Uptime und Zeitsynchronitaet ermitteln
49time_offset=
$(get_current_time_offset_milliseconds)
50uptime=
$(get_uptime_seconds)
51# beide Bedingungen voneinander trennen - sonst liefert ash eine Fehlermeldung, falls "time_offset" leer ist
52if [ -z
"$time_offset" ] || [
"$time_offset" -gt
"$ACCEPTABLE_TIME_OFFSET" ]; then
53 # bisher fand kein Zeitabgleich statt - wir pruefen, ob die uptime inzwischen abgelaufen ist
54 # Ist die maximale Uptime abgelaufen? Falls nicht, dann warten wir auf den naechsten Versuch.
55 [
"$uptime" -lt
"$MAX_UPTIME_SECONDS" ] && echo
"$0" | schedule_task && exit 0
56 # Die Zeit ist um - wir schreiben den ungueltigen Zeitstempel.
57 timestamp=
"(no time retrieved)"
59 # unsere Zeit ist synchronisert - wir koennen das reboot-Log schreiben
60 # Ziehe von der aktuellen Zeit die uptime ab
61 boot_time=
$((
$(date +%s) - uptime))
62 timestamp=
$(date --date
"@$boot_time")
65# Schreibe den Zeitstempel
add_banner_event(event, timestamp)
Füge ein Ereignis zum dauerhaften Ereignisprotokoll (/etc/banner) hinzu.
uci_get_list(uci_path)
Liefere alle einzelnen Elemente einer UCI-Liste zurück.
set eu on function print_services services log for dir in etc on services d var on services volatile d