import sos-3.9.1-6.el8

This commit is contained in:
CentOS Sources 2020-11-03 06:49:43 -05:00 committed by Andrew Lukoshko
parent 547f384876
commit 7465d6d401
37 changed files with 1353 additions and 1504 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
SOURCES/sos-3.8.tar.gz
SOURCES/sos-3.9.1.tar.gz
SOURCES/sos-audit-0.3.tgz

View File

@ -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

View File

@ -0,0 +1,67 @@
From ca24d4602ce46312343f1f6c6f4b270fb6092e21 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com>
---
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

View File

@ -0,0 +1,78 @@
From 31e0467885ef3986b476ea070941a786b426f298 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com>
---
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

View File

@ -1,84 +0,0 @@
From f2350aece8a6980f80cfa0036382055239fd8a6b Mon Sep 17 00:00:00 2001
From: Thorsten Scherf <tscherf@redhat.com>
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 <tscherf@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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 <rcritten@redhat.com>
Date: Thu, 12 Sep 2019 12:02:34 -0400
Subject: [PATCH] [ipa] collect ipa-healthcheck logs
Resolves: #1782
Signed-off-by: Rob Crittenden <rcritten@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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 <pmoravec@redhat.com>
Date: Tue, 1 Oct 2019 08:26:24 +0200
Subject: [PATCH] [ipa] collect kdcproxy configs
Resolves: #1806
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
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]*",

View File

@ -1,180 +0,0 @@
From 7097f737339f0cde6da923a4ce16a008d229cda7 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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

View File

@ -1,29 +0,0 @@
From 62b77dcd78dc271879d01f0132acea1952ef226d Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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):

View File

@ -1,79 +0,0 @@
From 55949fb88c492eec542c69157a8763ddb3555345 Mon Sep 17 00:00:00 2001
From: MIZUTA Takeshi <mizuta.takeshi@fujitsu.com>
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 <mizuta.takeshi@fujitsu.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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 <pmoravec@redhat.com>
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 <mizuta.takeshi@fujitsu.com>
Closes: #1688
Resolves: #1800
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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

View File

@ -1,104 +0,0 @@
From b061168bdae759c88e9ef93f3620edae404e69fe Mon Sep 17 00:00:00 2001
From: Stepan Broz <sbroz@redhat.com>
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 <sbroz@redhat.com>
---
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 <sputhenp@redhat.com>
+# Copyright (C) 2019 Red Hat Inc., Stepan Broz <sbroz@redhat.com>
# 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 :

View File

@ -1,326 +0,0 @@
From cc6374914a47eb3777c5b8306506df43522a31e0 Mon Sep 17 00:00:00 2001
From: Daniel Alvarez <dalvarez@redhat.com>
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 <dalvarez@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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 <dalvarez@redhat.com>
Date: Wed, 11 Sep 2019 16:19:15 +0100
Subject: [PATCH] [ovn_host] fix Open_vSwitch table name
Signed-off-by: Daniel Alvarez <dalvarez@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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 <dalvarez@redhat.com>
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 <dalvarez@redhat.com>
---
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 <dalvarez@redhat.com>
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 <dalvarez@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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

View File

@ -1,354 +0,0 @@
From 9a0ab16793a8388b2c3d3909fd3a087c5b6296d4 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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" <bmr@redhat.com>
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 <bmr@redhat.com>
---
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

View File

@ -1,58 +0,0 @@
From 93ba31695ad532ce96c93dc511f966e7a3e9ae94 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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"

View File

@ -0,0 +1,219 @@
From 1875213788f4472cc11ce8e732cd4780e99ca477 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -1,29 +0,0 @@
From ba546077c0e4835b8087eacc75da0c4d475bade2 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
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 <jhunsake@redhat.com>
---
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"
])

View File

@ -1,27 +0,0 @@
From f205f3aebeff8041fae6357727f9514f7e85157b Mon Sep 17 00:00:00 2001
From: Brad Hubbard <bhubbard@redhat.com>
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 <bhubbard@redhat.com>
---
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"
])

View File

