El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

los hooks de pacman

| Comments

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.

“escope delink
1
HookDir = /etc/pacman.d/hooks/

¿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í:

“/etc/pacman.d/hooks/migancho.hook”
1
2
3
4
5
6
7
8
9
10
11
12
[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = *

[Action]
Description = sincronizando disco
Depends = coreutils
When = PostTransaction
Exec = /etc/pacman.d/hooks/migancho.sh

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).

“/etc/pacman.d/hooks/migancho.sh”
1
2
#!/bin/bash
/usr/bin/sync

Veámoslo en acción

“el hook”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@artema ~]# pacman -S --noconfirm unrar
warning: unrar-1:5.3.11-1 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...

Packages (1) unrar-1:5.3.11-1

Total Installed Size:  0.32 MiB
Net Upgrade Size:      0.00 MiB

:: Proceed with installation? [Y/n]
(1/1) checking keys in keyring                                                   [##############################################] 100%
(1/1) checking package integrity                                                 [##############################################] 100%
(1/1) loading package files                                                      [##############################################] 100%
(1/1) checking for file conflicts                                                [##############################################] 100%
(1/1) checking available disk space                                              [##############################################] 100%
:: Processing package changes...
(1/1) reinstalling unrar                                                         [##############################################] 100%
:: Running post-transaction hooks...
(1/1) sincronizando disco
[root@artema ~]#

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.

“/etc/pacman.d/hooks/listpackages.sh”
1
2
#!/bin/bash
pacman -Qe > /root/$(date +%j%H%M%S)

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:

“¿cuando fue?”
1
ls -ltcr --time-style +%j /var/lib/pacman/local/

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

Si este artículo te resultó interesante, considere donar 0.06 BTC: 14iNmkfULf5jggumVh963kUg4UPScEZHgz

Comments