diff --git a/.gitignore b/.gitignore index 0964ff6..9a59ac6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -SOURCES/sos-3.8.tar.gz +SOURCES/sos-3.9.1.tar.gz SOURCES/sos-audit-0.3.tgz diff --git a/.sos.metadata b/.sos.metadata index 0c29651..26fd331 100644 --- a/.sos.metadata +++ b/.sos.metadata @@ -1,2 +1,2 @@ -99c94319c6208edef8d852b9e84cbb045c01df5f SOURCES/sos-3.8.tar.gz +f96aaefb396a648be21f661b89f13cd9fc257b8a SOURCES/sos-3.9.1.tar.gz 9d478b9f0085da9178af103078bbf2fd77b0175a SOURCES/sos-audit-0.3.tgz diff --git a/SOURCES/sos-bz1457191-navicli-noniteractively.patch b/SOURCES/sos-bz1457191-navicli-noniteractively.patch new file mode 100644 index 0000000..70cf21b --- /dev/null +++ b/SOURCES/sos-bz1457191-navicli-noniteractively.patch @@ -0,0 +1,67 @@ +From ca24d4602ce46312343f1f6c6f4b270fb6092e21 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Wed, 15 Apr 2020 17:09:52 +0200 +Subject: [PATCH] [navicli] replace interactive prompt by plugin option + +List of ClariiOn IP addresses should be provided via +-k navicli.ipaddrs plugopt, as a space separated list. + +Closes: #405 +Resolves: #2020 + +Signed-off-by: Pavel Moravec +Signed-off-by: Bryan Quigley +--- + sos/plugins/navicli.py | 30 +++++------------------------- + 1 file changed, 5 insertions(+), 25 deletions(-) + +diff --git a/sos/plugins/navicli.py b/sos/plugins/navicli.py +index 8e5dee50..5b6d766d 100644 +--- a/sos/plugins/navicli.py ++++ b/sos/plugins/navicli.py +@@ -19,6 +19,8 @@ class Navicli(Plugin, RedHatPlugin): + + plugin_name = 'navicli' + profiles = ('storage', 'hardware') ++ option_list = [("ipaddrs", "list of space separated CLARiiON IP addresses", ++ '', "")] + + def check_enabled(self): + return is_executable("navicli") +@@ -57,30 +59,8 @@ class Navicli(Plugin, RedHatPlugin): + + def setup(self): + self.get_navicli_config() +- CLARiiON_IP_address_list = [] +- CLARiiON_IP_loop = "stay_in" +- while CLARiiON_IP_loop == "stay_in": +- try: +- ans = input("CLARiiON SP IP Address or [Enter] to exit: ") +- except Exception: +- return +- if self.exec_cmd("navicli -h %s getsptime" % (ans,))['status']: +- CLARiiON_IP_address_list.append(ans) +- else: +- if ans != "": +- print("The IP address you entered, %s, is not to an " +- "active CLARiiON SP." % ans) +- if ans == "": +- CLARiiON_IP_loop = "get_out" +- # Sort and dedup the list of CLARiiON IP Addresses +- CLARiiON_IP_address_list.sort() +- for SP_address in CLARiiON_IP_address_list: +- if CLARiiON_IP_address_list.count(SP_address) > 1: +- CLARiiON_IP_address_list.remove(SP_address) +- for SP_address in CLARiiON_IP_address_list: +- if SP_address != "": +- print(" Gathering NAVICLI information for %s..." % +- SP_address) +- self.get_navicli_SP_info(SP_address) ++ for ip in set(self.get_option("ipaddrs").split()): ++ if self.exec_cmd("navicli -h %s getsptime" % (ip))['status'] == 0: ++ self.get_navicli_SP_info(ip) + + # vim: set et ts=4 sw=4 : +-- +2.21.3 + diff --git a/SOURCES/sos-bz1633006-iptables-kmods.patch b/SOURCES/sos-bz1633006-iptables-kmods.patch new file mode 100644 index 0000000..7ffaae8 --- /dev/null +++ b/SOURCES/sos-bz1633006-iptables-kmods.patch @@ -0,0 +1,78 @@ +From 31e0467885ef3986b476ea070941a786b426f298 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Fri, 8 May 2020 14:06:41 +0200 +Subject: [PATCH] [networking] collect iptables when proper kernel modules + loaded + +Since kernel-4, iptables / ip6tables is newly provided by nf_tables +kernel module. Therefore, collecting ip[,6]tables commands should +be gated by presence of also this kernel module. + +Resolves: #2054 + +Signed-off-by: Pavel Moravec +Signed-off-by: Bryan Quigley +--- + sos/plugins/networking.py | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py +index cac6ccca..5230303d 100644 +--- a/sos/plugins/networking.py ++++ b/sos/plugins/networking.py +@@ -35,22 +35,24 @@ class Networking(Plugin): + ns_wide = "-W" + + def collect_iptable(self, tablename): +- """ When running the iptables command, it unfortunately auto-loads +- the modules before trying to get output. Some people explicitly +- don't want this, so check if the modules are loaded before running +- the command. If they aren't loaded, there can't possibly be any +- relevant rules in that table """ ++ """ Collecting iptables rules for a table loads either kernel module ++ of the table name (for kernel <= 3), or nf_tables (for kernel >= 4). ++ If neither module is present, the rules must be empty.""" + + modname = "iptable_" + tablename + cmd = "iptables -t " + tablename + " -nvL" +- self.add_cmd_output(cmd, pred=SoSPredicate(self, kmods=[modname])) ++ self.add_cmd_output( ++ cmd, ++ pred=SoSPredicate(self, kmods=[modname, 'nf_tables'])) + + def collect_ip6table(self, tablename): + """ Same as function above, but for ipv6 """ + + modname = "ip6table_" + tablename + cmd = "ip6tables -t " + tablename + " -nvL" +- self.add_cmd_output(cmd, pred=SoSPredicate(self, kmods=[modname])) ++ self.add_cmd_output( ++ cmd, ++ pred=SoSPredicate(self, kmods=[modname, 'nf_tables'])) + + def collect_nftables(self): + """ Collects nftables rulesets with 'nft' commands if the modules +@@ -151,16 +153,17 @@ class Networking(Plugin): + self.add_cmd_output(ss_cmd, pred=ss_pred, changes=True) + + # When iptables is called it will load the modules +- # iptables and iptables_filter if they are not loaded. ++ # iptables_filter (for kernel <= 3) or ++ # nf_tables (for kernel >= 4) if they are not loaded. + # The same goes for ipv6. + self.add_cmd_output( + "iptables -vnxL", +- pred=SoSPredicate(self, kmods=['iptable_filter']) ++ pred=SoSPredicate(self, kmods=['iptable_filter', 'nf_tables']) + ) + + self.add_cmd_output( + "ip6tables -vnxL", +- pred=SoSPredicate(self, kmods=['ip6table_filter']) ++ pred=SoSPredicate(self, kmods=['ip6table_filter', 'nf_tables']) + ) + + # Get ethtool output for every device that does not exist in a +-- +2.21.3 + diff --git a/SOURCES/sos-bz1688764-ipa-new-logs.patch b/SOURCES/sos-bz1688764-ipa-new-logs.patch deleted file mode 100644 index a120ae5..0000000 --- a/SOURCES/sos-bz1688764-ipa-new-logs.patch +++ /dev/null @@ -1,84 +0,0 @@ -From f2350aece8a6980f80cfa0036382055239fd8a6b Mon Sep 17 00:00:00 2001 -From: Thorsten Scherf -Date: Mon, 1 Jul 2019 11:37:47 +0200 -Subject: [PATCH] [ipa] copy httpd cert from new location - -With the FreeIPA 4.7.0 release, httpd moved from mod_nss to mod_ssl. As a -result the httpd X.509 certificate is now no longer stored in NSS DB but as -plain PEM text file: /var/lib/ipa/certs/httpd.crt. The plugin needs to copy -this file into the sos archive. - -Closes: #1715 -Resolves: #1716 - -Signed-off-by: Thorsten Scherf -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/ipa.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sos/plugins/ipa.py b/sos/plugins/ipa.py -index 50f42f259..310c0fa31 100644 ---- a/sos/plugins/ipa.py -+++ b/sos/plugins/ipa.py -@@ -115,6 +115,7 @@ def setup(self): - "/var/lib/certmonger/requests/[0-9]*", - "/var/lib/certmonger/cas/[0-9]*", - "/var/lib/ipa/ra-agent.pem", -+ "/var/lib/ipa/certs/httpd.crt", - "/var/kerberos/krb5kdc/kdc.crt", - "/var/lib/ipa/sysrestore/sysrestore.state" - ]) -From 5c0b2d56313b6fa58b46802317c98b89e5a68508 Mon Sep 17 00:00:00 2001 -From: Rob Crittenden -Date: Thu, 12 Sep 2019 12:02:34 -0400 -Subject: [PATCH] [ipa] collect ipa-healthcheck logs - -Resolves: #1782 - -Signed-off-by: Rob Crittenden -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/ipa.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/sos/plugins/ipa.py b/sos/plugins/ipa.py -index 310c0fa31..750cb6fae 100644 ---- a/sos/plugins/ipa.py -+++ b/sos/plugins/ipa.py -@@ -117,7 +117,8 @@ def setup(self): - "/var/lib/ipa/ra-agent.pem", - "/var/lib/ipa/certs/httpd.crt", - "/var/kerberos/krb5kdc/kdc.crt", -- "/var/lib/ipa/sysrestore/sysrestore.state" -+ "/var/lib/ipa/sysrestore/sysrestore.state", -+ "/var/log/ipa/healthcheck/healthcheck.log*" - ]) - - # Make sure to use the right PKI config and NSS DB folders -From 823dbabde82ee941c421482a71be572984607ad4 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Tue, 1 Oct 2019 08:26:24 +0200 -Subject: [PATCH] [ipa] collect kdcproxy configs - -Resolves: #1806 - -Signed-off-by: Pavel Moravec ---- - sos/plugins/ipa.py | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/sos/plugins/ipa.py b/sos/plugins/ipa.py -index 750cb6fae..d3454de98 100644 ---- a/sos/plugins/ipa.py -+++ b/sos/plugins/ipa.py -@@ -111,6 +111,9 @@ def setup(self): - "/etc/named.*", - "/etc/ipa/ca.crt", - "/etc/ipa/default.conf", -+ "/etc/ipa/kdcproxy/kdcproxy.conf", -+ "/etc/ipa/kdcproxy/ipa-kdc-proxy.conf", -+ "/etc/ipa/kdcproxy.conf", - "/root/.ipa/log/cli.log", - "/var/lib/certmonger/requests/[0-9]*", - "/var/lib/certmonger/cas/[0-9]*", diff --git a/SOURCES/sos-bz1709682-grub2-mkconfig-dont-remove-kernel-opts.patch b/SOURCES/sos-bz1709682-grub2-mkconfig-dont-remove-kernel-opts.patch deleted file mode 100644 index 3f20a54..0000000 --- a/SOURCES/sos-bz1709682-grub2-mkconfig-dont-remove-kernel-opts.patch +++ /dev/null @@ -1,180 +0,0 @@ -From 7097f737339f0cde6da923a4ce16a008d229cda7 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Mon, 16 Sep 2019 17:13:27 +0200 -Subject: [PATCH 1/2] [plugins] extend SoSPredicate by command output inclusion - test - -Add a predicate type in form - -cmd_outputs={'cmd': 'foo --help', 'output': 'bar'} - -that checks whether output of given command contains given string. - -Multiple commands/outputs can be provided in a list. - -Related to: #1682 - -Signed-off-by: Pavel Moravec ---- - sos/plugins/__init__.py | 57 +++++++++++++++++++++++++++++++++++------ - 1 file changed, 49 insertions(+), 8 deletions(-) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index a0b291bea..516a61109 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -115,6 +115,9 @@ class SoSPredicate(object): - #: Services enablement list - services = [] - -+ # Command output inclusion pairs {'cmd': 'foo --help', 'output': 'bar'} -+ cmd_outputs = [] -+ - def __str(self, quote=False, prefix="", suffix=""): - """Return a string representation of this SoSPredicate with - optional prefix, suffix and value quoting. -@@ -128,14 +131,23 @@ class SoSPredicate(object): - - services = self.services - services = [quotes % s for s in services] if quote else services -- pstr += "services=[%s]" % (",".join(services)) -+ pstr += "services=[%s], " % (",".join(services)) -+ -+ cmdoutputs = [ -+ "{ %s: %s, %s: %s }" % (quotes % "cmd", -+ quotes % cmdoutput['cmd'], -+ quotes % "output", -+ quotes % cmdoutput['output']) -+ for cmdoutput in self.cmd_outputs -+ ] -+ pstr += "cmdoutputs=[%s]" % (",".join(cmdoutputs)) - - return prefix + pstr + suffix - - def __str__(self): - """Return a string representation of this SoSPredicate. - -- "dry_run=False, kmods=[], services=[]" -+ "dry_run=False, kmods=[], services=[], cmdoutputs=[]" - """ - return self.__str() - -@@ -143,7 +155,7 @@ class SoSPredicate(object): - """Return a machine readable string representation of this - SoSPredicate. - -- "SoSPredicate(dry_run=False, kmods=[], services=[])" -+ "SoSPredicate(dry_run=False, kmods=[], services=[], cmdoutputs=[])" - """ - return self.__str(quote=True, prefix="SoSPredicate(", suffix=")") - -@@ -170,15 +182,39 @@ class SoSPredicate(object): - else: - return all(_svcs) - -+ def _eval_cmd_output(self, cmd_output): -+ '''Does 'cmd' output contain string 'output'?''' -+ if 'cmd' not in cmd_output or 'output' not in cmd_output: -+ return False -+ result = sos_get_command_output(cmd_output['cmd']) -+ if result['status'] != 0: -+ return False -+ for line in result['output'].splitlines(): -+ if cmd_output['output'] in line: -+ return True -+ return False -+ -+ def _eval_cmd_outputs(self): -+ if not self.cmd_outputs: -+ return True -+ -+ _cmds = [self._eval_cmd_output(c) for c in self.cmd_outputs] -+ -+ if self.required['commands'] == 'any': -+ return any(_cmds) -+ else: -+ return all(_cmds) -+ - def __nonzero__(self): - """Predicate evaluation hook. - """ - - # Null predicate? -- if not any([self.kmods, self.services, self.dry_run]): -+ if not any([self.kmods, self.services, self.cmd_outputs, self.dry_run]): - return True - -- return ((self._eval_kmods() and self._eval_services()) and not -+ return ((self._eval_kmods() and self._eval_services() and -+ self._eval_cmd_outputs()) and not - self.dry_run) - - def __bool__(self): -@@ -187,14 +223,17 @@ class SoSPredicate(object): - return self.__nonzero__() - - def __init__(self, owner, dry_run=False, kmods=[], services=[], -- required={}): -+ cmd_outputs=[], required={}): - """Initialise a new SoSPredicate object. - """ - self._owner = owner - self.kmods = list(kmods) - self.services = list(services) -+ if not isinstance(cmd_outputs, list): -+ cmd_outputs = [cmd_outputs] -+ self.cmd_outputs = cmd_outputs - self.dry_run = dry_run | self._owner.commons['cmdlineopts'].dry_run -- self.required = {'kmods': 'any', 'services': 'any'} -+ self.required = {'kmods': 'any', 'services': 'any', 'commands': 'any'} - self.required.update({ - k: v for k, v in required.items() if - required[k] != self.required[k] - -From 47e434c50e63f80e4b620e74d81c636c8c8a8d97 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Mon, 16 Sep 2019 17:15:40 +0200 -Subject: [PATCH 2/2] [grub2] call grub2-config with --no-grubenv-update when - appropriate - -On some newer grub2 versions, grub2-config removes extra args in -$kernel_opts until --no-grubenv-update option is used. - -Test if the option is present in "grub2-config --help" and if so, use it. - -Resolves: #1682 - -Signed-off-by: Pavel Moravec ---- -diff --git a/sos/plugins/grub2.py b/sos/plugins/grub2.py -index 9786de44d..0ca6fe096 100644 ---- a/sos/plugins/grub2.py -+++ b/sos/plugins/grub2.py -@@ -6,7 +6,8 @@ - # - # See the LICENSE file in the source distribution for further information. - --from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin -+from sos.plugins import (Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, -+ SoSPredicate) - - - class Grub2(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): -@@ -32,9 +33,16 @@ def setup(self): - self.add_cmd_output("ls -lanR /boot") - # call grub2-mkconfig with GRUB_DISABLE_OS_PROBER=true to prevent - # possible unwanted loading of some kernel modules -+ # further, check if the command supports --no-grubenv-update option -+ # to prevent removing of extra args in $kernel_opts, and (only) if so, -+ # call the command with this argument - env = {} - env['GRUB_DISABLE_OS_PROBER'] = 'true' -- self.add_cmd_output("grub2-mkconfig", env=env) -+ grub_cmd = 'grub2-mkconfig' -+ co = {'cmd': 'grub2-mkconfig --help', 'output': '--no-grubenv-update'} -+ if self.test_predicate(self, pred=SoSPredicate(self, cmd_outputs=co)): -+ grub_cmd += ' --no-grubenv-update' -+ self.add_cmd_output(grub_cmd, env=env) - - def postproc(self): - # the trailing space is required; python treats '_' as whitespace diff --git a/SOURCES/sos-bz1721779-ebpf-net-list.patch b/SOURCES/sos-bz1721779-ebpf-net-list.patch deleted file mode 100644 index a1858a0..0000000 --- a/SOURCES/sos-bz1721779-ebpf-net-list.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 62b77dcd78dc271879d01f0132acea1952ef226d Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Thu, 27 Jun 2019 13:44:40 +0200 -Subject: [PATCH] [kernel] collect "bpftool net list" - -List bpf program attachments in the kernel networking subsystem. - -Resolves: #1712 - -Signed-off-by: Pavel Moravec ---- - sos/plugins/kernel.py | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/sos/plugins/kernel.py b/sos/plugins/kernel.py -index 558e71438..bf3c3deaa 100644 ---- a/sos/plugins/kernel.py -+++ b/sos/plugins/kernel.py -@@ -142,6 +142,10 @@ class Kernel(Plugin, RedHatPlugin, Debia - if not self.get_option("trace"): - self.add_forbidden_path("/sys/kernel/debug/tracing/trace") - -+ # collect list of bpf program attachments in the kernel -+ # networking subsystem -+ self.add_cmd_output("bpftool net list") -+ - # collect list of eBPF programs and maps and their dumps - prog_file = self.get_cmd_output_now("bpftool -j prog list") - for prog_id in self.get_bpftool_prog_ids(prog_file): diff --git a/SOURCES/sos-bz1738391-kernel-no-trace-by-default.patch b/SOURCES/sos-bz1738391-kernel-no-trace-by-default.patch deleted file mode 100644 index 5aec064..0000000 --- a/SOURCES/sos-bz1738391-kernel-no-trace-by-default.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 55949fb88c492eec542c69157a8763ddb3555345 Mon Sep 17 00:00:00 2001 -From: MIZUTA Takeshi -Date: Thu, 6 Jun 2019 18:42:40 +0900 -Subject: [PATCH] [plugins] Change forbidden_path from partial-match to - exact-match - -forbidden_path is evaluated on partial-match. -However, it will be correct to evaluate on exact-match. - -Closes: #1692 -Resolves: #1695 - -Signed-off-by: MIZUTA Takeshi -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/__init__.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index 56af847a..41f4f58c 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -64,7 +64,7 @@ def _mangle_command(command, name_max): - - - def _path_in_path_list(path, path_list): -- return any(p in path for p in path_list) -+ return any(p == path for p in path_list) - - - def _node_type(st): --- -2.21.0 - -From d2d5b9da6d4af7ead8a47468db0bbfcc8fb2b5bf Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Thu, 26 Sep 2019 10:50:18 +0200 -Subject: [PATCH] [kernel] Don't collect trace file by default - -Updates the plugin to don't collect trace file by default. Collecting -trace file may take a lot of time, so trace file is not collected -by default, and use the new plug-in option when collecting. - -Original author: MIZUTA Takeshi - -Closes: #1688 -Resolves: #1800 - -Signed-off-by: Pavel Moravec -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/kernel.py | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/sos/plugins/kernel.py b/sos/plugins/kernel.py -index bf3c3dea..b498f55e 100644 ---- a/sos/plugins/kernel.py -+++ b/sos/plugins/kernel.py -@@ -23,7 +23,8 @@ class Kernel(Plugin, RedHatPlugin, Debia - sys_module = '/sys/module' - - option_list = [ -- ("with-timer", "gather /proc/timer* statistics", "slow", False) -+ ("with-timer", "gather /proc/timer* statistics", "slow", False), -+ ("trace", "gather /sys/kernel/debug/tracing/trace file", "slow", False) - ] - - def get_bpftool_prog_ids(self, prog_file): -@@ -138,6 +139,9 @@ class Kernel(Plugin, RedHatPlugin, Debia - # and may also cause softlockups - self.add_copy_spec("/proc/timer*") - -+ if not self.get_option("trace"): -+ self.add_forbidden_path("/sys/kernel/debug/tracing/trace") -+ - # collect list of eBPF programs and maps and their dumps - prog_file = self.get_cmd_output_now("bpftool -j prog list") - for prog_id in self.get_bpftool_prog_ids(prog_file): -2.21.0 diff --git a/SOURCES/sos-bz1741330-openswan-to-libreswan.patch b/SOURCES/sos-bz1741330-openswan-to-libreswan.patch deleted file mode 100644 index db247d2..0000000 --- a/SOURCES/sos-bz1741330-openswan-to-libreswan.patch +++ /dev/null @@ -1,104 +0,0 @@ -From b061168bdae759c88e9ef93f3620edae404e69fe Mon Sep 17 00:00:00 2001 -From: Stepan Broz -Date: Thu, 26 Sep 2019 12:56:00 +0200 -Subject: [PATCH] [libreswan] New plugin for "libreswan" IPsec - -The "libreswan" package is replacing "openswan" in many distributions. -This plugin is replacing the original "openswan" plugin that it is -based on. - -This plugin will now run for both "libreswan" and "openswan" packages, -or when the configuration file "/etc/ipsec.conf" is present. - -Data collected now include configuration, current status, XFRM policy -and state, XFRM statistics, basic information about certificates and -the NSS database. - -No private data (keys, certificates, secrets) are collected, authenti- -cation and encryption keys are removed from the output of -"ip xfrm state", and also from "ipsec barf" when running with the -"ipsec-barf" option set. - -Signed-off-by: Stepan Broz ---- - sos/plugins/{openswan.py => libreswan.py} | 37 ++++++++++++++++++----- - 1 file changed, 30 insertions(+), 7 deletions(-) - rename sos/plugins/{openswan.py => libreswan.py} (50%) - -diff --git a/sos/plugins/openswan.py b/sos/plugins/libreswan.py -similarity index 50% -rename from sos/plugins/openswan.py -rename to sos/plugins/libreswan.py -index ce5581320..717329b87 100644 ---- a/sos/plugins/openswan.py -+++ b/sos/plugins/libreswan.py -@@ -1,4 +1,5 @@ - # Copyright (C) 2007 Sadique Puthen -+# Copyright (C) 2019 Red Hat Inc., Stepan Broz - - # This file is part of the sos project: https://github.com/sosreport/sos - # -@@ -11,29 +12,38 @@ - from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin - - --class Openswan(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): -- """Openswan IPsec -+class Libreswan(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): -+ """Libreswan IPsec - """ - -- plugin_name = 'openswan' -- profiles = ('network', 'security') -+ plugin_name = 'libreswan' -+ profiles = ('network', 'security', 'openshift') - option_list = [ - ("ipsec-barf", "collect the output of the ipsec barf command", - "slow", False) - ] - - files = ('/etc/ipsec.conf',) -- packages = ('openswan', 'libreswan') -+ packages = ('libreswan', 'openswan') - - def setup(self): - self.add_copy_spec([ - "/etc/ipsec.conf", -- "/etc/ipsec.d" -+ "/etc/ipsec.d", -+ "/proc/net/xfrm_stat" - ]) - - # although this is 'verification' it's normally a very quick - # operation so is not conditional on --verify -- self.add_cmd_output("ipsec verify") -+ self.add_cmd_output([ -+ 'ipsec verify', -+ 'ipsec whack --status', -+ 'ipsec whack --listall', -+ 'certutil -L -d sql:/etc/ipsec.d', -+ 'ip xfrm policy', -+ 'ip xfrm state' -+ ]) -+ - if self.get_option("ipsec-barf"): - self.add_cmd_output("ipsec barf") - -@@ -44,4 +54,17 @@ def setup(self): - '/etc/ipsec.d/*.secrets' - ]) - -+ def postproc(self): -+ # Remove any sensitive data. -+ # "ip xfrm state" output contains encryption or authentication private -+ # keys: -+ xfrm_state_regexp = r'(aead|auth|auth-trunc|enc)' \ -+ r'(\s.*\s)(0x[0-9a-f]+)' -+ self.do_cmd_output_sub("state", xfrm_state_regexp, -+ r"\1\2********") -+ -+ if self.get_option("ipsec-barf"): -+ self.do_cmd_output_sub("barf", xfrm_state_regexp, -+ r"\1\2********") -+ - # vim: set et ts=4 sw=4 : diff --git a/SOURCES/sos-bz1744553-ovn-plugins-containerized-env.patch b/SOURCES/sos-bz1744553-ovn-plugins-containerized-env.patch deleted file mode 100644 index 9a97377..0000000 --- a/SOURCES/sos-bz1744553-ovn-plugins-containerized-env.patch +++ /dev/null @@ -1,326 +0,0 @@ -From cc6374914a47eb3777c5b8306506df43522a31e0 Mon Sep 17 00:00:00 2001 -From: Daniel Alvarez -Date: Thu, 18 Jul 2019 14:08:27 +0200 -Subject: [PATCH] [ovn_central] add additional show commands - -This patch is adding 'show' commands for both OVN -NorthBound and SouthBound databases. - -Signed-off-by: Daniel Alvarez -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/ovn_central.py | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/sos/plugins/ovn_central.py b/sos/plugins/ovn_central.py -index e05856872..2d2526253 100644 ---- a/sos/plugins/ovn_central.py -+++ b/sos/plugins/ovn_central.py -@@ -57,6 +57,8 @@ def setup(self): - - # Some user-friendly versions of DB output - cmds = [ -+ 'ovn-nbctl show', -+ 'ovn-sbctl show', - 'ovn-sbctl lflow-list', - 'ovn-nbctl get-ssl', - 'ovn-nbctl get-connection', -From 5fd4e850ad9a6636d0fb206954e8ab016584974d Mon Sep 17 00:00:00 2001 -From: Daniel Alvarez -Date: Wed, 11 Sep 2019 16:19:15 +0100 -Subject: [PATCH] [ovn_host] fix Open_vSwitch table name - -Signed-off-by: Daniel Alvarez -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/ovn_host.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sos/plugins/ovn_host.py b/sos/plugins/ovn_host.py -index 542516279..ba35d87e7 100644 ---- a/sos/plugins/ovn_host.py -+++ b/sos/plugins/ovn_host.py -@@ -35,7 +35,7 @@ def setup(self): - self.add_cmd_output([ - 'ovs-ofctl -O OpenFlow13 dump-flows br-int', - 'ovs-vsctl list-br', -- 'ovs-vsctl list OpenVswitch', -+ 'ovs-vsctl list Open_vSwitch', - ]) - - self.add_journal(units="ovn-controller") -From 3c842046e9c4c5b371566347f51e5e242daf4f8d Mon Sep 17 00:00:00 2001 -From: Daniel Alvarez -Date: Tue, 23 Jul 2019 12:44:07 +0200 -Subject: [PATCH] [ovn_central] Add support to containerized setups - -This patch is adding support in ovn_central plugin to containerized -setups. - -Now it's detecting if the OVN central services are running in -container and execute the relevant commands inside it. The support -covers both podman and docker runtimes. - -Signed-off-by: Daniel Alvarez ---- - sos/plugins/ovn_central.py | 94 ++++++++++++++++++++++++++++---------- - 1 file changed, 69 insertions(+), 25 deletions(-) - -diff --git a/sos/plugins/ovn_central.py b/sos/plugins/ovn_central.py -index 2d2526253..a9fcdf33e 100644 ---- a/sos/plugins/ovn_central.py -+++ b/sos/plugins/ovn_central.py -@@ -19,30 +19,64 @@ class OVNCentral(Plugin): - """ - plugin_name = "ovn_central" - profiles = ('network', 'virt') -- -- def add_database_output(self, filename, cmds, ovn_cmd, skip=[]): -+ _container_runtime = None -+ _container_name = None -+ -+ def get_tables_from_schema(self, filename, skip=[]): -+ if self._container_name: -+ cmd = "%s exec %s cat %s" % ( -+ self._container_runtime, self._container_name, filename) -+ res = self.get_command_output(cmd) -+ if res['status'] != 0: -+ self._log_error("Could not retrieve DB schema file from " -+ "container %s" % self._container_name) -+ return -+ try: -+ db = json.loads(res['output']) -+ except Exception: -+ self._log_error("Cannot parse JSON file %s" % filename) -+ return -+ else: -+ try: -+ with open(filename, 'r') as f: -+ try: -+ db = json.load(f) -+ except Exception: -+ self._log_error( -+ "Cannot parse JSON file %s" % filename) -+ return -+ except IOError as ex: -+ self._log_error( -+ "Could not open DB schema file %s: %s" % (filename, ex)) -+ return - try: -- with open(filename, 'r') as f: -- try: -- db = json.load(f) -- except Exception: -- # If json can't be parsed, then exit early -- self._log_error("Cannot parse JSON file %s" % filename) -- return -- try: -- for table in six.iterkeys(db['tables']): -- if table not in skip: -- cmds.append('%s list %s' % (ovn_cmd, table)) -- except AttributeError: -- self._log_error("DB schema %s has no 'tables' key" % -- filename) -- return -- except IOError as ex: -- self._log_error("Could not open DB schema file %s: %s" % (filename, -- ex)) -- return -+ return [table for table in six.iterkeys( -+ db['tables']) if table not in skip] -+ except AttributeError: -+ self._log_error("DB schema %s has no 'tables' key" % filename) -+ -+ def add_database_output(self, tables, cmds, ovn_cmd): -+ for table in tables: -+ cmds.append('%s list %s' % (ovn_cmd, table)) -+ -+ def running_in_container(self): -+ for runtime in ["podman", "docker"]: -+ container_status = self.get_command_output(runtime + " ps") -+ if container_status['status'] == 0: -+ for line in container_status['output'].splitlines(): -+ if "ovn-dbs-bundle" in line: -+ self._container_name = line.split()[-1] -+ self._container_runtime = runtime -+ return True -+ return False -+ -+ def check_enabled(self): -+ return (self.running_in_container() or -+ super(OVNCentral, self).check_enabled()) - - def setup(self): -+ containerized = self.running_in_container() -+ - ovs_rundir = os.environ.get('OVS_RUNDIR') - for pidfile in ['ovnnb_db.pid', 'ovnsb_db.pid', 'ovn-northd.pid']: - self.add_copy_spec([ -@@ -68,10 +102,20 @@ def setup(self): - - schema_dir = '/usr/share/openvswitch' - -- self.add_database_output(os.path.join(schema_dir, 'ovn-nb.ovsschema'), -- cmds, 'ovn-nbctl') -- self.add_database_output(os.path.join(schema_dir, 'ovn-sb.ovsschema'), -- cmds, 'ovn-sbctl', ['Logical_Flow']) -+ nb_tables = self.get_tables_from_schema(os.path.join( -+ schema_dir, 'ovn-nb.ovsschema')) -+ sb_tables = self.get_tables_from_schema(os.path.join( -+ schema_dir, 'ovn-sb.ovsschema'), ['Logical_Flow']) -+ -+ self.add_database_output(nb_tables, cmds, 'ovn-nbctl') -+ self.add_database_output(sb_tables, cmds, 'ovn-sbctl') -+ -+ # If OVN is containerized, we need to run the above commands inside -+ # the container. -+ if containerized: -+ cmds = ['%s exec %s %s' % (self._container_runtime, -+ self._container_name, -+ cmd) for cmd in cmds] - - self.add_cmd_output(cmds) - -From a895bf4096f1dbd71c9dbd4defb47783f4ef9840 Mon Sep 17 00:00:00 2001 -From: Daniel Alvarez -Date: Thu, 25 Jul 2019 11:42:16 +0200 -Subject: [PATCH] [ovn_host] Add support for containerized setups - -Prior to this patch, ovn_host was disabled on containerized -setups due to the fact that ovn-controller package is not -installed in the host. - -This patch fixes it by checking if the ovn-controller process -is running. - -Resolves: #1767 - -Signed-off-by: Daniel Alvarez -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/ovn_host.py | 21 ++++++++++++++------- - 1 file changed, 14 insertions(+), 7 deletions(-) - -diff --git a/sos/plugins/ovn_host.py b/sos/plugins/ovn_host.py -index ba35d87e7..5225f010e 100644 ---- a/sos/plugins/ovn_host.py -+++ b/sos/plugins/ovn_host.py -@@ -12,6 +12,15 @@ - from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin - - -+pidfile = 'ovn-controller.pid' -+pid_paths = [ -+ '/var/lib/openvswitch/ovn', -+ '/usr/local/var/run/openvswitch', -+ '/var/run/openvswitch', -+ '/run/openvswitch' -+] -+ -+ - class OVNHost(Plugin): - """ OVN Controller - """ -@@ -19,13 +28,6 @@ class OVNHost(Plugin): - profiles = ('network', 'virt') - - def setup(self): -- pidfile = 'ovn-controller.pid' -- pid_paths = [ -- '/var/lib/openvswitch/ovn', -- '/usr/local/var/run/openvswitch', -- '/var/run/openvswitch', -- '/run/openvswitch' -- ] - if os.environ.get('OVS_RUNDIR'): - pid_paths.append(os.environ.get('OVS_RUNDIR')) - self.add_copy_spec([os.path.join(pp, pidfile) for pp in pid_paths]) -@@ -40,6 +42,11 @@ def setup(self): - - self.add_journal(units="ovn-controller") - -+ def check_enabled(self): -+ return (any([os.path.isfile( -+ os.path.join(pp, pidfile)) for pp in pid_paths]) or -+ super(OVNHost, self).check_enabled()) -+ - - class RedHatOVNHost(OVNHost, RedHatPlugin): - -From 6d623ceb2bc973a603c2abb1c8c64f2980667a0d Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Wed, 2 Oct 2019 12:19:19 +0200 -Subject: [PATCH] [ovn_central] dont add db outputs when no table is found in - schema - -When get_tables_from_schema method returns None (i.e. due to a -parsing error or missing config file), add_database_output tries -to iterate over None object, what raises an exception. - -Resolves: #1808 - -Signed-off-by: Pavel Moravec ---- - sos/plugins/ovn_central.py | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/sos/plugins/ovn_central.py b/sos/plugins/ovn_central.py -index a9fcdf33e..b5ff96f66 100644 ---- a/sos/plugins/ovn_central.py -+++ b/sos/plugins/ovn_central.py -@@ -56,6 +56,8 @@ def get_tables_from_schema(self, filename, skip=[]): - self._log_error("DB schema %s has no 'tables' key" % filename) - - def add_database_output(self, tables, cmds, ovn_cmd): -+ if not tables: -+ return - for table in tables: - cmds.append('%s list %s' % (ovn_cmd, table)) - -From 0c9a1f0cb98c5256a0ec1dec83b7c94d3bb39170 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Wed, 4 Dec 2019 15:53:16 +0100 -Subject: [PATCH] [ovn_central] call podman exec without a timeout - -This is a workaround fix of a podman bug (see rhbz1732525) where -"podman ps" can hang when "podman exec .." is invoked in detached -mode under "timeout". - -Calling it without timeout works fine. - -This commit can be reverted once the podman bug is fixed. - -Resolves: #1875 - -Signed-off-by: Pavel Moravec ---- - sos/plugins/ovn_central.py | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/sos/plugins/ovn_central.py b/sos/plugins/ovn_central.py -index c74bf403..32a5e1cb 100644 ---- a/sos/plugins/ovn_central.py -+++ b/sos/plugins/ovn_central.py -@@ -26,7 +26,8 @@ class OVNCentral(Plugin): - if self._container_name: - cmd = "%s exec %s cat %s" % ( - self._container_runtime, self._container_name, filename) -- res = self.get_command_output(cmd) -+ # the timeout=None is just a workaround for "podman ps" hung bug -+ res = self.get_command_output(cmd, timeout=None) - if res['status'] != 0: - self._log_error("Could not retrieve DB schema file from " - "container %s" % self._container_name) -@@ -118,7 +119,8 @@ class OVNCentral(Plugin): - self._container_name, - cmd) for cmd in cmds] - -- self.add_cmd_output(cmds) -+ # the timeout=None is just a workaround for "podman ps" hung bug -+ self.add_cmd_output(cmds, timeout=None) - - self.add_copy_spec("/etc/sysconfig/ovn-northd") - --- -2.21.0 - diff --git a/SOURCES/sos-bz1766915-interim-sysroot-forbidden-paths.patch b/SOURCES/sos-bz1766915-interim-sysroot-forbidden-paths.patch deleted file mode 100644 index 5a0fd80..0000000 --- a/SOURCES/sos-bz1766915-interim-sysroot-forbidden-paths.patch +++ /dev/null @@ -1,354 +0,0 @@ -From 9a0ab16793a8388b2c3d3909fd3a087c5b6296d4 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Fri, 1 Nov 2019 12:13:23 -0400 -Subject: [PATCH 01/10] [Plugin] remove invalid {strip/join}_sysroot() - -Do not strip the sysroot path prefix when calling _do_copy_path() -for a symlink target and do not add the sysroot prefix when -testing for a forbidden path. - -Related: #1842 - -Signed-off-by: Pavel Moravec -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/__init__.py | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index e75ec82e..4f1b73ce 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -731,7 +731,7 @@ class Plugin(object): - - # skip recursive copying of symlink pointing to itself. - if (absdest != srcpath): -- self._do_copy_path(self.strip_sysroot(absdest)) -+ self._do_copy_path(absdest) - else: - self._log_debug("link '%s' points to itself, skipping target..." - % linkdest) -@@ -758,8 +758,6 @@ class Plugin(object): - return None - - def _is_forbidden_path(self, path): -- if self.use_sysroot(): -- path = self.join_sysroot(path) - return _path_in_path_list(path, self.forbidden_paths) - - def _copy_node(self, path, st): --- -2.21.0 - - -From aeeebf126fc9fdb0fd8c3b01418bef742bce78c3 Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Fri, 1 Nov 2019 12:22:51 -0400 -Subject: [PATCH 02/10] [Plugin] fix destination paths in _do_copy_path() - -The path used to copy special device nodes and directories in -_do_copy_path() should be the destination path in the archive -(without sysroot prefix), and not the source path in the host -file system that includes this prefix. - -Related: #1842 - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/__init__.py | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index 4f1b73ce..60fbeaf7 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -651,9 +651,13 @@ class Plugin(object): - self._copy_symlink(srcpath) - return - else: -- if stat.S_ISDIR(st.st_mode) and os.access(srcpath, os.R_OK): -- self._copy_dir(srcpath) -- return -+ if stat.S_ISDIR(st.st_mode) and os.access(srcpath, os.R_OK): -+ # copy empty directory -+ if not os.listdir(srcpath): -+ self.archive.add_dir(dest) -+ return -+ self._copy_dir(dest) -+ return - - # handle special nodes (block, char, fifo, socket) - if not (stat.S_ISREG(st.st_mode) or stat.S_ISDIR(st.st_mode)): -@@ -808,7 +808,7 @@ class Plugin(object): - ntype = _node_type(st) - self._log_debug("creating %s node at archive:'%s'" - % (ntype, dest)) -- self._copy_node(srcpath, st) -+ self._copy_node(dest, st) - return - - # if we get here, it's definitely a regular file (not a symlink or dir) --- -2.21.0 - - -From 05f3d5bda8f548459fabcd38f2d087d6ecef98a2 Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Fri, 1 Nov 2019 12:25:09 -0400 -Subject: [PATCH 03/10] [kernel] remove trailing directory globs in forbidden - paths - -Since the forbidden path test now uses an exact match the trailing -globs ("/some/directory/path/to/exclude/*") used to exclude trace -related directories from collection lead to a failure to properly -blacklist these files: - -The glob is expanded, for e.g.: - - "/sys/kernel/debug/tracing/per_cpu/*" - -Expands to unclude a 'cpuN' sub-directory for each CPU present on -the machine. These expanded paths are then added to the forbidden -paths list for the plugin: - - /sys/kernel/debug/tracing/per_cpu/cpu0 - /sys/kernel/debug/tracing/per_cpu/cpu1 - ... - -When an attempt is made to collect the entire "per_cpu" directory -a check is made for the full "/sys/kernel/debug/tracing/per_cpu" -path against each entry in the forbidden paths list. Since this is -a prefix of the actual paths stored no match is returned and the -collection is permitted. - -Remove the trailing globs from these directory paths and prevent -any collection of the directories they reference by the plugin. - -Related: #1842 - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/kernel.py | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/sos/plugins/kernel.py b/sos/plugins/kernel.py -index 88b14689..5c852143 100644 ---- a/sos/plugins/kernel.py -+++ b/sos/plugins/kernel.py -@@ -89,9 +89,9 @@ class Kernel(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): - self.add_forbidden_path([ - '/sys/kernel/debug/tracing/trace_pipe', - '/sys/kernel/debug/tracing/README', -- '/sys/kernel/debug/tracing/trace_stat/*', -- '/sys/kernel/debug/tracing/per_cpu/*', -- '/sys/kernel/debug/tracing/events/*', -+ '/sys/kernel/debug/tracing/trace_stat', -+ '/sys/kernel/debug/tracing/per_cpu', -+ '/sys/kernel/debug/tracing/events', - '/sys/kernel/debug/tracing/free_buffer', - '/sys/kernel/debug/tracing/trace_marker', - '/sys/kernel/debug/tracing/trace_marker_raw', --- -2.21.0 - - -From 801c71b33dcfeaa980baa9f377b721bdd26aa5e8 Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Fri, 1 Nov 2019 16:53:29 +0000 -Subject: [PATCH 04/10] [tests] fix test_copy_dir_forbidden_path - -Rather than call just Plugin.setup() and Plugin._do_copy_path(), -add an add_copy_spec() call to the mock plugin setup() method, -and invoke copying by calling the Plugin.collect() method. - -Related: #1845 - -Signed-off-by: Bryn M. Reeves ---- - tests/plugin_tests.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/tests/plugin_tests.py b/tests/plugin_tests.py -index b8760429..6522fe14 100644 ---- a/tests/plugin_tests.py -+++ b/tests/plugin_tests.py -@@ -81,6 +81,7 @@ class ForbiddenMockPlugin(Plugin): - plugin_name = "forbidden" - - def setup(self): -+ self.add_copy_spec("tests") - self.add_forbidden_path("tests") - - -@@ -235,7 +236,7 @@ class PluginTests(unittest.TestCase): - }) - p.archive = MockArchive() - p.setup() -- p._do_copy_path("tests") -+ p.collect() - self.assertEquals(p.archive.m, {}) - - --- -2.21.0 - - -From c4182ebd52af523261d2e7ef75affbb88eaf31fb Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Mon, 4 Nov 2019 10:45:15 +0000 -Subject: [PATCH 05/10] [Plugin] use correct source path when copying - directories - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/__init__.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index 60fbeaf7..240fe9f1 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -656,7 +656,7 @@ class Plugin(object): - if not os.listdir(srcpath): - self.archive.add_dir(dest) - return -- self._copy_dir(dest) -+ self._copy_dir(srcpath) - return - - # handle special nodes (block, char, fifo, socket) --- -2.21.0 - - -From 68f4d7cc7adde00171af842b5bc808f41d888a87 Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Mon, 4 Nov 2019 10:48:01 +0000 -Subject: [PATCH 06/10] [Plugin] improve _copy_dir() variable naming - -Directory entries found in _copy_dir() may be either files or -sub-directories: reflect this in the names of local variables. - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/__init__.py | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index 240fe9f1..1a1464c1 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -738,10 +738,11 @@ class Plugin(object): - - def _copy_dir(self, srcpath): - try: -- for afile in os.listdir(srcpath): -+ for name in os.listdir(srcpath): - self._log_debug("recursively adding '%s' from '%s'" -- % (afile, srcpath)) -- self._do_copy_path(os.path.join(srcpath, afile), dest=None) -+ % (name, srcpath)) -+ path = os.path.join(srcpath, name) -+ self._do_copy_path(path) - except OSError as e: - if e.errno == errno.ELOOP: - msg = "Too many levels of symbolic links copying" --- -2.21.0 - - -From ad3adef07c32aee5bdd438706c6c1d4590ff8297 Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Mon, 4 Nov 2019 14:13:00 +0000 -Subject: [PATCH 07/10] [ceph] fix directory blacklist style - -Plugins must use 'path/to/exclude' rather than 'path/to/exclude/*' -in order to omit a directory and all its content from the report. - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/ceph.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/sos/plugins/ceph.py b/sos/plugins/ceph.py -index 6e340c69..43284bc8 100644 ---- a/sos/plugins/ceph.py -+++ b/sos/plugins/ceph.py -@@ -103,8 +103,8 @@ class Ceph(Plugin, RedHatPlugin, UbuntuPlugin): - "/var/lib/ceph/*keyring*", - "/var/lib/ceph/*/*keyring*", - "/var/lib/ceph/*/*/*keyring*", -- "/var/lib/ceph/osd/*", -- "/var/lib/ceph/mon/*", -+ "/var/lib/ceph/osd", -+ "/var/lib/ceph/mon", - # Excludes temporary ceph-osd mount location like - # /var/lib/ceph/tmp/mnt.XXXX from sos collection. - "/var/lib/ceph/tmp/*mnt*", --- -2.21.0 - - -From 4d1576b04d35902ce44d26d6a5b2219e6f9c175a Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Mon, 4 Nov 2019 14:15:55 +0000 -Subject: [PATCH 09/10] [openstack_octavia] fix directory blacklist style - -Plugins must use 'path/to/exclude' rather than 'path/to/exclude/*' -in order to omit a directory and all its content from the report. - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/openstack_octavia.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sos/plugins/openstack_octavia.py b/sos/plugins/openstack_octavia.py -index b97c83fa..ccdcd4c9 100644 ---- a/sos/plugins/openstack_octavia.py -+++ b/sos/plugins/openstack_octavia.py -@@ -30,7 +30,7 @@ class OpenStackOctavia(Plugin): - ]) - - # don't collect certificates -- self.add_forbidden_path("/etc/octavia/certs/") -+ self.add_forbidden_path("/etc/octavia/certs") - - # logs - if self.get_option("all_logs"): --- -2.21.0 - - -From 1fd194191a56c51052f0c24ddeb3bbf9088ae0ca Mon Sep 17 00:00:00 2001 -From: "Bryn M. Reeves" -Date: Mon, 4 Nov 2019 14:16:13 +0000 -Subject: [PATCH 10/10] [vdsm] fix directory blacklist style - -Plugins must use 'path/to/exclude' rather than 'path/to/exclude/*' -in order to omit a directory and all its content from the report. - -Signed-off-by: Bryn M. Reeves ---- - sos/plugins/vdsm.py | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py -index b2a1ca58..69672643 100644 ---- a/sos/plugins/vdsm.py -+++ b/sos/plugins/vdsm.py -@@ -60,9 +60,9 @@ class Vdsm(Plugin, RedHatPlugin): - plugin_name = 'vdsm' - - def setup(self): -- self.add_forbidden_path('/etc/pki/vdsm/keys/*') -+ self.add_forbidden_path('/etc/pki/vdsm/keys') - self.add_forbidden_path('/etc/pki/vdsm/libvirt-spice/*-key.*') -- self.add_forbidden_path('/etc/pki/libvirt/private/*') -+ self.add_forbidden_path('/etc/pki/libvirt/private') - - self.add_cmd_output('service vdsmd status') - self.add_cmd_output('service supervdsmd status') - --- -2.21.0 - diff --git a/SOURCES/sos-bz1768956-ebpf-per-namespace.patch b/SOURCES/sos-bz1768956-ebpf-per-namespace.patch deleted file mode 100644 index 7f52847..0000000 --- a/SOURCES/sos-bz1768956-ebpf-per-namespace.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 93ba31695ad532ce96c93dc511f966e7a3e9ae94 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Tue, 3 Dec 2019 22:03:10 +0100 -Subject: [PATCH] [kernel,networking] collect bpftool net list for each - namespace - -- move "bpftool net list" command execution from kernel to networking -plugin as it belongs rather to networking. -- collect that output per each net name space as well - -Resolves: #1874 - -Signed-off-by: Pavel Moravec ---- - sos/plugins/kernel.py | 4 ---- - sos/plugins/networking.py | 7 ++++++- - 2 files changed, 6 insertions(+), 5 deletions(-) - -diff --git a/sos/plugins/kernel.py b/sos/plugins/kernel.py -index 5c8521433..8224e5c05 100644 ---- a/sos/plugins/kernel.py -+++ b/sos/plugins/kernel.py -@@ -142,10 +142,6 @@ class Kernel(Plugin, RedHatPlugin, Debia - if not self.get_option("trace"): - self.add_forbidden_path("/sys/kernel/debug/tracing/trace") - -- # collect list of bpf program attachments in the kernel -- # networking subsystem -- self.add_cmd_output("bpftool net list") -- - # collect list of eBPF programs and maps and their dumps - prog_file = self.get_cmd_output_now("bpftool -j prog list") - for prog_id in self.get_bpftool_prog_ids(prog_file): -diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py -index 2f655042a..0026cda9d 100644 ---- a/sos/plugins/networking.py -+++ b/sos/plugins/networking.py -@@ -205,6 +205,10 @@ class Networking(Plugin): - if self.get_option("traceroute"): - self.add_cmd_output("/bin/traceroute -n %s" % self.trace_host) - -+ # collect list of bpf program attachments in the kernel -+ # networking subsystem -+ self.add_cmd_output("bpftool net list") -+ - # Capture additional data from namespaces; each command is run - # per-namespace. - ip_netns_file = self.get_cmd_output_now("ip netns") -@@ -212,7 +216,8 @@ def setup(self): - ns_cmd_prefix + "iptables-save", - ns_cmd_prefix + "netstat %s -neopa" % self.ns_wide, - ns_cmd_prefix + "netstat -s", -- ns_cmd_prefix + "netstat %s -agn" % self.ns_wide -+ ns_cmd_prefix + "netstat %s -agn" % self.ns_wide, -+ ns_cmd_prefix + "bpftool net list", - ]) - - ss_cmd = ns_cmd_prefix + "ss -peaonmi" diff --git a/SOURCES/sos-bz1776549-podman-buildah-rootless.patch b/SOURCES/sos-bz1776549-podman-buildah-rootless.patch new file mode 100644 index 0000000..a61c152 --- /dev/null +++ b/SOURCES/sos-bz1776549-podman-buildah-rootless.patch @@ -0,0 +1,219 @@ +From 1875213788f4472cc11ce8e732cd4780e99ca477 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Fri, 8 May 2020 15:38:36 +0200 +Subject: [PATCH] [containers_common] collect rootless containers info + +Add the ability to collect data/info about rootless podman/buildah +containers, in particular: + +- containers_common plugopt 'rootlessusers' as a list of users to inspect +- for each user, collect: + - its containers config + - [podman|buildah] info and [UID|GID] map +- collect user-status and few user-related config files + +Resolves: #2055 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/containers_common.py | 29 +++++++++++++++++++++++++ + 1 file changed, 29 insertions(+) + +diff --git a/sos/plugins/containers_common.py b/sos/plugins/containers_common.py +index 99ae88fe..9a878849 100644 +--- a/sos/plugins/containers_common.py ++++ b/sos/plugins/containers_common.py +@@ -9,6 +9,7 @@ + # See the LICENSE file in the source distribution for further information. + + from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin ++import os + + + class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): +@@ -17,11 +18,39 @@ class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): + plugin_name = 'containers_common' + profiles = ('container', ) + packages = ('containers-common', ) ++ option_list = [ ++ ('rootlessusers', 'colon-separated list of users\' containers info', ++ '', ''), ++ ] + + def setup(self): + self.add_copy_spec([ + '/etc/containers/*', + '/usr/share/containers/*', ++ '/etc/subuid', ++ '/etc/subgid', + ]) ++ self.add_cmd_output(['loginctl user-status']) ++ ++ users_opt = self.get_option('rootlessusers') ++ users_list = [] ++ if users_opt: ++ users_list = [x for x in users_opt.split(':') if x] ++ ++ user_subcmds = [ ++ 'info', ++ 'unshare cat /proc/self/uid_map', ++ 'unshare cat /proc/self/gid_map' ++ ] ++ for user in users_list: ++ # collect user's containers' config ++ self.add_copy_spec( ++ '%s/.config/containers/' % (os.path.expanduser('~%s') % user)) ++ # collect the user's podman/buildah info and uid/guid maps ++ for binary in ['/usr/bin/podman', '/usr/bin/buildah']: ++ for cmd in user_subcmds: ++ self.add_cmd_output([ ++ 'machinectl -q shell %s@ %s %s' % (user, binary, cmd) ++ ]) + + # vim: set et ts=4 sw=4 : +-- +2.21.3 + +From c2d4c7d1f3ecf6ac59c665cb5138cb2ddda71b3d Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Fri, 22 May 2020 08:17:30 +0200 +Subject: [PATCH] [containers_common] fix user's home expansion + +Apply os.path.expanduser on ~[user], not ~%s . + +Relates to: #2082 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/containers_common.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sos/plugins/containers_common.py b/sos/plugins/containers_common.py +index 9a878849..da360c7e 100644 +--- a/sos/plugins/containers_common.py ++++ b/sos/plugins/containers_common.py +@@ -45,7 +45,7 @@ class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): + for user in users_list: + # collect user's containers' config + self.add_copy_spec( +- '%s/.config/containers/' % (os.path.expanduser('~%s') % user)) ++ '%s/.config/containers/' % (os.path.expanduser('~%s' % user))) + # collect the user's podman/buildah info and uid/guid maps + for binary in ['/usr/bin/podman', '/usr/bin/buildah']: + for cmd in user_subcmds: +-- +2.21.3 + +From 569f261801d3a4da2852c0b40be78b701056edaa Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Fri, 22 May 2020 08:20:11 +0200 +Subject: [PATCH] [containers_common] Call machinectl on foreground + +Commands like: + +machinectl -q shell user1@ .. + +hang if not called on foreground / with terminal. + +Resolves: #2082 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/containers_common.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sos/plugins/containers_common.py b/sos/plugins/containers_common.py +index da360c7e..92c2e9e8 100644 +--- a/sos/plugins/containers_common.py ++++ b/sos/plugins/containers_common.py +@@ -51,6 +51,6 @@ class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): + for cmd in user_subcmds: + self.add_cmd_output([ + 'machinectl -q shell %s@ %s %s' % (user, binary, cmd) +- ]) ++ ], foreground=True) + + # vim: set et ts=4 sw=4 : +-- +2.21.3 + +From 2b158a5c2a963c52cf5a96b27cc07c73b5829d59 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Thu, 9 Jul 2020 15:38:47 +0200 +Subject: [PATCH] [containers_common] collect user-related commands outputs + +podman and buildah commands should be collected on per-user basis, +as declared by rootlessusers plugin option. + +Resolves: #2145 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/containers_common.py | 36 ++++++++++++++++++------- + 1 file changed, 26 insertions(+), 10 deletions(-) + +diff --git a/sos/plugins/containers_common.py b/sos/plugins/containers_common.py +index 92c2e9e8..08962a94 100644 +--- a/sos/plugins/containers_common.py ++++ b/sos/plugins/containers_common.py +@@ -30,7 +30,6 @@ class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): + '/etc/subuid', + '/etc/subgid', + ]) +- self.add_cmd_output(['loginctl user-status']) + + users_opt = self.get_option('rootlessusers') + users_list = [] +@@ -38,19 +37,36 @@ class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): + users_list = [x for x in users_opt.split(':') if x] + + user_subcmds = [ +- 'info', +- 'unshare cat /proc/self/uid_map', +- 'unshare cat /proc/self/gid_map' ++ 'podman info', ++ 'podman unshare cat /proc/self/uid_map', ++ 'podman unshare cat /proc/self/gid_map', ++ 'podman images', ++ 'podman pod ps', ++ 'podman port --all', ++ 'podman ps', ++ 'podman ps -a', ++ 'podman stats --no-stream --all', ++ 'podman version', ++ 'podman volume ls', ++ 'buildah info', ++ 'buildah unshare cat /proc/self/uid_map', ++ 'buildah unshare cat /proc/self/gid_map', ++ 'buildah containers', ++ 'buildah containers --all', ++ 'buildah images', ++ 'buildah images --all', ++ 'buildah version', + ] + for user in users_list: + # collect user's containers' config + self.add_copy_spec( + '%s/.config/containers/' % (os.path.expanduser('~%s' % user))) +- # collect the user's podman/buildah info and uid/guid maps +- for binary in ['/usr/bin/podman', '/usr/bin/buildah']: +- for cmd in user_subcmds: +- self.add_cmd_output([ +- 'machinectl -q shell %s@ %s %s' % (user, binary, cmd) +- ], foreground=True) ++ # collect user-status ++ self.add_cmd_output('loginctl user-status %s' % user) ++ # collect the user's related commands ++ self.add_cmd_output([ ++ 'machinectl -q shell %s@ /usr/bin/%s' % (user, cmd) ++ for cmd in user_subcmds ++ ], foreground=True) + + # vim: set et ts=4 sw=4 : +-- +2.26.2 + diff --git a/SOURCES/sos-bz1781819-dnf-module-list.patch b/SOURCES/sos-bz1781819-dnf-module-list.patch deleted file mode 100644 index 6a36f80..0000000 --- a/SOURCES/sos-bz1781819-dnf-module-list.patch +++ /dev/null @@ -1,29 +0,0 @@ -From ba546077c0e4835b8087eacc75da0c4d475bade2 Mon Sep 17 00:00:00 2001 -From: Jake Hunsaker -Date: Tue, 10 Dec 2019 11:06:03 -0500 -Subject: [PATCH 2/2] [dnf] Collect dnf module list - -Adds collection of `dnf module list` to the plugin, to show a list of -all modules available to the system, instead of just those that are -currently installed. - -Related: RHBZ#1781819 -Resolves: #1887 - -Signed-off-by: Jake Hunsaker ---- - sos/plugins/dnf.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sos/plugins/dnf.py b/sos/plugins/dnf.py -index 754ca26ab..1bc01a985 100644 ---- a/sos/plugins/dnf.py -+++ b/sos/plugins/dnf.py -@@ -49,6 +49,7 @@ def setup(self): - "dnf --version", - "dnf list installed *dnf*", - "dnf list extras", -+ "dnf module list", - "package-cleanup --dupes", - "package-cleanup --problems" - ]) diff --git a/SOURCES/sos-bz1783034-ceph-insights.patch b/SOURCES/sos-bz1783034-ceph-insights.patch deleted file mode 100644 index 4fd7fd7..0000000 --- a/SOURCES/sos-bz1783034-ceph-insights.patch +++ /dev/null @@ -1,27 +0,0 @@ -From f205f3aebeff8041fae6357727f9514f7e85157b Mon Sep 17 00:00:00 2001 -From: Brad Hubbard -Date: Tue, 10 Dec 2019 08:22:55 +1000 -Subject: [PATCH] [ceph] Add 'ceph insights' command output - -This change adds the output of the recently added 'ceph insights' -command. - -Resolves: #1888 - -Signed-off-by: Brad Hubbard ---- - sos/plugins/ceph.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/sos/plugins/ceph.py b/sos/plugins/ceph.py -index 43284bc82..2936aaa96 100644 ---- a/sos/plugins/ceph.py -+++ b/sos/plugins/ceph.py -@@ -69,6 +69,7 @@ class Ceph(Plugin, RedHatPlugin, UbuntuP - "ceph osd crush show-tunables", - "ceph-disk list", - "ceph versions", -+ "ceph insights", - "ceph osd crush dump" - ]) - diff --git a/SOURCES/sos-bz1785546-nvmetcli.patch b/SOURCES/sos-bz1785546-nvmetcli.patch new file mode 100644 index 0000000..dec2ef6 --- /dev/null +++ b/SOURCES/sos-bz1785546-nvmetcli.patch @@ -0,0 +1,68 @@ +From 83d56e2b443edc733ffc5a5286ce8392de99586e Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Mon, 11 May 2020 14:22:18 +0200 +Subject: [PATCH] [nvmetcli] Add new plugin for NVMe Target CLI + +Resolves: #2056 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/nvmetcli.py | 32 ++++++++++++++++++++++++++++++++ + 1 file changed, 32 insertions(+) + create mode 100644 sos/plugins/nvmetcli.py + +diff --git a/sos/plugins/nvmetcli.py b/sos/plugins/nvmetcli.py +new file mode 100644 +index 00000000..b66a3a13 +--- /dev/null ++++ b/sos/plugins/nvmetcli.py +@@ -0,0 +1,32 @@ ++# Copyright (C) 2020 Red Hat, Inc., Nitin Yewale ++ ++# 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.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin ++ ++ ++class NvmetCli(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ ++ short_desc = 'Collect config and system information for nvmetcli' ++ ++ packages = ('nvmetcli', ) ++ profiles = ('storage', ) ++ plugin_name = 'nvmetcli' ++ ++ def setup(self): ++ self.add_cmd_output([ ++ "nvmetcli ls" ++ ]) ++ self.add_journal(units=["nvme", "nvmet", "nvmet_rdma"]) ++ self.add_copy_spec([ ++ "/sys/kernel/config/nvmet", ++ "/etc/nvmet/config.json", ++ ]) ++ ++# vim: set et ts=4 sw=4 : +-- +diff --git a/sos/plugins/nvmetcli.py b/sos/plugins/nvmetcli.py +--- a/sos/plugins/nvmetcli.py ++++ b/sos/plugins/nvmetcli.py +@@ -12,6 +12,8 @@ from sos.plugins import Plugin, RedHatPl + + + class NvmetCli(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ """Collect config and system information for nvmetcli ++ """ + + short_desc = 'Collect config and system information for nvmetcli' + +-- +2.21.3 + diff --git a/SOURCES/sos-bz1789018-allow-system-changes.patch b/SOURCES/sos-bz1789018-allow-system-changes.patch deleted file mode 100644 index 021368e..0000000 --- a/SOURCES/sos-bz1789018-allow-system-changes.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 903958306830ea00ac47e3ea353eaa5d8abbacb6 Mon Sep 17 00:00:00 2001 -From: Jake Hunsaker -Date: Wed, 23 Oct 2019 14:24:59 -0400 -Subject: [PATCH] [Predicate] Override __bool__ to allow py3 evaluation - -The check in `Plugin.test_predicate()` relies on a 'is not None' test, -which on py2 invokes a call to `SoSPredicate.__nonzero__()` which in -turns runs our evaluation of the predicate. On py3 however, this test is -an explicit check to see if the object is `NoneType`. As such, -`__nonzero__()` never runs and the predicate defaults to always -evaluating ad `True`. This effectively removed any gating for command -execution on py3. - -By overriding `SoSPredicate.__bool__()` to wrap `__nonzero__()` we can -ensure that predicate evaluation is performed properly on both py2 and -py3 runtimes. - -Closes: #1839 -Resolves: #1840 - -Signed-off-by: Jake Hunsaker ---- - sos/plugins/__init__.py | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index ed55ea382..7ed75a5cc 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -181,6 +181,11 @@ class SoSPredicate(object): - return ((self._eval_kmods() and self._eval_services()) and not - self.dry_run) - -+ def __bool__(self): -+ # Py3 evaluation ends in a __bool__() call where py2 ends in a call -+ # to __nonzero__(). Wrap the latter here, to support both versions -+ return self.__nonzero__() -+ - def __init__(self, owner, dry_run=False, kmods=[], services=[], - required={}): - """Initialise a new SoSPredicate object. -From 4c02a77a1c0403c903c835d85739a6213c1a2287 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Tue, 5 Nov 2019 17:29:57 +0100 -Subject: [PATCH] [man] describe --allow-system-changes - -In #1435, --allow-system-changes option was added that is documented -in sosreport --help but not in manpages. - -Resolves: #1850 - -Signed-off-by: Pavel Moravec ---- - man/en/sosreport.1 | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/man/en/sosreport.1 b/man/en/sosreport.1 -index 649cba04d..a885d5630 100644 ---- a/man/en/sosreport.1 -+++ b/man/en/sosreport.1 -@@ -25,6 +25,7 @@ sosreport \- Collect and package diagnostic and support data - [--log-size]\fR - [--all-logs]\fR - [--since YYYYMMDD[HHMMSS]]\fR -+ [--allow-system-changes]\fR - [-z|--compression-type method]\fR - [--encrypt-key KEY]\fR - [--encrypt-pass PASS]\fR -@@ -160,6 +161,9 @@ increase the size of reports. - Limits the collection to logs newer than this date. - This also affects \--all-logs. Will pad with 0s if HHMMSS isn't specified. - .TP -+.B \--allow-system-changes -+Run commands even if they can change the system (e.g. load kernel modules). -+.TP - .B \-z, \--compression-type METHOD - Override the default compression type specified by the active policy. - .TP diff --git a/SOURCES/sos-bz1789049-since-option-improved.patch b/SOURCES/sos-bz1789049-since-option-improved.patch deleted file mode 100644 index 6bd51fe..0000000 --- a/SOURCES/sos-bz1789049-since-option-improved.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 71cdbde72f81d586da37a9e108868d6aa1b4ef69 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Thu, 5 Dec 2019 14:26:03 +0100 -Subject: [PATCH] [plugins] improve heuristic for applying --since to - logarchives - -logarchive_pattern treats some configs (e.g. /etc/dbus-1) as log -archives, causing --since option will skip collecting them. - -This patch just improves the heuristic by claiming nothing under /etc -is a logarchive, and adds a warning to sosreport help. - -Improves: #1847 - -Signed-off-by: Pavel Moravec ---- - man/en/sosreport.1 | 5 ++++- - sos/plugins/__init__.py | 5 ++++- - 2 files changed, 8 insertions(+), 2 deletions(-) - -diff --git a/man/en/sosreport.1 b/man/en/sosreport.1 -index a885d5630..f63b8deab 100644 ---- a/man/en/sosreport.1 -+++ b/man/en/sosreport.1 -@@ -158,8 +158,11 @@ and including logs in non-default locations. This option may significantly - increase the size of reports. - .TP - .B \--since YYYYMMDD[HHMMSS] --Limits the collection to logs newer than this date. -+Limits the collection of log archives(*) to those newer than this date. - This also affects \--all-logs. Will pad with 0s if HHMMSS isn't specified. -+(*) Sos interprets as a log archive any file not found in /etc, that has -+either a numeric or compression-type extension for example '.zip'. '.1', '.gz' -+ etc.) - .TP - .B \--allow-system-changes - Run commands even if they can change the system (e.g. load kernel modules). -diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py -index b7a47b6a4..44ae413d0 100644 ---- a/sos/plugins/__init__.py -+++ b/sos/plugins/__init__.py -@@ -917,6 +917,7 @@ def add_copy_spec(self, copyspecs, sizelimit=None, maxage=None, - since = self.get_option('since') - - logarchive_pattern = re.compile(r'.*((\.(zip|gz|bz2|xz))|[-.][\d]+)$') -+ configfile_pattern = re.compile(r"^%s/*" % self.join_sysroot("etc")) - - if not self.test_predicate(pred=pred): - self._log_info("skipped copy spec '%s' due to predicate (%s)" % -@@ -962,7 +963,9 @@ def time_filter(path): - """ When --since is passed, or maxage is coming from the - plugin, we need to filter out older files """ - -- if logarchive_pattern.search(path) is None: -+ # skip config files or not-logarchive files from the filter -+ if ((logarchive_pattern.search(path) is None) or -+ (configfile_pattern.search(path) is not None)): - return True - filetime = datetime.fromtimestamp(getmtime(path)) - if ((since and filetime < since) or diff --git a/SOURCES/sos-bz1814867-insights-archive.patch b/SOURCES/sos-bz1814867-insights-archive.patch new file mode 100644 index 0000000..b36308d --- /dev/null +++ b/SOURCES/sos-bz1814867-insights-archive.patch @@ -0,0 +1,78 @@ +From 0766cc739d424932e18c250c88f0227da06ecaed Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Sun, 19 Apr 2020 16:38:50 +0200 +Subject: [PATCH] [insights] collect insights-client dump + +Collect data of "insights-client --offline" into +sos_commands/insights/insights-client-dump directory. + +Resolves: #2030 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/insights.py | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/sos/plugins/insights.py b/sos/plugins/insights.py +index a8fa4e5f..17b99980 100644 +--- a/sos/plugins/insights.py ++++ b/sos/plugins/insights.py +@@ -31,6 +31,10 @@ class RedHatInsights(Plugin, RedHatPlugin): + else: + self.add_copy_spec("/var/log/insights-client/insights-client.log") + ++ # Collect insights-client report data into given dump dir ++ path = self.get_cmd_output_path(name="insights-client-dump") ++ self.add_cmd_output("insights-client --offline --output-dir %s" % path) ++ + def postproc(self): + for conf in self.config: + self.do_file_sub( +-- +2.21.3 + +From f41a12032d1b0caf962145ddd5026b3798931026 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Tue, 12 May 2020 09:58:26 +0200 +Subject: [PATCH] [insights] collect insights dump output in deterministic + filename + +Currently, "insights-client --offline" stdout is stored in filename like +insights-client_--offline_--output-dir_.var.tmp.sos.cbl0ox16. (and so on) + +Let make the filename unified and deterministic. + +Also add the trailing vim expand tabs comment. + +Resolves: #2058 + +Signed-off-by: Pavel Moravec +Signed-off-by: Bryan Quigley +--- + sos/plugins/insights.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/insights.py b/sos/plugins/insights.py +index 75d521bc..e50bc8fb 100644 +--- a/sos/plugins/insights.py ++++ b/sos/plugins/insights.py +@@ -33,7 +33,8 @@ class RedHatInsights(Plugin, RedHatPlugin): + + # Collect insights-client report data into given dump dir + path = self.get_cmd_output_path(name="insights-client-dump") +- self.add_cmd_output("insights-client --offline --output-dir %s" % path) ++ self.add_cmd_output("insights-client --offline --output-dir %s" % path, ++ suggest_filename="insights-client-dump.log") + + def postproc(self): + for conf in self.config: +@@ -44,3 +45,5 @@ class RedHatInsights(Plugin, RedHatPlugin): + self.do_file_sub( + conf, r'(proxy[\t\ ]*=.*)(:)(.*)(@.*)', r'\1\2********\4' + ) ++ ++# vim: set et ts=4 sw=4 : +-- +2.21.3 + diff --git a/SOURCES/sos-bz1819662-rabbitmqctl-on-foreground.patch b/SOURCES/sos-bz1819662-rabbitmqctl-on-foreground.patch new file mode 100644 index 0000000..c8cb452 --- /dev/null +++ b/SOURCES/sos-bz1819662-rabbitmqctl-on-foreground.patch @@ -0,0 +1,34 @@ +From c805cd23b8bd73986f2546a711edd42150d855ba Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Fri, 22 May 2020 12:05:00 +0200 +Subject: [PATCH] [rabbitmq] emulate TTY via timeout foreground + +"docker exec -t" might hang without a terminal. Let emulate TTY via +timeout --foreground instead. + +Resolves: #2083 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/rabbitmq.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sos/plugins/rabbitmq.py b/sos/plugins/rabbitmq.py +index 9ebf6c0b..8d9a16ff 100644 +--- a/sos/plugins/rabbitmq.py ++++ b/sos/plugins/rabbitmq.py +@@ -38,8 +38,8 @@ class RabbitMQ(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + for container in container_names: + self.add_cmd_output('docker logs {0}'.format(container)) + self.add_cmd_output( +- 'docker exec -t {0} rabbitmqctl report' +- .format(container) ++ 'docker exec {0} rabbitmqctl report' ++ .format(container), foreground=True + ) + else: + self.add_cmd_output("rabbitmqctl report") +-- +2.21.3 + diff --git a/SOURCES/sos-bz1831549-containers-common-plugin.patch b/SOURCES/sos-bz1823488-containers-common.patch similarity index 86% rename from SOURCES/sos-bz1831549-containers-common-plugin.patch rename to SOURCES/sos-bz1823488-containers-common.patch index e10ad56..7eb2c77 100644 --- a/SOURCES/sos-bz1831549-containers-common-plugin.patch +++ b/SOURCES/sos-bz1823488-containers-common.patch @@ -43,7 +43,7 @@ new file mode 100644 index 00000000..99ae88fe --- /dev/null +++ b/sos/plugins/containers_common.py -@@ -0,0 +1,29 @@ +@@ -0,0 +1,27 @@ +# Copyright (C) 2020 Red Hat, Inc., Pavel Moravec + +# This file is part of the sos project: https://github.com/sosreport/sos @@ -58,8 +58,6 @@ index 00000000..99ae88fe + + +class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): -+ '''Common container configs -+ ''' + + short_desc = 'Common container configs under {/etc,/usr/share}/containers' + plugin_name = 'containers_common' @@ -92,4 +90,18 @@ index f6875197..f6632776 100644 'HTTP_PROXY', 'HTTPS_PROXY', -- +diff --git a/sos/plugins/containers_common.py b/sos/plugins/containers_common.py +--- a/sos/plugins/containers_common.py ++++ b/sos/plugins/containers_common.py +@@ -13,6 +13,8 @@ import os + + + class ContainersCommon(Plugin, RedHatPlugin, UbuntuPlugin): ++ """Common container configs under {/etc,/usr/share}/containers ++ """ + + short_desc = 'Common container configs under {/etc,/usr/share}/containers' + plugin_name = 'containers_common' +-- 2.21.3 + diff --git a/SOURCES/sos-bz1825283-env-host-in-container.patch b/SOURCES/sos-bz1825283-env-host-in-container.patch new file mode 100644 index 0000000..4497123 --- /dev/null +++ b/SOURCES/sos-bz1825283-env-host-in-container.patch @@ -0,0 +1,33 @@ +From d9dd8ad790b6799491e4891ae19bb85124ab6794 Mon Sep 17 00:00:00 2001 +From: Robert Thomas Manes +Date: Fri, 17 Apr 2020 10:29:47 -0400 +Subject: [PATCH] [redhat] fix RH containers without sysroot Attempting to run + sosreport in a container currently will always traceback unless + ENV_HOST_SYSROOT is set to '/'. + +Allow default NoneType sysroot to function as well. + +Resolves: #2028 + +Signed off by: Robb Manes +Signed-off-by: Jake Hunsaker +--- + sos/policies/redhat.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py +index ba9bacf4..16cb23ec 100644 +--- a/sos/policies/redhat.py ++++ b/sos/policies/redhat.py +@@ -144,7 +144,7 @@ class RedHatPolicy(LinuxPolicy): + self._in_container = True + if ENV_HOST_SYSROOT in os.environ: + self._host_sysroot = os.environ[ENV_HOST_SYSROOT] +- use_sysroot = self._in_container and self._host_sysroot != '/' ++ use_sysroot = self._in_container and self._host_sysroot is not None + if use_sysroot: + host_tmp_dir = os.path.abspath(self._host_sysroot + self._tmp_dir) + self._tmp_dir = host_tmp_dir +-- +2.21.3 + diff --git a/SOURCES/sos-bz1838123-xdp-plugin.patch b/SOURCES/sos-bz1838123-xdp-plugin.patch new file mode 100644 index 0000000..cb55e32 --- /dev/null +++ b/SOURCES/sos-bz1838123-xdp-plugin.patch @@ -0,0 +1,69 @@ +From af5597bfa41521e10f4ef5095f137b2ef5bcd661 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= +Date: Wed, 20 May 2020 15:05:03 +0200 +Subject: [PATCH] [xdp] Add XDP plugin +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This adds a plugin for gathering information about the loaded XDP programs +on a system, using the xdp-loader tool in the xdp-tools package. This is +complementary with the existing eBPF plugin, because this plugin supports +getting status for multiple XDP programs on each interface as supported by +libxdp. + +For now, this just prints the output of 'xdp-loader status' which will list +any XDP programs attached. We don't currently support structured +output (such as JSON) from xdp-tools, but should we add that in the future +we can of course update this plugin. + +Signed-off-by: Toke Høiland-Jørgensen +Signed-off-by: Jake Hunsaker +--- + sos/plugins/xdp.py | 21 +++++++++++++++++++++ + 1 file changed, 21 insertions(+) + create mode 100644 sos/plugins/xdp.py + +diff --git a/sos/plugins/xdp.py b/sos/plugins/xdp.py +new file mode 100644 +index 00000000..2e18048b +--- /dev/null ++++ b/sos/plugins/xdp.py +@@ -0,0 +1,21 @@ ++# 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.plugins import Plugin, RedHatPlugin, DebianPlugin, \ ++ UbuntuPlugin ++ ++ ++class Xdp(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ ++ short_desc = 'XDP program information' ++ plugin_name = 'xdp' ++ profiles = ('system', 'kernel', 'network') ++ packages = ('xdp-tools',) ++ ++ def setup(self): ++ self.add_cmd_output('xdp-loader status') +-- +diff --git a/sos/plugins/xdp.py b/sos/plugins/xdp.py +--- a/sos/plugins/xdp.py ++++ b/sos/plugins/xdp.py +@@ -11,6 +11,8 @@ from sos.plugins import Plugin, RedHatPl + + + class Xdp(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ """XDP program information ++ """ + + short_desc = 'XDP program information' + plugin_name = 'xdp' +-- +2.21.3 + diff --git a/SOURCES/sos-bz1838426-container_log-logdir.patch b/SOURCES/sos-bz1838426-container_log-logdir.patch deleted file mode 100644 index 420a467..0000000 --- a/SOURCES/sos-bz1838426-container_log-logdir.patch +++ /dev/null @@ -1,29 +0,0 @@ -From e4ece6569221f1833d3fb621c26f19c23662b329 Mon Sep 17 00:00:00 2001 -From: Pavel Moravec -Date: Wed, 4 Dec 2019 12:09:20 +0100 -Subject: [PATCH] [container_log] fix unscoped 'logdir' variable - -"sosreport -o container_log --all-logs" fails on global name 'logdir' -is not defined. - -Signed-off-by: Pavel Moravec ---- - sos/plugins/container_log.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sos/plugins/container_log.py b/sos/plugins/container_log.py -index 6208ecc8..739c9956 100644 ---- a/sos/plugins/container_log.py -+++ b/sos/plugins/container_log.py -@@ -21,7 +21,7 @@ class ContainerLog(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): - - def setup(self): - if self.get_option('all_logs'): -- self.add_copy_spec(logdir) -+ self.add_copy_spec(self.logdir) - else: - self.collect_subdirs() - --- -2.21.3 - diff --git a/SOURCES/sos-bz1843562-gluster-volume-specific.patch b/SOURCES/sos-bz1843562-gluster-volume-specific.patch new file mode 100644 index 0000000..c23b3ee --- /dev/null +++ b/SOURCES/sos-bz1843562-gluster-volume-specific.patch @@ -0,0 +1,37 @@ +From fc831f0072c8f751f8fc2f46eb5c3e6aa9eba0a9 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Mon, 8 Jun 2020 14:58:15 +0200 +Subject: [PATCH] [gluster] fix gluster volume splitlines iteration + +Iterate via "gluster volue info" output split to lines, +and dont truncate the trailing character (a relict from past different +content parsing). + +Resolves: #2106 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/gluster.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sos/plugins/gluster.py b/sos/plugins/gluster.py +index eb236f1e..9540d323 100644 +--- a/sos/plugins/gluster.py ++++ b/sos/plugins/gluster.py +@@ -104,10 +104,10 @@ class Gluster(Plugin, RedHatPlugin): + + volume_cmd = self.collect_cmd_output("gluster volume info") + if volume_cmd['status'] == 0: +- for line in volume_cmd['output']: ++ for line in volume_cmd['output'].splitlines(): + if not line.startswith("Volume Name:"): + continue +- volname = line[12:-1] ++ volname = line[12:] + self.add_cmd_output([ + "gluster volume get %s all" % volname, + "gluster volume geo-replication %s status" % volname, +-- +2.26.2 + diff --git a/SOURCES/sos-bz1843754-powerpc-logs-for-components.patch b/SOURCES/sos-bz1843754-powerpc-logs-for-components.patch new file mode 100644 index 0000000..4e6d8a2 --- /dev/null +++ b/SOURCES/sos-bz1843754-powerpc-logs-for-components.patch @@ -0,0 +1,150 @@ +From f7292b0121408a77d9e5ee94a046025c256cd021 Mon Sep 17 00:00:00 2001 +From: Mamatha Inamdar +Date: Wed, 20 May 2020 14:07:13 +0530 +Subject: [PATCH] [memory]:Add support to collect memory logs + +This patch updates memory plugin to collect +hugepage memory information + +Resolves: #2078 + +Signed-off-by: Mamatha Inamdar +Signed-off-by: Jake Hunsaker +--- + sos/plugins/memory.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/memory.py b/sos/plugins/memory.py +index aefb27b8..b358e44d 100644 +--- a/sos/plugins/memory.py ++++ b/sos/plugins/memory.py +@@ -27,7 +27,8 @@ class Memory(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, CosPlugin): + "/proc/pagetypeinfo", + "/proc/vmallocinfo", + "/sys/kernel/mm/ksm", +- "/sys/kernel/mm/transparent_hugepage/enabled" ++ "/sys/kernel/mm/transparent_hugepage/enabled", ++ "/sys/kernel/mm/hugepages" + ]) + self.add_cmd_output("free", root_symlink="free") + self.add_cmd_output([ +-- +2.26.2 + +From 2826d4ad19afaa91e2e25970eafe9353d844bfac Mon Sep 17 00:00:00 2001 +From: Mamatha Inamdar +Date: Wed, 20 May 2020 14:05:48 +0530 +Subject: [PATCH] [scsi]:Add support to collect scsi logs + +This patch updates scsi plugin to collect +virtual I/O server information. + +This patch reads lspath, lsmap and lsnports data +which provides information about virtual device +path, ports and mapping Information + +Related: #2078 + +Signed-off-by: Mamatha Inamdar +Signed-off-by: Jake Hunsaker +--- + sos/plugins/scsi.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sos/plugins/scsi.py b/sos/plugins/scsi.py +index bf6c2862..7a8efabb 100644 +--- a/sos/plugins/scsi.py ++++ b/sos/plugins/scsi.py +@@ -30,6 +30,9 @@ class Scsi(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): + + self.add_cmd_output("lsscsi -i", suggest_filename="lsscsi") + self.add_cmd_output("sg_map -x") ++ self.add_cmd_output("lspath") ++ self.add_cmd_output("lsmap -all") ++ self.add_cmd_output("lsnports") + + scsi_hosts = glob("/sys/class/scsi_host/*") + self.add_udev_info(scsi_hosts, attrs=True) +-- +2.26.2 + +From 56bfae87ee5e613bb6743026a7285320f19e66d5 Mon Sep 17 00:00:00 2001 +From: Mamatha Inamdar +Date: Wed, 20 May 2020 14:03:58 +0530 +Subject: [PATCH] [infiniband]:Add support to collect InfiniBand logs + +This patch updates Infiniband plugin to collect +InfiniBand switch node information. + +Related: #2078 + +Signed-off-by: Mamatha Inamdar +Signed-off-by: Jake Hunsaker +--- + sos/plugins/infiniband.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/infiniband.py b/sos/plugins/infiniband.py +index 83c32791..670f05b6 100644 +--- a/sos/plugins/infiniband.py ++++ b/sos/plugins/infiniband.py +@@ -33,7 +33,8 @@ class Infiniband(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + "ibv_devices", + "ibv_devinfo -v", + "ibstat", +- "ibstatus" ++ "ibstatus", ++ "ibswitches" + ]) + + # run below commands for every IB device and its active port +-- +2.26.2 + +From d8aa0a17d94ec08fc899fce3c343f25d19134eb3 Mon Sep 17 00:00:00 2001 +From: Mamatha Inamdar +Date: Wed, 20 May 2020 14:01:40 +0530 +Subject: [PATCH] [kdump]:Add support to collect kdump & fadump logs + +This patch updates kdump plugin to collect kdump and +fadump information. + +In this patch we are reading, kdump configuration,panic +and kexec_loaded files which are helpful to debug kdump +failure issues + +This patch also reads sys/kernel/fadump_enabled +and /sys/kernel/fadump/enabled both files as there +is upstream work to deprecate these files + +Related: #2078 + +Signed-off-by: Mamatha Inamdar +Signed-off-by: Jake Hunsaker +--- + sos/plugins/kdump.py | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/sos/plugins/kdump.py b/sos/plugins/kdump.py +index 5fc25a9b..41d08b5b 100644 +--- a/sos/plugins/kdump.py ++++ b/sos/plugins/kdump.py +@@ -21,6 +21,15 @@ class KDump(Plugin): + def setup(self): + self.add_copy_spec([ + "/proc/cmdline", ++ "/etc/sysconfig/kdump", ++ "/proc/sys/kernel/panic", ++ "/proc/sys/kernel/panic_on_oops", ++ "/sys/kernel/kexec_loaded", ++ "/sys/kernel/fadump_enabled", ++ "/sys/kernel/fadump/enabled", ++ "/sys/kernel/fadump_registered", ++ "/sys/kernel/fadump/registered", ++ "/sys/kernel/fadump/mem_reserved", + "/sys/kernel/kexec_crash_loaded", + "/sys/kernel/kexec_crash_size" + ]) +-- +2.26.2 + diff --git a/SOURCES/sos-bz1844853-nfs-etc-exports.patch b/SOURCES/sos-bz1844853-nfs-etc-exports.patch new file mode 100644 index 0000000..c52acf9 --- /dev/null +++ b/SOURCES/sos-bz1844853-nfs-etc-exports.patch @@ -0,0 +1,120 @@ +From fad72dbacc7e5c3c2721e452823750974ea31550 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Mon, 18 May 2020 11:41:17 +0200 +Subject: [PATCH] [nfs] merge nfsserver plugin into nfs one + +nfsserver plugin enabledness relies on legacy init scripts. A more +appropriate way to idenfity a NFS server is via nfs-utils package +(though it could be present also on a NFS client). + +As that package enables nfs plugin, it is reasonable to merge the +plugins into one. + +Closes: #2061 +Resolves: #2073 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/nfs.py | 14 +++++++-- + sos/plugins/nfsserver.py | 54 --------------------------------- + 2 files changed, 12 insertions(+), 56 deletions(-) + delete mode 100644 sos/plugins/nfsserver.py + +diff --git a/sos/plugins/nfs.py b/sos/plugins/nfs.py +index bebe0362..1c0d8fc8 100644 +--- a/sos/plugins/nfs.py ++++ b/sos/plugins/nfs.py +@@ -14,7 +14,7 @@ class Nfs(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + """ + plugin_name = 'nfs' + profiles = ('storage', 'network', 'nfs') +- packages = ['nfs-utils'] ++ packages = ('nfs-utils', ) + + def setup(self): + self.add_copy_spec([ +@@ -24,8 +24,18 @@ class Nfs(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + "/proc/fs/nfsfs/servers", + "/proc/fs/nfsfs/volumes", + "/run/sysconfig/nfs-utils", ++ "/etc/exports", ++ "/etc/exports.d", ++ "/var/lib/nfs/etab", ++ "/var/lib/nfs/xtab", ++ "/var/lib/nfs/rmtab", ++ ]) ++ ++ self.add_cmd_output([ ++ "rpcinfo -p localhost", ++ "nfsstat -o all", ++ "exportfs -v", + ]) +- return + + + # vim: set et ts=4 sw=4 : +diff --git a/sos/plugins/nfsserver.py b/sos/plugins/nfsserver.py +deleted file mode 100644 +index 558ebd5d..00000000 +--- a/sos/plugins/nfsserver.py ++++ /dev/null +@@ -1,55 +0,0 @@ +-# Copyright (C) 2007 Red Hat, Inc., Eugene Teo +- +-# 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.plugins import Plugin, RedHatPlugin +-import os +-from stat import ST_SIZE +- +- +-class NfsServer(Plugin, RedHatPlugin): +- """NFS server information +- """ +- +- plugin_name = 'nfsserver' +- profiles = ('storage', 'network', 'services', 'nfs') +- +- def check_enabled(self): +- default_runlevel = self.policy.default_runlevel() +- nfs_runlevels = self.policy.runlevel_by_service("nfs") +- if default_runlevel in nfs_runlevels: +- return True +- +- try: +- exports = os.stat("/etc/exports")[ST_SIZE] +- xtab = os.stat("/var/lib/nfs/xtab")[ST_SIZE] +- if exports or xtab: +- return True +- except OSError: +- pass +- +- return False +- +- def setup(self): +- self.add_copy_spec([ +- "/etc/exports", +- "/etc/exports.d", +- "/var/lib/nfs/etab", +- "/var/lib/nfs/xtab", +- "/var/lib/nfs/rmtab" +- ]) +- +- self.add_cmd_output([ +- "rpcinfo -p localhost", +- "nfsstat -o all", +- "exportfs -v" +- ]) +- +- +-# vim: set et ts=4 sw=4 : +-- +2.26.2 + diff --git a/SOURCES/sos-bz1845386-pacemaker-passwords-with-equal-sign.patch b/SOURCES/sos-bz1845386-pacemaker-passwords-with-equal-sign.patch new file mode 100644 index 0000000..6550642 --- /dev/null +++ b/SOURCES/sos-bz1845386-pacemaker-passwords-with-equal-sign.patch @@ -0,0 +1,46 @@ +From b34edec39189d5501b9943f73ec2afa7c7b98d58 Mon Sep 17 00:00:00 2001 +From: Reid wahl +Date: Mon, 8 Jun 2020 22:50:00 -0700 +Subject: [PATCH] [pacemaker] Fix scrubbing when password contains an equal + sign + +If the password contains one or more equal signs ('='), only the substring +after the final equal sign is scrubbed. The rest of the password appears in +plain text. + +This patch modifies the scrub regex to scrub all characters after the first +equal sign. + +Related to RHBZ#1845386. +Resolves: #2109 + +Signed-off-by: Reid Wahl +Signed-off-by: Jake Hunsaker +--- + sos/plugins/pacemaker.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sos/plugins/pacemaker.py b/sos/plugins/pacemaker.py +index 7294c35a..8beec811 100644 +--- a/sos/plugins/pacemaker.py ++++ b/sos/plugins/pacemaker.py +@@ -55,14 +55,14 @@ class Pacemaker(Plugin): + def postproc_crm_shell(self): + self.do_cmd_output_sub( + "crm configure show", +- r"passw(\S*)=\S+", ++ r"passw([^\s=]*)=\S+", + r"passw\1=********" + ) + + def postproc_pcs(self): + self.do_cmd_output_sub( + "pcs config", +- r"passw(\S*)=\S+", ++ r"passw([^\s=]*)=\S+", + r"passw\1=********" + ) + +-- +2.26.2 + diff --git a/SOURCES/sos-bz1850554-luks-not-detected.patch b/SOURCES/sos-bz1850554-luks-not-detected.patch new file mode 100644 index 0000000..b8bd7b6 --- /dev/null +++ b/SOURCES/sos-bz1850554-luks-not-detected.patch @@ -0,0 +1,29 @@ +From b85039b9ed658a4a59c637552a67ca9f2cf843b1 Mon Sep 17 00:00:00 2001 +From: Jake Hunsaker +Date: Wed, 24 Jun 2020 10:06:31 -0400 +Subject: [PATCH] [block] Fix typo in LUKS detection + +Fixes a typo in detecting LUKS partitions for cryptsetup output +collection. + +Signed-off-by: Jake Hunsaker +--- + sos/plugins/block.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sos/plugins/block.py b/sos/plugins/block.py +index 2af25e7a..69548af6 100644 +--- a/sos/plugins/block.py ++++ b/sos/plugins/block.py +@@ -52,7 +52,7 @@ class Block(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + # for LUKS devices, collect cryptsetup luksDump + if lsblk['status'] == 0: + for line in lsblk['output'].splitlines(): +- if 'crypto LUKS' in line: ++ if 'crypto_LUKS' in line: + dev = line.split()[0] + self.add_cmd_output('cryptsetup luksDump /dev/%s' % dev) + +-- +2.26.2 + diff --git a/SOURCES/sos-bz1850926-logs-no-journal.patch b/SOURCES/sos-bz1850926-logs-no-journal.patch new file mode 100644 index 0000000..bbe927f --- /dev/null +++ b/SOURCES/sos-bz1850926-logs-no-journal.patch @@ -0,0 +1,54 @@ +From 8c2b07adeebed573306bc52a26b37b6def75a925 Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Tue, 7 Jul 2020 18:57:15 +0200 +Subject: [PATCH] [logs] collect also non-persistent journal logs + +Collect journalctl logs also when journal is configured to store logs +in memory only. + +Further, apply --since option to journal catalog logs. + +Further, when --all-logs is provided, collect the transient logs in +/var/log/journal dir as well. + +Resolves: #2130 + +Signed-off-by: Pavel Moravec +--- + sos/plugins/logs.py | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/sos/plugins/logs.py b/sos/plugins/logs.py +index c92cc1f0..e3b6b884 100644 +--- a/sos/plugins/logs.py ++++ b/sos/plugins/logs.py +@@ -59,13 +59,21 @@ class Logs(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, CosPlugin): + self.add_cmd_output("journalctl --disk-usage") + self.add_cmd_output('ls -alRh /var/log/') + +- journal = os.path.exists("/var/log/journal/") +- if journal and self.is_installed("systemd"): ++ # collect journal logs if: ++ # - there is some data present, either persistent or runtime only ++ # - systemd-journald service exists ++ # otherwise fallback to collecting few well known logfiles directly ++ journal = any([os.path.exists(p + "/log/journal/") ++ for p in ["/var", "/run"]]) ++ if journal and self.is_service("systemd-journald"): + self.add_journal(since=since) +- self.add_journal(boot="this", catalog=True) +- self.add_journal(boot="last", catalog=True) ++ self.add_journal(boot="this", catalog=True, since=since) ++ self.add_journal(boot="last", catalog=True, since=since) + if self.get_option("all_logs"): +- self.add_copy_spec("/var/log/journal/*") ++ self.add_copy_spec([ ++ "/var/log/journal/*", ++ "/run/log/journal/*" ++ ]) + else: # If not using journal + if not self.get_option("all_logs"): + self.add_copy_spec([ +-- +2.26.2 + diff --git a/SOURCES/sos-bz1851923-powerpc-missing-logs.patch b/SOURCES/sos-bz1851923-powerpc-missing-logs.patch new file mode 100644 index 0000000..8ea8c8d --- /dev/null +++ b/SOURCES/sos-bz1851923-powerpc-missing-logs.patch @@ -0,0 +1,36 @@ +From 1368498e8d5c5e2d9cd93c335252efe8e08316a4 Mon Sep 17 00:00:00 2001 +From: Jake Hunsaker +Date: Thu, 30 Apr 2020 14:05:21 -0400 +Subject: [PATCH] [Plugin] Fix enablement triggers when only restriction is + architecture + +When a plugin, such as the `powerpc` plugin, only defines an +architecture enablement trigger and no files, commands, packages, etc... +our current enablement checks would return false. When the 'normal' +trigger restrictions are all empty, but there is an architecture +trigger, now properly enable based solely on that architecture. + +Signed-off-by: Jake Hunsaker +--- + sos/plugins/__init__.py | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index 011113b0..c632d5e4 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -1775,6 +1775,11 @@ class Plugin(object): + return True + + def _check_plugin_triggers(self, files, packages, commands, services): ++ ++ if not any([files, packages, commands, services]): ++ # no checks beyond architecture restrictions ++ return self.check_is_architecture() ++ + return ((any(os.path.exists(fname) for fname in files) or + any(self.is_installed(pkg) for pkg in packages) or + any(is_executable(cmd) for cmd in commands) or +-- +2.26.2 + diff --git a/SOURCES/sos-bz1853700-pci-too-strong-condition.patch b/SOURCES/sos-bz1853700-pci-too-strong-condition.patch new file mode 100644 index 0000000..051cbc5 --- /dev/null +++ b/SOURCES/sos-bz1853700-pci-too-strong-condition.patch @@ -0,0 +1,54 @@ +From c5a3dd0fb1e256772d83f19bc458e79b2cf5baf7 Mon Sep 17 00:00:00 2001 +From: Jake Hunsaker +Date: Fri, 3 Jul 2020 12:24:10 -0400 +Subject: [PATCH] [pci] Update gating for lspci commands + +It was reported that certain arches may create subdir structures under +/proc/bus/pci differently than others - most notably that the first +device subdir could be '0000:00' instead of just '00'. + +Rather than chase these different layouts, update the gating check for +running `lspci` commands to being that /proc/bus/pci exists and it has +more than just the `devices` file present, as this file may be present +but empty when nothing else exists under `/proc/bus/pci`. + +This is the legacy-3.9 backport from #2138 + +Signed-off-by: Jake Hunsaker +--- + sos/plugins/pci.py | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/pci.py b/sos/plugins/pci.py +index ac90f09d..053307cd 100644 +--- a/sos/plugins/pci.py ++++ b/sos/plugins/pci.py +@@ -17,6 +17,16 @@ class Pci(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): + plugin_name = "pci" + profiles = ('hardware', 'system') + ++ def check_for_bus_devices(self): ++ if not os.path.isdir('/proc/bus/pci'): ++ return False ++ # ensure that more than just the 'devices' file, which can be empty, ++ # exists in the pci directory. This implies actual devices are present ++ content = os.listdir('/proc/bus/pci') ++ if 'devices' in content: ++ content.remove('devices') ++ return len(content) > 0 ++ + def setup(self): + self.add_copy_spec([ + "/proc/ioports", +@@ -24,7 +34,7 @@ class Pci(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): + "/proc/bus/pci" + ]) + +- if os.path.isdir("/proc/bus/pci/00"): ++ if self.check_for_bus_devices(): + self.add_cmd_output("lspci -nnvv", root_symlink="lspci") + self.add_cmd_output("lspci -tv") + +-- +2.26.2 + diff --git a/SOURCES/sos-bz1861711-gluster-removes-sockfiles.patch b/SOURCES/sos-bz1857590-gluster-removes-sockfiles.patch similarity index 100% rename from SOURCES/sos-bz1861711-gluster-removes-sockfiles.patch rename to SOURCES/sos-bz1857590-gluster-removes-sockfiles.patch diff --git a/SOURCES/sos-bz1859888-kubernetes-indexerror-on-nodes.patch b/SOURCES/sos-bz1859888-kubernetes-indexerror-on-nodes.patch new file mode 100644 index 0000000..06d76c4 --- /dev/null +++ b/SOURCES/sos-bz1859888-kubernetes-indexerror-on-nodes.patch @@ -0,0 +1,37 @@ +From 482029d991e1aa075aafb122cbeee911afad341c Mon Sep 17 00:00:00 2001 +From: Pavel Moravec +Date: Thu, 23 Jul 2020 15:35:31 +0200 +Subject: [PATCH] [kubernetes] ignore blank+empty lines in "kubectl get nodes" + output + +In a theoretical case when the command output contains empty or blank +line, we must skip them before finding the first word there. + +Resolves: #2162 + +Signed-off-by: Pavel Moravec +Signed-off-by: Jake Hunsaker +--- + sos/plugins/kubernetes.py | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/kubernetes.py b/sos/plugins/kubernetes.py +index 03f2c498..5f21fa3d 100644 +--- a/sos/plugins/kubernetes.py ++++ b/sos/plugins/kubernetes.py +@@ -105,7 +105,11 @@ class Kubernetes(Plugin): + nodes = self.collect_cmd_output("%s get nodes" % self.kube_cmd) + if nodes['status'] == 0: + for line in nodes['output'].splitlines()[1:]: +- node = line.split()[0] ++ # find first word in the line and ignore empty+blank lines ++ words = line.split() ++ if not words: ++ continue ++ node = words[0] + self.add_cmd_output( + "%s describe node %s" % (self.kube_cmd, node), + subdir='nodes' +-- +2.26.2 + diff --git a/SOURCES/sos-bz1861710-collect-var-lib-selinux.patch b/SOURCES/sos-bz1861710-collect-var-lib-selinux.patch deleted file mode 100644 index a5060c5..0000000 --- a/SOURCES/sos-bz1861710-collect-var-lib-selinux.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 5b5302e7a7b1931d51e4960a9a56f14cd0c855c1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Renaud=20M=C3=A9trich?= -Date: Tue, 10 Mar 2020 13:38:55 +0100 -Subject: [PATCH] [selinux] collect /var/lib/selinux -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -On RHEL 8, modules and contexts are not in /etc/selinux/ -directory anymore, but in /var/lib/selinux/ directory. - -Resolves: #1976 - -Signed-off-by: Renaud Métrich -Signed-off-by: Jake Hunsaker ---- - sos/plugins/selinux.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/sos/plugins/selinux.py b/sos/plugins/selinux.py -index 1e9f24ca..d98b6745 100644 ---- a/sos/plugins/selinux.py -+++ b/sos/plugins/selinux.py -@@ -23,7 +23,8 @@ class SELinux(Plugin, RedHatPlugin): - def setup(self): - self.add_copy_spec([ - '/etc/sestatus.conf', -- '/etc/selinux' -+ '/etc/selinux', -+ '/var/lib/selinux' - ]) - self.add_cmd_output('sestatus') - --- -2.26.2 - diff --git a/SOURCES/sos-bz1869724-ethtool-not-on-bnx2x.patch b/SOURCES/sos-bz1869724-ethtool-not-on-bnx2x.patch new file mode 100644 index 0000000..aa25084 --- /dev/null +++ b/SOURCES/sos-bz1869724-ethtool-not-on-bnx2x.patch @@ -0,0 +1,47 @@ +From 34c77d6902ee1df403dc3836b4092d413fb95350 Mon Sep 17 00:00:00 2001 +From: suresh2514 +Date: Fri, 14 Aug 2020 22:59:34 +0530 +Subject: [PATCH] [networking] remove 'ethtool -e' option for bnx2x NICs + +Running EEPROM dump (ethtool -e) can result in bnx2x driver NICs to +pause for few seconds and is not recommended in production environment. + +Resolves: #2188 +Resolves: #2200 + +Signed-off-by: suresh2514 +Signed-off-by: Jake Hunsaker +--- + sos/plugins/networking.py | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py +index ba9c0fb11..397549a56 100644 +--- a/sos/plugins/networking.py ++++ b/sos/plugins/networking.py +@@ -182,7 +182,6 @@ def setup(self): + "ethtool -a " + eth, + "ethtool -c " + eth, + "ethtool -g " + eth, +- "ethtool -e " + eth, + "ethtool -P " + eth, + "ethtool -l " + eth, + "ethtool --phy-statistics " + eth, +@@ -189,6 +189,17 @@ class Networking(Plugin): + "ethtool --show-eee " + eth + ]) + ++ # skip EEPROM collection for 'bnx2x' NICs as this command ++ # can pause the NIC and is not production safe. ++ bnx_output = { ++ "cmd": "ethtool -i %s" % eth, ++ "output": "bnx2x" ++ } ++ bnx_pred = SoSPredicate(self, ++ cmd_outputs=bnx_output, ++ required={'cmd_outputs': 'none'}) ++ self.add_cmd_output("ethtool -e %s" % eth, pred=bnx_pred) ++ + # Collect information about bridges (some data already collected via + # "ip .." commands) + self.add_cmd_output([ diff --git a/SPECS/sos.spec b/SPECS/sos.spec index c3fffe9..3e43267 100644 --- a/SPECS/sos.spec +++ b/SPECS/sos.spec @@ -4,8 +4,8 @@ Summary: A set of tools to gather troubleshooting information from a system Name: sos -Version: 3.8 -Release: 7%{?dist} +Version: 3.9.1 +Release: 6%{?dist} Group: Applications/System Source0: https://github.com/sosreport/sos/archive/%{version}/sos-%{version}.tar.gz Source1: sos-audit-%{auditversion}.tgz @@ -20,22 +20,26 @@ Requires: bzip2 Requires: xz Requires: python3-six Conflicts: vdsm < 4.40 -Patch1: sos-bz1688764-ipa-new-logs.patch -Patch2: sos-bz1738391-kernel-no-trace-by-default.patch -Patch3: sos-bz1744553-ovn-plugins-containerized-env.patch -Patch4: sos-bz1766915-interim-sysroot-forbidden-paths.patch -Patch5: sos-bz1789018-allow-system-changes.patch -Patch6: sos-bz1789049-since-option-improved.patch -Patch7: sos-bz1783034-ceph-insights.patch -Patch8: sos-bz1781819-dnf-module-list.patch -Patch9: sos-bz1721779-ebpf-net-list.patch -Patch10: sos-bz1768956-ebpf-per-namespace.patch -Patch11: sos-bz1741330-openswan-to-libreswan.patch -Patch12: sos-bz1709682-grub2-mkconfig-dont-remove-kernel-opts.patch -Patch13: sos-bz1831549-containers-common-plugin.patch -Patch14: sos-bz1838426-container_log-logdir.patch -Patch15: sos-bz1861710-collect-var-lib-selinux.patch -Patch16: sos-bz1861711-gluster-removes-sockfiles.patch +Patch1: sos-bz1825283-env-host-in-container.patch +Patch2: sos-bz1823488-containers-common.patch +Patch3: sos-bz1819662-rabbitmqctl-on-foreground.patch +Patch4: sos-bz1814867-insights-archive.patch +Patch5: sos-bz1785546-nvmetcli.patch +Patch6: sos-bz1776549-podman-buildah-rootless.patch +Patch7: sos-bz1633006-iptables-kmods.patch +Patch8: sos-bz1457191-navicli-noniteractively.patch +Patch9: sos-bz1838123-xdp-plugin.patch +Patch10: sos-bz1843562-gluster-volume-specific.patch +Patch11: sos-bz1844853-nfs-etc-exports.patch +Patch12: sos-bz1845386-pacemaker-passwords-with-equal-sign.patch +Patch13: sos-bz1843754-powerpc-logs-for-components.patch +Patch14: sos-bz1850926-logs-no-journal.patch +Patch15: sos-bz1850554-luks-not-detected.patch +Patch16: sos-bz1851923-powerpc-missing-logs.patch +Patch17: sos-bz1853700-pci-too-strong-condition.patch +Patch18: sos-bz1857590-gluster-removes-sockfiles.patch +Patch19: sos-bz1859888-kubernetes-indexerror-on-nodes.patch +Patch20: sos-bz1869724-ethtool-not-on-bnx2x.patch %description Sos is a set of tools that gathers information about system @@ -61,6 +65,10 @@ support technicians and developers. %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 %setup -T -D -a1 -q %build @@ -113,19 +121,65 @@ of the system. Currently storage and filesystem commands are audited. %ghost /etc/audit/rules.d/40-sos-storage.rules %changelog -* Wed Jul 29 2020 Pavel Moravec = 3.8-7 -- [selinux] collect /var/lib/selinux - Resolves: bz1861710 -- [gluster] remove only dump files - Resolves: bz1861711 +* Wed Aug 19 2020 Pavel Moravec = 3.9.1-6 +- [networking] remove 'ethtool -e' option for bnx2x NICs + Resolves: bz1869724 -* Thu May 21 2020 Pavel Moravec = 3.8-6 +* Fri Jul 24 2020 Pavel Moravec = 3.9.1-5 +- [logs] collect also non-persistent journal logs + Resolves: bz1850926 +- [block] Fix typo in LUKS detection + Resolves: bz1850554 +- [powerpc] Fix enablement triggers + Resolves: bz1851923 +- [pci] Update gating for lspci commands + Resolves: bz1853700 +- [containers_common] collect user-related commands outputs + Resolves: bz1776549 +- [gluster] remove only dump files + generated state files + Resolves: bz1857590 +- [kubernetes] ignore blank+empty lines in "kubectl get nodes" + Resolves: bz1859888 + +* Tue Jun 23 2020 Pavel Moravec = 3.9.1-4 +- [gluster] fix gluster volume splitlines iteration + Resolves: bz1843562 +- [nfs] merge nfsserver plugin into nfs one + Resolves: bz1844853 +- [pacemaker] Fix scrubbing when password contains an equa + Resolves: bz1845386 +- [powerpc] Add support to collect component logs + Resolves: bz1843754 + +* Wed May 27 2020 Pavel Moravec = 3.9.1-2 +- Rebase on upstream 3.9 + Resolves: bz1826656 +- [redhat] fix RH containers without sysroot Attempting to run + Resolves: bz1825283 +- [containers_common] Add plugin for common containers configs + Resolves: bz1823488 +- [rabbitmq] Call containerised rabbitmqctl report on + Resolves: bz1819662 +- [insights] collect insights-client dump + Resolves: bz1814867 +- [nvmetcli] Add new plugin for NVMe Target CLI + Resolves: bz1785546 +- [containers_common] collect rootless containers info + Resolves: bz1776549 +- [networking] collect iptables when proper kernel modules + Resolves: bz1633006 +- [navicli] replace interactive prompt by plugin option + Resolves: bz1457191 +- [xdp] Add XDP plugin + Resolves: bz1838123 + +* Thu May 21 2020 Pavel Moravec = 3.8-4 - [container_log] fix unscoped 'logdir' variable Resolves: bz1834421 -* Mon May 18 2020 Pavel Moravec = 3.8-5 +* Wed May 06 2020 Pavel Moravec = 3.8-3 - [containers_common] Add plugin for common containers configs - Resolves: bz1831549 + Resolves: bz1823488 * Fri Jan 10 2020 Pavel Moravec = 3.8-2 - [plugins] improve heuristic for applying --since