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" 18 MAX_UPTIME_SECONDS=360
19 ACCEPTABLE_TIME_OFFSET=180
22 get_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 49 time_offset=$(get_current_time_offset_milliseconds)
50 uptime=$(get_uptime_seconds)
51 # beide Bedingungen voneinander trennen - sonst liefert ash eine Fehlermeldung, falls "time_offset" leer ist 52 if [ -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