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