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