Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.

Script de maintenance

#1Messageil y a 6 ans

Bonjour à tous,

Je me suis concocté un modeste script de maintenance, à faire de temps à autre lors d'une annonce de mise à jour, par exemple. :wink: C'est plus une ébauche et un peu rudimentaire sans doute. A papajoke, lemust83, Smurf et autres spécialistes, un peu d'indulgence, hein ? :merci: Je l'ai nommé maintenance et placé dans mon dossier de scripts après lui avoir octroyé les droits d'exécution.

#!/bin/bash
# version du 24/04/2018

# raz du sudo par sécurité à la sortie du script.
cleanup() {    sudo -k; }
trap cleanup EXIT

pwd
sleep 2

# liste le taux d'utilisation des volumes, systeme et tmp. Propose de purger le cache de pacman des paquets non installés.
df | grep -E "^Sys|/$|tmp$" --color=never
read -p "Nettoyer les anciennes versions des paquets, du cache de pacman ? (o/N) " laReponse
if [[ "$laReponse" == "o" ]] || [[ "$laReponse" == "O" ]]; then
    echo "Purge du cache de pacman en cours"
    sudo pacman -Sc
fi
sleep 2

# liste les paquets aur installés dont ceux qui sont "out-of-date et nécéssitent un update". Mise à jour de Aur.
yaourt -Qam 
read -p "Mise à jour des paquets aur. Appuyez sur entrée pour continuer" -n1
yaourt -Sua

# update & traitement des orphelins et fichiers .pac
read -p "Mise à jour des paquets officiels. Appuyez sur entrée pour continuer" -n1
sudo pacman -Syu
read -p "Vérifie la présence de paquets orphelins, appuyer sur entrée" -n1
yaourt -Qdt
read -p "Affiche le nombre de fichiers .pac en attente. Appuyer sur entrée" -n1
pacdiff --output | wc -l
read -p "Fichiers .pac à traiter, appuyer sur entrée" -n1
yaourt -C

# vérifie la cohérence entre les fichiers /etc/passwd & /etc/shadow.
read -p "Vérification cohérence des fichiers passwd & shadow. Appuyer sur entrée" -n1
sudo pwck
sudo grpck

# vérifie la validité des kernel linux installés
read -p "Compare les noyaux linux installés avec ceux des dépôts. En cas d'erreur sur retour, désinstaller le noyau obsolète." -n1
while IFS= read -r ; do
    if LANG=C pacman -Si "$REPLY" &>/dev/null; then
    echo " kernel $REPLY ok"
    else
        echo -e " kernel $REPLY obsolète à désinstaller avec mhwd-kernel -r $REPLY\a"
    fi
done < <(mhwd-kernel -li | awk '/\*/ {print $2}')

# Recherche les liens symboliques brisés dans le répertoire utilisateur.
read -p "Scrute et liste les liens symboliques cassés dans votre répertoire personnel." -n1
stat $(find "$HOME" -xtype l 2>/dev/null) | grep "Fichier";

# Propose la suppression de l'ensemble des liens brisés. Il est recommandé de traiter ces liens manuellement.
read -p "Supprimer les liens symboliques brisés ? (o/N) " laReponse
if [[ "$laReponse" == "o" ]] || [[ "$laReponse" == "O" ]]; then
    echo "Supprime les liens symboliques cassés"
    find "$HOME" -xtype l -delete
fi
Copier le script dans un fichier texte (ex: mousepad pour xfce), lui donner un nom (ex: maintenance) et l'enregistrer dans /home/<votre utilisateur>/.local/bin/ Cela peut être fait en graphique il suffit d'afficher les fichiers cachés dans votre gestionnaire de fichiers (thunar pour Xfce) à l'aide des touches Ctrl + h puis de descendre dans l'arborescence jusqu'au dossier de destination ~/.local/bin.

Ensuite, nous allons lui donner les droits d'exécution :

chmod +x ~/.local/bin/maintenance
puis, afin de pouvoir l'exécuter à partir de n'importe quel emplacement, ajouter à la fin du fichier .bashrc qui se trouve dans les fichiers cachés de votre /home/<votre utilisateur>/, la variable suivante :

if [[ -d "$HOME/.local/bin" ]] ; then
      PATH="$PATH:$HOME/.local/bin"
fi
Enregistrer et fermer. Ouvrir un terminal, taper "maintenance" et... Amusez-vous bien, sauf si vous avez une centaine de fichiers .pac à traiter :sos::pleure:

Script de maintenance

