Page 1 sur 1

[pacman 5] hook

Publié : lun. 01 févr. 2016, 09:47
par papajoke
il est possible de trouver quelques exemples de hook

je vous propose mes premier essais :

lancement automatique de réflector :
/etc/pacman.d/hooks/pacman-mirrorlist.hook

Code : Tout sélectionner

[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = pacman-mirrorlist
[Action]
Description = lancement de reflector
When = PostTransaction
Depends = reflector
Exec = /usr/bin/reflector --verbose --country France -l 5 -p http --sort rate --save /etc/pacman.d/mirrorlist

un hook de sécurité, il empêche la désinstallation de certains paquets
/etc/pacman.d/hooks/obligatoire.hook

Code : Tout sélectionner

[Trigger]
Operation = remove
Type = Package
Target = bash
Target = pacman

[Action]
Description = OBLIGATOIRE, pas de désinstallation possible
When = PreTransaction
Exec = /usr/bin/false
AbortOnFail
Ajouter ces propres "Target"

Re: [pacman 5] hook

Publié : lun. 01 févr. 2016, 13:32
par Moviuro
Yo,

Merci pour les exemples, c'est bien cool :) (je vais pouvoir créer un hook pour butter)
Par contre, lancer reflector à chaque lancement de pacman, c'est vraiment abusé. (Une fois par semaine, c'est amplement suffisant)

Aussi, ça semble très étrange d'avoir à éditer un fichier dans /usr. T'es sûr de ton coup ?

Re: [pacman 5] hook

Publié : lun. 01 févr. 2016, 16:55
par papajoke
pour reflector, j'ai mis : Target = pacman-mirrorlist donc il est déclenché uniquement avec un upgrade ou install de ce paquet !

pour /usr/share/libalpm/hooks/, en effet j'avais fait les tests à partir du site github donné plus haut et ca marche :?:
mais dans le nouveau pacman.conf on trouve :

Code : Tout sélectionner

#HookDir     = /etc/pacman.d/hooks/
testé et c'est ok

le man :

Code : Tout sélectionner

man alpm-hooks 
man a écrit :HookDir Add directories to search for alpm hooks in addition to the system hook directory
(/usr/share/libalpm/hooks/).
man a écrit :Hooks may be overridden by placing a file with the same name in a higher priority hook directory. Hooks may be disabled by overriding them with a symlink to /dev/null.
pas compris ?

Re: [pacman 5] hook

Publié : lun. 01 févr. 2016, 17:09
par Moviuro
papajoke a écrit :pour reflector, j'ai mis : Target = pacman-mirrorlist[c] donc il est déclenché uniquement avec un upgrade ou install de ce paquet ![/quote]Ah yes, mea culpa, j'avais pas vu :oops: :copain:

Re: [pacman 5] hook

Publié : lun. 01 févr. 2016, 22:42
par kozaki
Tip top les exemples de hooks pacman papajoke :)

Re: [pacman 5] hook

Publié : mar. 02 févr. 2016, 09:11
par Moviuro
papajoke a écrit :

Code : Tout sélectionner

man alpm-hooks 
man a écrit :HookDir Add directories to search for alpm hooks in addition to the system hook directory
(/usr/share/libalpm/hooks/).
man a écrit :Hooks may be overridden by placing a file with the same name in a higher priority hook directory. Hooks may be disabled by overriding them with a symlink to /dev/null.
pas compris ?

Code : Tout sélectionner

# ln -s /dev/null /etc/pacman.d/hooks/$un_hook_qui_existe_dans_usr-share-libalpm-hooks
Enfin, je pense.

Auquel cas ça désactive un hook que tu pourrais activer, un peu comme pour désactiver les règles udev avec systemd où on lie /dev/null à un fichier de règles. ln -s /dev/null /etc/udev/rules/00-machin.rules

Re: [pacman 5] hook

Publié : mar. 02 févr. 2016, 14:02
par papajoke
autre petit hook de sécurité (pour parano)

/etc/pacman.d/hooks/nopath.hook

Code : Tout sélectionner

[Trigger]
Operation = Install
Operation = Upgrade
Type = File
Target = home/*
Target = media/*
Target = mnt/*
Target = usr/local/*
Target = srv/*
Target = proc/*
Target = sys/*
Target = tmp/*

[Action]
Description = destination NON conforme !
When = PreTransaction
Exec = /usr/bin/false
AbortOnFail
je me suis fait un paquet test puisque que cela n'existe pas sur aur ...

Code : Tout sélectionner

package() {
  install -D -m555 "${srcdir}/untest" "${pkgdir}/home/patrick/untest"
}
et ça marche :D un petit makepkg -si le déclenche bien

Re: [pacman 5] hook

Publié : sam. 04 août 2018, 16:54
par Xorg
Bonjour,

Je viens apporter ma pierre à l'édifice. :)
J'ai empaqueté un hook qui met à jour le fichier /etc/pacman.d/mirrorlist à partir du fichier /etc/pacman.d/mirrorlist.pacnew ; contrairement au hook proposé plus haut qui utilise reflector, ici c'est rankmirrors qui est utilisé (disponible dans le paquet pacman-contrib).
Il s'agit du paquet pacman-mirrorlist-rankmirrors-hook. Le pays doit être configuré dans le fichier /etc/pacman.d/mirrorlist-rankmirrors.conf.

Dans le genre hook sympa qu'on trouve sur AUR, j'ai trouvé pacman-cleanup-hook : il permet de nettoyer automatiquement le cache de Pacman, en conservant le paquet installé ainsi que sa version précédente. :D

Re: [pacman 5] hook

Publié : sam. 04 août 2018, 17:51
par papajoke
bonjour

Petite remarques,
  • je ne suis pas fan de copier le script dans /bin puisqu'il ne devrait jamais fonctionner en console user puisqu'on a jamais de .pacnew (si hook fonctionne bien)
    A noter qu'il est possible de restreindre le script pour uniquement pacman (dans contexte de hook)

    Code : Tout sélectionner

    [[ "${HTTP_USER_AGENT:0:6}" != 'pacman' ]] && exit 4
  • dans fichier .hook Dépendance pacman ? plutôt rankmirrors
    un hook est lancé par alpm ! il n'y a pas de raison ici de demander pacman car tu ne fais aucun appel à pacman dans le script (sinon ok).

    De plus, je connais (mais existe d'autres ???) aussi pamac (qui depuis quelques jours s'utilise en cli) : c'est un programme alpm (donc déclenche les hooks) mais n'utilise aucunement pacman (donc autre HTTP_USER_AGENT).
Pour le clean-hook, je préfère un timer systemd mensuel (...)