1

According to man dpkg I can use DPKG_HOOK_ACTION to get the current dpkg action being run in my dpkg hook script

--pre-invoke=command
--post-invoke=command
      Set an invoke hook command to be run via “sh -c” before or after the dpkg run for the unpack, configure, install, triggers-only, remove  and  purge  dpkg  actions.  This
      option  can be specified multiple times. The order the options are specified is preserved, with the ones from the configuration files taking precedence.  The environment
      variable DPKG_HOOK_ACTION is set for the hooks to the current dpkg action. Note: front-ends might call dpkg several times per invocation, which might run the hooks  more
      times than expected.

but it doesn't seem to work in this hook command. Any idea what is wrong here?

$ cat /etc/apt/apt.conf.d/99testhook
DPkg::Pre-Invoke {"echo This is testhook. Current action is $DPKG_HOOK_ACTION; exit 0";};

$ sudo apt-get install screen
...
Fetched 628 kB in 0s (4,366 kB/s)
This is testhook. Current action is
Selecting previously unselected package screen.
3

This only applies to commands specified by the --pre-invoke and --post-invoke options, not when the commands are set in the configuration.

This can be demonstrated by putting your echo command into a script:

# cat > /tmp/pre-invoke.sh <<'EOF'
#!/bin/sh
echo This is testhook. Current action is $DPKG_HOOK_ACTION; exit 0
EOF
# chmod +x /tmp/pre-invoke.sh
# dpkg --pre-invoke=/tmp/pre-invoke.sh -i /var/cache/apt/archives/rsync_3.1.1-2+b1_amd64.deb
This is testhook. Current action is install
(Reading database ... 113857 files and directories currently installed.)
Preparing to unpack .../rsync_3.1.1-2+b1_amd64.deb ...
Unpacking rsync (3.1.1-2+b1) over (3.1.1-2+b1) ...
Setting up rsync (3.1.1-2+b1) ...
Restarting rsync daemon: rsync.
Processing triggers for man-db (2.6.7.1-1) ...
1

This behaviour can be configured as well using DPKg::Options:: instead (wurtel explained why DPkg::Pre-Invoke is the wrong place):

Here an example from apt.conf with demo script:

DPKg::Options:: "--pre-invoke=/tmp/pre-invoke.sh";

Results in e.g.:

After this operation, 17.4 kB disk space will be freed.
This is testhook. Current action is remove
This is testhook. Current action is remove
(Reading database ... 60383 files and directories currently installed.)

New answer since I can't comment [yet, due to reputation]

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.