#2Messageil y a 6 ans

salut

suis pas fan de l'automatisation :rendre:
je ne comprends pas la raison de ton yaourt -Qam, si c'est pour voir ce qui est disponible en update dans aur, tu peux faire un yaourt -Qam | grep "aur:", par contre après demander en fonction du résultat si oui/non on désire faire aussi la maj aur (ici toute réponse différente de "n" c'est ok pour la maj aur)

df | grep -E "^Sys|/$|tmp$" --color=never  # affiche que système et tmp
# nb paquets à mettre à jour dans aur
nbaur=$(yaourt -Qam | grep "aur:" -c)
if (( nbaur>0 )); then
    echo "$nbaur paquets à mettre à jour dans aur:"
    yaourt -Qam | grep "aur:"                    # liste des paquets
    read -p "Mettre à jour aur ? " yn           # si "n" au clavier alors rien faire
    [[ "$yn" != "n" ]] && yaourt -Sua --noconfirm  # noconfirm car demande a la ligne précédente
fi
ce qui donne chez moi en répondant par la négative :

4 paquets à mettre à jour dans aur:
aur/android-studio 3.0.1.0-1 ( aur: 3.1.0.16-1 )
aur/chrome-remote-desktop 66.0.3359.12-1 ( aur: 66.0.3359.12-2 )
aur/inxi 2.9.07-1 ( aur: 2.9.10-1 )
aur/trizen 1:1.45-1 ( aur: 1:1.46-1 )
Mettre à jour aur ? n

Script de maintenance

#3Messageil y a 6 ans

Merci pour le retour et les conseils :merci:yaourt -Qam me sert à vérifier les "out-of-date" qui sont mis en surbrillance et faire le point sur ce qui pourrait, éventuellement, être supprimé parce que le problème avec Aur : On a tendance à collectionner les paquets pour mieux les oublier par la suite... :gsourire:

Script de maintenance

#4Messageil y a 6 ans

ok

echo "paquets pas à jour sur aur (out of date):"
package-query -Am --format="%n %o" | awk '/1$/ {print $1}'
package-query est une dépendance de yaourt (te laisse lire le man ;) )
--------------
Avec ton sleep 2 c'est chaud pour faire une mise au point, je n'avais pas compris
ici on a une pause jusqu'a l'appui sur n'importe quelle touche clavier

yaourt -Qam 
read -p "--pause--" -n1
-p "...texte à afficher..." est optionnel

--------------
HS, moi avec yay j'ai directement :

yay -Sua
:: Querying AUR...
==> Missing AUR Packages: aurlist pacmanlogviewer-qt5 screen-manja apacman 
==> Orphaned AUR Packages: bashtrash mynotex
==> Out Of Date AUR Packages: pamac-aur
:: Searching databases for updates...
:: Searching AUR for updates...
:: 4 Packages to upgrade.
  4 aur/android-studio                                   3.0.1.0-1 -> 3.1.0.16-1
  3 aur/chrome-remote-desktop                       66.0.3359.12-1 -> 66.0.3359.12-2
  2 aur/inxi                                              2.9.07-1 -> 2.9.10-1
  1 aur/trizen                                              1.45-1 -> 1.46-1
"Missing" => paquets qui n'existent plus dans aur

Script de maintenance

#5Messageil y a 6 ans

:salut: Pas mal du tout : read -p "--pause--" -n1:clap Cela permet l'interaction tout en gardant à distance l'automatisation. Automatisation qu'il faut éviter dans ce cas, nous sommes bien d'accord :wink: Du coup je suis en train de modifier mon script de départ en y ajoutant une partie de ta contribution :merci: Script que je souhaite, simple, interactif et plus ou moins compréhensif pour la plupart d'entre nous, parce que :

df | grep -E "^Sys|/$|tmp$" --color=never  # affiche que système et tmp
# nb paquets à mettre à jour dans aur
nbaur=$(yaourt -Qam | grep "aur:" -c)
if (( nbaur>0 )); then
    echo "$nbaur paquets à mettre à jour dans aur:"
    yaourt -Qam | grep "aur:"                    # liste des paquets
    read -p "Mettre à jour aur ? " yn           # si "n" au clavier alors rien faire
    [[ "$yn" != "n" ]] && yaourt -Sua --noconfirm  # noconfirm car demande a la ligne précédente
fi
là, ça reste un peu du chinois pour moi et cela malgré les précieux commentaires :confus: Cela dit, je suis motivé pour augmenter un peu, mes maigres connaissances en la matière.

