#!/bin/bash -eEu ## ## /root/sys-upd.bash : script de mise a jour du systeme par urpmi ## avec traitement special pour google-chrome (probleme de cle media) # Auteur : yves.demur@m4am.net 2025-03-31 ## Aide : $0 [-h|--help] ## Usage : $0 -m ## Usage : $0 [-u|-f] [-e|-r|-p] ## Ce script peut etre lance (options -m et -u) par le service sys-upd ## voir les notes en fin du script ## Les traces sont dans $0.log ## La marque est effacable par tous ## en mettant a 0 la taille du fichier /tmp/AAA_*.txt : ## $ echo -n > /tmp/AAA_*.txt ## Options : if [ $# -eq 0 ] || [ "${1:-}" = "-h" ] || [ "${1:-}" = "--help" ] ; then while read -r l ; do [ "${l##'##'}" != "${l}" ] || continue ; l="${l##'## '}" ; l="${l##'##'}" ; echo "${l//'$0'/"$0"}" ; done < "$0" exit fi exec &>> "$0.log" fic="/tmp/AAA_${0##*/}.txt" if [ "${1:-}" = "-m" ] ; then ## -m : Positionner la marque et terminer echo -n 1 > "${fic}"; echo -e "\nPositionnement de la marque" chmod 666 "${fic}" ; ls -l --time-style=+%Y%m%d_%H%M%S "${fic}" exit ## Sinon eventuellement ## -u : Mettre a jour le systeme si la marque est positionnee ## -f : Forcer la mise a jour sans tenir compte de la marque elif { [ "${1:-}" = "-f" ] && shift ; } || { [ "${1:-}" = "-u" ] && shift && [ -s "${fic}" ] ; } ; then echo ; date +%Y%m%d_%H%M%S (set -x ; /usr/sbin/urpmi.update -a) xcl="" # medias de paquetages a installer avec --force for med in google-chrome ; do ! grep -q -e "^${med} " /etc/urpmi/urpmi.cfg || { xcl="${xcl} --excludemedia ${med}" (set -x ; /usr/sbin/urpmi --auto --auto-select --auto-orphans --searchmedia ${med} --force) ; } done # autres medias (set -x ; /usr/sbin/urpmi --auto --auto-select --auto-orphans${xcl}) rm -f /var/cache/urpmi/rpms/*.rpm &> /dev/null date +%Y%m%d_%H%M%S fi ## Ensuite, eventuellement ## -e : Effacer la marque if [ "${1:-}" = "-e" ] ; then echo -n > "${fic}" ; chmod 666 "${fic}" ## -r : Reboot (sans mise a jour et apres temporisation de 30s) elif [ "${1:-}" = "-r" ] ; then sleep 30 ; echo -n > "${fic}" ; echo ; date +%Y%m%d_%H%M%S ; (set -x ; systemctl reboot) ## -p : Poweroff (sans mise a jour et apres temporisation de 30s) elif [ "${1:-}" = "-p" ] ; then sleep 30 ; echo -n > "${fic}" ; echo ; date +%Y%m%d_%H%M%S ; (set -x ; systemctl poweroff) fi # --- Fichier mode 644 = /usr/lib/systemd/system/sys-upd.service --- # # Consultation des logs par # journalctl -x | grep sys-upd # [Unit] # Description=Mise a jour du systeme avant le shutdown/reboot # # Besoin de dbus.socket pour le systemd shutdown inhibition lock # After=local-fs.target network.target dbus.socket rc-local.service # [Service] # Type=oneshot # RemainAfterExit=yes # ExecStart=/root/sys-upd.bash -m # ExecStop=-/root/sys-upd.bash -u # TimeoutSec=900 # [Install] # WantedBy=multi-user.target