aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJake Hunsaker <jhunsake@redhat.com>2022-04-05 14:53:03 -0400
committerJake Hunsaker <jhunsake@redhat.com>2022-04-07 12:34:06 -0400
commit8cdc77c484c12b5ecaa901c892bc5799ef468e32 (patch)
tree7b2ea02a05b56210093addb512edd9dbd4544ad3
parentee0dd68199a2c9296eafe64ead5b2263c8270e4a (diff)
downloadsos-8cdc77c484c12b5ecaa901c892bc5799ef468e32.tar.gz
[dnf,yum] Merge plugins into dnf, remove yum plugin
`dnf` has long been the successor to `yum` for RPM based distributions, with the latter remaining as a legacy feature. In fact, in most cases `yum` is now simply a symlink to `dnf`. As such, merge missing collections from `yum` into the `dnf` plugin where appropriate, and then remove the `yum` plugin. Collections still referencing yum locations, such as `/etc/yum.repos.d/` that are still used by `dnf` are brought forward and retain their `yum_*` tags in the manifest in addition to new `dnf_*` tags. The `history` plugin option has been removed and this is now a default collection - previously it was gated to avoid duplication with the `yum` plugin. The `history-info` option has also been slightly changed to only capture the last 50 transactions instead of potentially up to hundreds retained by `dnf`. Closes: #1954 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
-rw-r--r--sos/report/plugins/dnf.py56
-rw-r--r--sos/report/plugins/yum.py129
2 files changed, 47 insertions, 138 deletions
diff --git a/sos/report/plugins/dnf.py b/sos/report/plugins/dnf.py
index 9725e0da..59b8de6c 100644
--- a/sos/report/plugins/dnf.py
+++ b/sos/report/plugins/dnf.py
@@ -12,6 +12,18 @@ from sos.report.plugins import Plugin, RedHatPlugin, PluginOpt
class DNFPlugin(Plugin, RedHatPlugin):
+ """
+ The DNF plugin collects information for the dnf package manager and how it
+ is configured for local system.
+
+ By default, this plugin will collect configuration files from /etc/dnf,
+ repo files defined in /etc/yum.repos.d/, module information, and various
+ 'dnf list' commands.
+
+ When using the 'history-info' option, detailed transaction information will
+ be collected for the most recent 50 dnf transactions, and will be saved to
+ the sos_commands/dnf/history-info directory.
+ """
short_desc = 'dnf package manager'
plugin_name = "dnf"
@@ -21,8 +33,6 @@ class DNFPlugin(Plugin, RedHatPlugin):
packages = ('dnf',)
option_list = [
- PluginOpt('history', default=False,
- desc='collect transaction history'),
PluginOpt('history-info', default=False,
desc='collect detailed transaction history')
]
@@ -42,10 +52,12 @@ class DNFPlugin(Plugin, RedHatPlugin):
def setup(self):
self.add_file_tags({
- '/etc/dnf/modules.d/.*.modules': 'dnf_modules'
+ '/etc/dnf/modules.d/.*.module': 'dnf_modules'
})
self.add_copy_spec("/etc/dnf/")
+ self.add_copy_spec("/etc/yum.repos.d/",
+ tags=['yum_repos_d', 'dnf_repos_d', 'dnf_repo'])
if self.get_option("all_logs"):
self.add_copy_spec("/var/log/dnf.*")
@@ -65,11 +77,30 @@ class DNFPlugin(Plugin, RedHatPlugin):
"package-cleanup --problems"
])
- if self.get_option("history") and not self.get_option("history-info"):
- self.add_cmd_output("dnf history")
+ self.add_cmd_output("dnf list installed",
+ tags=["yum_list_installed", "dnf_list_installed"])
+
+ self.add_cmd_output('dnf -C repolist',
+ tags=['yum_repolist', 'dnf_repolist'])
+
+ self.add_cmd_output('dnf -C repolist --verbose')
+
+ self.add_forbidden_path([
+ "/etc/pki/entitlement/key.pem",
+ "/etc/pki/entitlement/*-key.pem"
+ ])
+
+ self.add_copy_spec([
+ "/etc/pki/product/*.pem",
+ "/etc/pki/consumer/cert.pem",
+ "/etc/pki/entitlement/*.pem"
+ ])
- if self.get_option("history-info"):
- history = self.collect_cmd_output("dnf history")
+ if not self.get_option("history-info"):
+ self.add_cmd_output("dnf history", tags='dnf_history')
+ else:
+ history = self.collect_cmd_output("dnf history",
+ tags='dnf_history')
transactions = -1
if history['output']:
for line in history['output'].splitlines():
@@ -78,12 +109,19 @@ class DNFPlugin(Plugin, RedHatPlugin):
break
except ValueError:
pass
- for tr_id in range(1, transactions+1):
- self.add_cmd_output("dnf history info %d" % tr_id)
+ for tr_id in range(1, min(transactions+1, 50)):
+ self.add_cmd_output("dnf history info %d" % tr_id,
+ subdir="history-info",
+ tags='dnf_history_info')
# Get list of dnf installed modules and their details.
module_cmd = "dnf --assumeno module list --installed"
modules = self.collect_cmd_output(module_cmd)
self.get_modules_info(modules['output'])
+ def postproc(self):
+ regexp = r"(proxy_password(\s)*=(\s)*)(\S+)\n"
+ repl = r"\1********\n"
+ self.do_path_regex_sub("/etc/yum.repos.d/*", regexp, repl)
+
# vim: set et ts=4 sw=4 :
diff --git a/sos/report/plugins/yum.py b/sos/report/plugins/yum.py
deleted file mode 100644
index e5256642..00000000
--- a/sos/report/plugins/yum.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# This file is part of the sos project: https://github.com/sosreport/sos
-#
-# This copyrighted material is made available to anyone wishing to use,
-# modify, copy, or redistribute it subject to the terms and conditions of
-# version 2 of the GNU General Public License.
-#
-# See the LICENSE file in the source distribution for further information.
-
-from sos.report.plugins import Plugin, RedHatPlugin, PluginOpt
-import os
-
-YUM_PLUGIN_PATH = "/usr/lib/yum-plugins/"
-
-
-class Yum(Plugin, RedHatPlugin):
-
- short_desc = 'yum information'
-
- plugin_name = 'yum'
- profiles = ('system', 'packagemanager', 'sysmgmt')
-
- files = ('/etc/yum.conf',)
- packages = ('yum',)
- verify_packages = ('yum',)
-
- option_list = [
- PluginOpt('yumlist', default=False, desc='list repos and packages'),
- PluginOpt('yumdebug', default=False, desc='collect yum debug data'),
- PluginOpt('yum-history-info', default=False,
- desc='collect yum history info for all transactions')
- ]
-
- def setup(self):
-
- self.add_file_tags({
- '/etc/yum.repos.d/.*': 'yum_repos_d',
- '/var/log/yum.log': 'yum_log',
- '/etc/yum.conf': 'yum_conf'
- })
-
- # Pull all yum related information
- self.add_copy_spec([
- "/etc/yum",
- "/etc/yum.repos.d",
- "/etc/yum.conf",
- "/var/log/yum.log"
- ])
-
- # Get a list of channels the machine is subscribed to.
- self.add_cmd_output("yum -C repolist", tags="yum_repolist")
-
- # Get the same list, but with various statistics related to its
- # contents such as package count.
- self.add_cmd_output("yum -C repolist --verbose")
-
- # Get list of available plugins and their configuration files.
- if (self.path_exists(YUM_PLUGIN_PATH) and
- self.path_isdir(YUM_PLUGIN_PATH)):
- plugins = ""
- for p in self.listdir(YUM_PLUGIN_PATH):
- if not p.endswith(".py"):
- continue
- plugins = plugins + " " if len(plugins) else ""
- plugins = plugins + self.path_join(YUM_PLUGIN_PATH, p)
- if len(plugins):
- self.add_cmd_output("rpm -qf %s" % plugins,
- suggest_filename="plugin-packages")
- plugnames = [
- os.path.basename(p)[:-3] for p in plugins.split()
- ]
- plugnames = "%s\n" % "\n".join(plugnames)
- self.add_string_as_file(plugnames, "plugin-names",
- plug_dir=True)
-
- self.add_copy_spec("/etc/yum/pluginconf.d")
-
- # candlepin info
- self.add_forbidden_path([
- "/etc/pki/entitlement/key.pem",
- "/etc/pki/entitlement/*-key.pem"
- ])
-
- self.add_copy_spec([
- "/etc/pki/product/*.pem",
- "/etc/pki/consumer/cert.pem",
- "/etc/pki/entitlement/*.pem"
- ])
-
- self.add_cmd_output([
- "yum history",
- "yum list installed",
- "package-cleanup --dupes",
- "package-cleanup --problems"
- ], cmd_as_tag=True)
-
- # packages installed/erased/updated per transaction
- if self.get_option("yum-history-info"):
- history = self.exec_cmd("yum history")
- transactions = -1
- if history['status'] == 0:
- for line in history['output'].splitlines():
- try:
- transactions = int(line.split('|')[0].strip())
- break
- except ValueError:
- pass
- for tr_id in range(1, transactions+1):
- self.add_cmd_output("yum history info %d" % tr_id)
-
- if self.get_option("yumlist"):
- # List various information about available packages
- self.add_cmd_output("yum list")
-
- if self.get_option("yumdebug") and self.is_installed('yum-utils'):
- # RHEL6+ alternative for this whole function:
- # self.add_cmd_output("yum-debug-dump '%s'"
- # % os.path.join(self.commons['dstroot'],"yum-debug-dump"))
- r = self.exec_cmd("yum-debug-dump")
- try:
- self.add_cmd_output("zcat %s" % (r['output'].split()[-1],))
- except IndexError:
- pass
-
- def postproc(self):
- regexp = r"(proxy_password(\s)*=(\s)*)(\S+)\n"
- repl = r"\1********\n"
- self.do_path_regex_sub("/etc/yum.repos.d/*", regexp, repl)
-
-# vim: set et ts=4 sw=4 :