[[Vorlage(Getestet,general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Rechte: Rechte für Dateien und Ordner ändern] }}} [[Inhaltsverzeichnis(1)]] Dieses Skript sucht nach vorhandenen Updates und vergleicht diese ggf. mit einer Referenzliste. Sollten welche vorhanden sein wird per Telegram- oder LINE-Messenger eine Nachricht versendet. Stimmt ein gefundenes Update mit der Referenzliste überein wird dies in der Nachricht gesondert angezeigt. Das Senden der Nachricht wird nur ausgelöst wenn im Vergleich zum letzten Lauf neue Updates hinzugekommen sind. =Vorbereitung= Zur Vorbereitung muss erst ein Telegram- oder LINE-Bot eingerichtet werden, siehe Abschnitt [#Links Links] Folgendes muss notiert oder anderweitig zwischengespeichert werden für spätere Schritte: {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Telegram +++ `Name` Beispiel +++ `Bot-Token` 123456:abcde1234ABCDE +++ `Chat-ID` 268963852 }}} {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> LINE +++ `Name` Beispiel +++ `Access-Token` eyJhbGciOiJIUzI1NiJ9.UnQ_o-GP0VtnwDjbK0C8E_NvK }}} =Quellcode= Folgenden Quellcode in eine neu erstellte Datei einfügen (z.B. '''updatecheck.sh'''). {{{#!code bash #!/bin/bash #Messenger festlegen ( leer = Telegram / 1 = LINE ) readonly SELECT= #Bot-ID's und Token hier eintragen readonly BOT_TOKEN='' #Für Benachrichtigung mit Telegram readonly CHAT_ID='' #Für Benachrichtigung mit Telegram readonly ACCESS_TOKEN='' #Für Benachrichtigung mit LINE #Zu sendende Nachricht function msg_create { if [ "$flagname" == "" ]; then flagname=N/A fi MESSAGE="Es sind $anzahl Updates verfügbar! Flags: $flags - [$flagname]" } #Setze Konstanten readonly UDLIST=/var/tmp/udlist.tmp readonly UDLAST=/var/tmp/udlast.tmp readonly REFLIST=$(xdg-user-dir DOCUMENTS)/reflist.txt readonly LOGFILE=$HOME/update.log readonly MAXLINES=19 readonly TELEURL='https://api.telegram.org/bot' readonly LINEURL='https://notify-api.line.me/api/notify' # Falls nicht vorhanden, erstelle benötigte Dateien. touch $UDLAST $LOGFILE $REFLIST #Logfilefunktion mit Zeilenbeschränkung function logsetup { TMP=$(tail -n $MAXLINES $LOGFILE 2>/dev/null) && echo "${TMP}" > $LOGFILE exec > >(tee -a $LOGFILE) exec 2>&1 } function log { echo "$(date +"%d.%m.%Y - %H:%M:%S"): $*" } # Vergleiche verfügbare Updates mit Referenzliste und gleiche mit letztem Run ab. anzahl=$(apt-get -q -y --ignore-hold --allow-unauthenticated -s upgrade | grep ^Inst | cut -d\ -f2 | wc -l) if (( $anzahl != 0 )); then apt-get -q -y --ignore-hold --allow-unauthenticated -s upgrade | grep ^Inst | cut -d\ -f2 >> $UDLIST newupdates=$(grep -Fxv -f $UDLAST $UDLIST | wc -l) if (( $newupdates != 0 )); then flags=$(grep -f $REFLIST $UDLIST | wc -l) flagname=$(grep -f $REFLIST $UDLIST) msg_create if [ "$SELECT" == "" ]; then curl -s -k "$TELEURL$BOT_TOKEN/sendMessage" -d text="$MESSAGE" -d chat_id=$CHAT_ID else curl -X POST -H 'Authorization: Bearer $ACCESS_TOKEN' -F 'message=$MESSAGE' $LINEURL fi logsetup log Updates: $anzahl Flags: $flags - [$flagname] fi fi # Ersetze Log des letzten Runs mit dem aktuellen Log. rm $UDLAST mv $UDLIST $UDLAST exit 0 }}} Danach muss das Skript noch ausführbar gemacht werden[3]. [[Vorlage(Bildunterschrift, ./telegram_bsp.jpg, 250, "Beispiel für eine Benachrichtigung per Telegram", right)]] =Anpassung des Quellcodes= ==Anpassungen für Telegram== Bei der Verwendung von Telegram muss bei `BOT_TOKEN` in der 7. Zeile das entsprechende Token eingefügt werden. In der 8. Zeile muss die Chat-ID eingetragen werden. Beispiel: {{{ readonly BOT_TOKEN='123456:abcde1234ABCDE' readonly CHAT_ID='268963852' }}} ==Anpassungen für LINE== Bei der Verwendung des LINE-Messenger muss in der 4.Zeile bei `SELECT=` eine `1` eingetragen werden außerdem muss der Access-Token in der 9.Zeile eingetragen werden: {{{ readonly SELECT=1 }}} {{{ readonly ACCESS_TOKEN='eyJhbGciOiJIUzI1NiJ9.UnQ_o-GP0VtnwDjbK0C8E_NvK' }}} =Automatisches Ausführen= Das Skript kann in regelmäßigen Intervallen mittels [:Cron:Cronjob] gestartet werden. Im Terminal crontab mittels `crontab -e` öffnen und in der Crontab den gewünschten Eintrag vornehmen: {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Cronjob Beispiele +++ Wann Eintrag +++ `Mittags um 12Uhr` 0 12 * * * /bin/sh /Pfad/zum/Script.sh & +++ `Bei Neustart` @reboot /bin/sh /Pfad/zum/Script.sh & +++ `Alle 8 Stunden` * */8 * * * /bin/sh /Pfad/zum/Script.sh & }}} =Informationen= ==Erstellte Dateien== Das Skript erstellt selbstständig mehrere Dateien welche verschiedene Funktionen erfüllen: {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Erstellte Dateien +++ Pfad und Name Bedeutung +++ '''/var/tmp/udlist.tmp''' In dieser Datei werden die aktuell verfügbaren Updates als Liste eingetragen. Diese Datei wird nach erfolgreichem Lauf wieder gelöscht. +++ '''/var/tmp/udlast.tmp''' Diese Datei enthält die Liste der Updates des letzten Laufs. +++ '''$HOME/Dokumente/reflist.txt''' In der Referenzliste können manuell Pakete eingetragen werden welche in der zu übermittelnden Nachricht gesondert durch Flags hervorgehoben werden sollen. +++ '''$HOME/update.log''' Hier wird jeweils ein Logeintrag erstellt wenn neue Updates verfügbar sind. Log wird auf 20 Einträge beschränkt. (Kann in Zeile 24 verändert werden / Log deaktivieren durch auskommentieren oder löschen der Zeilen 56+57) }}} ==Beispiel reflist.txt== {{{ pure-ftpd build-essential tcpdump dnsutils libsodium-dev locate libsystemd-dev pkg-config }}} = Links = * [https://homematic.simdorn.net/telegram-bot-einrichten/ Telegram-Bot einrichten] {de} * [https://support.messagebird.com/hc/en-us/articles/209600005-How-to-add-a-LINE-Bot-to-the-Chat-API LINE-Bot einrichten] {en} #tag: System, Shell, Paketverwaltung