通过 apt-get,我可以使用调用前或调用后钩子
调用前、调用后
这是调用 dpkg(1) 之前/之后运行的 shell 命令列表。与选项一样,这必须以列表表示法指定。使用 /bin/sh 按顺序调用命令;如果任何失败 APT 将中止。
也可以看看将脚本挂接到 apt-get
有没有类似的方法在安装之前和之后运行命令每一个带有 RPM 或 DNF 的软件包?
当然,将 rpm 或 dnf 命令包装在另一个脚本中是一种方法,但我宁愿有一些配置选项。
答案1
对于 yum(RHEL/CentOS 7 及以下版本),有yum-plugin-pre-transaction-actions
和yum-plugin-post-transaction-actions
软件包。有关如何使用它的示例预交易和交易后但这也是一个示例文件:
#action_key:transaction_state:command
# action_key can be: pkgglob, /path/to/file (wildcards allowed)
# transaction_state can be: install,update,remove,any
# command can be: any shell command
# the following variables are allowed to be passed to any command:
# $name - package name
# $arch - package arch
# $ver - package version
# $rel - package release
# $epoch - package epoch
# $repoid - package repository id
# $state - text string of state of the package in the transaction set
#
# file matches cannot be used with removes b/c we don't have the info available
*:install:touch /tmp/$name-installed
zsh:remove:touch /tmp/zsh-removed
zsh:install:touch /tmp/zsh-installed-also
/bin/z*h:install:touch /tmp/bin-zsh-installed
z*h:any:touch /tmp/bin-zsh-any
# each action is expanded once for each matching package, and no action is
# executed twice per transaction, for example
*:install:echo $repoid >>/tmp/repos
# will write each repo only once to /tmp/repos, even if multiple packages from
# the same repo were installed
对于 dnf(RHEL/CentOS 8 及更高版本),有一个插件位于https://github.com/rpm-software-management/dnf-plugins-core/blob/master/plugins/post-transaction-actions.py对于交易后,但对于交易前没有任何影响。https://bugzilla.redhat.com/show_bug.cgi?id=967264和https://bugzilla.redhat.com/show_bug.cgi?id=1788574有更多信息。 RHEL 8.2 应该具有事务后功能。如果您确实需要预交易,您可以修改后交易代码以创建您自己的预交易插件(并将其作为 PR 提交)。
答案2
您可以在 RPM 中定义 %pretrans小脚本在安装包之前运行。它与 Debian 软件包并不完全相同,因为它是软件包本身的一部分,而不是外部的。