From 6294849a2fc8c368940991f6a6a26317a5619075 Mon Sep 17 00:00:00 2001 From: CentOS Buildsys Date: Mar 20 2014 19:25:22 +0000 Subject: import sos-3.0-23.el7.src.rpm --- diff --git a/SOURCES/sos-bz1028121-include-openhpi-config.patch b/SOURCES/sos-bz1028121-include-openhpi-config.patch new file mode 100644 index 0000000..0a95010 --- /dev/null +++ b/SOURCES/sos-bz1028121-include-openhpi-config.patch @@ -0,0 +1,116 @@ +From c1e37e41831c8a9ce8c9901d604421b8b19a20e1 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Mon, 12 Aug 2013 20:11:29 +0100 +Subject: [PATCH 1/3] Add new plug-in to gather OpenHPI configuration + +New plug-in to collect OpenHPI configuration files. These files +may contain passwords; a regex substitution rule has been added +based on information from the reporter but this needs testing +with a range of actual configuration files. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/openhpi.py | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) + create mode 100644 sos/plugins/openhpi.py + +diff --git a/sos/plugins/openhpi.py b/sos/plugins/openhpi.py +new file mode 100644 +index 0000000..bb35206 +--- /dev/null ++++ b/sos/plugins/openhpi.py +@@ -0,0 +1,34 @@ ++### This program is free software; you can redistribute it and/or modify ++## it under the terms of the GNU General Public License as published by ++## the Free Software Foundation; either version 2 of the License, or ++## (at your option) any later version. ++ ++## This program is distributed in the hope that it will be useful, ++## but WITHOUT ANY WARRANTY; without even the implied warranty of ++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++## GNU General Public License for more details. ++ ++## You should have received a copy of the GNU General Public License ++## along with this program; if not, write to the Free Software ++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++from sos.plugins import Plugin, RedHatPlugin ++import os ++ ++class OpenHPI(Plugin, RedHatPlugin): ++ """OpenHPI related information ++ """ ++ ++ plugin_name = 'openhpi' ++ ++ def setup(self): ++ self.add_copy_specs([ ++ "/etc/openhpi/openhpi.conf", ++ "/etc/openhpi/openhpiclient.conf" ++ ]) ++ ++ def postproc(self): ++ self.do_file_sub("/etc/openhpi/openhpi.conf" ++ r'([Pp]assw(or)?d|[Pp]assphrase)[[:space:]]+\=[[:space:]]"(.*)"', ++ r"\1******") ++ +-- +1.7.11.7 + + +From a2be6462e40acc48c4271b2faddc4e9a03187712 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Mon, 12 Aug 2013 20:15:25 +0100 +Subject: [PATCH 2/3] Add file substitution rule for openhpiclient.conf + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/openhpi.py | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/sos/plugins/openhpi.py b/sos/plugins/openhpi.py +index bb35206..a75f016 100644 +--- a/sos/plugins/openhpi.py ++++ b/sos/plugins/openhpi.py +@@ -31,4 +31,7 @@ class OpenHPI(Plugin, RedHatPlugin): + self.do_file_sub("/etc/openhpi/openhpi.conf" + r'([Pp]assw(or)?d|[Pp]assphrase)[[:space:]]+\=[[:space:]]"(.*)"', + r"\1******") ++ self.do_file_sub("/etc/openhpi/openhpiclient.conf" ++ r'([Pp]assw(or)?d|[Pp]assphrase)[[:space:]]+\=[[:space:]]"(.*)"', ++ r"\1******") + +-- +1.7.11.7 + + +From a70afd9562a3ba9ad193fa25c6079c45533b9887 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Thu, 7 Nov 2013 18:17:18 +0000 +Subject: [PATCH 3/3] Fix regex substitution in openhpi plug-in + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/openhpi.py | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/sos/plugins/openhpi.py b/sos/plugins/openhpi.py +index a75f016..dbe004d 100644 +--- a/sos/plugins/openhpi.py ++++ b/sos/plugins/openhpi.py +@@ -28,10 +28,6 @@ class OpenHPI(Plugin, RedHatPlugin): + ]) + + def postproc(self): +- self.do_file_sub("/etc/openhpi/openhpi.conf" +- r'([Pp]assw(or)?d|[Pp]assphrase)[[:space:]]+\=[[:space:]]"(.*)"', +- r"\1******") +- self.do_file_sub("/etc/openhpi/openhpiclient.conf" +- r'([Pp]assw(or)?d|[Pp]assphrase)[[:space:]]+\=[[:space:]]"(.*)"', +- r"\1******") ++ self.do_file_sub("/etc/openhpi/openhpi.conf", ++ r'(\s*[Pp]ass.*\s*=\s*).*', r'\1********') + +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1028484-remove-upload-option.patch b/SOURCES/sos-bz1028484-remove-upload-option.patch new file mode 100644 index 0000000..01fa7ac --- /dev/null +++ b/SOURCES/sos-bz1028484-remove-upload-option.patch @@ -0,0 +1,236 @@ +commit 26bd7ddd523af051916954723f3edb2ab6bd297e +Author: Bryn M. Reeves +Date: Fri Jan 24 15:13:22 2014 +0000 + + Remove --upload option + + The --upload option has a lot of limitations and has not been + widely used. Recent trends are to handle uploading data in + higher-level tools (e.g. redhat-support-tool or web based + management UIs) and the python ftp library does not support + modern requirements like HTTP proxy traversal or encryption. + + Fixes Issue #217 + + Signed-off-by: Bryn M. Reeves + + Conflicts: + sos/policies/__init__.py + +diff --git a/man/en/sos.conf.5 b/man/en/sos.conf.5 +index dc10b1b..b40a48e 100644 +--- a/man/en/sos.conf.5 ++++ b/man/en/sos.conf.5 +@@ -6,26 +6,31 @@ sos.conf \- sosreport configuration + sosreport uses a configuration file at /etc/sos.conf. + .SH PARAMETERS + .sp +-There are 3 sections of configuration in the sosreport configuration file: general, +-plugins, and tunables. +-.SH [general] OPTIONS +-.sp +-.in +-ftp_upload_url Default ftp server to send reports. +-.in +-gpg_keyring Default gpgkey. +-.in +-gpg_recipient GPG recipient +-.in +-smtp_server Mail server +-.SH [plugins] OPTIONS +-.sp +-.in ++There are two sections in the sosreport configuration file: ++plugins, and tunables. Options are set using 'ini'-style ++\fBname = value\fP pairs. ++ ++Some options accept a comma separated list of values. ++ ++.TP ++\fB[plugins]\fP + disable Comma separated list of plugins to disable. +-.SH [tunables] OPTIONS ++.TP ++\fB[tunables]\fP ++plugin.option Alter available options for defined plugin. ++.SH EXAMPLES ++To disable the 'general' and 'filesys' plugins: ++.LP ++[plugins] ++.br ++disable = general, filesys + .sp +-.in +-(plugin, option) Alter available options for defined plugin. ++To disable rpm package verification in the RPM plugin: ++.LP ++[tunables] ++.br ++rpm.rpmva = off ++.br + .SH FILES + .sp + /etc/sos.conf +diff --git a/man/en/sosreport.1 b/man/en/sosreport.1 +index 87a099e..c800576 100644 +--- a/man/en/sosreport.1 ++++ b/man/en/sosreport.1 +@@ -10,7 +10,7 @@ sosreport \- Collect and package diagnostic and support data + [-a|--alloptions] [-v|--verbose]\fR + [--report] [--config-file conf] [--batch]\fR + [--build] [--name name] [--ticket-number number] +- [--debug] [--upload] [--tmp-dir directory]\fR ++ [--debug] [--tmp-dir directory]\fR + [--profile] [--help]\fR + .SH DESCRIPTION + \fBsosreport\fR generates a compressed tar archive of diagnostic +@@ -50,9 +50,6 @@ specified value in the plug-in PLUGNAME. + .B \-a, \--alloptions + Set all boolean options to True for all enabled plug-ins. + .TP +-.B \--upload FTP_SERVER +-Upload the report to the configured destination. +-.TP + .B \-v, \--verbose + Increase logging verbosity. May be specified multiple times to enable + additional debugging messages. +diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py +index b681e77..47ace5c 100644 +--- a/sos/policies/__init__.py ++++ b/sos/policies/__init__.py +@@ -280,79 +280,6 @@ No changes will be made to system configuration. + self._print(_("Please send this file to your support representative.")) + self._print() + +- def upload_results(self, final_filename): +- +- # make sure a report exists +- if not final_filename: +- return False +- +- self._print() +- # make sure it's readable +- try: +- fp = open(final_filename, "r") +- except: +- return False +- +- # read ftp URL from configuration +- if self.commons['cmdlineopts'].upload: +- upload_url = self.commons['cmdlineopts'].upload +- else: +- try: +- upload_url = self.commons['config'].get("general", "ftp_upload_url") +- except: +- self._print(_("No URL defined in config file.")) +- return +- +- from urlparse import urlparse +- url = urlparse(upload_url) +- +- if url[0] != "ftp": +- self._print(_("Cannot upload to specified URL.")) +- return +- +- # extract username and password from URL, if present +- if url[1].find("@") > 0: +- username, host = url[1].split("@", 1) +- if username.find(":") > 0: +- username, passwd = username.split(":", 1) +- else: +- passwd = None +- else: +- username, passwd, host = None, None, url[1] +- +- # extract port, if present +- if host.find(":") > 0: +- host, port = host.split(":", 1) +- port = int(port) +- else: +- port = 21 +- +- path = url[2] +- +- try: +- from ftplib import FTP +- upload_name = os.path.basename(final_filename) +- +- ftp = FTP() +- ftp.connect(host, port) +- if username and passwd: +- ftp.login(username, passwd) +- else: +- ftp.login() +- ftp.cwd(path) +- ftp.set_pasv(True) +- ftp.storbinary('STOR %s' % upload_name, fp) +- ftp.quit() +- except Exception, e: +- self._print(_("There was a problem uploading your report to Red Hat support. " + str(e))) +- else: +- self._print(_("Your report was successfully uploaded to %s with name:" % (upload_url,))) +- self._print(" " + upload_name) +- self._print() +- self._print(_("Please communicate this name to your support representative.")) +- self._print() +- +- fp.close() + + def _print(self, msg=None): + """A wrapper around print that only prints if we are not running in +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 1c81af9..fb3aea7 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -202,7 +202,6 @@ class SoSOptions(object): + _onlyplugins = [] + _plugopts = [] + _usealloptions = False +- _upload = False + _batch = False + _build = False + _verbosity = 0 +@@ -302,19 +301,6 @@ class SoSOptions(object): + self._usealloptions = value + + @property +- def upload(self): +- if self._options != None: +- return self._options.upload +- return self._upload +- +- @upload.setter +- def upload(self, value): +- self._check_options_initialized() +- if not isinstance(value, bool): +- raise TypeError("SoSOptions.upload expects a boolean") +- self._upload = value +- +- @property + def batch(self): + if self._options != None: + return self._options.batch +@@ -484,9 +470,6 @@ class SoSOptions(object): + parser.add_option("-a", "--alloptions", action="store_true", + dest="usealloptions", default=False, + help="enable all options for loaded plugins") +- parser.add_option("-u", "--upload", action="store", +- dest="upload", default=False, +- help="upload the report to an ftp server") + parser.add_option("--batch", action="store_true", + dest="batch", default=False, + help="batch mode - do not prompt interactively") +@@ -1130,12 +1113,7 @@ class SoSReport(object): + else: + final_filename = self.archive.get_archive_path() + +- # automated submission will go here +- if not self.opts.upload: +- self.policy.display_results(final_filename, build = self.opts.build) +- else: +- self.policy.upload_results(final_filename) +- ++ self.policy.display_results(final_filename, build = self.opts.build) + self.tempfile_util.clean() + + return True diff --git a/SOURCES/sos-bz1030042-remove-logs-debug-statements.patch b/SOURCES/sos-bz1030042-remove-logs-debug-statements.patch new file mode 100644 index 0000000..690c1ea --- /dev/null +++ b/SOURCES/sos-bz1030042-remove-logs-debug-statements.patch @@ -0,0 +1,34 @@ +commit 3304589f0e643b9f43dbc0fd042f747d0e4c27c2 +Author: Bryn M. Reeves +Date: Wed Nov 13 19:02:05 2013 +0000 + + Remove debug statements from logs plugin + + The 'all_logs' path of the logs plugin has three leftover debug + print statements. Remove them to avoid cluttering the console + output when the option is used. + + Signed-off-by: Bryn M. Reeves + + Conflicts: + sos/plugins/logs.py + +diff --git a/sos/plugins/logs.py b/sos/plugins/logs.py +index 8359e06..7e7545f 100644 +--- a/sos/plugins/logs.py ++++ b/sos/plugins/logs.py +@@ -38,14 +38,11 @@ class Logs(Plugin): + self.add_copy_spec_limit("/var/log/boot*", sizelimit = self.limit) + + if self.get_option('all_logs'): +- print "doing all_logs..." + logs = self.do_regex_find_all("^\S+\s+(-?\/.*$)\s+", + "/etc/syslog.conf") +- print logs + if self.policy().pkg_by_name("rsyslog") \ + or os.path.exists("/etc/rsyslog.conf"): + logs += self.do_regex_find_all("^\S+\s+(-?\/.*$)\s+", "/etc/rsyslog.conf") +- print logs + for i in logs: + if i.startswith("-"): + i = i[1:] diff --git a/SOURCES/sos-bz1030553-fix-cluster-crm_report.patch b/SOURCES/sos-bz1030553-fix-cluster-crm_report.patch new file mode 100644 index 0000000..dea4055 --- /dev/null +++ b/SOURCES/sos-bz1030553-fix-cluster-crm_report.patch @@ -0,0 +1,72 @@ +From 186b3317b1e8562bbbd7dddd191b8ab73d664d5c Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Fri, 31 Jan 2014 15:08:28 +0000 +Subject: [PATCH] Fix cluster module crm_report support + +The cluster plugin used an obsolete sos-2.2 method to determine +the command output directory. This causes an excaption at runtime +since the referenced properties no longer exist. + +The crm_report script also expects a --from date and will not +collect data unless this is passed. Default to passing a value 72 +hours before the current time and add a 'crm_from' option to the +cluster module to allow the user to override this. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/cluster.py | 27 +++++++++++++++++++-------- + 1 file changed, 19 insertions(+), 8 deletions(-) + +diff --git a/sos/plugins/cluster.py b/sos/plugins/cluster.py +index 50e0e0b..c2ce42b 100644 +--- a/sos/plugins/cluster.py ++++ b/sos/plugins/cluster.py +@@ -13,16 +13,17 @@ + ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + from sos.plugins import Plugin, RedHatPlugin +-import re ++import re, os + from glob import glob ++from datetime import datetime, timedelta + + class Cluster(Plugin, RedHatPlugin): + """cluster suite and GFS related information + """ + + plugin_name = 'cluster' +- option_list = [("gfslockdump", +- 'gather output of gfs lockdumps', 'slow', False), ++ option_list = [("gfslockdump", 'gather output of gfs lockdumps', 'slow', False), ++ ("crm_from", 'specify the --from parameter passed to crm_report', 'fast', False), + ('lockdump', 'gather dlm lockdumps', 'slow', False)] + + packages = [ +@@ -83,9 +84,21 @@ class Cluster(Plugin, RedHatPlugin): + self.add_cmd_output("dlm_tool dump") + self.add_cmd_output("dlm_tool ls -n") + self.add_cmd_output("mkqdisk -L") +- crm_dest = os.path.join(self.cInfo['cmddir'], +- self.name(), 'crm_report') +- self.collectExtOutput("crm_report -S --dest %s" % crm_dest) ++ # crm_report needs to be given a --from "YYYY-MM-DD HH:MM:SS" start ++ # time in order to collect data. ++ crm_from = (datetime.today() ++ - timedelta(hours=72)).strftime("%Y-%m-%d %H:%m:%S") ++ if self.get_option('crm_from') != False: ++ if re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', ++ str(self.getOption('crm_from'))): ++ crm_from = self.getOption('crm_from') ++ else: ++ self.soslog.error("crm_from parameter '%s' is not a valid date" ++ % self.getOption('crm_from')) ++ ++ crm_dest = os.path.join(self.get_cmd_dir(), 'crm_report') ++ self.add_cmd_output('crm_report -S -d --dest %s --from "%s"' ++ % (crm_dest, crm_from)) + + def do_lockdump(self): + status, output, time = self.call_ext_prog("dlm_tool ls") +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1030553-fix-cluster-get_option-use.patch b/SOURCES/sos-bz1030553-fix-cluster-get_option-use.patch new file mode 100644 index 0000000..a8412c7 --- /dev/null +++ b/SOURCES/sos-bz1030553-fix-cluster-get_option-use.patch @@ -0,0 +1,32 @@ +From 50c2821c6211a06ee356d4d8d2f0e7573e1a8159 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Mon, 3 Feb 2014 11:48:46 +0000 +Subject: [PATCH] Fix get_option() use in cluster plugin + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/cluster.py | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/sos/plugins/cluster.py b/sos/plugins/cluster.py +index 0fc4ded..eeacdab 100644 +--- a/sos/plugins/cluster.py ++++ b/sos/plugins/cluster.py +@@ -90,11 +90,11 @@ class Cluster(Plugin, RedHatPlugin): + - timedelta(hours=72)).strftime("%Y-%m-%d %H:%m:%S") + if self.get_option('crm_from') != False: + if re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', +- str(self.getOption('crm_from'))): +- crm_from = self.getOption('crm_from') ++ str(self.get_option('crm_from'))): ++ crm_from = self.get_option('crm_from') + else: + self.soslog.error("crm_from parameter '%s' is not a valid date" +- % self.getOption('crm_from')) ++ % self.get_option('crm_from')) + + crm_dest = os.path.join(self.get_cmd_dir(), 'crm_report') + self.add_cmd_output('crm_report -S -d --dest %s --from "%s"' +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1030553-fix-command-output-substitution-exception.patch b/SOURCES/sos-bz1030553-fix-command-output-substitution-exception.patch new file mode 100644 index 0000000..0daf875 --- /dev/null +++ b/SOURCES/sos-bz1030553-fix-command-output-substitution-exception.patch @@ -0,0 +1,141 @@ +From c6e2ab3f1e941ececc7a461fd46a1a40041ad2b5 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Sun, 6 Oct 2013 15:01:23 +0100 +Subject: [PATCH 1/3] Fix exception in command output substitution + +If an attempt is made to apply command output substitution via +Plugin.do_cmd_output_sub() and no output has been collected (i.e. +called['file'] == None) an exception is thrown by os.path.join(). + +The exception is also not logged properly due to an attempt in +the do_cmd_output_sub() exception handler to access an unbound +local variable (path - the exception occurs before it is +assigned). + +Fix both of these by checking for an empty file entry and avoiding +access to the path variable from the exception handler. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/__init__.py | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index 4a72161..fc3a851 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -180,6 +180,9 @@ class Plugin(object): + + try: + for called in self.executed_commands: ++ # was anything collected? ++ if called['file'] == None: ++ continue + if fnmatch.fnmatch(called['exe'], globstr): + path = os.path.join(self.commons['cmddir'], called['file']) + self.soslog.debug("applying substitution to %s" % path) +@@ -192,7 +195,7 @@ class Plugin(object): + replacements = 0 + except Exception, e: + msg = 'regex substitution failed for %s in plugin %s with: "%s"' +- self.soslog.error(msg % (path, self.name(), e)) ++ self.soslog.error(msg % (called['exe'], self.name(), e)) + replacements = 0 + if self.commons['cmdlineopts'].profiler: + time_passed = time() - start_time +-- +1.7.11.7 + + +From dafcbf33022ee2be24109c6c90bae97a1a4a2077 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Tue, 11 Feb 2014 16:53:16 +0000 +Subject: [PATCH 2/3] Fix command output substitution exception + +If a comand has a substitution registered via do_cmd_output_sub() +but no data was collected (e.g. command not found) the postproc +code will throw an exception as the return value ('replacements') +is never assigned. + +Initialise replacements to None before scanning the list of run +commands and return this if no substitutions were made. + +Signed-off-by: Bryn M. Reeves + +Conflicts: + sos/plugins/__init__.py +--- + sos/plugins/__init__.py | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index fc3a851..2bf8d98 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -178,6 +178,7 @@ class Plugin(object): + if not self.executed_commands: + return 0 + ++ replacements = None + try: + for called in self.executed_commands: + # was anything collected? +@@ -191,12 +192,12 @@ class Plugin(object): + regexp, subst, readable.read()) + if replacements: + self.archive.add_string(result, path) +- else: +- replacements = 0 +- except Exception, e: ++ ++ except Exception as e: + msg = 'regex substitution failed for %s in plugin %s with: "%s"' + self.soslog.error(msg % (called['exe'], self.name(), e)) +- replacements = 0 ++ replacements = None ++ + if self.commons['cmdlineopts'].profiler: + time_passed = time() - start_time + self.proflog.debug("subst: %-75s time: %f" +-- +1.7.11.7 + + +From 59e7695c52ef77b9045e0f1737672728e6b0275a Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Tue, 11 Feb 2014 16:56:37 +0000 +Subject: [PATCH 3/3] Improve error message when cluster.crm_from is invalid + +If a user passes a non-date string value as the crm_from parameter +of the cluster plugin an error message is logged: + + crm_from parameter 'True' is not a valid date + +The plugin continues to run and uses the default value (T-72hrs) +as the value of crm_from. Make this clear in the message displayed +to users: + + crm_from parameter 'True' is not a valid date: using default + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/cluster.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/sos/plugins/cluster.py b/sos/plugins/cluster.py +index eeacdab..8d73dc1 100644 +--- a/sos/plugins/cluster.py ++++ b/sos/plugins/cluster.py +@@ -93,7 +93,8 @@ class Cluster(Plugin, RedHatPlugin): + str(self.get_option('crm_from'))): + crm_from = self.get_option('crm_from') + else: +- self.soslog.error("crm_from parameter '%s' is not a valid date" ++ self.soslog.error( ++ "crm_from parameter '%s' is not a valid date: using default" + % self.get_option('crm_from')) + + crm_dest = os.path.join(self.get_cmd_dir(), 'crm_report') +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1030602-fix-ldap-postproc.patch b/SOURCES/sos-bz1030602-fix-ldap-postproc.patch new file mode 100644 index 0000000..4afb202 --- /dev/null +++ b/SOURCES/sos-bz1030602-fix-ldap-postproc.patch @@ -0,0 +1,187 @@ +From 2fd64785d330f6ff8090b9b01f15b7f75ab57e41 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Tue, 13 Aug 2013 14:54:20 +0100 +Subject: [PATCH 1/4] Improve readability of add_copy_specs() usage in ldap.py + +Use multi-line style for add_copy_specs() invocations in the ldap +plug-in per the recommendations in Issue #173. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/ldap.py | 13 ++++++++++--- + 1 file changed, 10 insertions(+), 3 deletions(-) + +diff --git a/sos/plugins/ldap.py b/sos/plugins/ldap.py +index b16b7b3..4d33076 100644 +--- a/sos/plugins/ldap.py ++++ b/sos/plugins/ldap.py +@@ -1,4 +1,4 @@ +-### This program is free software; you can redistribute it and/or modify ++## This program is free software; you can redistribute it and/or modify + ## it under the terms of the GNU General Public License as published by + ## the Free Software Foundation; either version 2 of the License, or + ## (at your option) any later version. +@@ -49,7 +49,10 @@ class RedHatLdap(Ldap, RedHatPlugin): + + def setup(self): + super(RedHatLdap, self).setup() +- self.add_copy_specs(["/etc/openldap", "/etc/nslcd.conf"]) ++ self.add_copy_specs([ ++ "/etc/openldap", ++ "/etc/nslcd.conf" ++ ]) + + def postproc(self): + self.do_file_sub("/etc/nslcd.conf", r"(\s*bindpw\s*)\S+", r"\1***") +@@ -66,7 +69,11 @@ class DebianLdap(Ldap, DebianPlugin, UbuntuPlugin): + + ldap_search = "ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// " + +- self.add_copy_specs(["/etc/ldap/ldap.conf", "/etc/slapd.conf", "/etc/ldap/slapd.d"]) ++ self.add_copy_specs([ ++ "/etc/ldap/ldap.conf", ++ "/etc/slapd.conf", ++ "/etc/ldap/slapd.d" ++ ]) + + self.add_cmd_output("ldapsearch -x -b '' -s base 'objectclass=*'") + self.add_cmd_output(ldap_search + "-b cn=config '(!(objectClass=olcSchemaConfig))'", +-- +1.7.11.7 + + +From a4a686eb589f0d54bc3808ce57c792356aa36106 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Tue, 13 Aug 2013 15:19:02 +0100 +Subject: [PATCH 2/4] Add pam_ldap.conf collection to ldap plug-in + +Add the pam_ldap.conf file to the data collected by the ldap +plug-in and tidy up substitution strings for this plug-in. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/ldap.py | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/sos/plugins/ldap.py b/sos/plugins/ldap.py +index 4d33076..361de73 100644 +--- a/sos/plugins/ldap.py ++++ b/sos/plugins/ldap.py +@@ -39,23 +39,28 @@ class Ldap(Plugin): + self.add_copy_spec("/etc/ldap.conf") + + def postproc(self): +- self.do_file_sub("/etc/ldap.conf", r"(\s*bindpw\s*)\S+", r"\1***") ++ self.do_file_sub("/etc/ldap.conf", r"(\s*bindpw\s*)\S+", r"\1******") + + class RedHatLdap(Ldap, RedHatPlugin): + """LDAP related information for RedHat based distribution + """ + + packages = ('openldap', 'nss-pam-ldapd') ++ files = ('/etc/ldap.conf', '/etc/pam_ldap.conf') + + def setup(self): + super(RedHatLdap, self).setup() + self.add_copy_specs([ + "/etc/openldap", +- "/etc/nslcd.conf" ++ "/etc/nslcd.conf", ++ "/etc/pam_ldap.conf" + ]) + + def postproc(self): +- self.do_file_sub("/etc/nslcd.conf", r"(\s*bindpw\s*)\S+", r"\1***") ++ self.do_file_sub("/etc/nslcd.conf", ++ r"(\s*bindpw\s*)\S+", r"\1********") ++ self.do_file_sub("/etc/pam_ldap.conf", ++ r"(\s*bindpw\s*)\S+", r"\1********") + + class DebianLdap(Ldap, DebianPlugin, UbuntuPlugin): + """LDAP related information for Debian based distribution +@@ -86,4 +91,4 @@ class DebianLdap(Ldap, DebianPlugin, UbuntuPlugin): + def postproc(self): + self.do_cmd_output_sub( + "ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(!(objectClass=olcSchemaConfig))'", +- r"(olcRootPW\: \s*)\S+", r"\1***") ++ r"(olcRootPW\: \s*)\S+", r"\1********") +-- +1.7.11.7 + + +From cfb53a07ba72a311d2962e0bd73cf74430a4cad8 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Fri, 31 Jan 2014 15:25:15 +0000 +Subject: [PATCH 3/4] Remove obsolete diagnostics code from ldap plugin + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/ldap.py | 12 ------------ + 1 file changed, 12 deletions(-) + +diff --git a/sos/plugins/ldap.py b/sos/plugins/ldap.py +index 361de73..f1032a9 100644 +--- a/sos/plugins/ldap.py ++++ b/sos/plugins/ldap.py +@@ -22,18 +22,6 @@ class Ldap(Plugin): + plugin_name = "ldap" + ldap_conf = "/etc/openldap/ldap.conf" + +- def get_ldap_opts(self): +- # capture /etc/openldap/ldap.conf options in dict +- # FIXME: possibly not hardcode these options in? +- ldapopts=["URI","BASE","TLS_CACERTDIR"] +- results={} +- tmplist=[] +- for i in ldapopts: +- t=self.do_regex_find_all(r"^(%s)\s+(.*)" % i,self.ldap_conf) +- for x in t: +- results[x[0]]=x[1].rstrip("\n") +- return results +- + def setup(self): + super(Ldap, self).setup() + self.add_copy_spec("/etc/ldap.conf") +-- +1.7.11.7 + + +From e1a30a6d63a376d892a10d9cec89b312356ba9c2 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Fri, 31 Jan 2014 15:43:44 +0000 +Subject: [PATCH 4/4] Ensure superclass postproc method is called in ldap + plugin + +Since the ldap plugins add files and post-processing methods at +multiple class levels (Ldap, RedHatLdap etc.) derived classes +must explicitly call their parent class's postproc() method to +apply all substitutions to collected data. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/ldap.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/sos/plugins/ldap.py b/sos/plugins/ldap.py +index f1032a9..79d8394 100644 +--- a/sos/plugins/ldap.py ++++ b/sos/plugins/ldap.py +@@ -45,6 +45,7 @@ class RedHatLdap(Ldap, RedHatPlugin): + ]) + + def postproc(self): ++ super(RedHatLdap, self).postproc() + self.do_file_sub("/etc/nslcd.conf", + r"(\s*bindpw\s*)\S+", r"\1********") + self.do_file_sub("/etc/pam_ldap.conf", +@@ -77,6 +78,7 @@ class DebianLdap(Ldap, DebianPlugin, UbuntuPlugin): + suggest_filename="access_control_lists") + + def postproc(self): ++ super(RedHatLdap, self).postproc() + self.do_cmd_output_sub( + "ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(!(objectClass=olcSchemaConfig))'", + r"(olcRootPW\: \s*)\S+", r"\1********") +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1030617-rhevm-treat-vdsmlogs-as-string.patch b/SOURCES/sos-bz1030617-rhevm-treat-vdsmlogs-as-string.patch new file mode 100644 index 0000000..2c60fb9 --- /dev/null +++ b/SOURCES/sos-bz1030617-rhevm-treat-vdsmlogs-as-string.patch @@ -0,0 +1,28 @@ +commit 3d4afc252c9b65f350285d166d625067ee945934 +Author: Bryn M. Reeves +Date: Mon Feb 3 12:26:45 2014 +0000 + + Always treat rhevm vdsmlogs option as string + + The rhevm plugin has a 'vdsmlogs' option to pass in a set of log + files to be collected. When run with '-a' (or with + '-krhevm.vdsmlogs) this evaluates to 'True' (a bool) and causes + an exception when this is passed to add_copy_specs(). + + Always treat the value as a string. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/rhevm.py b/sos/plugins/rhevm.py +index 39b32f4..8068e05 100644 +--- a/sos/plugins/rhevm.py ++++ b/sos/plugins/rhevm.py +@@ -13,7 +13,7 @@ class RhevM(Plugin, RedHatPlugin): + self.add_copy_spec("/etc/rhevm") + self.add_copy_spec("/var/log/rhevm") + if self.get_option("vdsmlogs"): +- self.add_copy_spec(self.get_option("vdsmlogs")) ++ self.add_copy_spec(str(self.get_option("vdsmlogs"))) + + def postproc(self): + """ diff --git a/SOURCES/sos-bz1030824-make-ethernet-detection-more-robust.patch b/SOURCES/sos-bz1030824-make-ethernet-detection-more-robust.patch new file mode 100644 index 0000000..16c14c5 --- /dev/null +++ b/SOURCES/sos-bz1030824-make-ethernet-detection-more-robust.patch @@ -0,0 +1,90 @@ +commit 6fe3c9195b958e3b24a2dbf1768a45a459795f07 +Author: Bryn M. Reeves +Date: Fri Nov 15 13:40:17 2013 +0000 + + Make ethernet interface detection more robust + + The networking module parses the link information in the output + of the 'ip -o addr' command to determine a list of ethernet + interfaces on which to run ethtool. + + An upstream change in the iproute package appears to have + introduced a regression in the output of this command which causes + link information to not be displayed: + + 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000\ link/ether 52:54:00:ce:9d:6d brd ff:ff:ff:ff:ff:ff + 2: eth0 inet 192.168.122.31/24 brd 192.168.122.255 scope global eth0\ valid_lft forever preferred_lft forever + 2: eth0 inet6 fe80::5054:ff:fece:9d6d/64 scope link \ valid_lft forever preferred_lft forever + + vs: + + 2: eth0 inet 192.168.122.31/24 brd 192.168.122.255 scope global eth0\ valid_lft forever preferred_lft forever + 2: eth0 inet6 fe80::5054:ff:fece:9d6d/64 scope link \ valid_lft forever preferred_lft forever + + This breaks detection of ethernet interfaces and all ethtool data + collection. + + This was introduced in the following iproute commit: + + commit af9d406f99853848054162ed7aefbe71dc03e433 + Author: Mike Frysinger + Date: Mon Aug 13 08:09:52 2012 -0700 + + Fix regression with 'ip address show' + + Which appears to fix a different problem (i.e. the change to link + info was unintended). + + Make this more robust by switching the networking module to use + 'ip -o link' instead which explicitly requests the required + information. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py +index 9724a4f..64fb962 100644 +--- a/sos/plugins/networking.py ++++ b/sos/plugins/networking.py +@@ -41,16 +41,16 @@ class Networking(Plugin): + out.append(br_name) + return out + +- def get_interface_name(self,ip_addr_out): +- """Return a dictionary for which key are interface name according to the +- output of ifconifg-a stored in ifconfig_file. ++ def get_eth_interfaces(self,ip_link_out): ++ """Return a dictionary for which keys are ethernet interface ++ names taken from the output of "ip -o link". + """ + out={} +- for line in ip_addr_out[1].splitlines(): ++ for line in ip_link_out[1].splitlines(): + match=re.match('.*link/ether', line) + if match: +- int=match.string.split(':')[1].lstrip() +- out[int]=True ++ iface=match.string.split(':')[1].lstrip() ++ out[iface]=True + return out + + def collect_iptable(self,tablename): +@@ -85,7 +85,6 @@ class Networking(Plugin): + self.add_forbidden_path("/proc/net/rpc/*/flush") + + ip_addr_file=self.get_cmd_output_now("ip -o addr", root_symlink = "ip_addr") +- ip_addr_out=self.call_ext_prog("ip -o addr") + self.add_cmd_output("route -n", root_symlink = "route") + self.collect_iptable("filter") + self.collect_iptable("nat") +@@ -101,8 +100,9 @@ class Networking(Plugin): + self.add_cmd_output("ip mroute show") + self.add_cmd_output("ip maddr show") + self.add_cmd_output("ip neigh show") +- if ip_addr_out: +- for eth in self.get_interface_name(ip_addr_out): ++ ip_link_out=self.call_ext_prog("ip -o link") ++ if ip_link_out: ++ for eth in self.get_eth_interfaces(ip_link_out): + self.add_cmd_output("ethtool "+eth) + self.add_cmd_output("ethtool -i "+eth) + self.add_cmd_output("ethtool -k "+eth) diff --git a/SOURCES/sos-bz1031124-fix-multiple-plugin-opts.patch b/SOURCES/sos-bz1031124-fix-multiple-plugin-opts.patch new file mode 100644 index 0000000..9644c35 --- /dev/null +++ b/SOURCES/sos-bz1031124-fix-multiple-plugin-opts.patch @@ -0,0 +1,35 @@ +commit b98878d0843b8da9c1c963dc855889ec104bb5df +Author: Bryn M. Reeves +Date: Mon Nov 18 13:05:00 2013 +0000 + + Revert change to --plugin-options parser action + + Commit 6ea48cb changed the action for the -k/--plugin-option + command line argument from 'extend' to 'append'. This breaks the + handling of options that are chained with a ',': + + logs.logsize 1,logs.all_logs max size (MiB) to collect per syslog file + logs.all_logs off collect all log files defined in syslog.conf + + vs: + + logs.logsize 1 max size (MiB) to collect per syslog file + logs.all_logs on collect all log files defined in syslog.conf + + Revert to an 'append' action for this switch. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 48bb3af..4ea5f95 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -477,7 +477,7 @@ class SoSOptions(object): + parser.add_option("-o", "--only-plugins", action="extend", + dest="onlyplugins", type="string", + help="enable these plugins only", default = deque()) +- parser.add_option("-k", "--plugin-option", action="append", ++ parser.add_option("-k", "--plugin-option", action="extend", + dest="plugopts", type="string", + help="plugin options in plugname.option=value format (see -l)", + default = deque()) diff --git a/SOURCES/sos-bz1031126-correct-log-and-message-levels.patch b/SOURCES/sos-bz1031126-correct-log-and-message-levels.patch new file mode 100644 index 0000000..fb1ac2f --- /dev/null +++ b/SOURCES/sos-bz1031126-correct-log-and-message-levels.patch @@ -0,0 +1,87 @@ +commit c8ea3f5e17e48c577d8f6dde6ac0b782b72f98d6 +Author: Bryn M. Reeves +Date: Mon Nov 18 12:52:40 2013 +0000 + + Change default console log level to WARNING to match sos-2.2 + + Commit 6ea48cb changed the default log level for console output + from WARNING to ERROR and reclassified several messages. + + This causes plug-in validation messages to be silent at the + default verbosity. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 4ea5f95..595015f 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -669,7 +669,7 @@ class SoSReport(object): + elif self.opts.verbosity > 0: + console.setLevel(logging.INFO) + else: +- console.setLevel(logging.ERROR) ++ console.setLevel(logging.WARNING) + self.soslog.addHandler(console) + + # ui log +commit c2ab28f7fb159f149314a83f2493739f2d2aa88b +Author: Bryn M. Reeves +Date: Mon Nov 18 13:02:19 2013 +0000 + + Reclasify 'error' messages as 'warning' + + Several log messages used the 'error' level when reporting an + event that is not necessarily an error (and does not prevent sos + from continuing). + + Reclassify these to the 'warning' log level instead. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/kernel.py b/sos/plugins/kernel.py +index 1afe9df..f96fe6c 100644 +--- a/sos/plugins/kernel.py ++++ b/sos/plugins/kernel.py +@@ -32,7 +32,7 @@ class Kernel(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + modules = os.listdir(self.sys_module) + self.add_cmd_output("modinfo " + " ".join(modules)) + except OSError: +- self.soslog.error("could not list %s" % self.sys_module) ++ self.soslog.warning("could not list %s" % self.sys_module) + + self.add_cmd_output("dmesg") + self.add_cmd_output("sysctl -a") +diff --git a/sos/plugins/sar.py b/sos/plugins/sar.py +index 570262a..1086208 100644 +--- a/sos/plugins/sar.py ++++ b/sos/plugins/sar.py +@@ -47,7 +47,7 @@ class Sar(Plugin,): + try: + dirList = os.listdir(self.sa_path) + except: +- self.soslog.error("sar: could not list /var/log/sa") ++ self.soslog.warning("sar: could not list /var/log/sa") + return + # find all the sa file that don't have an existing sar file + for fname in dirList: +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 595015f..1c81af9 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -772,13 +772,13 @@ class SoSReport(object): + + for plugin_class in plugin_classes: + if not self.policy.validatePlugin(plugin_class): +- self.soslog.debug(_("plugin %s does not validate, skipping") % plug) ++ self.soslog.warning(_("plugin %s does not validate, skipping") % plug) + if self.opts.verbosity > 0: + self._skip(plugin_class, _("does not validate")) + continue + + if plugin_class.requires_root and not self._is_root: +- self.soslog.debug(_("plugin %s requires root permissions to execute, skipping") % plug) ++ self.soslog.info(_("plugin %s requires root permissions to execute, skipping") % plug) + self._skip(plugin_class, _("requires root")) + continue + diff --git a/SOURCES/sos-bz1031126-fix-verbose-file-logging.patch b/SOURCES/sos-bz1031126-fix-verbose-file-logging.patch new file mode 100644 index 0000000..12100fe --- /dev/null +++ b/SOURCES/sos-bz1031126-fix-verbose-file-logging.patch @@ -0,0 +1,38 @@ +commit 23cdbd97a6bd2e44d87f01d6bf90b66667c4d7be +Author: Bryn M. Reeves +Date: Mon Feb 3 12:09:57 2014 +0000 + + Fix verbose file logging + + Prior versions of sos enable debug logging to the embedded log + file (sos_logs/sos.log) when a single '-v' is given. Restore this + behaviour and ensure that command-not-found messages are reported + at 'info' rather than 'warning' level. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index 681299a..b4768b0 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -482,7 +482,7 @@ class Plugin(object): + self.soslog.warning("command '%s' timed out after %ds" + % (prog, timeout)) + if status == 127: +- self.soslog.warning("could not run '%s': command not found" % prog) ++ self.soslog.info("could not run '%s': command not found" % prog) + return (status, output, runtime) + + def call_ext_prog(self, prog, timeout=300): +diff --git a/sos/sosreport.py b/sos/sosreport.py +index fb3aea7..22e0ab2 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -651,6 +651,7 @@ class SoSReport(object): + flog.setLevel(logging.DEBUG) + elif self.opts.verbosity > 0: + console.setLevel(logging.INFO) ++ flog.setLevel(logging.DEBUG) + else: + console.setLevel(logging.WARNING) + self.soslog.addHandler(console) diff --git a/SOURCES/sos-bz1034865-remove-anaconda-ks-cfg-from-general.patch b/SOURCES/sos-bz1034865-remove-anaconda-ks-cfg-from-general.patch new file mode 100644 index 0000000..4b5c4e1 --- /dev/null +++ b/SOURCES/sos-bz1034865-remove-anaconda-ks-cfg-from-general.patch @@ -0,0 +1,33 @@ +From 8945cfd19c3d06d6cb79774a5d070016482f6976 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Tue, 26 Nov 2013 17:33:51 +0000 +Subject: [PATCH] Do not collect anaconda-ks.cfg in general plug-in + +The anaconda kickstart file is Red Hat specific and should not +be collected in the general plugin. It may also contain plaintext +or encrypted passwords - these are handled properly in the +anaconda plugin itself but are missing from the copy in general. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/general.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/sos/plugins/general.py b/sos/plugins/general.py +index d7059e6..a6964c4 100644 +--- a/sos/plugins/general.py ++++ b/sos/plugins/general.py +@@ -33,8 +33,8 @@ class General(Plugin): + "/etc/hostid", + "/var/lib/dbus/machine-id", + "/etc/exports", +- "/etc/localtime", +- "/root/anaconda-ks.cfg"]) ++ "/etc/localtime" ++ ]) + + self.add_cmd_output("hostname", root_symlink="hostname") + self.add_cmd_output("date", root_symlink="date") +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1034956-log-command-timeouts.patch b/SOURCES/sos-bz1034956-log-command-timeouts.patch new file mode 100644 index 0000000..1790bfc --- /dev/null +++ b/SOURCES/sos-bz1034956-log-command-timeouts.patch @@ -0,0 +1,71 @@ +commit b4c768e38289e2cd85d09a1f465b233ba676b281 +Author: Bryn M. Reeves +Date: Tue Nov 26 18:35:37 2013 +0000 + + Log a warning when external commands time out + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index e25f035..b86351f 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -476,12 +476,21 @@ class Plugin(object): + if filespec not in self.copy_paths: + self.copy_paths.append((filespec, sub)) + ++ def get_command_output(self, prog, timeout=300): ++ (status, output, runtime) = sos_get_command_output(prog, timeout) ++ if status == 124: ++ self.soslog.warning("command %s timed out after %ds" ++ % (prog, timeout)) ++ if status == 127: ++ self.soslog.warning("could not run '%s': command not found" % prog) ++ return (status, output, runtime) ++ + def call_ext_prog(self, prog, timeout=300): + """Execute a command independantly of the output gathering part of + sosreport. + """ + # pylint: disable-msg = W0612 +- return sos_get_command_output(prog, timeout) ++ return self.get_command_output(prog, timeout) + + def check_ext_prog(self, prog): + """Execute a command independently of the output gathering part of +@@ -541,9 +550,8 @@ class Plugin(object): + start_time = time() + + # pylint: disable-msg = W0612 +- status, shout, runtime = sos_get_command_output(exe, timeout=timeout) ++ status, shout, runtime = self.get_command_output(exe, timeout=timeout) + if (status == 127): +- self.soslog.debug("could not run '%s': command not found" % exe) + return None + + if suggest_filename: +commit 4787ffa73970048eacc576081d4e35671d0fc408 +Author: Bryn M. Reeves +Date: Tue Nov 26 18:39:43 2013 +0000 + + Make command quoting in log messages consistent + + The last commit adds a log message for commands that time out but + is inconsistent with other messages that include an external + command string. Quote the command for better readability. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index b86351f..681299a 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -479,7 +479,7 @@ class Plugin(object): + def get_command_output(self, prog, timeout=300): + (status, output, runtime) = sos_get_command_output(prog, timeout) + if status == 124: +- self.soslog.warning("command %s timed out after %ds" ++ self.soslog.warning("command '%s' timed out after %ds" + % (prog, timeout)) + if status == 127: + self.soslog.warning("could not run '%s': command not found" % prog) diff --git a/SOURCES/sos-bz1034970-update-sos-ui-text.patch b/SOURCES/sos-bz1034970-update-sos-ui-text.patch new file mode 100644 index 0000000..c85f620 --- /dev/null +++ b/SOURCES/sos-bz1034970-update-sos-ui-text.patch @@ -0,0 +1,103 @@ +commit 93ddb343c48d7158f34c0e5e8f016b2798a078e8 +Author: Bryn M. Reeves +Date: Fri Jan 24 15:42:53 2014 +0000 + + Tidy up formatting of UI preamble text + + The formatting of the template preamble used a narrow terminal + width since there is no native python method for obtaining the + actual terminal geometry and the common methods for doing this + are non-portable (e.g. Windows specific ioctls or shelling out + to stty). + + This causes the top of the message to scroll off the screen on + a standard 80x25 terminal (e.g. putty or a non-resized + gnome-terminal or xterm window). + + Remove the paragraph indentation and increase the assumed width + from 58 to 72 chars. This causes the message to fill a standard + 80x25 terminal without scrolling. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py +index 47ace5c..c9cfd21 100644 +--- a/sos/policies/__init__.py ++++ b/sos/policies/__init__.py +@@ -115,17 +115,21 @@ class PackageManager(object): + class Policy(object): + + msg = _("""\ +-This command will collect system configuration and diagnostic information \ +-from this %(distro)s system. An archive containing the collected information \ +-will be generated in %(tmpdir)s. ++This command will collect diagnostic and configuration \ ++information from this %(distro)s system and installed \ ++applications. + +-For more information on %(vendor)s visit: ++An archive containing the collected information will be \ ++generated in %(tmpdir)s and may be provided to a %(vendor)s \ ++support representative. + ++Any information provided to %(vendor)s will be treated in \ ++accordance with the published support policies at:\n + %(vendor_url)s + +-The generated archive may contain data considered sensitive and its content \ +-should be reviewed by the originating organization before being passed to \ +-any third party. ++The generated archive may contain data considered sensitive \ ++and its content should be reviewed by the originating \ ++organization before being passed to any third party. + + No changes will be made to system configuration. + %(vendor_text)s +@@ -296,14 +300,14 @@ No changes will be made to system configuration. + the user in non-batch mode. If your policy sets self.distro that + text will be substituted accordingly. You can also override this + method to do something more complicated.""" +- width = 58 ++ width = 72 + _msg = self.msg % {'distro': self.distro, 'vendor': self.vendor, + 'vendor_url': self.vendor_url, + 'vendor_text': self.vendor_text, + 'tmpdir': self.commons['tmpdir']} + _fmt = "" + for line in _msg.splitlines(): +- _fmt = _fmt + fill(" " + line, width, replace_whitespace = False) + '\n' ++ _fmt = _fmt + fill(line, width, replace_whitespace = False) + '\n' + return _fmt + + +diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py +index 9321815..5b3a446 100644 +--- a/sos/policies/redhat.py ++++ b/sos/policies/redhat.py +@@ -91,26 +91,6 @@ class RedHatPolicy(LinuxPolicy): + return self.host_name() + + class RHELPolicy(RedHatPolicy): +- +- msg = _("""\ +-This command will collect system configuration and diagnostic information \ +-from this %(distro)s system. An archive containing the collected information \ +-will be generated in %(tmpdir)s and may be provided to a %(vendor)s support \ +-representative or used for local diagnostic or recording purposes. +- +-Any information provided to %(vendor)s will be treated in strict confidence \ +-in accordance with the published support policies at: +- +- %(vendor_url)s +- +-The generated archive may contain data considered sensitive and its content \ +-should be reviewed by the originating organization before being passed to \ +-any third party. +- +-No changes will be made to system configuration. +-%(vendor_text)s +-""") +- + distro = "Red Hat Enterprise Linux" + vendor = "Red Hat" + vendor_url = "https://access.redhat.com/support/" diff --git a/SOURCES/sos-bz1036752-fix-gluster-volume-name-extraction.patch b/SOURCES/sos-bz1036752-fix-gluster-volume-name-extraction.patch new file mode 100644 index 0000000..288f8e0 --- /dev/null +++ b/SOURCES/sos-bz1036752-fix-gluster-volume-name-extraction.patch @@ -0,0 +1,26 @@ +commit 8447dec1831feb4d93bf8d300880f87765efb1c8 +Author: Bryn M. Reeves +Date: Mon Feb 10 15:07:36 2014 +0000 + + Fix gluster volume name extraction + + The get_volume_names() function in the gluster plugin tries to + extract volume names from the output of the "gluster volume info" + command using a slice range. The range start should be 12 to + account for the "Volume Name:" label at the start of the line. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/gluster.py b/sos/plugins/gluster.py +index 02dbac3..4286b59 100644 +--- a/sos/plugins/gluster.py ++++ b/sos/plugins/gluster.py +@@ -39,7 +39,7 @@ class Gluster(Plugin, RedHatPlugin): + for line in fp.readlines(): + if not line.startswith("Volume Name:"): + continue +- volname = line[14:-1] ++ volname = line[12:-1] + out.append(volname) + fp.close() + return out diff --git a/SOURCES/sos-bz1036752-gluster-include-geo-replication.patch b/SOURCES/sos-bz1036752-gluster-include-geo-replication.patch new file mode 100644 index 0000000..3ae6a15 --- /dev/null +++ b/SOURCES/sos-bz1036752-gluster-include-geo-replication.patch @@ -0,0 +1,70 @@ +From e05bfa7444cacc91972dfbf766f0a9495a7715fb Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Mon, 3 Feb 2014 14:36:46 +0000 +Subject: [PATCH 1/2] Make get_cmd_output_now() behaviour match 2.2 + +The equivalent method in sos-2.2, collectOutputNow() returned an +absolute path to the collected file. Since the archive changes in +3.0 this now returns a path relative to the root of the archive. + +This breaks existing users of the interface that try to open and +process the content of the collected file (e.g. gluster). + +Return a join of the archive path and file path to the caller. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/__init__.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index b4768b0..4a72161 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -572,7 +572,7 @@ class Plugin(object): + time_passed = time() - start_time + self.proflog.debug("output: %-75s time: %f" % (exe, time_passed)) + +- return outfn ++ return os.path.join(self.archive.get_archive_path(), outfn) + + # For adding output + def add_alert(self, alertstring): +-- +1.7.11.7 + + +From febb52040123293b9de01bc86c4f5c485e3bfc77 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Mon, 3 Feb 2014 15:17:55 +0000 +Subject: [PATCH 2/2] Include geo-replication status in gluster plugin + +Add the output of 'gluster volume geo-replication status' for +each discovered gluster volume to the report. + +Signed-off-by: Bryn M. Reeves +--- + sos/plugins/gluster.py | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/sos/plugins/gluster.py b/sos/plugins/gluster.py +index 7c54fa0..02dbac3 100644 +--- a/sos/plugins/gluster.py ++++ b/sos/plugins/gluster.py +@@ -102,6 +102,13 @@ class Gluster(Plugin, RedHatPlugin): + self.add_copy_spec('/tmp/glusterdump.options') + self.add_copy_spec(self.statedump_dir) + ++ volume_file = self.get_cmd_output_now("gluster volume info", ++ "gluster_volume_info") ++ if volume_file: ++ for volname in self.get_volume_names(volume_file): ++ self.add_cmd_output("gluster volume geo-replication %s status" ++ % volname) ++ + self.add_cmd_output("gluster volume status") + # collect this last as some of the other actions create log entries + self.add_copy_spec("/var/log/glusterfs") +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1039036-add-rhsm-debug-to-yum.patch b/SOURCES/sos-bz1039036-add-rhsm-debug-to-yum.patch new file mode 100644 index 0000000..43335a6 --- /dev/null +++ b/SOURCES/sos-bz1039036-add-rhsm-debug-to-yum.patch @@ -0,0 +1,21 @@ +commit eaa0d9442972a38635967d855c57bbfbe6ba7023 +Author: Bryn M. Reeves +Date: Mon Feb 3 13:03:04 2014 +0000 + + Add rhsm-debug collection to yum plugin + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/yum.py b/sos/plugins/yum.py +index 867302c..a9ae4e4 100644 +--- a/sos/plugins/yum.py ++++ b/sos/plugins/yum.py +@@ -48,6 +48,8 @@ class Yum(Plugin, RedHatPlugin): + "/var/log/rhsm/rhsmcertd.log"]) + self.add_cmd_output("subscription-manager list --installed") + self.add_cmd_output("subscription-manager list --consumed") ++ self.add_cmd_output("rhsm-debug system --destination %s" ++ % self.get_cmd_dir()) + + if self.get_option("yumlist"): + # List various information about available packages diff --git a/SOURCES/sos-bz1039036-call-rhsm-debug-with-sos.patch b/SOURCES/sos-bz1039036-call-rhsm-debug-with-sos.patch new file mode 100644 index 0000000..5b221aa --- /dev/null +++ b/SOURCES/sos-bz1039036-call-rhsm-debug-with-sos.patch @@ -0,0 +1,23 @@ +commit 23f9f34afc7f87bf72683909ca947a82b50cad4e +Author: Bryn M. Reeves +Date: Thu Mar 20 18:56:58 2014 +0000 + + Call rhsm-debug with the --sos switch + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/yum.py b/sos/plugins/yum.py +index 81788f1..9953a50 100644 +--- a/sos/plugins/yum.py ++++ b/sos/plugins/yum.py +@@ -48,8 +48,8 @@ class Yum(Plugin, RedHatPlugin): + "/var/log/rhsm/rhsmcertd.log"]) + self.add_cmd_output("subscription-manager list --installed") + self.add_cmd_output("subscription-manager list --consumed") +- self.add_cmd_output("rhsm-debug system --no-archive --destination %s" +- % self.get_cmd_dir()) ++ self.add_cmd_output("rhsm-debug system --sos --no-archive --destination %s" ++ % self.get_cmd_dir()) + + if self.get_option("yumlist"): + # List various information about available packages diff --git a/SOURCES/sos-bz1039036-pass-no-archive-to-rhsm-debug.patch b/SOURCES/sos-bz1039036-pass-no-archive-to-rhsm-debug.patch new file mode 100644 index 0000000..363d3f8 --- /dev/null +++ b/SOURCES/sos-bz1039036-pass-no-archive-to-rhsm-debug.patch @@ -0,0 +1,26 @@ +commit d5cbe4470b7bd6019b20e8c9d1de478fac622aad +Author: Bryn M. Reeves +Date: Tue Feb 4 15:43:56 2014 +0000 + + Pass --no-archive to rhsm-debug script + + Versions of subscription-manager since 1.10.11-2.el7 support the + --no-archive option to disable creation of a zip archive. Pass + this to the script to have the output stored in a directory in + the archive. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/yum.py b/sos/plugins/yum.py +index a9ae4e4..81788f1 100644 +--- a/sos/plugins/yum.py ++++ b/sos/plugins/yum.py +@@ -48,7 +48,7 @@ class Yum(Plugin, RedHatPlugin): + "/var/log/rhsm/rhsmcertd.log"]) + self.add_cmd_output("subscription-manager list --installed") + self.add_cmd_output("subscription-manager list --consumed") +- self.add_cmd_output("rhsm-debug system --destination %s" ++ self.add_cmd_output("rhsm-debug system --no-archive --destination %s" + % self.get_cmd_dir()) + + if self.get_option("yumlist"): diff --git a/SOURCES/sos-bz1051009-fix-fd-leaks-on-popen.patch b/SOURCES/sos-bz1051009-fix-fd-leaks-on-popen.patch new file mode 100644 index 0000000..232a181 --- /dev/null +++ b/SOURCES/sos-bz1051009-fix-fd-leaks-on-popen.patch @@ -0,0 +1,74 @@ +commit 4f7231a897fb65aaf6ec7f079784ff9d3da44266 +Author: Bryn M. Reeves +Date: Tue Feb 4 11:37:15 2014 +0000 + + Ensure unused fds are closed when calling subprocesses via Popen + + When sos communicates with a child process using Popen all IO + takes place on stdin/stdout/stderr (or a subset). No other open + file descriptors should be inherited by the child. + + Make all calls to Popen set close_fds=True. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/archive.py b/sos/archive.py +index 28bf197..67270db 100644 +--- a/sos/archive.py ++++ b/sos/archive.py +@@ -250,8 +250,12 @@ class TarFileArchive(FileCacheArchive): + if cmd != "gzip": + cmd = "%s -1" % cmd + try: +- command = shlex.split("%s %s" % (cmd,self.name())) +- p = Popen(command, stdout=PIPE, stderr=PIPE, bufsize=-1) ++ command = shlex.split("%s %s" % (cmd, self.name())) ++ p = Popen(command, ++ stdout=PIPE, ++ stderr=PIPE, ++ bufsize=-1, ++ close_fds=True) + stdout, stderr = p.communicate() + if stdout: + log.info(stdout) +diff --git a/sos/plugins/emc.py b/sos/plugins/emc.py +index 89d0734..f73bccd 100644 +--- a/sos/plugins/emc.py ++++ b/sos/plugins/emc.py +@@ -196,7 +196,8 @@ class Emc(Plugin, RedHatPlugin): + while CLARiiON_IP_loop == "stay_in": + ans = raw_input("CLARiiON SP IP Address or [Enter] to exit: ") + ## Check to make sure the CLARiiON SP IP address provided is valid +- p = Popen("navicli -h %s getsptime" % (ans,), shell=True, stdout=PIPE, stderr=PIPE) ++ p = Popen("navicli -h %s getsptime" % (ans,), ++ shell=True, stdout=PIPE, stderr=PIPE, close_fds=True) + out, err = p.communicate() + if p.returncode == 0: + CLARiiON_IP_address_list.append(ans) +diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py +index 5b3a446..4e5b363 100644 +--- a/sos/policies/redhat.py ++++ b/sos/policies/redhat.py +@@ -68,7 +68,8 @@ class RedHatPolicy(LinuxPolicy): + shell=True, + stdout=PIPE, + stderr=PIPE, +- bufsize=-1) ++ bufsize=-1, ++ close_fds=True) + out, err = p.communicate() + if err: + return ret +diff --git a/sos/utilities.py b/sos/utilities.py +index fcc78c5..f1728fd 100644 +--- a/sos/utilities.py ++++ b/sos/utilities.py +@@ -159,7 +159,7 @@ def sos_get_command_output(command, timeout=300): + + p = Popen(command, shell=True, + stdout=PIPE, stderr=STDOUT, +- bufsize=-1, env = cmd_env) ++ bufsize=-1, env = cmd_env, close_fds = True) + stdout, stderr = p.communicate() + return (p.returncode, stdout, 0) + else: diff --git a/SOURCES/sos-bz1059760-add-distupgrade-plugin.patch b/SOURCES/sos-bz1059760-add-distupgrade-plugin.patch new file mode 100644 index 0000000..f65a14c --- /dev/null +++ b/SOURCES/sos-bz1059760-add-distupgrade-plugin.patch @@ -0,0 +1,59 @@ +commit 19b479bb0686ff1079300f417505503f8ba8f3d5 +Author: Bryn M. Reeves +Date: Mon Feb 10 15:27:24 2014 +0000 + + Add distupgrade plugin + + Add a new plugin to collect data relating to completed or + attempted distribution upgrades. Currently supports the Red Hat + set of tools and files but other distributions can supply their + own filelists or override setup() to perform other distribution + specific actions. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/distupgrade.py b/sos/plugins/distupgrade.py +new file mode 100644 +index 0000000..b45d099 +--- /dev/null ++++ b/sos/plugins/distupgrade.py +@@ -0,0 +1,39 @@ ++## Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves ++ ++### This program is free software; you can redistribute it and/or modify ++## it under the terms of the GNU General Public License as published by ++## the Free Software Foundation; either version 2 of the License, or ++## (at your option) any later version. ++ ++## This program is distributed in the hope that it will be useful, ++## but WITHOUT ANY WARRANTY; without even the implied warranty of ++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++## GNU General Public License for more details. ++ ++## You should have received a copy of the GNU General Public License ++## along with this program; if not, write to the Free Software ++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++import os ++from sos.plugins import Plugin, RedHatPlugin ++ ++class DistUpgrade(Plugin): ++ """ Distribution upgrade data """ ++ ++ plugin_name = "distupgrade" ++ ++ files = None ++ ++ def setup(self): ++ self.add_copy_specs(list(self.files)) ++ ++class RedHatDistUpgrade(DistUpgrade, RedHatPlugin): ++ ++ files = ( ++ "/var/log/upgrade.log", ++ "/var/log/redhat_update_tool.log", ++ "/root/preupgrade/all-xccdf*", ++ "/root/preupgrade/kickstart" ++ ) ++ ++ diff --git a/SOURCES/sos-bz1067769-fix-anacron-checks.patch b/SOURCES/sos-bz1067769-fix-anacron-checks.patch new file mode 100644 index 0000000..f76b94d --- /dev/null +++ b/SOURCES/sos-bz1067769-fix-anacron-checks.patch @@ -0,0 +1,28 @@ +commit 4b20ae8823032918df1f1aee1c2b649d8c316f35 +Author: Bryn M. Reeves +Date: Mon Mar 3 13:56:23 2014 +0000 + + Replace package check with file check in anacron + + The anacron facility may be provided by packages named 'anacron', + 'chronie-anacron' etc. They all use a common /etc/anacrontab file + so check for this instead. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/anacron.py b/sos/plugins/anacron.py +index 04b0dcb..b337c18 100644 +--- a/sos/plugins/anacron.py ++++ b/sos/plugins/anacron.py +@@ -20,7 +20,9 @@ class Anacron(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + + plugin_name = 'anacron' + +- packages = ('anacron',) ++ # anacron may be provided by anacron, cronie-anacron etc. ++ # just look for the configuration file which is common ++ files = ('/etc/anacrontab',) + + def setup(self): +- self.add_copy_spec("/etc/anacrontab") ++ self.add_copy_specs(list(self.files)) diff --git a/SOURCES/sos-bz916705-remove-rhel_version-from-yum-plugin.patch b/SOURCES/sos-bz916705-remove-rhel_version-from-yum-plugin.patch new file mode 100644 index 0000000..83595c2 --- /dev/null +++ b/SOURCES/sos-bz916705-remove-rhel_version-from-yum-plugin.patch @@ -0,0 +1,21 @@ +commit ce04c7d20ccaec04d79d625446960195229a8953 +Author: Bryn M. Reeves +Date: Fri Jan 24 15:24:28 2014 +0000 + + Remove obsolete rhel_version() usage from yum plugin + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/yum.py b/sos/plugins/yum.py +index 5abf06f..867302c 100644 +--- a/sos/plugins/yum.py ++++ b/sos/plugins/yum.py +@@ -26,8 +26,6 @@ class Yum(Plugin, RedHatPlugin): + ("yumdebug", "gather yum debugging data", "slow", False)] + + def setup(self): +- rhelver = self.policy().rhel_version() +- + # Pull all yum related information + self.add_copy_specs([ + "/etc/yum", diff --git a/SPECS/sos.spec b/SPECS/sos.spec index 112f944..e61090f 100644 --- a/SPECS/sos.spec +++ b/SPECS/sos.spec @@ -3,7 +3,7 @@ Summary: A set of tools to gather troubleshooting information from a system Name: sos Version: 3.0 -Release: 13%{?dist} +Release: 23%{?dist} Group: Applications/System Source0: https://people.redhat.com/breeves/sos/releases/sos-3.0.tar.gz License: GPLv2+ @@ -49,6 +49,30 @@ Patch28: sos-bz1028125-fix-traceback-when-sar-module.patch Patch29: sos-bz829297-fix-typo-in-yum-add_forbidden_paths.patch Patch30: sos-bz1028150-add-krb5-plugin-and-klist.patch Patch31: sos-bz1015599-fix-dash-dash-build-regressions.patch +Patch32: sos-bz1030042-remove-logs-debug-statements.patch +Patch33: sos-bz1030824-make-ethernet-detection-more-robust.patch +Patch34: sos-bz1031124-fix-multiple-plugin-opts.patch +Patch35: sos-bz1031126-correct-log-and-message-levels.patch +Patch36: sos-bz1034956-log-command-timeouts.patch +Patch37: sos-bz1028484-remove-upload-option.patch +Patch38: sos-bz1034970-update-sos-ui-text.patch +Patch39: sos-bz1028121-include-openhpi-config.patch +Patch40: sos-bz1030553-fix-cluster-crm_report.patch +Patch41: sos-bz1030602-fix-ldap-postproc.patch +Patch42: sos-bz1034865-remove-anaconda-ks-cfg-from-general.patch +Patch43: sos-bz1030553-fix-cluster-get_option-use.patch +Patch44: sos-bz1031126-fix-verbose-file-logging.patch +Patch45: sos-bz1030617-rhevm-treat-vdsmlogs-as-string.patch +Patch46: sos-bz1039036-add-rhsm-debug-to-yum.patch +Patch47: sos-bz1036752-gluster-include-geo-replication.patch +Patch48: sos-bz1039036-pass-no-archive-to-rhsm-debug.patch +Patch49: sos-bz1051009-fix-fd-leaks-on-popen.patch +Patch50: sos-bz1036752-fix-gluster-volume-name-extraction.patch +Patch51: sos-bz1059760-add-distupgrade-plugin.patch +Patch52: sos-bz1030553-fix-command-output-substitution-exception.patch +Patch53: sos-bz916705-remove-rhel_version-from-yum-plugin.patch +Patch54: sos-bz1067769-fix-anacron-checks.patch +Patch55: sos-bz1039036-call-rhsm-debug-with-sos.patch %description Sos is a set of tools that gathers information about system @@ -90,6 +114,30 @@ support technicians and developers. %patch29 -p1 %patch30 -p1 %patch31 -p1 +%patch32 -p1 +%patch33 -p1 +%patch34 -p1 +%patch35 -p1 +%patch36 -p1 +%patch37 -p1 +%patch38 -p1 +%patch39 -p1 +%patch40 -p1 +%patch41 -p1 +%patch42 -p1 +%patch43 -p1 +%patch44 -p1 +%patch45 -p1 +%patch46 -p1 +%patch47 -p1 +%patch48 -p1 +%patch49 -p1 +%patch50 -p1 +%patch51 -p1 +%patch52 -p1 +%patch53 -p1 +%patch54 -p1 +%patch55 -p1 %build make @@ -113,7 +161,76 @@ rm -rf ${RPM_BUILD_ROOT} %config(noreplace) %{_sysconfdir}/sos.conf %changelog -* Thu Nov 14 2013 Bryn M. Reeves = 2.0-13 +* Thu Mar 20 2014 Bryn M. Reeves = 3.0-23 +- Call rhsm-debug with the --sos switch + Resolves: bz1039036 + +* Mon Mar 03 2014 Bryn M. Reeves = 3.0-22 +- Fix package check in anacron plugin + Resolves: bz1067769 + +* Wed Feb 12 2014 Bryn M. Reeves = 3.0-21 +- Remove obsolete rhel_version() usage from yum plugin + Resolves: bz916705 + +* Tue Feb 11 2014 Bryn M. Reeves = 3.0-20 +- Prevent unhandled exception during command output substitution + Resolves: bz1030553 + +* Mon Feb 10 2014 Bryn M. Reeves = 3.0-19 +- Fix generation of volume names in gluster plugin + Resolves: bz1036752 +- Add distupgrade plugin + Resolves: bz1059760 + +* Tue Feb 04 2014 Bryn M. Reeves = 3.0-18 +- Prevent file descriptor leaks when using Popen + Resolves: bz1051009 +- Disable zip archive creation when running rhsm-debug + Resolves: bz1039036 +- Include volume geo-replication status in gluster plugin + Resolves: bz1036752 + +* Mon Feb 03 2014 Bryn M. Reeves = 3.0-17 +- Fix get_option use in cluster plugin + Resolves: bz1030553 +- Fix debug logging to file when given '-v' + Resolves: bz1031126 +- Always treat rhevm plugin's vdsmlogs option as a string + Resolves: bz1030617 +- Run the rhsm-debug script from yum plugin + Resolves: bz1039036 + +* Fri Jan 31 2014 Bryn M. Reeves = 3.0-16 +- Add new plugin to collect OpenHPI configuration + Resolves: bz1028121 +- Fix cluster plugin crm_report support + Resolves: bz1030553 +- Fix file postprocessing in ldap plugin + Resolves: bz1030602 +- Remove collection of anaconda-ks.cfg from general plugin + Resolves: bz1034865 + +* Fri Jan 24 2014 Bryn M. Reeves = 3.0-15 +- Remove debug statements from logs plugin + Resolves: bz1030042 +- Make ethernet interface detection more robust + Resolves: bz1030824 +- Fix specifying multiple plugin options on the command line + Resolves: bz1031124 +- Make log and message levels match previous versions + Resolves: bz1031126 +- Log a warning message when external commands time out + Resolves: bz1034956 +- Remove --upload command line option + Resolves: bz1028484 +- Update sos UI text to match upstream + Resolves: bz1034970 + +* Fri Dec 27 2013 Daniel Mach = 3.0-14 +- Mass rebuild 2013-12-27 + +* Thu Nov 14 2013 Bryn M. Reeves = 3.0-13 - Fix regressions introduced with --build option Resolves: bz1015599