Script de maintenance

#6Messageil y a 6 ans

Léger HS: Octopi ne m'a pas signalé la maj dispo de Waterfox mais la commande de papajoke

yaourt -Qam | grep "aur:"
me l'a indiquée, elle...

Script de maintenance

#7Messageil y a 6 ans

Salut,

trizen a une option pour montrer les paquets "out of date" :

trizen -Sua --show-ood

Script de maintenance

#8Messageil y a 6 ans

Pour faire de l'interactif, c'est "simple" :rigole: il faut prendre une entrée puis la traiter
  • une entrée clavier et la traiter avec un if

    read -p "Mettre à jour ? (O/n) " laReponse
    echo "--entrée utilisateur: $laReponse"
    if [[ "$laReponse" == "o" ]] || [[ "$laReponse" == "O" ]] || [[ "$laReponse" == ""  ]]; then
        echo "je fais le job:"
        #pacman -Sua
    fi
    l'entrée clavier va dans la variable "laReponse", on applique des if pour faire ou non un traitement

    read -p "Mettre à jour ? (O/n) " laReponse
    echo "--entrée utilisateur: $laReponse"
    if [[ "$laReponse" != "n" ]]; then
        echo "je fais le job:"
        #pacman -Sua
    fi
  • une sortie d'un programme et la traiter avec un if

    resteSystemeTaille=$(df -lk | awk '/\/$/ {print $4}')
    miniTaille=18       # pour test ici ;)
    echo "reste sur ma partition système: $resteSystemeTaille ko"
    if  ((  resteSystemeTaille <  miniTaille*1000000 )); then
        echo "erreur plus assez de place, moins de ${miniTaille}Gio !"
        sudo pacman -Scc
        exit 1
    fi
    la sortie de la commande df (ligne finie par caractère / et colonne no 4) va dans la variable "resteSystemeTaille", on applique un if pour faire ou non un traitement

    maDep="yaourt"
    if pacman -Q "$maDep" &>/dev/null; then
    	echo "$maDep ok"
    else
    	echo "paquet obligatoire $maDep pas installé !"
            exit 1
    fi
    ici, variante, on traite le code de retour d'un programme (en bash: zéro pour ok, tout autre une erreur)

Script de maintenance

#9Messageil y a 6 ans

Il y a un "petit" script qui permet pas mal de choses, il s'agit de pacui.

Script de maintenance

#10Messageil y a 6 ans

oui, je connais particulièrement bien pacui car c'est le successeur de pacli.

J'ai mis mon nez dans pacli il y a 2 ans, mais son développeur excalibur1234 trouvait mon code trop compliqué après l'avoir inséré, et m'a laissé le bébé pour repartir de l'ancien code sous le nom de pacui, un pacli lite avec moins de fonctions.

2 même programmes bof, j'ai donc abandonné pacli dans la foulée mais ne fais plus que du code review au maximum sur pacui et plus de PR, car cette fois il veut de la simplicité pour que tout codeur bash puisse participer.

EDIT: un article en tout récent qui décrit les 2

Script de maintenance

#11Messageil y a 6 ans

:salut:
papajoke : Pour faire de l'interactif, c'est "simple" :rigole: il faut prendre une entrée puis la traiter
Oui, mais non! Pas pour moi et la plupart des utilisateurs :sourire: Je vais potasser ça à mon rythme, c'est à dire, lentement car cela m'intéresse :merci:

Script de maintenance

#12Messageil y a 6 ans

salut

c'est ton script, je ne t'ai donné que des pistes et petits exemple pas forcément utiles pour ton besoin ;)
ps: mais tu m'as donné une idée et je vais créer un sujet dans cette rubrique très bientôt.

-------------------
Pour l'installation :
perso j'utilise ce que me donne systemd (en fait la config par défaut de fedora)

systemd-path user-binaries
/home/patrick/.local/bin
j'ai donc ajouté ce chemin dans ma variable $PATH de mon .bashrc (.zshrc)
il faut déjà regarder si on n'a pas un chemin scripts perso dans notre variable d'environnement: echo $PATH (systemd-path search-binaries)

Les scripts perso, sont aussi généralement installés dans ~/scripts/ ou ~/bin/, ce qui compte c'est d'ajouter à la fin de $PATH notre chemin personnel

# je test si dossier existe et l'ajoute si existe dans les chemins des exécutables
if [[ -d "$HOME/.local/bin" ]] ; then
      PATH="$PATH:$HOME/.local/bin"
