列出将被“ yum autoremove”删除的软件包?

时间:2019-08-05 17:19:31

标签: ansible centos rpm yum

Running CentOS 7.6

我目前正在我的kickstart安装后脚本 yum remove java-1.7 * 中卸载Java。卸载java后,它会孤立 python-lxml 包,然后将其由 yum autoremove -y 删除,因为它现在是一片叶子。

然后我使用ansible进行一堆配置,这在尝试使用“ python-lxml”的任务中失败。

是否可以列出所有将被“ yum autoremove”删除的软件包并将其标记为请勿删除

1 个答案:

答案 0 :(得分:0)

我最终看到了repoquery APIpackage-cleanup man page。使用package-cleanup,我可以通过传递--leaves-all标志来列出系统上的所有。然后,我将该输入通过管道传递到repoquery中,以确定哪些叶子被标记为依赖项。 --qf允许我指定查询格式。看着repoquery API,我可以看到可以进行的各种api调用。

querytags = [ 'name', 'version', 'release', 'epoch', 'arch', 'summary',
              'description', 'packager', 'url', 'buildhost', 'sourcerpm',
              'vendor', 'group', 'license', 'buildtime', 'filetime',
              'installedsize', 'archivesize', 'packagesize', 'repoid', 
              'requires', 'provides', 'conflicts', 'obsoletes',
              'weak_requires', 'info_requires',
              'weak_reverse_requires', 'info_reverse_requires', 
              'relativepath', 'hdrstart', 'hdrend', 'id',
              'checksum', 'pkgid', 'committer', 'committime',
              'ui_evr', 'evr', 'ui_nevra', 'ui_envra',
              'ui_from_repo', 'base_package_name', 'size', 'xattr_origin_url',
              'ui_evra', 'ui_nevr', 'na', 'vr', 'vra', 'evr', 'evra',
              'nvr', 'nvra', 'nevr', 'nevra', 'envr', 'envra',

              'repo.<attr of the repo object>',
              'yumdb.<attr of the yumdb object>',
              '<attr of the yum object>'
            ]

注意到nvra(name-ver-rel.arch)和yumdb.<attr>标签,我能够查询yumdb来传入的每个叶子的全名和reason

然后我可以执行基本的grepsed来提取仅可以存储在数组中的程序包名称。

package-cleanup --leaves -q --all | xargs repoquery --installed --qf '%\{nvra} - %\{yumdb_info.reason}' | grep -- '- dep' | sed "s/\s.*$//"

使用该数组,我可以逐步完成并将每个项目的reason设置为user,这样yum autoremove -y不会删除我想要的内容。

yumdb set reason user $array_item

或者,如果您希望所有bash的母亲都衬里……

array=$(package-cleanup --leaves -q --all | xargs repoquery --installed --qf '%{nvra} - %{yumdb_info.reason}' | grep -- '- dep' | sed "s/\s.*$//"); a=($array); if [ ${#a[@]} -gt "0" ]; then for i in "${array[@]}"; do yumdb set reason user $i; done; fi