Yo,
j'ai des retours client de gens qui peuvent plus faire de mise à jour. Le dernier, il suffisait de faire un
Et de relancer les mises à jour. Vu que j'ai voulu le faire "avec lui" j'ai utilisé son outil de mise à jour (kubuntu) et j'ai trouvé le gestionnaire de mise à jour assez misérable ; lent, poussif, donnant un message d'erreur absconds...
C'était kubuntu, mais le gestionnaire de gnome ne me paraît pas mieux.
Alors je me suis dit merde, c'est pas si compliqué. Les gens veulent pas forcément avoir un joli truc graphique, ils veulent un moyen rapide qui marche.
...Alors j'ai pondu ce premier jet. Il est prévu pour être lancé d'un raccourci ; il s'execute tout seul et fini par "j'ai fini : erreur; ou j'ai fini c'est OK".
J'ai essayé de faire pédagogique dans l'execution du script aussi. Ça dit quelles commandes bash ça fait. L'idée est aussi de faire passer un peu de "commandline" dans la tête des gens.
Je pensais ajouter des fonctionalités (du genre reset des sources.list, ou suppresion des paquets externes)... Puis je me suis rappelé que c'était pas le but et qu'il vallait mieux s'arrêter
Y a aucune "dépendance" sinon xfce4-terminal et policykit-1. Ça devrait être mineur à adapter.
#!/bin/bash
if [ $(id -u) -ne 0 ]
then
#hack : l'attente permet de laisser le temps au terminal de s'ouvrir avant pkexec
xfce4-terminal -e "sh -c 'sleep 0.5; pkexec $0;'"
exit 0
fi
function echo2(){ echo -e "$(echo "$@" | sed -r 's|\*([^\*]*)\*|\\033[1m\1\\033[0m|g')"; }
function separator() {
echo -e "\n######################################################################\n"
}
function locked() {
pid=$(lsof -t "/var/lib/dpkg/lock")
islocked=$?
if [ $islocked -eq 0 ]
then
proc=$(ps -p $pid -o command=)
if echo "$proc" | grep -E "packagekitd$"
then
if pgrep gpk-update-viewer
then
proc="gpk-update (\"Outil de Màj de paquet\")"
elif pgrep gnome-software 1>"/dev/null"
then
proc="gnome-software (\"Logiciel\")"
else
proc="Un utilitaire utilisant packagekit"
fi
fi
echo2 "\
Des (dés)installations sont en cours.
Patientez ou fermez-le logiciel bloquant la mise à jour.
Dans le pire des cas, redémarrez.
(Attente de la fermeture de \"*${proc}*\"...)"
#wait $b
while lsof -t "/var/lib/dpkg/lock" >"/dev/null"; do sleep 3; done
echo "Gestionnaire déverrouillé ! Reprise."
separator
fi
}
function interrupt() {
r=$?
out="Erreur $r !"
if echo "$cmd" | grep -q "^apt-get"
then
case "$r" in
100) out="Pas de connexion internet (ou serveurs mirroirs indisponibles)" ;;
130) out="Mise à jour interrompue de force" ;;
esac
fi
echo "Interruption du programme. $out"
read
exit 1
}
function askndo() {
locked
echo2 "*${cmd}* : ${dsc}"
#read -p "Entrée pour lancer"
sleep 1
echo "$cmd" | grep -q "^apt-get" && cmd="$cmd -y"
$cmd || interrupt
echo "Fait."
separator
}
echo -e "\
Outil de mise à jour
=====================
Répare, cherche et met à jour"
#-->Appuyez sur entrée (⏎)<--
#read arg
separator
cmd="dpkg --configure -a"
dsc="cherche des paquets non-configurés"
askndo
cmd="apt-get install -f"
dsc="vérifie les paquets/dépendances cassées"
askndo
cmd="apt-get update"
dsc="cherche les dernières mises à jour"
#We don't have to update every time !
toolate=$(date -d "yesterday" +%s)
[ -e "/var/lib/apt/periodic/update-success-stamp" ] && lastupd=$(date -r "/var/lib/apt/periodic/update-success-stamp" +%s) || lastupd=0
lastmod=$(date -r "/etc/apt/sources.list" +%s)
if [ $toolate -gt $lastupd ] || [ $lastmod -gt $lastupd ]
then
askndo
else
echo2 "Cache de moins de 24h - passe outre *${cmd}*".
separator
sleep 1
fi
cmd="apt-get dist-upgrade"
dsc="télécharge et applique les mises à jour"
askndo
cmd="apt-get autoremove"
dsc="supprime les paquets orphelins"
askndo
echo2 "Votre *$(lsb_release -ds)* est à jour ! \nAppuyez sur une touche ou fermez la fenêtre."
read -n1;
#hack : pour les gens utilisant package-update-indicator
if pid=$(pgrep "package-update-indicator")
then
usr=$(ps -p $pid -o user=)
kill $pid
#pkcon refresh &
#disown $!
su -l "$usr" -c "package-update-indicator" &
disown $!
fi
L'idée c'est que c'est rapide, robuste, et pas obscur.
Dernière modification par otyugh (12-11-2019 01:46:36)