fi
ps: je préfère dans ~/.local/ juste parce que je préfère limiter au maximum mes dossiers à la racine de mon home

Script de maintenance

#13Messageil y a 6 ans

:salut:
papajoke : Les scripts perso, sont aussi généralement installés dans ~/scripts/ ou ~/bin/, ce qui compte c'est d'ajouter à la fin de $PATH notre chemin personnel
Tu veux dire plutôt ~/.local/bin concernant le deuxième chemin de répertoire. Si je comprends bien, le mieux serait de créer (déplacer dans mon cas) le dossier "scripts" dans ~/.local voir ~/.local/bin. Ensuite ajouter le chemin dans la variable $PATH du .bashrc. Intéressant, cela me permet de supprimer cd ~/Bureau/scripts de l'alias et l'alias lui même d'ailleurs puisque le script pourra être exécuté à partir de n'importe quel répertoire, comme c'est déjà le cas pour les programmes :sourire: J'utilise peu les autres scripts mais je compte m'en concocter d'autres en fonction de mes besoins et, je dois l'avouer, de la progression
lente :pappy:
de mes maigres connaissances en la matière. Comme on dit : "Là où il y a une volonté, il y a un chemin" :wink:

Script de maintenance

#14Messageil y a 6 ans

salut
Erwan a écrit : il y a 6 ans Tu veux dire plutôt ~/local/bin concernant le deuxième chemin de répertoire.
...
le dossier "scripts" dans ~/local voir ~/local/bin
que te retourne systemd-path user-binaries ? nous n'avons pas de ~/local mais ~/.local !

chacun est libre de gérer son home !!!
mais pourquoi créer un ~/local alors que nous avons déjà un ~/.local, d'autres distributions utilisent par défaut un~/bin ou ~/scripts, moi je suis bêtement fedora systemd mais suivre debian ou ubuntu est aussi bon.

perso, je préfère mettre le plus possible dans les .local et .config, c'est beaucoup plus facile à sauvegarder une config utilisateur :wink: même mon .bashrc(.zshrc) est en fait dans ~/.config/shell/ et n'ai qu'un lien vers lui à la racine de mon home.

-------------
Erwan a écrit : il y a 6 ans me permet de supprimer l'alias lui même
l’intérêt d'avoir un dossier perso "script" est en effet qu'il remplace avantageusement les alias et functions :
  • pas de code "inutile" préchargé en ram par le .bashrc
  • un script est plus souple/interactif qu'un alias
  • dossier peut-être partagé entre plusieurs linux (multi-boot)

Script de maintenance

#15Messageil y a 6 ans

papajoke : chacun est libre de gérer son home !!!
mais pourquoi créer un ~/local alors que nous avons déjà un ~/.local, d'autres distributions utilisent par défaut un~/bin ou ~/scripts, moi je suis bêtement fedora systemd mais suivre debian ou ubuntu est aussi bon.
Oupsss ! Erreur de frappe, je viens de corriger en ajoutant le point qui manquait, désolé.

systemd-path user-binaries
/home/erwan/.local/bin
Le dossier est pratiquement vide :

 cd /home/erwan/.local/bin && ls
compiz-xfce-uninstall-helper

Du coup, nul besoin de créer un dossier script à l'intérieur, je peux y mettre directement les scripts, c'est mieux, je suppose ?

echo $PATH
/usr/local/bin:/usr/bin
Voilà, j'ai ajouté la variable :

if [[ -d "$HOME/.local/bin" ]] ; then
      PATH="$PATH:$HOME/.local/bin"
fi
à la fin de mon .bashrc et je viens de tester, ça fonctionne en appelant le script direct sans le ./ au début et le .sh à la fin (renommé). Un ou deux trucs de moins à taper, ça ne se refuse pas :gsourire:

Script de maintenance

#16Messageil y a 6 ans

tu as de la chance, pour moi il est vide par défaut :lol:
Il te reste à modifier ton .bashrc si tu désires l'utiliser, j'ai donné un exemple de code plus haut (13)

-----------
Mais tout cela est-il bien utile :rigole:
Après tu vas le déposer dans aur et il sera automatiquement disponible pour tous sans reconfigurer son home :cool:

------------
petit truc sécurité qui peut-ếtre intégré

# raz du sudo par sécurité à la sortie du script
cleanup() {    sudo -k; }
trap cleanup EXIT
code à insérer au début du script - trap nom_fonction_bash exit_raison permet de déclencher automatiquement ici l'oubli du mot de passe de sudo donc si un(e) méchant(e) passe une minute après toi, il ne peut exécuter sudo

