logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 12-11-2019 00:55:41

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Utilitaire de mise à jour

Yo,
j'ai des retours client de gens qui peuvent plus faire de mise à jour. Le dernier, il suffisait de faire un

dpkg --configure -a


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 tongue

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)


virtue_signaling.pngpalestine.png

En ligne

#2 23-11-2019 00:47:53

framend
Modo-Moule zébrée
Lieu : .$_ENV["HOME"]
Distrib. : Debian «Sid»
Noyau : uname -r
(G)UI : sway
Inscription : 17-11-2018

Re : Utilitaire de mise à jour

Salut, en remplacant xfce4-terminal par $TERM n'est-ce pas plus adaptable ?
Je regarde demain, là dodo…

“It is not daily increase but daily decrease, hack away the unessential. The closer to the source, the less wastage there is.” - Bruce Lee (philosophe)

Hors ligne

#3 23-11-2019 01:15:33

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Utilitaire de mise à jour

Selon les terminaux, les arguments varieraient, non ?

Dernière modification par otyugh (23-11-2019 01:21:03)


virtue_signaling.pngpalestine.png

En ligne

#4 23-11-2019 15:22:20

phlinux
Membre
Distrib. : Buster
Noyau : 5.10
(G)UI : Openbox (+Rox+Feh)
Inscription : 09-05-2009

Re : Utilitaire de mise à jour

Bjr,

Je pense que c'est juste esthétique de ma part mais pour

echo -e "\n######################################################################\n"

tu peux si tu veux remplacer par ça

echo -e "\n`python -c 'print "#"*70'`\n"


Pages perso : feh, omegat, udisks, passerelle, schroot vraiment transparent

Hors ligne

#5 23-11-2019 15:29:34

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : Utilitaire de mise à jour

Ajouter une dépendance python pour une ligne ? No can do !

Mais j'accepterai mieux printf '#%.0s' {1..42} qui fait partie de coreutils. Cela dit j'ai tendance à faire appel à des commandes compliquées seulement quand j'en suis contraint ; dans la mesure du possible des appels "cons" ont l'avantage d'être plus lisibles pour tout le monde - et il n'y a aucun enjeu d'optimisation ici.

Dernière modification par otyugh (23-11-2019 15:52:23)


virtue_signaling.pngpalestine.png

En ligne

Pied de page des forums