OpenWrt: Update-Benachrichtigung für Packages

OpenWrt bietet aktuell keine (vernünftige) Update-Benachrichtigung für installierte Software bzw. Packages an. Das Einspielen von (Sicherheits-)Updates zählt allerdings zu einem der grundlegenden Gesetze in der IT-Welt. Daher habe ich zwei Skripts gebaut, die den Nutzer per E-Mail über verfügbare Updates benachrichtigen und das manuelle Einspielen von Updates erleichtern.

Zunächst wird das Paket mailsend installiert – wahlweise über die GUI oder SSH. Anschließend loggen wir uns per SSH ein und erstellen das erste Skript. Sofern Updates zur Verfügung stehen wird es eine E-Mail mit allen verfügbaren Updates an eine ausgewählte E-Mail-Adresse versenden.

nano /root/update-notification
#!/bin/sh

opkg update 
opkg list-upgradable > updates.txt

if [ -s updates.txt ] 
then 
   mailsend -smtp <SMTP-Server> -port 465 -t <Empfängeradresse> -f <Absenderadresse> -sub 'OpenWrt-Updates' -ssl -auth -user <E-Mail-Nutzername> -pass "E-Mail-Auth-Passwort" -mime-type "text/plain" -msg-body "updates.txt" 
fi 
rm updates.txt

Die mailsend-Parameter müsst ihr an eure Bedürfnisse anpassen. Hier die Zeile aus dem Skript gefüllt mit Beispieldaten:

mailsend -smtp smtp.mailbox.org -port 465 -t admin@meinedomain.de -f openwrt_sender@mailbox.org -sub 'OpenWrt-Updates' -ssl -auth -user openwrt_sender@mailbox.org -pass "secret123456" -mime-type "text/plain" -msg-body "updates.txt"

Das Skript wird anschließend noch als ausführbar markiert:

chmod +x /root/update-notification

Über das Webinterface -> System -> Scheduled Tasks könnt ihr das Skript anschließend zu einem beliebigen Zeitpunkt ausführen:

# 6 Uhr  
# Update list of available packages | Send notification mail
45 06 * * * /root/update-notification

Nach diesem kleinen Eingriff erhaltet ihr jeden Morgen um 6:45 Uhr eine E-Mail, sofern Package-Updates zur Verfügung stehen.

Das Einspielen von Updates sollte manuell über einen SSH-Login erfolgen. Auch hierfür erstellen wir ein kleines Skript, was jedes Mal aufgerufen wird, wenn wir uns per SSH auf den OpenWrt-Router einloggen:

nano ~/.profile
#!/bin/sh

opkgInstalled="$(opkg list-installed 2> /dev/null | wc -l)" #silencing error output
opkgUpgradable="$(opkg list-upgradable 2> /dev/null | wc -l)" #silencing error output

echo "$opkgInstalled packages are installed." && echo "$opkgUpgradable packages can be upgraded." && echo
echo "Upgrade commands:"
echo "List available updates: opkg list-upgradable"
echo "Upgrade package: upgrade <PACKAGE>"
echo "Upgrade all packages: opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade" && echo

Beispiel-Output des Skripts nach einem Login per SSH:

126 packages are installed.
0 packages can be upgraded.

Upgrade commands:
List available updates: opkg list-upgradable
Upgrade package: upgrade <PACKAGE>
Upgrade all packages: opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

Die Upgrade commands sind als Gedächtnisstütze gedacht. Updates von Packages sollten manuell per folgendem Befehl erfolgen:

upgrade <PACKAGE>

Wer alle Updates auf einmal einspielen möchte, kann dafür den folgenden Befehl benutzen:

opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade

Hinweis

Im Rahmen der OpenWrt-Artikelserie werde ich das Thema nochmal aufgreifen und ebenfalls einen Upgrade-Prozess zu einer höheren OpenWrt-Version beschreiben.
Du kannst den Blog aktiv unterstützen! Mitmachen ➡