Script de maintenance

#17Messageil y a 6 ans

Après tu vas le déposer dans aur et il sera automatiquement disponible pour tous sans reconfigurer son home
Aucun risque que ça arrive, par contre, comme tu as laissé entendre que tu avais une idée derrière la tête, je pense plutôt que j'installerai ton paquet Aur à la place de ce script de scribouillard lorsque tu nous auras concocté le paquet idéal et complet, parce qu'il manque surement des éléments et certains choix de ce script ne sont pas pertinents mais mes compétences ne me permettent pas d'aller au delà. (exemple : Demande de vidage du cache de pacman, réponse par défaut : Oui, alors que ça devrait logiquement être non sur une distro comme Manjaro qui n'est pas Arch et qui se doit d'offrir la plus grande prudence avec une intervention/intention claire de l'utilisateur, montrant par là qu'il a pris conscience de son action). Des détails me dira-t-on ? Oui mais des détails qui sont d'une importance primordiale sur notre distribution, destinée à un public plus large. Idem pour le traitement des pacnews où il serait intéressant de faire une sauvegarde automatique avant suppression mais ça tu connais vu que tu avais fais un script dans ce sens sur Aur. Paquet que j'ai utilisé et qu'il serait avantageux d'intégrer dans un outil de maintenance plus élaboré et dédié particulièrement aux utilisateurs de Manjaro. :wink:

[Edit] :
papajoke : petit truc sécurité qui peut-ếtre intégré

# raz du sudo par sécurité à la sortie du script
cleanup() {    sudo -k; }
trap cleanup EXIT
code à insérer au début du script - trap nom_fonction_bash exit_raison permet de déclencher automatiquement ici l'oubli du mot de passe de sudo donc si un(e) méchant(e) passe une minute après toi, il ne peut exécuter sudo
Bien vu, j'ai édité plus haut mon post (script) et, chez moi, le script. :merci:

Script de maintenance

#18Messageil y a 6 ans

imarco a écrit : il y a 6 ans Léger HS: Octopi ne m'a pas signalé la maj dispo de Waterfox mais la commande de papajoke

yaourt -Qam | grep "aur:"
me l'a indiquée, elle...
Bon weekend à tous! Elle fait quoi exactement cette commande? (désolé, j'ai pris le sujet en route)
Chez moi, ça donne ça:

$ yaourt -Qam | grep "aur:"
aur/4kvideodownloader 4.4.3.2265-1 ( aur: 4.4.6.2295-2 )
aur/beaker-browser-bin 0.7.11-2 ( aur: 0.8.0_prerelease.5-2 )
aur/dropbox 43.4.50-1 ( aur: 47.4.74-2 )
aur/google-chrome 64.0.3282.186-1 ( aur: 65.0.3325.181-1 )
aur/gstreamer0.10-bad 0.10.23-36 ( aur: 0.10.23-38 )
aur/gstreamer0.10-bad-plugins 0.10.23-36 ( aur: 0.10.23-38 )
aur/gstreamer0.10-ugly 0.10.19-27 ( aur: 0.10.19-28 )
aur/gstreamer0.10-ugly-plugins 0.10.19-27 ( aur: 0.10.19-28 )
aur/jdk 9.0.4-1 ( aur: 10-1 )
aur/masterpdfeditor 4.3.82-1 ( aur: 4.3.89-1 )
aur/python2-qrtools 1.4-1 ( aur: 1.4-3 )
aur/qtqr 1.4-1 ( aur: 1.4-3 )
aur/shotcut-bin 180102-2 ( aur: 180306-1 )
aur/signal 1.3.0-1 ( aur: 1.7.1-1 )
aur/trizen 1:1.44-1 ( aur: 1:1.48-1 )

Script de maintenance

#19Messageil y a 6 ans

Déplacé dans "Internet"
Dernière modification par Nettlebayil y a 6 ans, modifié au total 1 fois.

Script de maintenance

#20Messageil y a 6 ans

Bonjour Nettlebay :salut: Concernant Waterfox et puisque vous êtes (nombreux ?) quelques-uns à l'utiliser, mieux vaut ouvrir un sujet dans la rubirque "internet" ou "applications" :wink:

Concernant cette commande :

yaourt -Qam | grep "aur:"
Elle liste les paquets Aur qui ne sont pas à jour. Tu as du boulot, là, hein ? :mrgreen:

ps : Les paquets gstreamer0 de Aur sont probablement à virer.
Répondre