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 .
"${IPKG_INSTROOT:-}/usr/lib/opennet/on-helper.sh"
17 MAX_UPTIME_SECONDS=360
18 ACCEPTABLE_TIME_OFFSET=180
21 get_current_time_offset_milliseconds() {
25 # Die Liste der konfigurierten Zeitserver auslesen und als Argumente fuer ntpd zusammensetzen.
27 [ -z
"$peer" ] || peer_args=
"$peer_args -p $peer"
29 [ -z
"$peer_args" ] &&
return 0
30 # Alle konfigurierten Zeitserver abfragen.
31 # Wir sind lediglich am "offset"-Wert interessiert.
32 offsets=$(timeout -s INT 4 ntpd -w -n -q $peer_args 2>&1 \
36 # Keine Zeitserver erreichbar? Abbruch ...
37 [ -z
"$offsets" ] &&
return 0
38 # Durchschnitt der Offsets ermitteln.
39 echo
"$offsets" | awk
'
40 BEGIN { summe=0; zaehler=1; }
41 { summe+=$1; zaehler+=1; }
42 END { print int((summe * 1000) / zaehler) }'
46 # Uptime und Zeitsynchronitaet ermitteln
47 time_offset=$(get_current_time_offset_milliseconds)
48 uptime=$(get_uptime_seconds)
49 # beide Bedingungen voneinander trennen - sonst liefert ash eine Fehlermeldung, falls "time_offset" leer ist
50 if [ -z
"$time_offset" ] || [
"$time_offset" -gt
"$ACCEPTABLE_TIME_OFFSET" ]; then
51 # bisher fand kein Zeitabgleich statt - wir pruefen, ob die uptime inzwischen abgelaufen ist
52 # Ist die maximale Uptime abgelaufen? Falls nicht, dann warten wir auf den naechsten Versuch.
53 [
"$uptime" -lt
"$MAX_UPTIME_SECONDS" ] && echo
"$0" | schedule_task && exit 0
54 # Die Zeit ist um - wir schreiben den ungueltigen Zeitstempel.
55 timestamp=
"(no time retrieved)"
57 # unsere Zeit ist synchronisert - wir koennen das reboot-Log schreiben
58 # Ziehe von der aktuellen Zeit die uptime ab
59 boot_time=$(($(date +%s) - uptime))
60 timestamp=$(date --date
"@$boot_time")
63 # 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 einzelenen 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