[arch-general] Can I prevent Pacman from running hooks?

Eli Schwartz eschwartz at archlinux.org
Sun Oct 14 01:23:25 UTC 2018


On 10/13/18 4:11 AM, Tobias Hunger via arch-general wrote:
> I have scripts that will install a set of arch linux machines for me
> with all the tweaks I want. These scripts run pacman a lot to install
> bits and pieces. Usually the script will running pacman to install one
> package and then configure that package and then proceed to install
> the next (set of) packages. This works great, but  a noticeable part
> of the run time is spent on running pacman hooks (e.g. to update the
> man-db and similar things).

If there are specific hooks you don't want to use, you can use the
default HookDir (as documented in alpm-hooks(5) *and* in pacman.conf(5),
this is "/etc/pacman.d/hooks/") to mask them with symlinks to /dev/null.

You've responded that you need to batch each image installation process
using incremental runs inspired by docker, which I sort of understand,
but I don't really see how delaying execution until the end, is a good
idea here.

Consider things like the texinfo package, which installs a hook to run
many install-info processes, once for each file in usr/share/info/ that
the hook detects. I guess you could write your own custom handling for
this and just try to install the whole directory at the end, but you'd
need to judge based on the hook, and adapt to a unique situation. And
it's irrelevant, since delaying execution will not provide benefits over
doing it every time a file is installed -- on the contrary, delaying
execution means you repeat some of the base image work separately for
each child image.

You should override hooks by hand, when you know what they do, know that
they don't require targets, and know that you're handling it yourself at
the end.

> So I am wondering: Is it possible to stop pacman from running hooks
> during package installation? I do know when it is "safe" to not run
> hooks (when the system is not complete yet) and when I need to run all
> of them (right after the system has all packages installed that it
> will have).
> 
> So far I run pacman with a --hookdir that contains symlinks to
> /dev/null named like some of the more expensive hooks that tend to
> take long to complete. But a --no-hooks option to pacman would be
> great for my use case.

Expensive hooks, like the man-db hook? I find that annoying on my
standard system as well, which is why I use
https://github.com/graysky2/mandb-ondemand

I'm extremely skeptical that we'll add a --no-hooks option.

We have a --noscriptlet option, but that's because there's no other way
to stop a scriptlet from doing specific things you don't want done.

Hooks were designed to be configurable and able to be masked on an
individual level via symlinks. An option to prevent hooks from running
would therefore serve no purpose except to say "running hooks at all is
undesirable to me", which I don't think is the statement we want to say...

> Is it possible to run pacman without it triggering hooks?

You can add a NoExtract directive to pacman.conf, which prevents hooks
from being installed to the system in the first place. Although I don't
know how you'd determine what hooks should exist, in order to handle
their actions yourself.

You can also compile your own pacman package using:

CPPFLAGS='-DSYSHOOKDIR=\"/i/dont/want/to/run/any/hooks/\"' ./configure

But I don't see any point to this.

-- 
Eli Schwartz
Bug Wrangler and Trusted User

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.archlinux.org/pipermail/arch-general/attachments/20181013/09d4cb46/attachment.asc>


More information about the arch-general mailing list