diff --git a/.sos.metadata b/.sos.metadata new file mode 100644 index 0000000..3604b33 --- /dev/null +++ b/.sos.metadata @@ -0,0 +1 @@ +03814468bf9da81897f2157ac3e7013019d73169 SOURCES/sos-3.0.tar.gz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/sos-bz1001599-add-file-size-restriction-to-sar.patch b/SOURCES/sos-bz1001599-add-file-size-restriction-to-sar.patch new file mode 100644 index 0000000..3ded6ea --- /dev/null +++ b/SOURCES/sos-bz1001599-add-file-size-restriction-to-sar.patch @@ -0,0 +1,84 @@ +commit 3aa158a35a4e7fe4d370c254c320455081e3b1cb +Author: Bryn M. Reeves +Date: Tue Oct 29 14:43:02 2013 +0000 + + Move sar data colletion to sar plug-in + + Historically the general plug-in collected the content of the + /var/log/sa directory while a separate sar plug-in handles the text + formatted summary files. + + This makes little sense and adds to the bloat in the "general" + module; move the collection to the sar plug-in itself. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/general.py b/sos/plugins/general.py +index fbf3991..d7059e6 100644 +--- a/sos/plugins/general.py ++++ b/sos/plugins/general.py +@@ -28,7 +28,6 @@ class General(Plugin): + "/etc/sos.conf", + "/etc/sysconfig", + "/proc/stat", +- "/var/log/sa", + "/var/log/pm/suspend.log", + "/var/log/up2date", + "/etc/hostid", +diff --git a/sos/plugins/sar.py b/sos/plugins/sar.py +index c09055c..6c09323 100644 +--- a/sos/plugins/sar.py ++++ b/sos/plugins/sar.py +@@ -33,6 +33,7 @@ class Sar(Plugin,): + return True + + def setup(self): ++ self.add_copy_spec("/var/log/sa") + dirList = os.listdir(self.sa_path) + # find all the sa file that don't have an existing sar file + for fname in dirList: +commit d51a2b5e3c07ddc986c41e1494dabc852d224873 +Author: Bryn M. Reeves +Date: Tue Oct 29 14:53:53 2013 +0000 + + Limit default sar data collection + + By default the general module will scoop up all files under the + /var/log/sa directory. With some configurations this path could + contain many GB of data. + + Use add_copy_spec_limit() by default for sar data and add a new + option sar.all_sar=False to allow the user to override this. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/sar.py b/sos/plugins/sar.py +index 6c09323..4f89b53 100644 +--- a/sos/plugins/sar.py ++++ b/sos/plugins/sar.py +@@ -23,6 +23,10 @@ class Sar(Plugin,): + + packages = ('sysstat',) + sa_path = '/var/log/sa' ++ option_list = [("all_sar", "gather all system activity records", "", False)] ++ ++ # size-limit SAR data collected by default (MB) ++ sa_size = 20 + + def check_enabled(self): + # check to see if we are force-enabled with no sar installation +@@ -33,7 +37,13 @@ class Sar(Plugin,): + return True + + def setup(self): +- self.add_copy_spec("/var/log/sa") ++ if self.get_option("all_sar"): ++ self.sa_size = 0 ++ ++ self.add_copy_spec_limit("/var/log/sa/sar[0-9]*", ++ sizelimit = self.sa_size) ++ self.add_copy_spec_limit("/var/log/sa/sa[0-9]*", ++ sizelimit = self.sa_size) + dirList = os.listdir(self.sa_path) + # find all the sa file that don't have an existing sar file + for fname in dirList: diff --git a/SOURCES/sos-bz1001966-include-etc-yaboot-conf-in-boot.patch b/SOURCES/sos-bz1001966-include-etc-yaboot-conf-in-boot.patch new file mode 100644 index 0000000..59fa097 --- /dev/null +++ b/SOURCES/sos-bz1001966-include-etc-yaboot-conf-in-boot.patch @@ -0,0 +1,20 @@ +commit 04f6b8233c52cf852d6f002bc2983e7cfac7d60e +Author: Bryn M. Reeves +Date: Fri Oct 4 13:46:27 2013 +0100 + + Include /etc/yaboot.conf in boot plug-in + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/boot.py b/sos/plugins/boot.py +index 6e62eac..bf50120 100644 +--- a/sos/plugins/boot.py ++++ b/sos/plugins/boot.py +@@ -31,6 +31,7 @@ class Boot(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + "/etc/milo.conf", + "/etc/silo.conf", + "/boot/efi/efi/redhat/elilo.conf", ++ "/etc/yaboot.conf", + "/boot/yaboot.conf" + ]) + self.add_cmd_output("ls -lanR /boot") diff --git a/SOURCES/sos-bz1002943-Do-not-exit-on-interactive-mode-read-exceptions.patch b/SOURCES/sos-bz1002943-Do-not-exit-on-interactive-mode-read-exceptions.patch new file mode 100644 index 0000000..4aa0c26 --- /dev/null +++ b/SOURCES/sos-bz1002943-Do-not-exit-on-interactive-mode-read-exceptions.patch @@ -0,0 +1,33 @@ +From 4e5f11cc49d28bd678b1ec0c9c3a8df3b9ac4380 Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Thu, 3 Oct 2013 17:58:07 +0100 +Subject: [PATCH 2/2] Do not exit on interactive mode read exceptions + +Currently the default policy object will exit without logging any +errors if an exception (e.g. EOF while reading line) is caught +during reads for interactive mode prompts. + +Instead re-set the report name to a sane value (localname) and +attempt to continue. + +Signed-off-by: Bryn M. Reeves +--- + sos/policies/__init__.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py +index 8eff993..752d480 100644 +--- a/sos/policies/__init__.py ++++ b/sos/policies/__init__.py +@@ -455,7 +455,7 @@ class LinuxPolicy(Policy): + self._print() + except: + self._print() +- sys.exit(0) ++ self.report_name = localname + + if len(self.report_name) == 0: + self.report_name = localname +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1002943-No-TTY-should-not-imply-batch-mode.patch b/SOURCES/sos-bz1002943-No-TTY-should-not-imply-batch-mode.patch new file mode 100644 index 0000000..a0a2879 --- /dev/null +++ b/SOURCES/sos-bz1002943-No-TTY-should-not-imply-batch-mode.patch @@ -0,0 +1,54 @@ +From d975e802c6513463cc52efa0cfdfaa2d2de84adf Mon Sep 17 00:00:00 2001 +From: "Bryn M. Reeves" +Date: Thu, 3 Oct 2013 17:57:42 +0100 +Subject: [PATCH 1/2] No TTY should not imply batch mode + +Commit 6ea48cbb introduced an isatty() check on stdin and +automatically sets batch mode if we're not attached to a TTY. + +Although the logic of this seems simple enough the combination of +this and commit 4b46e04 breaks valid uses that have worked since +sos-1.x, e.g.: + +Traceback (most recent call last): + File "/usr/sbin/sosreport", line 23, in + main(sys.argv[1:]) + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1171, in main + sos.execute() + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1133, in execute + self._setup_logging() + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 630, in _setup_logging + self.opts.batch = True + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 324, in batch + self._check_options_initialized() + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 229, in _check_options_initialized + + "from command line") +ValueError: SoSOptions object already initialized from command line + +Given the actual semantics of --batch (do not prompt for or read +user input from stdin) there is no need to enable it if stdin is +a pipe or other non-TTY file descriptor. + +Signed-off-by: Bryn M. Reeves +--- + sos/sosreport.py | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 908cbed..88c6730 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -625,10 +625,6 @@ class SoSReport(object): + pass + + def _setup_logging(self): +- +- if not sys.stdin.isatty(): +- self.opts.batch = True +- + # main soslog + self.soslog = logging.getLogger('sos') + self.soslog.setLevel(logging.DEBUG) +-- +1.7.11.7 + diff --git a/SOURCES/sos-bz1015599-fix-dash-dash-build-regressions.patch b/SOURCES/sos-bz1015599-fix-dash-dash-build-regressions.patch new file mode 100644 index 0000000..b7a7d45 --- /dev/null +++ b/SOURCES/sos-bz1015599-fix-dash-dash-build-regressions.patch @@ -0,0 +1,98 @@ +diff -up sos-3.0/sos/plugins/__init__.py.orig sos-3.0/sos/plugins/__init__.py +diff -up sos-3.0/sos/policies/__init__.py.orig sos-3.0/sos/policies/__init__.py +--- sos-3.0/sos/policies/__init__.py.orig 2013-11-14 15:24:08.058501213 +0000 ++++ sos-3.0/sos/policies/__init__.py 2013-11-14 15:24:37.410610397 +0000 +@@ -252,26 +252,32 @@ No changes will be made to system config + to use""" + return "md5" + +- def display_results(self, final_filename=None): ++ def display_results(self, final_filename=None, build=False): + + # make sure a report exists + if not final_filename: + return False + +- # store checksum into file +- fp = open(final_filename + "." + get_hash_name(), "w") +- checksum = self._create_checksum(final_filename) +- if checksum: +- fp.write(checksum + "\n") +- fp.close() +- + self._print() +- self._print(_("Your sosreport has been generated and saved in:\n %s") % final_filename) ++ ++ if not build: ++ # store checksum into file ++ fp = open(final_filename + "." + get_hash_name(), "w") ++ checksum = self._create_checksum(final_filename) ++ if checksum: ++ fp.write(checksum + "\n") ++ fp.close() ++ ++ self._print(_("Your sosreport has been generated and saved in:\n %s") % final_filename) ++ else: ++ checksum = None ++ self._print(_("sosreport build tree is located at : %s" % final_filename)) ++ + self._print() + if checksum: + self._print(_("The checksum is: ") + checksum) + self._print() +- self._print(_("Please send this file to your support representative.")) ++ self._print(_("Please send this file to your support representative.")) + self._print() + + def upload_results(self, final_filename): +diff -up sos-3.0/sos/sosreport.py.orig sos-3.0/sos/sosreport.py +--- sos-3.0/sos/sosreport.py.orig 2013-11-14 15:23:59.718470188 +0000 ++++ sos-3.0/sos/sosreport.py 2013-11-14 15:26:54.935121843 +0000 +@@ -204,6 +204,7 @@ class SoSOptions(object): + _usealloptions = False + _upload = False + _batch = False ++ _build = False + _verbosity = 0 + _quiet = False + _debug = False +@@ -1111,11 +1112,12 @@ class SoSReport(object): + raise + + def final_work(self): +- ++ # this must come before archive creation to ensure that log ++ # files are closed and cleaned up at exit. ++ self._finish_logging() + # package up the results for the support organization + if not self.opts.build: +- self.ui_log.info(_("Creating compressed archive...")) +- ++ print _("Creating compressed archive...") + # compression could fail for a number of reasons + try: + final_filename = self.archive.finalize(self.opts.compression_type) +@@ -1125,17 +1127,14 @@ class SoSReport(object): + else: + return False + +- # automated submission will go here +- if not self.opts.upload: +- self.policy.display_results(final_filename) +- else: +- self.policy.upload_results(final_filename) +- + else: +- self.ui_log.info(_("\n sosreport build tree is located at : %s\n" +- % self.archive.get_archive_path())) ++ final_filename = self.archive.get_archive_path() + +- self._finish_logging() ++ # 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.tempfile_util.clean() + diff --git a/SOURCES/sos-bz1015599-restore-build-command-line-option.patch b/SOURCES/sos-bz1015599-restore-build-command-line-option.patch new file mode 100644 index 0000000..06ec542 --- /dev/null +++ b/SOURCES/sos-bz1015599-restore-build-command-line-option.patch @@ -0,0 +1,187 @@ +commit b65606177be6210f3f0501e5689cdbb107e0f2f7 +Author: Bryn M. Reeves +Date: Tue Nov 5 16:07:23 2013 +0000 + + Restore --build command line option + + Releases of sos prior to 3.0 included the '--build' option to + disable creation of a compressed archive and to leave the + temporary build tree in place. This was removed with the + reorganisation of the archive classes to support in-line + archiving. Since all supported policies are now using an archive + that derives from FileCacheArchive (commit 0178d5f) the option + can be re-introduced. + + Archive classes that do not accumulate files in a temporary + directory will return the path to the in-progress archive file. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/archive.py b/sos/archive.py +index 4291660..28bf197 100644 +--- a/sos/archive.py ++++ b/sos/archive.py +@@ -65,6 +65,15 @@ class Archive(object): + to be included in the generated archive.""" + raise NotImplementedError + ++ def get_archive_path(self): ++ """Return a string representing the path to the temporary ++ archive. For archive classes that implement in-line handling ++ this will be the archive file itself. Archives that use a ++ directory based cache prior to packaging should return the ++ path to the temporary directory where the report content is ++ located""" ++ pass ++ + def cleanup(self): + """Clean up any temporary resources used by an Archive class.""" + pass +@@ -81,7 +90,7 @@ class FileCacheArchive(Archive): + + _tmp_dir = "" + _archive_root = "" +- _archive_path = "" ++ _archive_name = "" + + def __init__(self, name, tmpdir): + self._name = name +@@ -146,6 +155,9 @@ class FileCacheArchive(Archive): + def get_tmp_dir(self): + return self._archive_root + ++ def get_archive_path(self): ++ return self._archive_root ++ + def makedirs(self, path, mode=0700): + self._makedirs(self.dest_path(path)) + self.log.debug("created directory at %s in FileCacheArchive %s" +@@ -162,8 +174,8 @@ class FileCacheArchive(Archive): + self.log.debug("finalizing archive %s" % self._archive_root) + self._build_archive() + self.cleanup() +- self.log.debug("built archive at %s (size=%d)" % (self._archive_path, +- os.stat(self._archive_path).st_size)) ++ self.log.debug("built archive at %s (size=%d)" % (self._archive_name, ++ os.stat(self._archive_name).st_size)) + return self._compress() + + class TarFileArchive(FileCacheArchive): +@@ -174,7 +186,7 @@ class TarFileArchive(FileCacheArchive): + def __init__(self, name, tmpdir): + super(TarFileArchive, self).__init__(name, tmpdir) + self._suffix = "tar" +- self._archive_path = os.path.join(tmpdir, self.name()) ++ self._archive_name = os.path.join(tmpdir, self.name()) + + def set_tarinfo_from_stat(self, tar_info, fstat, mode=None): + tar_info.mtime = fstat.st_mtime +@@ -218,7 +230,7 @@ class TarFileArchive(FileCacheArchive): + old_pwd = os.getcwd() + old_umask = os.umask(0077) + os.chdir(self._tmp_dir) +- tar = tarfile.open(self._archive_path, mode="w") ++ tar = tarfile.open(self._archive_name, mode="w") + tar.add(os.path.split(self._name)[1], filter=self.copy_permissions_filter) + tar.close() + os.umask(old_umask) +diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py +index 983842d..6de93fb 100644 +--- a/sos/policies/__init__.py ++++ b/sos/policies/__init__.py +@@ -205,12 +205,6 @@ No changes will be made to system configuration. + """ + pass + +- def package_results(self, package_name): +- """ +- This function is called prior to packaging. +- """ +- pass +- + def post_work(self): + """ + This function is called after the sosreport has been generated. +@@ -476,5 +470,3 @@ class LinuxPolicy(Policy): + + return + +- def package_results(self, archive_filename): +- self._print(_("Creating compressed archive...")) +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 49e9d92..42be3ee 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -327,6 +327,19 @@ class SoSOptions(object): + self._batch = value + + @property ++ def build(self): ++ if self._options != None: ++ return self._options.build ++ return self._build ++ ++ @build.setter ++ def build(self): ++ self._check_options_initialized() ++ if not isinstance(value, bool): ++ raise TypeError("SoSOptions.build expects a boolean") ++ self._build = value ++ ++ @property + def verbosity(self): + if self._options != None: + return self._options.verbosity +@@ -476,6 +489,9 @@ class SoSOptions(object): + parser.add_option("--batch", action="store_true", + dest="batch", default=False, + help="batch mode - do not prompt interactively") ++ parser.add_option("--build", action="store_true", \ ++ dest="build", default=False, \ ++ help="keep sos tree available and dont package results") + parser.add_option("-v", "--verbose", action="count", + dest="verbosity", + help="increase verbosity") +@@ -1097,24 +1113,29 @@ class SoSReport(object): + def final_work(self): + + # package up the results for the support organization +- self.policy.package_results(self.archive.name()) ++ if not self.opts.build: ++ self.ui_log.info(_("Creating compressed archive...")) + +- self._finish_logging() ++ # compression could fail for a number of reasons ++ try: ++ final_filename = self.archive.finalize(self.opts.compression_type) ++ except: ++ if self.opts.debug: ++ raise ++ else: ++ return False + +- # compression could fail for a number of reasons +- try: +- final_filename = self.archive.finalize(self.opts.compression_type) +- except: +- if self.opts.debug: +- raise ++ # automated submission will go here ++ if not self.opts.upload: ++ self.policy.display_results(final_filename) + else: +- return False ++ self.policy.upload_results(final_filename) + +- # automated submission will go here +- if not self.opts.upload: +- self.policy.display_results(final_filename) + else: +- self.policy.upload_results(final_filename) ++ self.ui_log.info(_("\n sosreport build tree is located at : %s\n" ++ % self.archive.get_archive_path())) ++ ++ self._finish_logging() + + self.tempfile_util.clean() + diff --git a/SOURCES/sos-bz1015606-remove-version-checks-in-gluster.patch b/SOURCES/sos-bz1015606-remove-version-checks-in-gluster.patch new file mode 100644 index 0000000..4a9a58a --- /dev/null +++ b/SOURCES/sos-bz1015606-remove-version-checks-in-gluster.patch @@ -0,0 +1,40 @@ +commit 038609bacd8fc6a21eb50f7722f13baa5884a6bb +Author: Bryn M. Reeves +Date: Tue Oct 29 16:03:03 2013 +0000 + + Remove version checks in gluster plug-in + + Current distributions do not include the legac package versions + that the plug-in was checking for. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/gluster.py b/sos/plugins/gluster.py +index a535d79..7c54fa0 100644 +--- a/sos/plugins/gluster.py ++++ b/sos/plugins/gluster.py +@@ -80,22 +80,8 @@ class Gluster(Plugin, RedHatPlugin): + def setup(self): + self.add_cmd_output("gluster peer status") + +- # check package version handling rename of glusterfs-core -> glusterfs +- pkg = self.policy().pkg_by_name("glusterfs-core"); +- if not pkg: +- pkg = self.policy().pkg_by_name("glusterfs"); +- # need to handle "no package" case for users who enable with -e/-o +- if not pkg: +- return +- +- gluster_major = int((pkg["version"])[:1]) +- gluster_minor = int((pkg["version"])[2:3]) +- if (gluster_major == 3) and (gluster_minor <= 2): +- self.add_copy_spec("/etc/glusterd/") +- self.add_forbidden_path("/etc/glusterd/geo-replication/secret.pem") +- else: +- self.add_copy_spec("/var/lib/glusterd/") +- self.add_forbidden_path("/var/lib/glusterd/geo-replication/secret.pem") ++ self.add_copy_spec("/var/lib/glusterd/") ++ self.add_forbidden_path("/var/lib/glusterd/geo-replication/secret.pem") + + # collect unified file and object storage configuration + self.add_copy_spec("/etc/swift/") diff --git a/SOURCES/sos-bz1019235-remove-useless-os-path-check-for-brctl.patch b/SOURCES/sos-bz1019235-remove-useless-os-path-check-for-brctl.patch new file mode 100644 index 0000000..eb08c01 --- /dev/null +++ b/SOURCES/sos-bz1019235-remove-useless-os-path-check-for-brctl.patch @@ -0,0 +1,37 @@ +commit 923a68777927eaaee3c5fa289053ac3a87d353f9 +Author: Bryn M. Reeves +Date: Tue Oct 15 17:00:09 2013 +0100 + + Remove useless os.path.exists check for brctl executable + + The networking module previously checked that its hard-coded path + for the brctl command existed before collecting output. This was + missed in the conversion to using policy defined PATH search for + external commands in commit e0d132e. + + Similar problems were fixed in commits 8b10cb0, 374da99, 8883155. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py +index 90e1b58..9724a4f 100644 +--- a/sos/plugins/networking.py ++++ b/sos/plugins/networking.py +@@ -111,12 +111,11 @@ class Networking(Plugin): + self.add_cmd_output("ethtool -c "+eth) + self.add_cmd_output("ethtool -g "+eth) + +- if os.path.exists("brctl"): +- brctl_file=self.add_cmd_output("brctl show") +- brctl_out=self.call_ext_prog("brctl show") +- if brctl_out: +- for br_name in self.get_bridge_name(brctl_out): +- self.add_cmd_output("brctl showstp "+br_name) ++ brctl_file=self.add_cmd_output("brctl show") ++ brctl_out=self.call_ext_prog("brctl show") ++ if brctl_out: ++ for br_name in self.get_bridge_name(brctl_out): ++ self.add_cmd_output("brctl showstp "+br_name) + + if self.get_option("traceroute"): + self.add_cmd_output("/bin/traceroute -n %s" % self.trace_host) diff --git a/SOURCES/sos-bz1019338-remove-pipe-communicate-newline-workaround.patch b/SOURCES/sos-bz1019338-remove-pipe-communicate-newline-workaround.patch new file mode 100644 index 0000000..fa76a4e --- /dev/null +++ b/SOURCES/sos-bz1019338-remove-pipe-communicate-newline-workaround.patch @@ -0,0 +1,29 @@ +commit 25bd83cda4ef1a5c89d95282c9f8fdc6cb9181d5 +Author: Bryn M. Reeves +Date: Tue Oct 15 17:26:12 2013 +0100 + + Remove obsolete workaround for newline added by pipe.communicate() + + Older versions of the python runtime would add a newline to output + obtained via pipe.communicate(). Current versions do not leading + to output being stored in reports without a trailing newline + character. + + Remove the workaround to ensure that stored content matches that + obtained via simple shell redirection ("/some/command > file"). + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/utilities.py b/sos/utilities.py +index 4279b12..fcc78c5 100644 +--- a/sos/utilities.py ++++ b/sos/utilities.py +@@ -161,8 +161,6 @@ def sos_get_command_output(command, timeout=300): + stdout=PIPE, stderr=STDOUT, + bufsize=-1, env = cmd_env) + stdout, stderr = p.communicate() +- # hack to delete trailing '\n' added by p.communicate() +- if stdout[-1:] == '\n': stdout = stdout[:-1] + return (p.returncode, stdout, 0) + else: + return (127, "", 0) diff --git a/SOURCES/sos-bz1019356-fix-alloptions.patch b/SOURCES/sos-bz1019356-fix-alloptions.patch new file mode 100644 index 0000000..1f4b963 --- /dev/null +++ b/SOURCES/sos-bz1019356-fix-alloptions.patch @@ -0,0 +1,35 @@ +commit d1bedc1ef48f6abe6f582336e275468a1e3634b9 +Author: Bryn M. Reeves +Date: Wed Oct 30 12:22:03 2013 +0000 + + Fix --alloptions + + During the re-organisation of sosreport.py the code to apply all + boolean options to plug-ins was factored out into its own + function, _set_all_options() however this was never called from + the main execute() method. Fix this to allow the option to work + as previously. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 3fb60c7..1b13826 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -290,7 +290,7 @@ class SoSOptions(object): + @property + def usealloptions(self): + if self._options != None: +- return _options.usealloptions ++ return self._options.usealloptions + return self._usealloptions + + @usealloptions.setter +@@ -1136,6 +1136,7 @@ class SoSReport(object): + self.policy.set_commons(self.get_commons()) + self.print_header() + self.load_plugins() ++ self._set_all_options() + self._set_tunables() + self._check_for_unknown_plugins() + self._set_plugin_options() diff --git a/SOURCES/sos-bz1019516-fix-config-file-regression.patch b/SOURCES/sos-bz1019516-fix-config-file-regression.patch new file mode 100644 index 0000000..1952406 --- /dev/null +++ b/SOURCES/sos-bz1019516-fix-config-file-regression.patch @@ -0,0 +1,51 @@ +commit ef485ea1d610a0679f86b39e39e7955f00b4351d +Author: Bryn M. Reeves +Date: Wed Oct 30 15:05:56 2013 +0000 + + Fix config file regression + + Changes in the organisation of sos in commit 6ea48cb broke the + reading of custom configuration files (either the default + /etc/sos.conf or one specified on the command line using + --config-file): + + Traceback (most recent call last): + File "/usr/sbin/sosreport", line 23, in + main(sys.argv[1:]) + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1167, in main + sos.execute() + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1133, in execute + self._set_tunables() + File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 798, in _set_tunables + if not opt.split('.')[0] in self.disabled: + AttributeError: 'SoSReport' object has no attribute 'disabled' + + The code attempts to reference the obsolete 'disabled' list of + plug-ins (rather than calling self._get_disabled_plugins()) and + failed to initialise the plugopts list to an empty deque. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 1b13826..afe61f2 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -465,7 +465,8 @@ class SoSOptions(object): + help="enable these plugins only", default = deque()) + parser.add_option("-k", "--plugin-option", action="append", + dest="plugopts", type="string", +- help="plugin options in plugname.option=value format (see -l)") ++ help="plugin options in plugname.option=value format (see -l)", ++ default = deque()) + parser.add_option("-a", "--alloptions", action="store_true", + dest="usealloptions", default=False, + help="enable all options for loaded plugins") +@@ -801,7 +802,7 @@ class SoSReport(object): + self.opts.plugopts = deque() + + for opt, val in self.config.items("tunables"): +- if not opt.split('.')[0] in self.disabled: ++ if not opt.split('.')[0] in self._get_disabled_plugins(): + self.opts.plugopts.append(opt + "=" + val) + if self.opts.plugopts: + opts = {} diff --git a/SOURCES/sos-bz1019517-check-for-usable-temporary-directory.patch b/SOURCES/sos-bz1019517-check-for-usable-temporary-directory.patch new file mode 100644 index 0000000..e91e849 --- /dev/null +++ b/SOURCES/sos-bz1019517-check-for-usable-temporary-directory.patch @@ -0,0 +1,29 @@ +commit 0c9eef9d1270b9197a609ac46fdd5837c04a90dd +Author: Bryn M. Reeves +Date: Wed Oct 30 12:02:51 2013 +0000 + + Check for usable temporary directory + + A user may override the sos temporary directory via --tmp-dir to + a non-existent or unwritable location. Check for this before + initialising temporary files and exit with an error message. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 88c6730..3fb60c7 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -534,6 +534,12 @@ class SoSReport(object): + self.policy = sos.policies.load() + self._is_root = self.policy.is_root() + self.tmpdir = self.policy.get_tmp_dir(self.opts.tmp_dir) ++ if not os.path.isdir(self.tmpdir) \ ++ or not os.access(self.tmpdir, os.W_OK): ++ # write directly to stderr as logging is not initialised yet ++ sys.stderr.write("temporary directory %s " % self.tmpdir \ ++ + "does not exist or is not writable\n") ++ self._exit(1) + self.tempfile_util = TempFileUtil(self.tmpdir) + self._set_directories() + diff --git a/SOURCES/sos-bz1019863-rpm-restricted-verify.patch b/SOURCES/sos-bz1019863-rpm-restricted-verify.patch new file mode 100644 index 0000000..daa343c --- /dev/null +++ b/SOURCES/sos-bz1019863-rpm-restricted-verify.patch @@ -0,0 +1,98 @@ +commit 1b3fc3f029ed3ab1dcbfeaaaa8fe1616dbc3744f +Author: Bryn M. Reeves +Date: Tue Jul 30 19:30:13 2013 +0100 + + Add restricted rpm verify + + Add a default call to rpm -V/--verify for a targeted subset of + packages. This greatly reduces the time taken relative to rpm -Va + while still capturing important diagnostic information. + + In future this capability could be made a feature of the + PackageManager class interface and available to all ports/modules. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/rpm.py b/sos/plugins/rpm.py +index 9d44fde..a315018 100644 +--- a/sos/plugins/rpm.py ++++ b/sos/plugins/rpm.py +@@ -23,6 +23,8 @@ class Rpm(Plugin, RedHatPlugin): + option_list = [("rpmq", "queries for package information via rpm -q", "fast", True), + ("rpmva", "runs a verify on all packages", "slow", False)] + ++ verify_list = [ 'kernel', 'glibc', 'pam_.*' ] ++ + def setup(self): + self.add_copy_spec("/var/log/rpmpkgs") + +@@ -36,3 +38,9 @@ class Rpm(Plugin, RedHatPlugin): + + if self.get_option("rpmva"): + self.add_cmd_output("rpm -Va", root_symlink = "rpm-Va", timeout = 3600) ++ else: ++ pkgs_by_regex = self.policy().package_manager.all_pkgs_by_name_regex ++ verify_list = map(pkgs_by_regex, self.verify_list) ++ for pkg_list in verify_list: ++ for pkg in pkg_list: ++ self.add_cmd_output("rpm -V %s" % pkg) +commit 1a73d5932a3f8153a9d1440c931823720e7e6245 +Author: Bryn M. Reeves +Date: Tue Aug 13 21:54:27 2013 +0100 + + Add new patterns to the RPM plug-in verify list + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/rpm.py b/sos/plugins/rpm.py +index a315018..71f36a0 100644 +--- a/sos/plugins/rpm.py ++++ b/sos/plugins/rpm.py +@@ -23,7 +23,13 @@ class Rpm(Plugin, RedHatPlugin): + option_list = [("rpmq", "queries for package information via rpm -q", "fast", True), + ("rpmva", "runs a verify on all packages", "slow", False)] + +- verify_list = [ 'kernel', 'glibc', 'pam_.*' ] ++ verify_list = [ ++ 'kernel', 'glibc', 'initscripts', ++ 'pam_.*', ++ 'java.*', 'perl.*', ++ 'rpm', 'yum', ++ 'spacewalk.*', ++ ] + + def setup(self): + self.add_copy_spec("/var/log/rpmpkgs") +commit ffcde57daa6f6cbbfd9cb588ab64eb485d07d9ca +Author: Bryn M. Reeves +Date: Wed Oct 16 19:12:58 2013 +0100 + + Verify fewer packages in rpm plug-in + + The current default set of packages to verify includes debuginfo + and devel subpackages. Filter these out to reduce the time spent + running rpm -V. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/rpm.py b/sos/plugins/rpm.py +index 71f36a0..55c8019 100644 +--- a/sos/plugins/rpm.py ++++ b/sos/plugins/rpm.py +@@ -24,7 +24,7 @@ class Rpm(Plugin, RedHatPlugin): + ("rpmva", "runs a verify on all packages", "slow", False)] + + verify_list = [ +- 'kernel', 'glibc', 'initscripts', ++ 'kernel$', 'glibc', 'initscripts', + 'pam_.*', + 'java.*', 'perl.*', + 'rpm', 'yum', +@@ -49,4 +49,7 @@ class Rpm(Plugin, RedHatPlugin): + verify_list = map(pkgs_by_regex, self.verify_list) + for pkg_list in verify_list: + for pkg in pkg_list: ++ if 'debuginfo' in pkg \ ++ or pkg.endswith('-debuginfo-common'): ++ continue + self.add_cmd_output("rpm -V %s" % pkg) diff --git a/SOURCES/sos-bz1025236-add-powerpc-plugin.patch b/SOURCES/sos-bz1025236-add-powerpc-plugin.patch new file mode 100644 index 0000000..8b68bc6 --- /dev/null +++ b/SOURCES/sos-bz1025236-add-powerpc-plugin.patch @@ -0,0 +1,97 @@ +commit dac86b921fafecc81fbd492af177d9260cddfe20 +Author: Bryn M. Reeves +Date: Wed Oct 30 13:57:22 2013 +0000 + + This patch defines a new PowerPC Plugin to collect generic Power logs. + Based on further platform checks,IBM Power System specific logs and + commands will be collected. This would help IBM Power system users to + collect system data in one shot by running sosreport. + + Signed-off-by: Bharani C.V. + Signed-off-by: Vasant Hegde + Signed-off-by: Bryn M. Reeves + + --- + sos/plugins/powerpc.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 73 insertions(+) + create mode 100644 sos/plugins/powerpc.py + +diff --git a/sos/plugins/powerpc.py b/sos/plugins/powerpc.py +new file mode 100644 +index 0000000..974baa1 +--- /dev/null ++++ b/sos/plugins/powerpc.py +@@ -0,0 +1,73 @@ ++### 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. ++ ++## This plugin enables collection of logs for Power systems and more ++## specific logs for Pseries, PowerNV platforms. ++ ++import os ++from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin ++ ++class PowerPC(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): ++ """IBM Power System related information ++ """ ++ ++ plugin_name = 'powerpc' ++ ++ def check_enabled(self): ++ return (self.policy().get_arch() == "ppc64") ++ ++ def setup(self): ++ try: ++ with open('/proc/cpuinfo', 'r') as fp: ++ contents = fp.read() ++ ispSeries = "pSeries" in contents ++ isPowerNV = "PowerNV" in contents ++ except: ++ ispSeries = False ++ isPowerNV = False ++ ++ if ispSeries or isPowerNV: ++ self.add_copy_spec("/proc/device-tree/") ++ self.add_copy_spec("/proc/loadavg") ++ self.add_copy_spec("/proc/locks") ++ self.add_copy_spec("/proc/misc") ++ self.add_copy_spec("/proc/swaps") ++ self.add_copy_spec("/proc/version") ++ self.add_copy_spec("/dev/nvram") ++ self.add_copy_spec("/var/log/platform") ++ self.add_cmd_output("ppc64_cpu --smt") ++ self.add_cmd_output("ppc64_cpu --cores-present") ++ self.add_cmd_output("ppc64_cpu --cores-on") ++ self.add_cmd_output("ppc64_cpu --run-mode") ++ self.add_cmd_output("ppc64_cpu --frequency") ++ self.add_cmd_output("ppc64_cpu --dscr") ++ ++ if ispSeries: ++ self.add_copy_spec("/proc/ppc64/lparcfg") ++ self.add_copy_spec("/proc/ppc64/eeh") ++ self.add_copy_spec("/proc/ppc64/systemcfg") ++ self.add_cmd_output("lscfg -vp") ++ self.add_cmd_output("lsmcode -A") ++ self.add_cmd_output("lsvpd --debug") ++ self.add_cmd_output("lsvio -des") ++ self.add_cmd_output("servicelog --dump") ++ self.add_cmd_output("servicelog_notify --list") ++ self.add_cmd_output("usysattn") ++ self.add_cmd_output("usysident") ++ self.add_cmd_output("serv_config -l") ++ self.add_cmd_output("bootlist -m both -r") ++ self.add_cmd_output("lparstat -i") ++ ++ if isPowerNV: ++ self.add_copy_spec("/proc/ppc64/") diff --git a/SOURCES/sos-bz1026829-collect-var-log-squid.patch b/SOURCES/sos-bz1026829-collect-var-log-squid.patch new file mode 100644 index 0000000..74c155b --- /dev/null +++ b/SOURCES/sos-bz1026829-collect-var-log-squid.patch @@ -0,0 +1,20 @@ +commit 8d45d18afb87dbe7b1d864fabd36c58fad905f82 +Author: Bryn M. Reeves +Date: Mon Aug 12 20:31:51 2013 +0100 + + Collect /var/log/squid in squid plug-in + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/squid.py b/sos/plugins/squid.py +index 254a1be..4f6310f 100644 +--- a/sos/plugins/squid.py ++++ b/sos/plugins/squid.py +@@ -25,5 +25,6 @@ class Squid(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + packages = ('squid',) + + def setup(self): +- self.add_copy_spec_limit("/etc/squid/squid.conf", ++ self.add_copy_spec("/etc/squid/squid.conf") ++ self.add_copy_spec_limit("/var/log/squid", + sizelimit=self.get_option('logsize')) diff --git a/SOURCES/sos-bz1026869-collect-proc-self-mountstats.patch b/SOURCES/sos-bz1026869-collect-proc-self-mountstats.patch new file mode 100644 index 0000000..2098e2c --- /dev/null +++ b/SOURCES/sos-bz1026869-collect-proc-self-mountstats.patch @@ -0,0 +1,21 @@ +commit 78909be8385a74e807b705821296a94cb09cb8ca +Author: Bryn M. Reeves +Date: Mon Aug 12 18:33:49 2013 +0100 + + Collect /proc/self/mountstats and /proc/self/mountinfo + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/filesys.py b/sos/plugins/filesys.py +index 0ca3166..b8d6bab 100644 +--- a/sos/plugins/filesys.py ++++ b/sos/plugins/filesys.py +@@ -31,6 +31,8 @@ class Filesys(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + "/proc/filesystems", + "/etc/fstab", + "/proc/self/mounts", ++ "/proc/self/mountinfo", ++ "/proc/self/mountstats", + "/proc/mounts" + ]) + self.add_cmd_output("mount -l", root_symlink = "mount") diff --git a/SOURCES/sos-bz1026906-nis-add-domainname-output.patch b/SOURCES/sos-bz1026906-nis-add-domainname-output.patch new file mode 100644 index 0000000..82c5301 --- /dev/null +++ b/SOURCES/sos-bz1026906-nis-add-domainname-output.patch @@ -0,0 +1,17 @@ +commit 1aa497258ebb8c85eed9d38ba19173c054b77043 +Author: Bryn M. Reeves +Date: Tue Nov 5 16:16:33 2013 +0000 + + Add domainname output to the NIS plug-in + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/nis.py b/sos/plugins/nis.py +index 5439b8f..baa71e8 100644 +--- a/sos/plugins/nis.py ++++ b/sos/plugins/nis.py +@@ -29,3 +29,4 @@ class Nis(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + def setup(self): + self.add_copy_spec("/etc/yp*.conf") + self.add_copy_spec("/var/yp/*") ++ self.add_cmd_output("domainname") diff --git a/SOURCES/sos-bz1026959-collect-saved-vmcore-dmesg.patch b/SOURCES/sos-bz1026959-collect-saved-vmcore-dmesg.patch new file mode 100644 index 0000000..05c82cb --- /dev/null +++ b/SOURCES/sos-bz1026959-collect-saved-vmcore-dmesg.patch @@ -0,0 +1,43 @@ +commit 557a5397304327abe2039229a2bd23bb489ea879 +Author: Bryn M. Reeves +Date: Tue Aug 13 18:46:47 2013 +0100 + + Collect saved vmcore-dmesg.txt files in kdump plug-in + + Recent versions of kexec-utils automatically generate a text + file containing the dmesg buffer of the captured vmcore. + + This is useful for first-fault debugging and should be included. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/kdump.py b/sos/plugins/kdump.py +index 73e5d5e..81ce574 100644 +--- a/sos/plugins/kdump.py ++++ b/sos/plugins/kdump.py +@@ -23,7 +23,7 @@ class KDump(Plugin): + def setup(self): + self.add_copy_specs([ + "/proc/cmdline" +- ]) ++ ]) + + class RedHatKDump(KDump, RedHatPlugin): + """Kdump related information for Red Hat distributions +@@ -35,7 +35,9 @@ class RedHatKDump(KDump, RedHatPlugin): + def setup(self): + self.add_copy_specs([ + "/etc/kdump.conf", +- "/etc/udev/rules.d/*kexec.rules"]) ++ "/etc/udev/rules.d/*kexec.rules", ++ "/var/crash/*/vmcore-dmesg.txt" ++ ]) + + class DebianKDump(KDump, DebianPlugin, UbuntuPlugin): + """Kdump related information for Debian distributions +@@ -47,4 +49,4 @@ class DebianKDump(KDump, DebianPlugin, UbuntuPlugin): + def setup(self): + self.add_copy_specs([ + "/etc/default/kdump-tools" +- ]) ++ ]) diff --git a/SOURCES/sos-bz1028072-add-nfs-client-plugin.patch b/SOURCES/sos-bz1028072-add-nfs-client-plugin.patch new file mode 100644 index 0000000..0b52e36 --- /dev/null +++ b/SOURCES/sos-bz1028072-add-nfs-client-plugin.patch @@ -0,0 +1,65 @@ +commit 9259b1ba0b19e4376815b3d77545cfb4f700c6dd +Author: Bryn M. Reeves +Date: Fri Nov 8 14:59:56 2013 +0000 + + Add simple nfs plug-in + + There has been an nfsserver plug-in for some time however no + corresponding client-side data is collected. + + This was added to sos-2.2 earlier this year. This commit is a + forward port of those changes: + + commit 71066b4a7d4fd97692b50bf231ad6810df5ec3d0 + Author: root + Date: Wed Jul 10 17:11:52 2013 +0100 + + Collect additional nfs-client relevant files + + Additional NFS client-side data collection: + + "/etc/nfsmount.conf", + "/proc/fs/nfsfs/servers", + "/proc/fs/nfsfs/volumes" + + Signed-off-by: Bryn M. Reeves + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/nfs.py b/sos/plugins/nfs.py +new file mode 100644 +index 0000000..4acbe38 +--- /dev/null ++++ b/sos/plugins/nfs.py +@@ -0,0 +1,31 @@ ++### 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, DebianPlugin, UbuntuPlugin ++ ++class Nfs(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ """NFS related information ++ """ ++ plugin_name = 'nfs' ++ packages = ['nfs-utils'] ++ ++ def setup(self): ++ self.add_copy_specs([ ++ "/etc/nfsmount.conf", ++ "/etc/idmapd.conf", ++ "/proc/fs/nfsfs/servers", ++ "/proc/fs/nfsfs/volumes" ++ ]) ++ return ++ diff --git a/SOURCES/sos-bz1028125-fix-traceback-when-sar-module.patch b/SOURCES/sos-bz1028125-fix-traceback-when-sar-module.patch new file mode 100644 index 0000000..248fa36 --- /dev/null +++ b/SOURCES/sos-bz1028125-fix-traceback-when-sar-module.patch @@ -0,0 +1,48 @@ +commit e53f06e9a50b16a204d27049b83c3a32505a4ab6 +Author: Bryn M. Reeves +Date: Thu Nov 7 17:48:03 2013 +0000 + + Fix traceback when sar module is force-enabled + + Forward port of the following sos-2.2 fix: + + commit d4e3bcc3ed247d8d9a1228c3661b6456f534daf4 + Author: Bryn M. Reeves + Date: Mon Aug 12 18:42:48 2013 +0100 + + Fix traceback when sar module is force-enabled + + The sar plug-in assumes that when it runs the /var/lib/sa + directory and binaries exist (they are part of checkenabled() for + this module). + + This leads to a traceback when the plug-in lists a non-existent + directory on hosts where sar is not installed but '-o sar' is + specified on the command line. + + Catch the exception and exit gracefully. + + (Edited by bmr to improve error message logged). + + Signed-off-by: David Kutálek + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/sar.py b/sos/plugins/sar.py +index 4f89b53..570262a 100644 +--- a/sos/plugins/sar.py ++++ b/sos/plugins/sar.py +@@ -43,8 +43,12 @@ class Sar(Plugin,): + self.add_copy_spec_limit("/var/log/sa/sar[0-9]*", + sizelimit = self.sa_size) + self.add_copy_spec_limit("/var/log/sa/sa[0-9]*", +- sizelimit = self.sa_size) +- dirList = os.listdir(self.sa_path) ++ sizelimit = self.sa_size) ++ try: ++ dirList = os.listdir(self.sa_path) ++ except: ++ self.soslog.error("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: + if fname[0:2] == 'sa' and fname[2] != 'r': diff --git a/SOURCES/sos-bz1028150-add-krb5-plugin-and-klist.patch b/SOURCES/sos-bz1028150-add-krb5-plugin-and-klist.patch new file mode 100644 index 0000000..19ea04d --- /dev/null +++ b/SOURCES/sos-bz1028150-add-krb5-plugin-and-klist.patch @@ -0,0 +1,126 @@ +commit c18486621d2df774f270f8bc1dc602d6487681aa +Author: Bryn M. Reeves +Date: Thu Aug 1 16:43:43 2013 +0100 + + Split kerberos data collection into separate plug-in + + The krb5 data collection in the samba plug-in is misplaced. Since + this is collecting information about the system keytab move it + to its own plug-in that can be activated on any kerberos enabled + system. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/krb5.py b/sos/plugins/krb5.py +new file mode 100644 +index 0000000..d9dca89 +--- /dev/null ++++ b/sos/plugins/krb5.py +@@ -0,0 +1,29 @@ ++## Copyright (C) 2013 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. ++ ++from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin ++ ++class Krb5(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ """Kerberos related information ++ """ ++ packages = ('krb5-libs', 'krb5-user') ++ plugin_name = 'krb5' ++ ++ def setup(self): ++ self.add_copy_specs([ ++ "/etc/krb5.conf", ++ "/etc/krb5.keytab"]) ++ +diff --git a/sos/plugins/samba.py b/sos/plugins/samba.py +index f3a44b7..f3dc862 100644 +--- a/sos/plugins/samba.py ++++ b/sos/plugins/samba.py +@@ -14,9 +14,10 @@ + + from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin + +-class Samba(Plugin): ++class Samba(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + """Samba related information + """ ++ packages = ('samba-common',) + plugin_name = "samba" + + def setup(self): +@@ -27,19 +28,3 @@ class Samba(Plugin): + self.add_cmd_output("wbinfo --domain='.' -u") + self.add_cmd_output("testparm -s -v") + +- +-class RedHatSamba(Samba, RedHatPlugin): +- """Samba related information for RedHat based distributions +- """ +- def setup(self): +- super(RedHatSamba, self).setup() +- # FIXME: krb5 specific +- self.add_copy_specs([ +- "/etc/krb5.conf", +- "/etc/krb5.keytab"]) +- +-class DebianSamba(Samba, DebianPlugin, UbuntuPlugin): +- """Samba related information for Debian based distributions +- """ +- def setup(self): +- super(DebianSamba, self).setup() +commit 54eb134fb78a64782560df8f0aa2f5e51c6ae410 +Author: Bryn M. Reeves +Date: Thu Aug 1 16:48:19 2013 +0100 + + Do not collect krb5.keytab + + Avoid collecting kerberos keytabs to prevent unintended + information disclosures. Instead retrieve a list using the klist + command. + + Also remove the duplicative collection of this information from + the ipa plug-in (which should only be collecting non-system + keytabs that are specific to the IPA tools). + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/ipa.py b/sos/plugins/ipa.py +index 3244f34..0061659 100644 +--- a/sos/plugins/ipa.py ++++ b/sos/plugins/ipa.py +@@ -73,7 +73,6 @@ class Ipa(Plugin, RedHatPlugin): + + self.add_cmd_output("klist -ket /etc/dirsrv/ds.keytab") + self.add_cmd_output("klist -ket /etc/httpd/conf/ipa.keytab") +- self.add_cmd_output("klist -ket /etc/krb5.keytab") + + return + +diff --git a/sos/plugins/krb5.py b/sos/plugins/krb5.py +index d9dca89..0d33094 100644 +--- a/sos/plugins/krb5.py ++++ b/sos/plugins/krb5.py +@@ -23,7 +23,6 @@ class Krb5(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): + plugin_name = 'krb5' + + def setup(self): +- self.add_copy_specs([ +- "/etc/krb5.conf", +- "/etc/krb5.keytab"]) ++ self.add_copy_spec("/etc/krb5.conf") ++ self.add_cmd_output("klist -ket /etc/krb5.keytab") + diff --git a/SOURCES/sos-bz829069-normalise-tmp-dir-path.patch b/SOURCES/sos-bz829069-normalise-tmp-dir-path.patch new file mode 100644 index 0000000..b9ebb1b --- /dev/null +++ b/SOURCES/sos-bz829069-normalise-tmp-dir-path.patch @@ -0,0 +1,31 @@ +commit 2b2fa228391a0188a375a9e3c1e8f03f69c7eafd +Author: Bryn M. Reeves +Date: Thu Nov 7 16:27:44 2013 +0000 + + Normalize temporary directory path + + The archive and temporary file handling classes expect to operate + on absolute paths. If a user specifies a relative path via the + command line --tmp-dir switch it must be normalized before being + passed to these classes to provide correct behaviour. Failing to + do this causes a variety of errors: the final archive cannot be + created since the path is constructed incorrectly and temporary + files are not cleaned up since they are not at the "expected" + location. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/sosreport.py b/sos/sosreport.py +index 2451439..b1f2e1d 100644 +--- a/sos/sosreport.py ++++ b/sos/sosreport.py +@@ -534,7 +534,8 @@ class SoSReport(object): + self._read_config() + self.policy = sos.policies.load() + self._is_root = self.policy.is_root() +- self.tmpdir = self.policy.get_tmp_dir(self.opts.tmp_dir) ++ self.tmpdir = os.path.abspath( ++ self.policy.get_tmp_dir(self.opts.tmp_dir)) + if not os.path.isdir(self.tmpdir) \ + or not os.access(self.tmpdir, os.W_OK): + # write directly to stderr as logging is not initialised yet diff --git a/SOURCES/sos-bz829297-fix-typo-in-yum-add_forbidden_paths.patch b/SOURCES/sos-bz829297-fix-typo-in-yum-add_forbidden_paths.patch new file mode 100644 index 0000000..56cc21c --- /dev/null +++ b/SOURCES/sos-bz829297-fix-typo-in-yum-add_forbidden_paths.patch @@ -0,0 +1,26 @@ +commit dedffd8549bcaf4688f090d800bff7f4ed7b9d43 +Author: Bryn M. Reeves +Date: Tue Nov 12 13:44:09 2013 +0000 + + Fix typo in yum add_forbidden_paths() + + The PKI files that should be omitted are in /etc/pki/entitlement, + not /etc/pki/entitlements as the plug-in currently uses. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/yum.py b/sos/plugins/yum.py +index 6d473c9..5abf06f 100644 +--- a/sos/plugins/yum.py ++++ b/sos/plugins/yum.py +@@ -39,8 +39,8 @@ class Yum(Plugin, RedHatPlugin): + self.add_cmd_output("yum -C repolist") + + # candlepin info +- self.add_forbidden_path("/etc/pki/entitlements/key.pem") +- self.add_forbidden_path("/etc/pki/entitlements/*-key.pem") ++ self.add_forbidden_path("/etc/pki/entitlement/key.pem") ++ self.add_forbidden_path("/etc/pki/entitlement/*-key.pem") + self.add_copy_specs([ + "/etc/pki/product/*.pem", + "/etc/pki/consumer/cert.pem", diff --git a/SOURCES/sos-bz839342-cluster-collect-crm_report.patch b/SOURCES/sos-bz839342-cluster-collect-crm_report.patch new file mode 100644 index 0000000..e9e7fe1 --- /dev/null +++ b/SOURCES/sos-bz839342-cluster-collect-crm_report.patch @@ -0,0 +1,28 @@ +commit 89a479f315302e87267ec17e1b5d8e5f4b6d8a19 +Author: Bryn M. Reeves +Date: Wed Aug 14 18:36:25 2013 +0100 + + Add crm_report support to cluster plug-in + + Recent cluster stacks using the pacemaker stack include a + crm_report script to generate debugging information for the + cluster. + + Call it in single-node mode in the cluster module. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/cluster.py b/sos/plugins/cluster.py +index 0ed3cb4..809f6fd 100644 +--- a/sos/plugins/cluster.py ++++ b/sos/plugins/cluster.py +@@ -82,6 +82,9 @@ 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) + + def do_lockdump(self): + status, output, time = self.call_ext_prog("dlm_tool ls") diff --git a/SOURCES/sos-bz916705-fix-rhel_version-problems.patch b/SOURCES/sos-bz916705-fix-rhel_version-problems.patch new file mode 100644 index 0000000..5cce11c --- /dev/null +++ b/SOURCES/sos-bz916705-fix-rhel_version-problems.patch @@ -0,0 +1,186 @@ +commit c8fb8ff10de13b9f39044e2196976b15343a4d8e +Author: Bryn M. Reeves +Date: Wed Aug 14 18:22:28 2013 +0100 + + Remove obsolete checks and exception handling from s390 plug-in + + The s390 plug-in has some strange checks on the distribution + version before collecting a couple of s390-specific commands. The + entire code block is also wrapped in try/except. + + Remove this: all add_cmd_output() succeed without exceptions even + if the command does not exist or cannot be run. The exception + handling also does nothing useful. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/s390.py b/sos/plugins/s390.py +index 7254649..ed9546b 100644 +--- a/sos/plugins/s390.py ++++ b/sos/plugins/s390.py +@@ -58,14 +58,10 @@ class S390(Plugin, RedHatPlugin): + self.add_cmd_output("find /sys -type f") + self.add_cmd_output("find /proc/s390dbf -type f") + self.add_cmd_output("qethconf list_all") ++ self.add_cmd_output("lsqeth") ++ self.add_cmd_output("lszfcp") + ret, dasd_dev, rtime = self.call_ext_prog("ls /dev/dasd?") + for x in dasd_dev.split('\n'): + self.add_cmd_output("dasdview -x -i -j -l -f %s" % (x,)) + self.add_cmd_output("fdasd -p %s" % (x,)) +- try: +- rhelver = self.policy().rhel_version() +- if rhelver == 5: +- self.add_cmd_output("lsqeth") +- self.add_cmd_output("lszfcp") +- except: +- rhelver = None ++ +commit 27ce4dcc524c0af2ed8c2e8449ed9783e35c174e +Author: Bryn M. Reeves +Date: Wed Aug 14 18:26:08 2013 +0100 + + Remove legacy system support from cluster plug-in + + The cluster plug-in attempted to support three prior generations + of cluster components in a single plug-in. These will never be + required today since all current versions where sos-3.x would be + used are all using much later packages. + + Remove this code and simplify the overall plug-in organisation. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/cluster.py b/sos/plugins/cluster.py +index 8a3432e..0ed3cb4 100644 +--- a/sos/plugins/cluster.py ++++ b/sos/plugins/cluster.py +@@ -25,28 +25,19 @@ class Cluster(Plugin, RedHatPlugin): + 'gather output of gfs lockdumps', 'slow', False), + ('lockdump', 'gather dlm lockdumps', 'slow', False)] + +- def check_enabled(self): +- rhelver = self.policy().rhel_version() +- if rhelver == 4: +- self.packages = [ "ccs", "cman", "cman-kernel", "magma", +- "magma-plugins", "rgmanager", "fence", "dlm", +- "dlm-kernel", "gulm", "GFS", "GFS-kernel", +- "lvm2-cluster" ] +- elif rhelver == 5: +- self.packages = [ "rgmanager", "luci", "ricci", +- "system-config-cluster", "gfs-utils", "gnbd", +- "kmod-gfs", "kmod-gnbd", "lvm2-cluster", +- "gfs2-utils" ] +- +- elif rhelver == 6: +- self.packages = [ "ricci", "corosync", "openais", +- "cman", "clusterlib", "fence-agents" ] +- +- self.files = [ "/etc/cluster/cluster.conf" ] +- return Plugin.check_enabled(self) ++ packages = [ ++ "ricci", ++ "corosync", ++ "openais", ++ "cman", ++ "clusterlib", ++ "fence-agents", ++ "pacemaker" ++ ] ++ ++ files = [ "/etc/cluster/cluster.conf" ] + + def setup(self): +- rhelver = self.policy().rhel_version() + + self.add_copy_spec("/etc/cluster.conf") + self.add_copy_spec("/etc/cluster.xml") +@@ -61,13 +52,13 @@ class Cluster(Plugin, RedHatPlugin): + self.add_copy_spec("/etc/fence_virt.conf") + + if self.get_option('gfslockdump'): +- self.do_gfslockdump() ++ self.do_gfslockdump() + + if self.get_option('lockdump'): +- self.do_lockdump() ++ self.do_lockdump() + + self.add_cmd_output("rg_test test " +- + "/etc/cluster/cluster.conf" ) ++ + "/etc/cluster/cluster.conf" ) + self.add_cmd_output("fence_tool ls -n") + self.add_cmd_output("gfs_control ls -n") + self.add_cmd_output("dlm_tool log_plock") +@@ -80,56 +71,23 @@ class Cluster(Plugin, RedHatPlugin): + self.add_cmd_output("ccs_tool lsnode") + self.add_cmd_output("ipvsadm -L") + +- if rhelver is 4: +- self.add_copy_spec("/proc/cluster/*") +- self.add_cmd_output("cman_tool nodes") +- +- if rhelver is not 4: # 5+ +- self.add_cmd_output("cman_tool -a nodes") +- +- if rhelver is 5: +- self.add_cmd_output("group_tool -v") +- self.add_cmd_output("group_tool dump fence") +- self.add_cmd_output("group_tool dump gfs") +- +- if rhelver not in (4,5): # 6+ +- self.add_cmd_output("corosync-quorumtool -l") +- self.add_cmd_output("corosync-quorumtool -s") +- self.add_cmd_output("corosync-cpgtool") +- self.add_cmd_output("corosync-objctl") +- self.add_cmd_output("group_tool ls -g1") +- self.add_cmd_output("gfs_control ls -n") +- self.add_cmd_output("gfs_control dump") +- self.add_cmd_output("fence_tool dump") +- self.add_cmd_output("dlm_tool dump") +- self.add_cmd_output("dlm_tool ls -n") +- self.add_cmd_output("mkqdisk -L") ++ self.add_cmd_output("corosync-quorumtool -l") ++ self.add_cmd_output("corosync-quorumtool -s") ++ self.add_cmd_output("corosync-cpgtool") ++ self.add_cmd_output("corosync-objctl") ++ self.add_cmd_output("group_tool ls -g1") ++ self.add_cmd_output("gfs_control ls -n") ++ self.add_cmd_output("gfs_control dump") ++ self.add_cmd_output("fence_tool dump") ++ self.add_cmd_output("dlm_tool dump") ++ self.add_cmd_output("dlm_tool ls -n") ++ self.add_cmd_output("mkqdisk -L") + + def do_lockdump(self): +- rhelver = self.policy().rhel_version() +- +- if rhelver is 4: +- status, output, time = self.call_ext_prog("cman_tool services") +- for lockspace in re.compile(r'^DLM Lock Space:\s*"([^"]*)".*$', +- re.MULTILINE).findall(output): +- self.call_ext_prog("echo %s > /proc/cluster/dlm_locks" +- % lockspace) +- self.get_cmd_output_now("cat /proc/cluster/dlm_locks", +- suggest_filename = "dlm_locks_%s" % lockspace) +- +- if rhelver is 5: +- status, output, time = self.call_ext_prog("group_tool") +- for lockspace in re.compile(r'^dlm\s+[^\s]+\s+([^\s]+)$', +- re.MULTILINE).findall(output): +- self.add_cmd_output("dlm_tool lockdebug '%s'" % lockspace, +- suggest_filename = "dlm_locks_%s" % lockspace) +- +- else: # RHEL6 or recent Fedora +- status, output, time = self.call_ext_prog("dlm_tool ls") +- for lockspace in re.compile(r'^name\s+([^\s]+)$', +- re.MULTILINE).findall(output): +- self.add_cmd_output("dlm_tool lockdebug -svw '%s'" +- % lockspace, ++ status, output, time = self.call_ext_prog("dlm_tool ls") ++ for lockspace in re.compile(r'^name\s+([^\s]+)$', ++ re.MULTILINE).findall(output): ++ self.add_cmd_output("dlm_tool lockdebug -svw '%s'" % lockspace, + suggest_filename = "dlm_locks_%s" % lockspace) + + def do_gfslockdump(self): diff --git a/SOURCES/sos-bz971420-strip-trailing-newline.patch b/SOURCES/sos-bz971420-strip-trailing-newline.patch new file mode 100644 index 0000000..e675d66 --- /dev/null +++ b/SOURCES/sos-bz971420-strip-trailing-newline.patch @@ -0,0 +1,25 @@ +commit dc1e011f3035646c81b54c265dff638ffe282ff1 +Author: Bryn M. Reeves +Date: Tue Aug 6 21:53:41 2013 +0100 + + Strip trailing newline from command output + + This commit brings sos-3.x behaviour into line with earlier + releases and produces captured command output that is consistent + with typical shell redirection use. + + Resolves: bz971420 + +diff --git a/sos/utilities.py b/sos/utilities.py +index fcc78c5..4279b12 100644 +--- a/sos/utilities.py ++++ b/sos/utilities.py +@@ -161,6 +161,8 @@ def sos_get_command_output(command, timeout=300): + stdout=PIPE, stderr=STDOUT, + bufsize=-1, env = cmd_env) + stdout, stderr = p.communicate() ++ # hack to delete trailing '\n' added by p.communicate() ++ if stdout[-1:] == '\n': stdout = stdout[:-1] + return (p.returncode, stdout, 0) + else: + return (127, "", 0) diff --git a/SOURCES/sos-bz996992-do-not-attempt-to-read-use-gss-proxy.patch b/SOURCES/sos-bz996992-do-not-attempt-to-read-use-gss-proxy.patch new file mode 100644 index 0000000..40a89a8 --- /dev/null +++ b/SOURCES/sos-bz996992-do-not-attempt-to-read-use-gss-proxy.patch @@ -0,0 +1,35 @@ +commit 36140249bcab17d1a3a69467208ca25af85a75f1 +Author: Bryn M. Reeves +Date: Wed Aug 14 15:59:45 2013 +0100 + + Do not attempt to read use-gss-proxy file in procfs + + The networking plug-in scoops up /proc/net. There are some pseudo- + files in here that we should avoid touching. These either have + side-effects or hang the reading process. + + Add a forbidden path for the /proc/net/rpc/*/{channel,flush} + files as these will cause side-effects for RPC applications + running on the host. + + Forward port of commit 61585d4 on rhel-6 branch. + + Signed-off-by: Bryn M. Reeves + + Conflicts: + sos/plugins/networking.py + +diff --git a/sos/plugins/networking.py b/sos/plugins/networking.py +index 90b740c..90e1b58 100644 +--- a/sos/plugins/networking.py ++++ b/sos/plugins/networking.py +@@ -80,6 +80,9 @@ class Networking(Plugin): + "/etc/NetworkManager/NetworkManager.conf", + "/etc/NetworkManager/system-connections", + "/etc/dnsmasq*"]) ++ self.add_forbidden_path("/proc/net/rpc/use-gss-proxy") ++ self.add_forbidden_path("/proc/net/rpc/*/channel") ++ 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") diff --git a/SOURCES/sos-bz997083-Fix-policy-classes-for--tmp-dir.patch b/SOURCES/sos-bz997083-Fix-policy-classes-for--tmp-dir.patch new file mode 100644 index 0000000..c089c41 --- /dev/null +++ b/SOURCES/sos-bz997083-Fix-policy-classes-for--tmp-dir.patch @@ -0,0 +1,35 @@ +commit 420f6ee7a25833ebaaea224fc0955cacdecdd6c2 +Author: Bryn M. Reeves +Date: Mon Jun 10 20:32:20 2013 +0100 + + Fix policy classes for --tmp-dir + + Policy classes need to return the user-supplied temporary + directory if they decide not to override it. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py +index 752d480..983842d 100644 +--- a/sos/policies/__init__.py ++++ b/sos/policies/__init__.py +@@ -190,6 +190,7 @@ No changes will be made to system configuration. + def get_tmp_dir(self, opt_tmp_dir): + if not opt_tmp_dir: + return tempfile.gettempdir() ++ return opt_tmp_dir + + def validatePlugin(self, plugin_class): + """ +diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py +index c3740dc..9321815 100644 +--- a/sos/policies/redhat.py ++++ b/sos/policies/redhat.py +@@ -85,6 +85,7 @@ class RedHatPolicy(LinuxPolicy): + def get_tmp_dir(self, opt_tmp_dir): + if not opt_tmp_dir: + return self._tmp_dir ++ return opt_tmp_dir + + def get_local_name(self): + return self.host_name() diff --git a/SOURCES/sos-bz997090-cluster-plugin-add-obfuscation-of-luci-secrets.patch b/SOURCES/sos-bz997090-cluster-plugin-add-obfuscation-of-luci-secrets.patch new file mode 100644 index 0000000..49fa317 --- /dev/null +++ b/SOURCES/sos-bz997090-cluster-plugin-add-obfuscation-of-luci-secrets.patch @@ -0,0 +1,28 @@ +commit 08ddb0559f29f3525c3b43bf59cc79467e0f75fb +Author: Jan Pokorný +Date: Sat Jul 20 09:16:13 2013 +0200 + + cluster plugin: restrict data collected for luci + + Notably, avoid server cert being added. On the other hand, allow + collection of rotated log files for luci. + + Signed-off-by: Jan Pokorný + +diff --git a/sos/plugins/cluster.py b/sos/plugins/cluster.py +index b9fa8b3..50e0e0b 100644 +--- a/sos/plugins/cluster.py ++++ b/sos/plugins/cluster.py +@@ -46,9 +46,10 @@ class Cluster(Plugin, RedHatPlugin): + self.add_copy_spec("/etc/sysconfig/cman") + self.add_copy_spec("/etc/fence_virt.conf") + self.add_copy_spec("/var/lib/ricci") +- self.add_copy_spec("/var/lib/luci") ++ self.add_copy_spec("/var/lib/luci/data/luci.db") ++ self.add_copy_spec("/var/lib/luci/etc") + self.add_copy_spec("/var/log/cluster") +- self.add_copy_spec("/var/log/luci/luci.log") ++ self.add_copy_spec("/var/log/luci") + self.add_copy_spec("/etc/fence_virt.conf") + + if self.get_option('gfslockdump'): diff --git a/SOURCES/sos-bz997094-Added-XFS-plugin.patch b/SOURCES/sos-bz997094-Added-XFS-plugin.patch new file mode 100644 index 0000000..fe57b96 --- /dev/null +++ b/SOURCES/sos-bz997094-Added-XFS-plugin.patch @@ -0,0 +1,54 @@ +commit dc11544c78dda4625cb6d985f6e1d76036ba6faf +Author: Pierguido Lambri +Date: Sat Jul 6 21:21:42 2013 +0100 + + Added XFS plugin + + Signed-off-by: Pierguido Lambri + +diff --git a/sos/plugins/xfs.py b/sos/plugins/xfs.py +new file mode 100644 +index 0000000..fe84b03 +--- /dev/null ++++ b/sos/plugins/xfs.py +@@ -0,0 +1,40 @@ ++### 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, DebianPlugin, UbuntuPlugin ++import os ++import re ++from itertools import * ++ ++class Xfs(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): ++ """information on the XFS filesystem ++ """ ++ ++ plugin_name = 'xfs' ++ ++ option_list = [("logprint", 'gathers the log information', 'slow', False)] ++ ++ def setup(self): ++ mounts = '/proc/mounts' ++ ext_fs_regex = r"^(/dev/.+).+xfs\s+" ++ for dev in izip(self.do_regex_find_all(ext_fs_regex, mounts)): ++ for e in dev: ++ parts = e.split(' ') ++ self.add_cmd_output("xfs_info %s" % (parts[1])) ++ ++ if self.get_option('logprint'): ++ for dev in izip(self.do_regex_find_all(ext_fs_regex, mounts)): ++ for e in dev: ++ parts = e.split(' ') ++ self.add_cmd_output("xfs_logprint -c %s" % (parts[0])) diff --git a/SOURCES/sos-bz997101-restrict-wbinfo-collection-to-the-current-domain.patch b/SOURCES/sos-bz997101-restrict-wbinfo-collection-to-the-current-domain.patch new file mode 100644 index 0000000..2bde947 --- /dev/null +++ b/SOURCES/sos-bz997101-restrict-wbinfo-collection-to-the-current-domain.patch @@ -0,0 +1,36 @@ +commit 10cc09bf4d84d76cbcceccc6f3246bd9f8e9bd93 +Author: Bryn M. Reeves +Date: Tue Jul 30 17:42:40 2013 +0100 + + Restrict wbinfo collection to the current domain. + + The samba module calls the wbinfo command to collect user and + group information. This by default will search all domains to + which the host has access. In a large AD environment with a number + of trusted domains this causes the winbindd process to consume + excessive CPU and memory resources. + + The Samba developers have commented that fixing this would require + a complete rewrite of the winbind protocol and wbinfo client. + + Since listing out the _entire_ set of visible users is unlikely + to be of any use anyway pass the --domain='.' option to restrict + the search to the current domain of the system. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/samba.py b/sos/plugins/samba.py +index d4e2fe8..f3a44b7 100644 +--- a/sos/plugins/samba.py ++++ b/sos/plugins/samba.py +@@ -23,8 +23,8 @@ class Samba(Plugin): + self.add_copy_specs([ + "/etc/samba", + "/var/log/samba/*",]) +- self.add_cmd_output("wbinfo -g") +- self.add_cmd_output("wbinfo -u") ++ self.add_cmd_output("wbinfo --domain='.' -g") ++ self.add_cmd_output("wbinfo --domain='.' -u") + self.add_cmd_output("testparm -s -v") + + diff --git a/SOURCES/sos-silence-could-not-run.patch b/SOURCES/sos-silence-could-not-run.patch new file mode 100644 index 0000000..1bb0d97 --- /dev/null +++ b/SOURCES/sos-silence-could-not-run.patch @@ -0,0 +1,24 @@ +commit f81df25a32ff525f965a52581711ff06563166b5 +Author: Bryn M. Reeves +Date: Mon Jun 10 19:50:28 2013 +0100 + + Reduce level of 'could not run' messages info->debug + + We expect not to find all commands; don't output a log message on + each missing binary. + + Signed-off-by: Bryn M. Reeves + +diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py +index 70711a3..e25f035 100644 +--- a/sos/plugins/__init__.py ++++ b/sos/plugins/__init__.py +@@ -543,7 +543,7 @@ class Plugin(object): + # pylint: disable-msg = W0612 + status, shout, runtime = sos_get_command_output(exe, timeout=timeout) + if (status == 127): +- self.soslog.info("could not run '%s': command not found" % exe) ++ self.soslog.debug("could not run '%s': command not found" % exe) + return None + + if suggest_filename: diff --git a/SPECS/sos.spec b/SPECS/sos.spec new file mode 100644 index 0000000..112f944 --- /dev/null +++ b/SPECS/sos.spec @@ -0,0 +1,624 @@ +%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} + +Summary: A set of tools to gather troubleshooting information from a system +Name: sos +Version: 3.0 +Release: 13%{?dist} +Group: Applications/System +Source0: https://people.redhat.com/breeves/sos/releases/sos-3.0.tar.gz +License: GPLv2+ +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot +BuildArch: noarch +Url: http://fedorahosted.org/sos +BuildRequires: python-devel +BuildRequires: gettext +Requires: libxml2-python +Requires: rpm-python +Requires: tar +Requires: bzip2 +Requires: xz +Patch0: sos-silence-could-not-run.patch +Patch1: sos-bz971420-strip-trailing-newline.patch +Patch2: sos-bz916705-fix-rhel_version-problems.patch +Patch3: sos-bz839342-cluster-collect-crm_report.patch +Patch4: sos-bz1002943-No-TTY-should-not-imply-batch-mode.patch +Patch5: sos-bz1002943-Do-not-exit-on-interactive-mode-read-exceptions.patch +Patch6: sos-bz997083-Fix-policy-classes-for--tmp-dir.patch +Patch7: sos-bz997094-Added-XFS-plugin.patch +Patch8: sos-bz997090-cluster-plugin-add-obfuscation-of-luci-secrets.patch +Patch9: sos-bz997101-restrict-wbinfo-collection-to-the-current-domain.patch +Patch10: sos-bz996992-do-not-attempt-to-read-use-gss-proxy.patch +Patch11: sos-bz1001966-include-etc-yaboot-conf-in-boot.patch +Patch12: sos-bz1019235-remove-useless-os-path-check-for-brctl.patch +Patch13: sos-bz1019863-rpm-restricted-verify.patch +Patch14: sos-bz1019338-remove-pipe-communicate-newline-workaround.patch +Patch15: sos-bz1001599-add-file-size-restriction-to-sar.patch +Patch16: sos-bz1015606-remove-version-checks-in-gluster.patch +Patch17: sos-bz1019517-check-for-usable-temporary-directory.patch +Patch18: sos-bz1019356-fix-alloptions.patch +Patch19: sos-bz1019516-fix-config-file-regression.patch +Patch20: sos-bz1025236-add-powerpc-plugin.patch +Patch21: sos-bz1026869-collect-proc-self-mountstats.patch +Patch22: sos-bz1026829-collect-var-log-squid.patch +Patch23: sos-bz1026906-nis-add-domainname-output.patch +Patch24: sos-bz829069-normalise-tmp-dir-path.patch +Patch25: sos-bz1026959-collect-saved-vmcore-dmesg.patch +Patch26: sos-bz1015599-restore-build-command-line-option.patch +Patch27: sos-bz1028072-add-nfs-client-plugin.patch +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 + +%description +Sos is a set of tools that gathers information about system +hardware and configuration. The information can then be used for +diagnostic purposes and debugging. Sos is commonly used to help +support technicians and developers. + +%prep +%setup -q +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 +%patch26 -p1 +%patch27 -p1 +%patch28 -p1 +%patch29 -p1 +%patch30 -p1 +%patch31 -p1 + +%build +make + +%install +rm -rf ${RPM_BUILD_ROOT} +make DESTDIR=${RPM_BUILD_ROOT} install +%find_lang %{name} || echo 0 + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files -f %{name}.lang +%defattr(-,root,root,-) +%{_sbindir}/sosreport +%{_datadir}/%{name} +%{python_sitelib}/* +%{_mandir}/man1/* +%{_mandir}/man5/* +%doc AUTHORS README.md LICENSE +%config(noreplace) %{_sysconfdir}/sos.conf + +%changelog +* Thu Nov 14 2013 Bryn M. Reeves = 2.0-13 +- Fix regressions introduced with --build option + Resolves: bz1015599 + +* Tue Nov 12 2013 Bryn M. Reeves = 3.0-12 +- Fix typo in yum plug-in add_forbidden_paths + Resolves: bz829297 +- Add krb5 plug-in and drop collection of krb5.keytab + Resolves: bz1028150 + +* Fri Nov 8 2013 Bryn M. Reeves = 3.0-10 +- Add nfs client plug-in + Resolves: bz1028072 +- Fix traceback when sar module force-enabled + Resolves: bz1028125 + +* Thu Nov 7 2013 Bryn M. Reeves = 3.0-9 +- Restore --build command line option + Resolves: bz1015599 +- Collect saved vmcore-dmesg.txt files + Resolves: bz1026959 +- Normalize temporary directory paths + Resolves: bz829069 + +* Tue Nov 5 2013 Bryn M. Reeves = 3.0-7 +- Add domainname output to NIS plug-in + Resolves: bz1026906 +- Collect /var/log/squid in squid plug-in + Resolves: bz1026829 +- Collect mountstats and mountinfo in filesys plug-in + Resolves: bz1026869 +- Add PowerPC plug-in from upstream + Resolves: bz1025236 + +* Thu Oct 31 2013 Bryn M. Reeves = 3.0-6 +- Remove version checks in gluster plug-in + Resolves: bz1015606 +- Check for usable temporary directory + Resolves: bz1019517 +- Fix --alloptions command line option + Resolves: bz1019356 +- Fix configuration fail regression + Resolves: bz1019516 + +* Wed Oct 30 2013 Bryn M. Reeves = 3.0-5 +- Include /etc/yaboot.conf in boot plug-in + Resolves: bz1001966 +- Fix collection of brctl output in networking plug-in + Resolves: bz1019235 +- Verify limited set of RPM packages by default + Resolves: bz1019863 +- Do not strip newlines from command output + Resolves: bz1019338 +- Limit default sar data collection + Resolves: bz1001599 + +* Thu Oct 3 2013 Bryn M. Reeves = 3.0-4 +- Do not attempt to read RPC pseudo files in networking plug-in + Resolves: bz996992, bz996994 +- Restrict wbinfo collection to the current domain + Resolves: bz997101 +- Add obfuscation of luci secrets to cluster plug-in + Resolves: bz997090 +- Add XFS plug-in + Resolves: bz997094 +- Fix policy class handling of --tmp-dir + Resolves: bz997083 +- Do not set batch mode if stdin is not a TTY + Resolves: bz1002943 +- Attempt to continue when reading bad input in interactive mode + Resolves: bz1002943 + +* Wed Aug 14 2013 Bryn M. Reeves = 3.0-3 +- Add crm_report support to cluster plug-in + Resolves: bz839342 +- Fix rhel_version() usage in cluster and s390 plug-ins + Resolves: bz916705 +- Strip trailing newline from command output + Resolves: bz971420 + +* Mon Jun 10 2013 Bryn M. Reeves = 3.0-2 +- Silence 'could not run' messages at default verbosity +- New upstream release + +* Thu May 23 2013 Bryn M. Reeves = 2.2-39 +- Always invoke tar with '-f-' option + +* Mon Jan 21 2013 Bryn M. Reeves = 2.2-38 +- Fix interactive mode regression when --ticket unspecified + +* Fri Jan 18 2013 Bryn M. Reeves = 2.2-37 +- Fix propagation of --ticket parameter in interactive mode + +* Thu Jan 17 2013 Bryn M. Reeves = 2.2-36 +- Revert OpenStack patch + +* Wed Jan 9 2013 Bryn M. Reeves = 2.2-35 +- Report --name and --ticket values as defaults +- Fix device-mapper command execution logging +- Fix data collection and rename PostreSQL module to pgsql + +* Fri Oct 19 2012 Bryn M. Reeves = 2.2-34 +- Add support for content delivery hosts to RHUI module + +* Thu Oct 18 2012 Bryn M. Reeves = 2.2-33 +- Add Red Hat Update Infrastructure module +- Collect /proc/iomem in hardware module +- Collect subscription-manager output in general module +- Collect rhsm log files in general module +- Fix exception in gluster module on non-gluster systems +- Fix exception in psql module when dbname is not given + +* Wed Oct 17 2012 Bryn M. Reeves = 2.2-32 +- Collect /proc/pagetypeinfo in memory module +- Strip trailing newline from command output +- Add sanlock module +- Do not collect archived accounting files in psacct module +- Call spacewalk-debug from rhn module to collect satellite data + +* Mon Oct 15 2012 Bryn M. Reeves = 2.2-31 +- Avoid calling volume status when collecting gluster statedumps +- Use a default report name if --name is empty +- Quote tilde characters passed to shell in RPM module +- Collect KDC and named configuration in ipa module +- Sanitize hostname characters before using as report path +- Collect /etc/multipath in device-mapper module +- New plug-in for PostgreSQL +- Add OpenStack module +- Avoid deprecated sysctls in /proc/sys/net +- Fix error logging when calling external programs +- Use ip instead of ifconfig to generate network interface lists + +* Wed May 23 2012 Bryn M. Reeves = 2.2-29 +- Collect the swift configuration directory in gluster module +- Update IPA module and related plug-ins + +* Fri May 18 2012 Bryn M. Reeves = 2.2-28 +- Collect mcelog files in the hardware module + +* Wed May 02 2012 Bryn M. Reeves = 2.2-27 +- Add nfs statedump collection to gluster module + +* Tue May 01 2012 Bryn M. Reeves = 2.2-26 +- Use wildcard to match possible libvirt log paths + +* Mon Apr 23 2012 Bryn M. Reeves = 2.2-25 +- Add forbidden paths for new location of gluster private keys + +* Fri Mar 9 2012 Bryn M. Reeves = 2.2-24 +- Fix katello and aeolus command string syntax +- Remove stray hunk from gluster module patch + +* Thu Mar 8 2012 Bryn M. Reeves = 2.2-22 +- Correct aeolus debug invocation in CloudForms module +- Update gluster module for gluster-3.3 +- Add additional command output to gluster module +- Add support for collecting gluster configuration and logs + +* Wed Mar 7 2012 Bryn M. Reeves = 2.2-19 +- Collect additional diagnostic information for realtime systems +- Improve sanitization of RHN user and case number in report name +- Fix verbose output and debug logging +- Add basic support for CloudForms data collection +- Add support for Subscription Asset Manager diagnostics + +* Tue Mar 6 2012 Bryn M. Reeves = 2.2-18 +- Collect fence_virt.conf in cluster module +- Fix collection of /proc/net directory tree +- Gather output of cpufreq-info when present +- Fix brctl showstp output when bridges contain multiple interfaces +- Add /etc/modprobe.d to kernel module +- Ensure relative symlink targets are correctly handled when copying +- Fix satellite and proxy package detection in rhn plugin +- Collect stderr output from external commands +- Collect /proc/cgroups in the cgroups module + Resolve: bz784874 +- Collect /proc/irq in the kernel module +- Fix installed-rpms formatting for long package names +- Add symbolic links for truncated log files +- Collect non-standard syslog and rsyslog log files +- Use correct paths for tomcat6 in RHN module +- Obscure root password if present in anacond-ks.cfg +- Do not accept embedded forward slashes in RHN usernames +- Add new sunrpc module to collect rpcinfo for gluster systems + +* Tue Nov 1 2011 Bryn M. Reeves = 2.2-17 +- Do not collect subscription manager keys in general plugin + +* Fri Sep 23 2011 Bryn M. Reeves = 2.2-16 +- Fix execution of RHN hardware.py from hardware plugin +- Fix hardware plugin to support new lsusb path + +* Fri Sep 09 2011 Bryn M. Reeves = 2.2-15 +- Fix brctl collection when a bridge contains no interfaces +- Fix up2dateclient path in hardware plugin + +* Mon Aug 15 2011 Bryn M. Reeves = 2.2-14 +- Collect brctl show and showstp output +- Collect nslcd.conf in ldap plugin + +* Sun Aug 14 2011 Bryn M. Reeves = 2.2-11 +- Truncate files that exceed specified size limit +- Add support for collecting Red Hat Subscrition Manager configuration +- Collect /etc/init on systems using upstart +- Don't strip whitespace from output of external programs +- Collect ipv6 neighbour table in network module +- Collect basic cgroups configuration data + +* Sat Aug 13 2011 Bryn M. Reeves = 2.2-10 +- Fix collection of data from LVM2 reporting tools in devicemapper plugin +- Add /proc/vmmemctl collection to vmware plugin + +* Fri Aug 12 2011 Bryn M. Reeves = 2.2-9 +- Collect yum repository list by default +- Add basic Infiniband plugin +- Add plugin for scsi-target-utils iSCSI target +- Fix autofs plugin LC_ALL usage +- Fix collection of lsusb and add collection of -t and -v outputs +- Extend data collection by qpidd plugin +- Add ethtool pause, coalesce and ring (-a, -c, -g) options to network plugin + +* Thu Apr 07 2011 Bryn M. Reeves = 2.2-8 +- Use sha256 for report digest when operating in FIPS mode + +* Tue Apr 05 2011 Bryn M. Reeves = 2.2-7 +- Fix parted and dumpe2fs output on s390 + +* Fri Feb 25 2011 Bryn M. Reeves = 2.2-6 +- Fix collection of chkconfig output in startup.py +- Collect /etc/dhcp in dhcp.py plugin +- Collect dmsetup ls --tree output in devicemapper.py +- Collect lsblk output in filesys.py + +* Thu Feb 24 2011 Bryn M. Reeves = 2.2-4 +- Fix collection of logs and config files in sssd.py +- Add support for collecting entitlement certificates in rhn.py + +* Thu Feb 03 2011 Bryn M. Reeves = 2.2-3 +- Fix cluster plugin dlm lockdump for el6 +- Add sssd plugin to collect configuration and logs +- Collect /etc/anacrontab in system plugin +- Correct handling of redhat-release for el6 + +* Thu Jul 29 2010 Adam Stokes = 2.2-2 + +* Thu Jun 10 2010 Adam Stokes = 2.2-0 + +* Wed Apr 28 2010 Adam Stokes = 2.1-0 + +* Mon Apr 12 2010 Adam Stokes = 2.0-0 + +* Tue Mar 30 2010 Adam Stokes = 1.9-3 +- fix setup.py to autocompile translations and man pages +- rebase 1.9 + +* Fri Mar 19 2010 Adam Stokes = 1.9-2 +- updated translations + +* Thu Mar 04 2010 Adam Stokes = 1.9-1 +- version bump 1.9 +- replaced compression utility with xz +- strip threading/multiprocessing +- simplified progress indicator +- pylint update +- put global vars in class container +- unittests +- simple profiling +- make use of xgettext as pygettext is deprecated + +* Mon Jan 18 2010 Adam Stokes = 1.8-21 +- more sanitizing options for log files +- rhbz fixes from RHEL version merged into trunk +- progressbar update + +* Tue Nov 19 2009 Adam Stokes = 1.8-20 +- dont copy unwanted files due to symlinks +- More plugin enhancements + +* Tue Nov 5 2009 Adam Stokes = 1.8-18 +- Option to enable selinux fixfiles check +- Start of replacing Thread module with multiprocessing +- Update translations +- More checks against conf file versus command line opts + +* Tue Sep 9 2009 Adam Stokes = 1.8-16 +- Update rh-upload-core to rh-upload and allows general files +- Fix cluster plugin with pwd mangling invalidating xml +- Cluster support detecting invalid fence_id and fence states +- Read variables from conf file + +* Thu Jul 23 2009 Adam Stokes = 1.8-14 +- resolves: rhbz512536 wrong group in spec file +- resolves: rhbz498398 A series of refactoring patches to sos +- resolves: rhbz501149 A series of refactoring patches to sos (2) +- resolves: rhbz503804 remove obsolete translation +- resolves: rhbz502455 tricking sosreport into rm -rf / +- resolves: rhbz501146 branding in fedora + +* Mon Jul 20 2009 Adam Stokes = 1.8-13 +- Add requirements for tar,bzip2 during minimal installs +- More merges from reports against RHEL version of plugins +- Remove unecessary definition of localdir in spec + +* Wed May 05 2009 Adam Stokes - 1.8-11 +- Remove all instances of sysrq +- Consistent macro usage in spec + +* Wed Feb 25 2009 Fedora Release Engineering - 1.8-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Dec 29 2008 Adam Stokes - 1.8-5 +- removed source defines as python manifest handles this + +* Fri Dec 19 2008 Adam Stokes - 1.8-4 +- spec cleanup, fixed license, source +- reworked Makefile to build properly + +* Thu Oct 23 2008 Adam Stokes - 1.8-1 + +* Wed Nov 21 2007 Navid Sheikhol-Eslami - 1.8-0 +- selinux: always collect sestatus +- added many languages +- added --debug option which causes exceptions not to be trapped +- updated to sysreport-1.4.3-13.el5 +- ftp upload to dropbox with --upload +- cluster: major rewrite to support different versions of RHEL +- cluster: check rg_test for errors +- minor changes in various plug-ins (yum, networking, process, kernel) +- fixed some exceptions in threads which were not properly trapped +- veritas: don't run rpm -qa every time +- using rpm's python bindings instead of external binary +- corrected autofs and ldap plugin that were failing when debug option was not found in config file. +- implemented built-in checkdebug() that uses self.files and self.packages to make the decision +- missing binaries are properly detected now. +- better doExitCode handling +- fixed problem with rpm module intercepting SIGINT +- error when user specifies an invalid plugin or plugin option +- named: fixed indentation +- replaced isOptionEnabled() with getOption() +- tune2fs and fdisk were not always run against the correct devices/mountpoint +- added gpg key to package +- updated README with new svn repo and contributors +- updated manpage +- better signal handling +- caching of rpm -q outputs +- report filename includes rhnUsername if available +- report encryption via gpg and support pubkey +- autofs: removed redundant files +- filesys: better handling of removable devices +- added sosReadFile() returns a file's contents +- return after looping inside a directory +- collect udevinfo for each block device +- simply collect output of fdisk -l in one go +- handle sysreport invocation properly (warn if shell is interactive, otherwise spawn sysreport.legacy) +- progress bar don't show 100% until finished() is called +- now runs on RHEL3 as well (python 2.2) +- replaced commonPrefix() with faster code +- filesys: one fdisk -l for all +- selinux: collect fixfilex check output +- devicemapper: collect udevinfo for all block devices +- cluster: validate node names according to RFC 2181 +- systemtap: cleaned up and added checkenabled() method +- added kdump plugin +- added collection of /etc/inittab + +* Wed Aug 13 2007 Navid Sheikhol-Eslami - 1.7-8 +- added README.rh-upload-core + +* Mon Aug 13 2007 Navid Sheikhol-Eslami - 1.7-7 +- added extras/rh-upload-core script from David Mair + +* Mon Aug 9 2007 Navid Sheikhol-Eslami - 1.7-6 +- more language fixes +- added arabic, italian and french +- package prepared for release +- included sysreport as sysreport.legacy + +* Mon Aug 9 2007 Navid Sheikhol-Eslami - 1.7-5 +- package obsoletes sysreport and creates a link pointing to sosreport +- added some commands in cluster and process plugins +- fixed html output (wrong links to cmds, thanks streeter) +- process: back down sleep if D state doesn't change + +* Mon Aug 1 2007 Navid Sheikhol-Eslami - 1.7-4 +- catch KeyboardInterrupt when entering sosreport name +- added color output for increased readability +- list was sorted twice, removing latter .sort() + +* Mon Jul 31 2007 Navid Sheikhol-Eslami - 1.7-3 +- added preliminary problem diagnosis support +- better i18n initialization +- better user messages +- more progressbar fixes +- catch and log python exceptions in report +- use python native commands to create symlinks +- limit concurrent running threads + +* Mon Jul 28 2007 Navid Sheikhol-Eslami - 1.7-2 +- initial language localization support +- added italian translation + +* Mon Jul 16 2007 Navid Sheikhol-Eslami - 1.7-1 +- split up command outputs in sub-directories (sos_command/plugin/command instead of sos_command/plugin.command) +- fixed doExitCode() calling thread.wait() instead of join() +- curses menu is disabled by default +- multithreading is enabled by default +- major progressbar changes (now has ETA) +- multithreading fixes +- plugins class descriptions shortened to fix better in --list-plugins +- rpm -Va in plugins/rpm.py sets eta_weight to 200 (plugin 200 longer than other plugins, for ETA calculation) +- beautified command output filenames in makeCommandFilename() + +* Mon Jul 12 2007 Navid Sheikhol-Eslami - 1.7-0 +- curses menu disabled by default (enable with -c) +- sosreport output friendlier to the user (and similar to sysreport) +- smarter plugin listing which also shows options and disable/enabled plugins +- require root permissions only for actual sosreport generation +- fix in -k where option value was treated as string instead of int +- made progressbar wider (60 chars) +- selinux plugin is enabled only if selinux is also enabled on the system +- made some errors less verbose to the user +- made sosreport not copy files pointed by symbolic links (same as sysreport, we don't need /usr/bin/X or /sbin/ifup) +- copy links as links (cp -P) +- added plugin get_description() that returns a short decription for the plugin +- guess sosreport name from system's name + +* Mon Jul 5 2007 Navid Sheikhol-Eslami - 1.6-5 +- Yet more fixes to make package Fedora compliant. + +* Mon Jul 5 2007 Navid Sheikhol-Eslami - 1.6-4 +- More fixes to make package Fedora compliant. + +* Mon Jul 2 2007 Navid Sheikhol-Eslami - 1.6-3 +- Other fixes to make package Fedora compliant. + +* Mon Jul 2 2007 Navid Sheikhol-Eslami - 1.6-2 +- Minor fixes. + +* Mon Jul 2 2007 Navid Sheikhol-Eslami - 1.6-1 +- Beautified output of --list-plugins. +- GPL licence is now included in the package. +- added python-devel requirement for building package + +* Fri May 25 2007 Steve Conklin - 1.5-1 +- Bumped version + +* Fri May 25 2007 Steve Conklin - 1.4-2 +- Fixed a backtrace on nonexistent file in kernel plugin (thanks, David Robinson) + +* Mon Apr 30 2007 Steve Conklin - 1.4-1 +- Fixed an error in option handling +- Forced the file generated by traceroute to not end in .com +- Fixed a problem with manpage +- Added optional traceroute collection to networking plugin +- Added clalance's patch to gather iptables info. +- Fixes to the device-mapper plugin +- Fixed a problem with installation of man page + +* Mon Apr 16 2007 Steve Conklin - 1.3-3 +- including patches to fix the following: + +* Tue Feb 20 2007 John Berninger - 1.3-2 +- Add man page + +* Fri Dec 15 2006 Steve Conklin - 1.3-1 +- really fixed bz_219654 + +* Fri Dec 15 2006 Steve Conklin - 1.2-1 +- fixed a build problem + +* Fri Dec 15 2006 Steve Conklin - 1.1-1 +- Tighten permissions of tmp directory so only readable by creator bz_219657 +- Don't print message 'Problem at path ...' bz_219654 +- Removed useless message bz_219670 +- Preserve file modification times bz_219674 +- Removed unneeded message about files on copyProhibitedList bz_219712 + +* Wed Aug 30 2006 Steve Conklin - 1.0-1 +- Seperated upstream and RPM versioning + +* Mon Aug 21 2006 Steve Conklin - 0.1-11 +- Code cleanup, fixed a regression in threading + +* Mon Aug 14 2006 Steve Conklin - 0.1-10 +- minor bugfixes, added miltithreading option, setup now quiet + +* Mon Jul 17 2006 Steve Conklin - 0.1-9 +- migrated to svn on 108.redhat.com, fixed a problem with command output linking in report + +* Mon Jun 19 2006 Steve Conklin - 0.1-6 +- Added LICENSE file containing GPL + +* Wed May 31 2006 Steve Conklin - 0.1-5 +- Added fixes to network plugin and prepped for Fedora submission + +* Wed May 31 2006 John Berninger - 0.1-4 +- Reconsolidated subpackages into one package per discussion with sconklin + +* Mon May 22 2006 John Berninger - 0.1-3 +- Added ftp, ldap, mail, named, samba, squid SOS plugins +- Fixed various errors in kernel and hardware plugins + +* Mon May 22 2006 John Benringer - 0.1-2 +- split off cluster plugin into subpackage +- correct file payload lists + +* Mon May 22 2006 John Berninger - 0.1-1 +- initial package build +