Suivre au premier sujet sur les hooks, voici un nouveau qui va permettre de bloquer automatiquement les dépendances que nous refusons de faire rentrer.
Vous ne voulez absolument pas de GTK3 ou de QT4 ? alors vous serez très intéressés 😉
Pour cela, il est pré installation (PreTransaction) et il est accroché à tous les paquets(Target). le mot clé NeedsTargets va permettre au script bash de faire un traitement individuel sur chaque paquet tandis que le mot clé AbortOnFail va nous permettre de refuser une dépendance.
/etc/pacman.d/hooks/filter-dep.hook
[Trigger] Operation = Install Operation = Upgrade Type = Package Target = * [Action] Description = filtre dependances When = PreTransaction Exec = /etc/pacman.d/hooks.bin/filter-dep.sh " lib " " libtar" " lua " " qt4" Depends = yaourt NeedsTargets AbortOnFail
le script bash va boucler sur chaque paquet et, à l’aide de la fonction yaourt -Si va retrouver la liste des dépendances à éventuellement installer.
La liste des dépendances à rejeter est passée en paramètres dans le hook. Les paramètres sont une regex et donc peuvent-être ajustés pour avoir une plage ou un seul paquet.
Le même script peut-être réutilisé par plusieurs hooks (nogtk.hook , nokde.hook …)
/etc/pacman.d/hooks.bin/filter-dep.sh
#!/bin/bash [[ "${HTTP_USER_AGENT:0:6}" != 'pacman' ]] && exit 2 declare -a args=("$@") while read -r package; do deps=$(LANG=C yaourt -Si "${package}" 2>/dev/null | awk -F':' '/^Depend/ {print $2}') for d in "${args[@]}"; do if [[ "${deps}" =~ "${d}" ]]; then echo "[$(date +'%F %H:%I')] [HOOK] Error: Dépendance refusée: ${d} pour ${package}" >/var/log/pacman.log echo "Dépendance refusée ! ${d} pour ${package}" exit 9 fi done done
J’utilise yaourt -Si car pacman -Si planterait en cas d’installation d’un paquet aur. Malheureusement (ou pas ?) si le PKGBUILD est modifié manuellement alors le script dans ce cas n’en tient pas compte.