列出将被 "yum autoremove" 删除的软件包?
Listing packages that will be removed by "yum autoremove"?
Running CentOS 7.6
我目前正在我的 kickstart post-安装脚本 yum 删除 java-1.7* 中卸载 Java。卸载 java 时,它会孤立 python-lxml 软件包,然后通过 yum autoremove -y 删除该软件包因为它现在是一片叶子。
然后我使用 ansible 做了一堆配置,在尝试使用 "python-lxml".
的任务中失败了
有没有办法列出所有 "yum autoremove" 将删除并标记为 不删除 的软件包?
我最后看了 repoquery API and package-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
每一片叶子都进来了。
然后我可以做基本的 grep
和 sed
来提取我可以存储在数组中的包名称。
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
Running CentOS 7.6
我目前正在我的 kickstart post-安装脚本 yum 删除 java-1.7* 中卸载 Java。卸载 java 时,它会孤立 python-lxml 软件包,然后通过 yum autoremove -y 删除该软件包因为它现在是一片叶子。
然后我使用 ansible 做了一堆配置,在尝试使用 "python-lxml".
的任务中失败了有没有办法列出所有 "yum autoremove" 将删除并标记为 不删除 的软件包?
我最后看了 repoquery API and package-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
每一片叶子都进来了。
然后我可以做基本的 grep
和 sed
来提取我可以存储在数组中的包名称。
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