@ -0,0 +1,68 @@
From 83d56e2b443edc733ffc5a5286ce8392de99586e Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <nyewale@redhat.com>
+
+# 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

View File

@ -1,78 +0,0 @@
From 903958306830ea00ac47e3ea353eaa5d8abbacb6 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
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 <jhunsake@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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

View File

@ -1,60 +0,0 @@
From 71cdbde72f81d586da37a9e108868d6aa1b4ef69 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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

View File

@ -0,0 +1,78 @@
From 0766cc739d424932e18c250c88f0227da06ecaed Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com>
---
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

View File

@ -0,0 +1,34 @@
From c805cd23b8bd73986f2546a711edd42150d855ba Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -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 <pmoravec@redhat.com>
+
+# 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

View File

@ -0,0 +1,33 @@
From d9dd8ad790b6799491e4891ae19bb85124ab6794 Mon Sep 17 00:00:00 2001
From: Robert Thomas Manes <robb.manes@gmail.com>
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 <rmanes@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,69 @@
From af5597bfa41521e10f4ef5095f137b2ef5bcd661 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@redhat.com>
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 <toke@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -1,29 +0,0 @@
From e4ece6569221f1833d3fb621c26f19c23662b329 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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

View File

@ -0,0 +1,37 @@
From fc831f0072c8f751f8fc2f46eb5c3e6aa9eba0a9 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,150 @@
From f7292b0121408a77d9e5ee94a046025c256cd021 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
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 <mamatha4@linux.vnet.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <mamatha4@linux.vnet.ibm.com>
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 <mamatha4@linux.vnet.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <mamatha4@linux.vnet.ibm.com>
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 <mamatha4@linux.vnet.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <mamatha4@linux.vnet.ibm.com>
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 <mamatha4@linux.vnet.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,120 @@
From fad72dbacc7e5c3c2721e452823750974ea31550 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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 <eteo@redhat.com>
-
-# 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

View File

@ -0,0 +1,46 @@
From b34edec39189d5501b9943f73ec2afa7c7b98d58 Mon Sep 17 00:00:00 2001
From: Reid wahl <nrwahl@protonmail.com>
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 <nrwahl@protonmail.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,29 @@
From b85039b9ed658a4a59c637552a67ca9f2cf843b1 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
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 <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,54 @@
From 8c2b07adeebed573306bc52a26b37b6def75a925 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
---
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

View File

@ -0,0 +1,36 @@
From 1368498e8d5c5e2d9cd93c335252efe8e08316a4 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
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 <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,54 @@
From c5a3dd0fb1e256772d83f19bc458e79b2cf5baf7 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
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 <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,37 @@
From 482029d991e1aa075aafb122cbeee911afad341c Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
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 <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -1,36 +0,0 @@
From 5b5302e7a7b1931d51e4960a9a56f14cd0c855c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
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/<policy>
directory anymore, but in /var/lib/selinux/<policy> directory.
Resolves: #1976
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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

View File

@ -0,0 +1,47 @@
From 34c77d6902ee1df403dc3836b4092d413fb95350 Mon Sep 17 00:00:00 2001
From: suresh2514 <suresh2514@gmail.com>
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 <suresh2514@gmail.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
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([

View File

@ -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 <pmoravec@redhat.com> = 3.8-7
- [selinux] collect /var/lib/selinux
Resolves: bz1861710
- [gluster] remove only dump files
Resolves: bz1861711
* Wed Aug 19 2020 Pavel Moravec <pmoravec@redhat.com> = 3.9.1-6
- [networking] remove 'ethtool -e' option for bnx2x NICs
Resolves: bz1869724
* Thu May 21 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-6
* Fri Jul 24 2020 Pavel Moravec <pmoravec@redhat.com> = 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 <pmoravec@redhat.com> = 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 <pmoravec@redhat.com> = 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 <pmoravec@redhat.com> = 3.8-4
- [container_log] fix unscoped 'logdir' variable
Resolves: bz1834421
* Mon May 18 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-5
* Wed May 06 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-3
- [containers_common] Add plugin for common containers configs
Resolves: bz1831549
Resolves: bz1823488
* Fri Jan 10 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-2
- [plugins] improve heuristic for applying --since