- Bearbeitet
Hier die aktuelle Version:
Das ureminder Skript
Den skript-code markieren und mit strg+c in die Zwischenablage kopieren.
sudo nano /usr/local/bin/ureminder
- aufrufen mit strg+v die Zwischenablage einfügen, mit Strg+o return speichern und mit strg+x schließen.chmod +x /usr/local/bin/ureminder
- Das script ausführbar machen.pacman -Syu libnotify reflector pacman-contrib
- abhängige Pakete installierensudo /usr/local/bin/ureminder
- testen ob das skript läuft und kein Fehler auswirft!#!/bin/bash #file-> /usr/local/bin/ureminder TEXTDOMAIN=ureminder TEXTDOMAINDIR=/usr/share/locale version="ureminder version 8.0" # (Default) Days between auto upgrades days="7" # Send user a notify-send meeage from root send() { TUSER=$(who -T | awk '/+/{print $1}' | head -1) sudo -u $TUSER DISPLAY=$DISPLAY DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u $TUSER)/bus notify-send "$@" } # Display Help Help() { echo echo $"Reminds to upgrade and does it if user does not" echo echo $"Usage: ureminder [-s|a|t|b|h|v|u|d]" echo $"Options:" echo $"s Display message: Save your Documents & pacman -Syu" echo $"a Display message: After upgrade: Do.." echo $"t Display message: Auto upgrade in x h y m (only with [u|d])" echo $"b Debug mode" echo $"h Print this help" echo $"v Print version" echo $"u Auto upgrade ON. (Or set option d)" echo $"d num Days between upgrades (default: d 7)" echo echo $"Example: ureminder -tasd 14" echo } # Get options while getopts ":abd:hstuv" option; do case $option in a) # after Upgrade:messages afterdo=1 echo $"Display message: After upgrade: Do.. - ON";; b) # debug mode set -vx echo $"Debug mode activated";; d) # Enter days re='^[0-9]+$' if ! [[ $OPTARG =~ $re ]]; then echo $"Error: $OPTARG is not a number!" >&2; exit 1 elif [ $OPTARG -lt 1 ]; then echo $"d needs a positiv number as argument!"; exit 1 else days=$OPTARG upgrade=1 echo $"Auto upgrade - days=$days - ON" fi;; h) # Display Help Help exit 0;; s) # save documents and pacman -Syu messages savesyu=1 echo $"Display message: Save your Documents & pacman -Syu - ON";; t) # Message till auto upgrade time=1 echo $"Display message: Next upgrade in x hours - ON";; u) # Auto Upgrade upgrade=1 echo $"Auto upgrade - days=$days - ON";; v) # Display Version echo $version exit 0;; ?) # Invalid option echo $"Usage: ureminder [-s|a|t|b|h|v|u|d argument]" echo $"Display help: ureminder -h" exit 1;; esac done # error db.lck if [ -f /var/lib/pacman/db.lck ] && [ ! $(pgrep pacman) ]; then send $"Error: Pacman database locked" "<a href='https://wiki.archlinux.org/title/Pacman#%22Failed_to_init_transaction_(unable_to_lock_database)%22_error'>How to solve the problem</a>" -t 0 -u critical exit 1 fi # update mirrors reflector --age 1 --delay 0.25 --protocol https --latest 5 --save /etc/pacman.d/mirrorlist || Error="reflector --age 1 --delay 0.25 --protocol https --latest 5" # del PKGS from cache which are not installed anymore paccache -ruk0 || Error="paccache -ruk0" # keep current package and last for downgrade purpose paccache -rk2 || Error="paccache -rk2" # list all installed packages pacman -Qqe > /var/pkg.lst || Error="pacman -Qqe" # download new packages pacman -Syuw --noconfirm || Error="# pacman -Syuw" # check for PKGS upgrades available PKGS=($(pacman -Qu | awk '{print $1}')) || Error="pacman -Qu" Nr=0 for PKG in ${PKGS[@]}; do Nr=$(($Nr+1)) PK+=("$Nr.$PKG") done # KERNEL upgrade KERNEL=$(cat /proc/version | awk '{ print $4}'| sed -e 's/(//' -e 's/@.*//') for i in ${PKGS[*]}; do if [[ $KERNEL == $i ]]; then RKERNEL=$i fi done # GUI upgrade GUIs=('awesome' 'budgie-session' 'cinnamon-desktop' 'deepin-daemon' 'gnome-shell' 'i3' 'lxsession' 'lxqt-session' 'mate-desktop' 'plasma-desktop' 'sway' 'xfce4-session') for j in ${GUIs[@]}; do if [ $(pgrep -fc $j) -gt "0" ]; then for l in ${PKGS[@]}; do if [[ $l == $j ]]; then GUI=$j fi done fi done # wich of these often used applications is runnig now APPS=('firefox' 'librewolf' 'chromium' 'dolphin' 'nautilus' 'kmail' 'kontact' 'kate' 'vim' 'libreoffice' 'gimp' 'inkscape' 'kdenlive') for k in ${APPS[@]}; do if [ $(pgrep -fc $k) -eq "0" ]; then APPS=("${APPS[@]/$k}") fi done # Exchange app-name with pkg-name if [[ "${APPS[@]/libreoffice/}" != "${APPS[@]}" ]]; then APPS=("${APPS[@]/libreoffice}") APPS+=("libreoffice-fresh") APPS+=("libreoffice-still") fi # wich of these runnig applicatins get's upgrades for m in ${PKGS[*]}; do for n in ${APPS[*]};do if [[ "$m" == "$n" ]]; then UAPPS+=($n) fi done done # Exchange pkg-name with app-name if [[ "${UAPPS[@]/libreoffice-still/}" != "${UAPPS[@]}" ]]; then UAPPS=("${UAPPS[@]/libreoffice-still}") UAPPS+=("libreoffice") elif [[ "${UAPPS[@]/libreoffice-fresh/}" != "${UAPPS[@]}" ]]; then UAPPS=("${UAPPS[@]/libreoffice-fresh}") UAPPS+=("libreoffice") fi #messages SAVE=$"Save open documents!\n" SYU=$"Run # pacman -Syu on terminal!\n" AFTER=$"After upgrading:\n" UPGRADE=$"Auto upgrade in $HOURS h $MINUTES m\n" PKMESS=$"${#PKGS[*]} package(s): ${PK[*]}" if [[ $GUI != "" ]] && [[ "$RKERNEL" != "" ]]; then MESS=$"GUI and kernel upgrade:" DO=$"Reboot your system!" elif [[ $GUI != "" ]]; then MESS=$"$GUI upgrade:" DO=$"Restart your usersesson!\n" elif [[ $RKERNEL != "" ]] && [ ${#UAPPS[*]} -gt "0" ]; then MESS=$"Application and kernel upgrade:" DO=$"Restart ${UAPPS[*]} and other applikations you are working with! New $RKERNEL version will run after your next system boot.\n" elif [[ $RKERNEL != "" ]]; then MESS=$"Kernel upgrade:" DO=$"New $RKERNEL version will run after your next system boot.\n" elif [ ${#UAPPS[*]} -gt "0" ]; then MESS=$"Application upgrade:" DO=$"Restart${UAPPS[*]} and other applikations!\n" else MESS=$"Upgrade successfull:" DO=$"Restart applikations in use!\n" fi # time till auto upgrade (Unix seconds) NOW=$(date --date='now' +%s) UPAC=$(date -d $(awk '/upgraded/ { print $1 }' /var/log/pacman.log | tail -1 | sed -e 's/\[//' -e 's/\]//') +%s) NTIMER=$(date -d $(systemctl list-timers ureminder.timer | awk 'NR>1 && NR<3{print $2,$3}' | sed -e 's/ /T/') +%s) LTIMER=$(date -d $(systemctl list-timers ureminder.timer | awk 'NR>1 && NR<3{print $7,$8}' | sed -e 's/ /T/') +%s) NEXT=$((days*86400+UPAC-NOW)) PERIOD=$((NTIMER-LTIMER)) COUNTS=$((NEXT/PERIOD)) HOURS=$(( (NOW-LTIMER+PERIOD*COUNTS) / 3600)) REST=$(( (NOW-LTIMER+PERIOD*COUNTS) % 3600)) MINUTES=$(( (3600-REST) / 60)) #if [[ "$LTIMER x" == " x" ]]; then HOURS=$((NEXT/3600)); MINUTES=30; fi echo $"Next upgrade in $HOURS h $MINUTES m" # Abitity to auto upgrade all 86400sec-600sec=85600sec=23 hous and 50 minutes if [ "$(((NOW-UPAC)/days))" -ge "85600" ] && [ "${#PKGS[*]}" -gt "0" ] && [ $upgrade ]; then NID=$(send $"Upgrade starts in 1 minute:" $"$SAVE" -t 0 -u normal -p) sleep 60 NID=$(send $"Upgrading:" $"Keep system running!" -t 0 -u critical -r $NID -p) pacman -Su --noconfirm || Error="# pacman -Su" send "$MESS" "$DO" -t 0 -u normal -r $NID elif [ "${#PKGS[*]}" -gt "0" ]; then if [ $savesyu ] && [ $afterdo ] && [ $time ] && [ $upgrade ] then send "$PKMESS" "$SAVE$SYU$AFTER$DO$UPGRADE" -t 0 -u normal elif [ $savesyu ] && [ $time ] && [ $upgrade ]; then send "$PKMESS" "$SAVE$SYU$UPGRADE" -t 0 -u normal elif [ $afterdo ] && [ $time ] && [ $upgrade ]; then send "$PKMESS" "$AFTER$DO$UPGRADE" -t 0 -u normal elif [ $savesyu ] && [ $afterdo ]; then send "$PKMESS" "$SAVE$SYU$AFTER$DO" -t 0 -u normal elif [ $savesyu ] && [ $afterdo ]; then send "$PKMESS" "$SAVE$SYU$AFTER$DO" -t 0 -u normal elif [ $time ] && [ $upgrade ]; then send "$PKMESS" "$UPGRADE" -t 0 -u normal elif [ $savesyu ];then send "$PKMESS" "$SAVE$SYU" -t 0 -u normal elif [ $afterdo ]; then send "$PKMESS" "$AFTER$DO" -t 0 -u normal else send "$PKMESS" -t 0 -u normal fi fi # error message if [ "$Error" != "" ]; then send $"Error: $Error" $"To analyse run this command on terminal!" -t 0 -u critical fi # TODO: # GUI- und APP-Messiges noch um weite Pakete ergänzen und weiter testen. # Für APP - Messige Ablauf umdrehen. Zuerst pkgs upgrades testen spart eine Namenswandlung für libreoffice ein. # Arch Linux News anzeigen. # In Plasma und GNOME die Notiz Meldung größer darstellen lassen damit eine lange Paket-Upgrade-Liste komplett angezeigt wird. #Know issues: # 'pacman -Qu' does not list new added dependencies of package upgrades. This is not very importent for ureminder script - Fix would need a feature request to pacman devs.
Der ureminder.service
- Den code markieren und mit strg+c in die Zwischenablage kopieren.
sudo nano /usr/lib/systemd/system/ureminder.service
- aufrufen mit strg+v die Zwischenablage einfügen, mit Strg+o return speichern und mit strg+x schließen.
#file->/usr/lib/systemd/system/ureminder.service
[Unit]
Description=ureminder.service
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/ureminder -astu
[Install]
WantedBy=basic.target
Der ureminder.timer
- Code markieren und mit
strg+c
in die Zwischenablage kopieren sudo nano /usr/lib/systemd/system/ureminder.timer
mit strg+v einfügen strg+o return speichern, strg+x schließensudo systemctl enable --now ureminder.timer
- anschließend den timer aktivieren
#file->/usr/lib/systemd/system/ureminder.timer
[Unit]
Description=ureminder.timer
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=basic.target
7.8.2024 changelog:
- Erkennt den jeweils laufenden kernel und die laufende GUI und gibt nach einem upgrade vom kernel bzw. der GUI entsprechende Mitteilungen aus.
18.8.2024 changelog:
- Erkennt wenn eine laufende Anwendung ein upgrade erfahren hat und fordert auf sie neu zu starten. (Nur für sehr häufig genutzte Anwendungen)
- Option --days --verboste --help eingeführt (DAYS=7 default)
- Den Timer auf täglich eingestellt.
- Konsolenmeldung ab wann ein autoupgrade möglich ist.
- reflector auf internationalen Gebrauch eingestellt
- Funktion send überarbeitet
- Nummerrierung der verfügbaren upgrades damit eine eventuell abgeschnittene Meldung keine Vollständigkeit vortäucht. (Plasma zeigte bisher nur ca. 60 Pkgs namentlich an, obwohl das eine mal 82 upgrades anstanden.)
22.8.2024 changelog:
- Zeile 127 PRAPPS+=('$n')->PRAPPS+=($n)
- Zeile 138: $PRAPPS->${PRAPPS[*]}
- Skript für Übersetzungen eingerichtet und eine deutsche ureminder.mo erstellt.
27.8.2024 changelog:
- Skript-Code an meheren Stellen geändert und Rihenfolge umgestellt.
- Gibt schon bei der Upgade-Aufforderung Hinweise was danach zu tun ist.
29.8.2024 changelog:
- Bezieht die Timer Einstellung mit ein und zeigt jetzt präzise den Zeitpunkt des Auto-Upgrade an.
- Optionen neu gestaltet. Die verschiedenen Mitteilungen und das Autoupdate müssen jetzt explizit ausgewählt werden.
@md_39118 Viel Spaß damit. 😉
@GerBra
Das Autoupgrade lässt sich jetzt bequem per Option z.B. von
ureminder --days 30
für fast NIE bis --days 30000 NIEmals einstellen. 😉
Das käme wohl auch deiner Arbeitsweise entgegen, denn die fälligen Pkgs upgrades werden dir dann automatisch angezeigt.
Zusätzlich wäre es möglich Vorwarnungen einzubauen wenn upgrades anstehen, die bei dir sensibel sind.
Vielen Dank für das ausführliche Brainstorming, deine Argumente waren mir sehr hilfreich.