Finalmente, después de tantas plegarias, tenemos hooks en pacman. Lo cual nos permite, por medio de la poderosa API de alpm correr script antes o después de cada instalación.
Desgraciadamente, hay poca documentación sobre el tema. Para colmo, la página de man de alpm-hooks, no dice como deben llamarse los archivos. Tuve que adivinar que la extensión .hook era necesaria.
Primero que todo, vamos a especificar en /etc/pacman.conf que el directorio de hooks está en otro lado.
1
|
|
¿Por qué aquí? Muy sencillo. Quiero que al hacer una salva de mi configuración de pacman, los hooks también se salven. Un hook sencillo, podría correr un comando simple, como el del ejemplo en la página de man; sin embargo, uno complejo, sería mejor ponerlo en un script.
Lo más importante: El fichero con el hook debe tener la extensión .hook Si no pacman se limpia el culo con él.
Creemos uno de ejemplo, llamado /etc/pacman.d/hooks/migancho.hook y digámosle que ejecutará el script, sito en /etc/pacman.d/hooks/migancho.sh
Sería así:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Como ve, la cláusula Operation está repetida, con los 3 posibles momentos que se disparará el gancho. Podrías hacerlo en uno de ellos solamente. La cláusula Description se verá cuando pacman termine de instalar. En este caso cuando termine, ya que la cláusula When especifica PreTransaction o PostTransaction (antes o después de la transacción).
Ahora creamos el script migancho.sh y le ponemos todas las aberraciones que queremos llevar a cabo tras una instalación, desinstalación o actualización.
Digamos por ejemplo, en este caso uno trivial, ejecutar sync cuando termine una operación, lo cual evita que si falla la energía en ese momento, queden datos por escribirse en la cache disco (con suerte).
1 2 |
|
Veámoslo en acción
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Véanlo como dice sincronizando discos en español, corriendo la operación (1/1) ya que hay un solo hook.
Sencillo!!! Como todo en ArchLinux: KISS
Podría volverse más creativo…
Digamos por ejemplo, que yo quiero tener la lista de paquetes que tiene mi sistema antes y después de una instalación, para saber que se instalo y cuando.
1 2 |
|
Eso creará un fichero similar a /root/051153712, el nombre, es el yday (día del año) y con la hora, minuto y segundo. Dentro del fichero, una lista de todos los paquetes instalados. Muy útil si eres tester o desarrollador, o simplemente quieres saber que paquetes había antes o después de instalar.
Por cierto, otra manera de saber que si instalo hoy y ayer, es esta:
1
|
|
Devuelve el día del año en el que se instaló un paquete. Así sabes que se instaló hoy. Te recuerdo, que en ArchLinux, todos los días hay algo nuevo que instalar :D