在使用 RPM/DNF 下载或安装软件包之前运行命令

在使用 RPM/DNF 下载或安装软件包之前运行命令

通过 apt-get,我可以使用调用前或调用后钩子

调用前、调用后
这是调用 dpkg(1) 之前/之后运行的 shell 命令列表。与选项一样,这必须以列表表示法指定。使用 /bin/sh 按顺序调用命令;如果任何失败 APT 将中止。

也可以看看将脚本挂接到 apt-get

有没有类似的方法在安装之前和之后运行命令每一个带有 RPM 或 DNF 的软件包?

当然,将 rpm 或 dnf 命令包装在另一个脚本中是一种方法,但我宁愿有一些配置选项。

答案1

对于 yum(RHEL/CentOS 7 及以下版本),有yum-plugin-pre-transaction-actionsyum-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=967264https://bugzilla.redhat.com/show_bug.cgi?id=1788574有更多信息。 RHEL 8.2 应该具有事务后功能。如果您确实需要预交易,您可以修改后交易代码以创建您自己的预交易插件(并将其作为 PR 提交)。

答案2

您可以在 RPM 中定义 %pretrans小脚本在安装包之前运行。它与 Debian 软件包并不完全相同,因为它是软件包本身的一部分,而不是外部的。

相关内容