Un petit hook sur les dépendances

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.

Share Button

Vous devriez aimer...