From 13178ca5faa95adb05ac3c93a5c99ea0c7db6d4a Mon Sep 17 00:00:00 2001 From: "Bryn M. Reeves" Date: Fri, 22 Jun 2012 12:12:08 +0100 Subject: [PATCH] Update sos to 2.2-29 This synchronises sos in master to the current upstream sos-2.2 branch and includes all patches from RHEL6 not already present. --- ...2.2-bz704383-fix-lvm-data-collection.patch | 22 ++ ...709491-add-vmmemctl-to-vmware-plugin.patch | 18 + sos-bz582259.patch | 34 ++ sos-bz584253.patch | 47 +++ sos-bz585942.patch | 59 +++ ...bz600813-collect-repolist-by-default.patch | 27 ++ sos-bz622407-cluster-el6-fixes.patch | 351 +++++++++++++++++ sos-bz622527-add-anacrontab.patch | 10 + sos-bz622528-redhat-release-6-fixes.patch | 20 + ...z622784-filesys-no-print-regex-debug.patch | 11 + sos-bz622784-parted-dumpe2fs-s390.patch | 31 ++ sos-bz624162-add-sssd.patch | 33 ++ sos-bz659467-startup-drop-LC_ALL.patch | 12 + sos-bz673244-add-infiniband-plugin.patch | 36 ++ ...z675559-devicemapper-collect-ls-tree.patch | 11 + sos-bz676522-collect-etc-dhcp.patch | 9 + sos-bz676656-add-iscsi-target-plugin.patch | 33 ++ sos-bz678665-collect-entitlement-certs.patch | 27 ++ sos-bz679433-filesys-add-lsblk-output.patch | 11 + ...682124-add-nslcd-conf-to-ldap-plugin.patch | 23 ++ sos-bz683219-truncate-large-files.patch | 26 ++ sos-bz683404-fix-autofs-LC_ALL-usage.patch | 12 + sos-bz689387-use-sha256-in-fips-mode.patch | 82 ++++ sos-bz691477-fix-lsusb-and-add-t-and-v.patch | 14 + sos-bz691477-support-new-usbutils.patch | 29 ++ ...-collect-etc-init-and-fix-whitespace.patch | 30 ++ sos-bz697899-collect-brctl-output.patch | 36 ++ sos-bz713449-dont-strip-command-output.patch | 12 + sos-bz714293-collect-etc-rhsm.patch | 11 + ...neighbour-table-to-networking-plugin.patch | 11 + sos-bz726360-qpidd-extend.patch | 52 +++ sos-bz726427-add-ethtool-acg.patch | 13 + sos-bz729455-collect-basic-cgroups-data.patch | 31 ++ sos-bz730641-fix-prox-net.patch | 12 + sos-bz736718-fix-hardware-plugin-paths.patch | 12 + sos-bz736718-fix-hardware.py-exec.patch | 12 + sos-bz739080-collect-stderr.patch | 21 + ...9262-fix-sat-proxy-package-detection.patch | 39 ++ sos-bz749279-fix-rhn-el6-tomcat.patch | 19 + sos-bz749919-add-modprobe-dot-d.patch | 11 + sos-bz750607-forbid-more-pki-paths.patch | 11 + sos-bz751273-fix-brctl-showstp.patch | 12 + sos-bz752549-add-gluster-module.patch | 99 +++++ ...752549-gluster-forbid-more-pem-paths.patch | 11 + sos-bz752666-cloudforms-debug.patch | 31 ++ sos-bz760424-gather-cpufreq-info.patch | 11 + sos-bz760995-fence_virt-conf.patch | 11 + sos-bz766583-allow-nonroot-symlinks.patch | 260 +++++++++++++ ...z767827-fix-rpm-qa-for-long-pkg-name.patch | 12 + ...393-improve-report-name-sanitization.patch | 42 ++ ...ix-rsyslog-collection-and-size-limit.patch | 30 ++ sos-bz782339-unbreak-logging.patch | 182 +++++++++ ...782589-fix-symlink-target-collection.patch | 14 + sos-bz784061-gluster-sunrpc.patch | 34 ++ sos-bz784862-collect-proc-irq.patch | 11 + sos-bz784874-collect-proc-cgroups.patch | 11 + sos-bz789096-kernel_realtime.patch | 51 +++ ...790402-obscure-anaconda-ks-passwords.patch | 21 + sos-bz810702-hw-collect-mcelog.patch | 11 + sos-bz812395-ipa-updates.patch | 108 ++++++ sos-bz814474-libvirt-wildcard-logs.patch | 9 + ...z822442-collect-etc-swift-in-gluster.patch | 13 + sos.spec | 366 ++++++++++++++++-- sources | 2 +- 64 files changed, 2648 insertions(+), 25 deletions(-) create mode 100644 sos-2.2-bz704383-fix-lvm-data-collection.patch create mode 100644 sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch create mode 100644 sos-bz582259.patch create mode 100644 sos-bz584253.patch create mode 100644 sos-bz585942.patch create mode 100644 sos-bz600813-collect-repolist-by-default.patch create mode 100644 sos-bz622407-cluster-el6-fixes.patch create mode 100644 sos-bz622527-add-anacrontab.patch create mode 100644 sos-bz622528-redhat-release-6-fixes.patch create mode 100644 sos-bz622784-filesys-no-print-regex-debug.patch create mode 100644 sos-bz622784-parted-dumpe2fs-s390.patch create mode 100644 sos-bz624162-add-sssd.patch create mode 100644 sos-bz659467-startup-drop-LC_ALL.patch create mode 100644 sos-bz673244-add-infiniband-plugin.patch create mode 100644 sos-bz675559-devicemapper-collect-ls-tree.patch create mode 100644 sos-bz676522-collect-etc-dhcp.patch create mode 100644 sos-bz676656-add-iscsi-target-plugin.patch create mode 100644 sos-bz678665-collect-entitlement-certs.patch create mode 100644 sos-bz679433-filesys-add-lsblk-output.patch create mode 100644 sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch create mode 100644 sos-bz683219-truncate-large-files.patch create mode 100644 sos-bz683404-fix-autofs-LC_ALL-usage.patch create mode 100644 sos-bz689387-use-sha256-in-fips-mode.patch create mode 100644 sos-bz691477-fix-lsusb-and-add-t-and-v.patch create mode 100644 sos-bz691477-support-new-usbutils.patch create mode 100644 sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch create mode 100644 sos-bz697899-collect-brctl-output.patch create mode 100644 sos-bz713449-dont-strip-command-output.patch create mode 100644 sos-bz714293-collect-etc-rhsm.patch create mode 100644 sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch create mode 100644 sos-bz726360-qpidd-extend.patch create mode 100644 sos-bz726427-add-ethtool-acg.patch create mode 100644 sos-bz729455-collect-basic-cgroups-data.patch create mode 100644 sos-bz730641-fix-prox-net.patch create mode 100644 sos-bz736718-fix-hardware-plugin-paths.patch create mode 100644 sos-bz736718-fix-hardware.py-exec.patch create mode 100644 sos-bz739080-collect-stderr.patch create mode 100644 sos-bz749262-fix-sat-proxy-package-detection.patch create mode 100644 sos-bz749279-fix-rhn-el6-tomcat.patch create mode 100644 sos-bz749919-add-modprobe-dot-d.patch create mode 100644 sos-bz750607-forbid-more-pki-paths.patch create mode 100644 sos-bz751273-fix-brctl-showstp.patch create mode 100644 sos-bz752549-add-gluster-module.patch create mode 100644 sos-bz752549-gluster-forbid-more-pem-paths.patch create mode 100644 sos-bz752666-cloudforms-debug.patch create mode 100644 sos-bz760424-gather-cpufreq-info.patch create mode 100644 sos-bz760995-fence_virt-conf.patch create mode 100644 sos-bz766583-allow-nonroot-symlinks.patch create mode 100644 sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch create mode 100644 sos-bz771393-improve-report-name-sanitization.patch create mode 100644 sos-bz771501-fix-rsyslog-collection-and-size-limit.patch create mode 100644 sos-bz782339-unbreak-logging.patch create mode 100644 sos-bz782589-fix-symlink-target-collection.patch create mode 100644 sos-bz784061-gluster-sunrpc.patch create mode 100644 sos-bz784862-collect-proc-irq.patch create mode 100644 sos-bz784874-collect-proc-cgroups.patch create mode 100644 sos-bz789096-kernel_realtime.patch create mode 100644 sos-bz790402-obscure-anaconda-ks-passwords.patch create mode 100644 sos-bz810702-hw-collect-mcelog.patch create mode 100644 sos-bz812395-ipa-updates.patch create mode 100644 sos-bz814474-libvirt-wildcard-logs.patch create mode 100644 sos-bz822442-collect-etc-swift-in-gluster.patch diff --git a/sos-2.2-bz704383-fix-lvm-data-collection.patch b/sos-2.2-bz704383-fix-lvm-data-collection.patch new file mode 100644 index 0000000..7e868f0 --- /dev/null +++ b/sos-2.2-bz704383-fix-lvm-data-collection.patch @@ -0,0 +1,22 @@ +diff -up sos-2.2/sos/plugins/devicemapper.py.orig sos-2.2/sos/plugins/devicemapper.py +--- sos-2.2/sos/plugins/devicemapper.py.orig 2011-08-13 13:45:57.508883390 +0100 ++++ sos-2.2/sos/plugins/devicemapper.py 2011-08-13 13:47:19.384833623 +0100 +@@ -34,12 +34,12 @@ class devicemapper(sos.plugintools.Plugi + self.collectExtOutput("/sbin/dmsetup status") + self.collectExtOutput("/sbin/dmsetup ls --tree") + +- self.collectExtOutput("/usr/sbin/vgdisplay -vv", root_symlink = "vgdisplay") +- self.collectExtOutput("/usr/sbin/vgscan -vvv") +- self.collectExtOutput("/usr/sbin/pvscan -v") +- self.collectExtOutput("/usr/sbin/lvs -a -o +devices") +- self.collectExtOutput("/usr/sbin/pvs -a -v") +- self.collectExtOutput("/usr/sbin/vgs -v") ++ self.collectExtOutput("/sbin/vgdisplay -vv", root_symlink = "vgdisplay") ++ self.collectExtOutput("/sbin/vgscan -vvv") ++ self.collectExtOutput("/sbin/pvscan -v") ++ self.collectExtOutput("/sbin/lvs -a -o +devices") ++ self.collectExtOutput("/sbin/pvs -a -v") ++ self.collectExtOutput("/sbin/vgs -v") + self.collectExtOutput("/sbin/mdadm -D /dev/md*") + + self.addCopySpec("/etc/lvm") diff --git a/sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch b/sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch new file mode 100644 index 0000000..7cd4e6f --- /dev/null +++ b/sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch @@ -0,0 +1,18 @@ +diff -up sos-2.2/sos/plugins/vmware.py.orig sos-2.2/sos/plugins/vmware.py +--- sos-2.2/sos/plugins/vmware.py.orig 2011-08-13 12:57:46.112712491 +0100 ++++ sos-2.2/sos/plugins/vmware.py 2011-08-13 13:00:22.064760692 +0100 +@@ -19,7 +19,7 @@ class vmware(sos.plugintools.PluginBase) + """VMWare related information + """ + def checkenabled(self): +- if os.path.exists("/usr/bin/vmware"): ++ if os.path.exists("/usr/bin/vmware") or os.path.exists("/usr/init.d/vmware-tools"): + return True + return False + +@@ -27,4 +27,5 @@ class vmware(sos.plugintools.PluginBase) + self.collectExtOutput("/usr/bin/vmware -v") + self.addCopySpec("/etc/vmware/locations") + self.addCopySpec("/etc/vmware/config") ++ self.addCopySpec("/proc/vmmemctl") + return diff --git a/sos-bz582259.patch b/sos-bz582259.patch new file mode 100644 index 0000000..38b006f --- /dev/null +++ b/sos-bz582259.patch @@ -0,0 +1,34 @@ +diff -up sos-2.2/sos/plugins/cluster.py.bz582259 sos-2.2/sos/plugins/cluster.py +--- sos-2.2/sos/plugins/cluster.py.bz582259 2010-07-29 11:34:08.904167916 -0400 ++++ sos-2.2/sos/plugins/cluster.py 2010-07-29 11:34:23.483159810 -0400 +@@ -34,7 +34,8 @@ class cluster(sos.plugintools.PluginBase + "gfs-utils", "gnbd", "kmod-gfs", "kmod-gnbd", "lvm2-cluster", "gfs2-utils" ] + + elif rhelver == 6: +- self.packages = [ "luci", "ricci" ] ++ self.packages = [ "ricci", "corosync", "openais", ++ "cman", "clusterlib", "fence-agents" ] + + self.files = [ "/etc/cluster/cluster.conf" ] + return sos.plugintools.PluginBase.checkenabled(self) +@@ -69,6 +70,10 @@ class cluster(sos.plugintools.PluginBase + serv_check.extend( [ "cman", "rgmanager" ] ) + if self.has_gfs(): + serv_check.extend( ["gfs", "clvmd"] ) ++ elif rhelver == 6: ++ serv_check.extend( [ "fenced", "corosync", "dlm_controld"] ) ++ if self.has_gfs(): ++ serv_check.extend( ["gfs_controld"] ) + + # check that kernel module packages are installed for + # running kernel version +@@ -156,7 +161,8 @@ class cluster(sos.plugintools.PluginBase + self.addDiagnose("one or more nodes have manual fencing agent configured (data integrity is not guaranteed)") + + # if fence_ilo or fence_drac, make sure acpid is not running +- ret, hostname, time = self.callExtProg("/bin/uname -n").split(".")[0] ++ ret, hostname, time = self.callExtProg("/bin/uname -n") ++ hostname = hostname.split(".")[0] + if len(xpathContext.xpathEval('/cluster/clusternodes/clusternode[@name = "%s" and /cluster/fencedevices/fencedevice[@agent="fence_rsa" or @agent="fence_drac"]/@name=fence/method/device/@name]' % hostname )): + ret, out, time = self.callExtProg("/sbin/service acpid status") + if ret == 0 or self.policy().runlevelDefault() in self.policy().runlevelByService("acpid"): diff --git a/sos-bz584253.patch b/sos-bz584253.patch new file mode 100644 index 0000000..228f5fc --- /dev/null +++ b/sos-bz584253.patch @@ -0,0 +1,47 @@ +diff -up sos-2.2/Makefile.bz585942 sos-2.2/Makefile +--- sos-2.2/Makefile.bz585942 2010-07-29 11:41:52.260909433 -0400 ++++ sos-2.2/Makefile 2010-07-29 11:41:56.277909635 -0400 +@@ -37,6 +37,7 @@ install: + install -m644 LICENSE README TODO $(DESTDIR)/usr/share/$(NAME)/. + install -m644 $(NAME).conf $(DESTDIR)/etc/$(NAME).conf + install -m644 gpgkeys/rhsupport.pub $(DESTDIR)/usr/share/$(NAME)/. ++ sed 's/@SOSVERSION@/$(VERSION)/g'sos/__init__.py + for d in $(SUBDIRS); do make DESTDIR=`cd $(DESTDIR); pwd` -C $$d install; [ $$? = 0 ] || exit 1; done + + $(NAME)-$(VERSION).tar.gz: clean gpgkey + +diff -up sos-2.2/sos/sosreport.py.bz584253 sos-2.2/sos/sosreport.py +--- sos-2.2/sos/sosreport.py.bz584253 2010-07-29 11:43:53.718936059 -0400 ++++ sos-2.2/sos/sosreport.py 2010-07-29 11:44:01.279936234 -0400 +@@ -46,8 +46,8 @@ from itertools import * + from collections import deque + + from sos import _sos as _ ++from sos import __version__ + +-__version__ = 2.1 + if os.path.isfile('/etc/fedora-release'): + __distro__ = 'Fedora' + else: +@@ -655,8 +655,9 @@ No changes will be made to your system. + raise + else: + error_log = open(logdir + "/sosreport-plugin-errors.txt", "a") ++ etype, eval, etrace = sys.exc_info() + traceback.print_exception(etype, eval, etrace, limit=2, file=sys.stdout) +- error_log.write(traceback.format_exc) ++ error_log.write(traceback.format_exc()) + error_log.close() + + tmpcount += len(plug.diagnose_msgs) +@@ -727,8 +728,9 @@ No changes will be made to your system. + raise + else: + error_log = open(logdir + "/sosreport-plugin-errors.txt", "a") ++ etype, eval, etrace = sys.exc_info() + traceback.print_exception(etype, eval, etrace, limit=2, file=sys.stdout) +- error_log.write(traceback.format_exc) ++ error_log.write(traceback.format_exc()) + error_log.close() + + print diff --git a/sos-bz585942.patch b/sos-bz585942.patch new file mode 100644 index 0000000..84295f0 --- /dev/null +++ b/sos-bz585942.patch @@ -0,0 +1,59 @@ +--- sos-2.2/sos/__init__.py 2010-03-26 16:24:08.000000000 -0400 ++++ /dev/null 2010-07-28 23:09:21.745168185 -0400 +@@ -1,26 +0,0 @@ +-## Copyright 2010 Red Hat, Inc. +-## Author: Adam Stokes +- +-## 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 gettext +- +-gettext_dir = "/usr/share/locale" +-gettext_app = "sos" +- +-gettext.bindtextdomain(gettext_app, gettext_dir) +- +-def _sos(msg): +- return gettext.dgettext(gettext_app, msg) +--- /dev/null 2010-07-28 23:09:21.745168185 -0400 ++++ sos-2.2/sos/__init__.py.in 2010-07-29 12:21:12.237102733 -0400 +@@ -0,0 +1,27 @@ ++## Copyright 2010 Red Hat, Inc. ++## Author: Adam Stokes ++ ++## 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 gettext ++ ++gettext_dir = "/usr/share/locale" ++gettext_app = "sos" ++ ++gettext.bindtextdomain(gettext_app, gettext_dir) ++ ++__version__="@SOSVERSION@" ++def _sos(msg): ++ return gettext.dgettext(gettext_app, msg) diff --git a/sos-bz600813-collect-repolist-by-default.patch b/sos-bz600813-collect-repolist-by-default.patch new file mode 100644 index 0000000..fd7cbb4 --- /dev/null +++ b/sos-bz600813-collect-repolist-by-default.patch @@ -0,0 +1,27 @@ +diff -up sos-2.2/sos/plugins/yum.py.orig sos-2.2/sos/plugins/yum.py +--- sos-2.2/sos/plugins/yum.py.orig 2011-08-12 12:33:23.768711944 +0100 ++++ sos-2.2/sos/plugins/yum.py 2011-08-12 12:54:20.547487066 +0100 +@@ -19,8 +19,8 @@ class yum(sos.plugintools.PluginBase): + """yum information + """ + +- optionList = [("yumlist", "list repositories and packages", "slow", False)] +- optionList = [("yumdebug", "gather yum debugging data", "slow", False)] ++ optionList = [("yumlist", "list repositories and packages", "slow", False), ++ ("yumdebug", "gather yum debugging data", "slow", False)] + + def checkenabled(self): + self.files = [ "/etc/yum.conf" ] +@@ -43,9 +43,10 @@ class yum(sos.plugintools.PluginBase): + self.addCopySpec("/etc/yum.conf") + self.addCopySpec("/var/log/yum.log") + ++ # Get a list of channels the machine is subscribed to. ++ self.collectExtOutput("yum -C repolist") ++ + if self.getOption("yumlist"): +- # Get a list of channels the machine is subscribed to. +- self.collectExtOutput("/bin/echo \"repo list\" | /usr/bin/yum shell") + # List various information about available packages + self.collectExtOutput("/usr/bin/yum list") + diff --git a/sos-bz622407-cluster-el6-fixes.patch b/sos-bz622407-cluster-el6-fixes.patch new file mode 100644 index 0000000..c612fa3 --- /dev/null +++ b/sos-bz622407-cluster-el6-fixes.patch @@ -0,0 +1,351 @@ +diff -up sos-2.2/sos/plugins/cluster.py.orig sos-2.2/sos/plugins/cluster.py +--- sos-2.2/sos/plugins/cluster.py.orig 2011-02-04 14:50:31.510521528 -0500 ++++ sos-2.2/sos/plugins/cluster.py 2011-02-04 14:51:19.485399800 -0500 +@@ -14,12 +14,12 @@ + + import sos.plugintools + import os, re +-import time, libxml2 +-import glob ++from glob import glob + + class cluster(sos.plugintools.PluginBase): + """cluster suite and GFS related information + """ ++ + optionList = [("gfslockdump", 'gather output of gfs lockdumps', 'slow', False), + ('lockdump', 'gather dlm lockdumps', 'slow', False)] + +@@ -40,190 +40,9 @@ class cluster(sos.plugintools.PluginBase + self.files = [ "/etc/cluster/cluster.conf" ] + return sos.plugintools.PluginBase.checkenabled(self) + +- def has_gfs(self): +- return (len(self.doRegexFindAll(r'^\S+\s+\S+\s+gfs\s+.*$', "/etc/mtab")) > 0) +- +- def diagnose(self): ++ def setup(self): + rhelver = self.policy().rhelVersion() + +- # check if the minimum set of packages is installed +- # for RHEL4 RHCS(ccs, cman, cman-kernel, magma, magma-plugins, (dlm, dlm-kernel) || gulm, perl-Net-Telnet, rgmanager, fence) +- # RHEL4 GFS (GFS, GFS-kernel, ccs, lvm2-cluster, fence) +- +- pkgs_check = [] +- mods_check = [] +- serv_check = [] +- +- if rhelver == 4: +- pkgs_check.extend( [ "ccs", "cman", "magma", "magma-plugins", "perl-Net-Telnet", "rgmanager", "fence" ] ) +- mods_check.extend( [ "cman", "dlm" ] ) +- if self.has_gfs(): +- mods_check.append("gfs") +- serv_check.extend( [ "cman", "ccsd", "rgmanager", "fenced" ] ) +- if self.has_gfs(): +- serv_check.extend( ["gfs", "clvmd"] ) +- elif rhelver == 5: +- pkgs_check.extend ( [ "cman", "perl-Net-Telnet", "rgmanager" ] ) +- mods_check.extend( [ "dlm" ] ) +- if self.has_gfs(): +- mods_check.extend( ["gfs", "gfs2"] ) +- serv_check.extend( [ "cman", "rgmanager" ] ) +- if self.has_gfs(): +- serv_check.extend( ["gfs", "clvmd"] ) +- elif rhelver == 6: +- serv_check.extend( [ "fenced", "corosync", "dlm_controld"] ) +- if self.has_gfs(): +- serv_check.extend( ["gfs_controld"] ) +- +- # check that kernel module packages are installed for +- # running kernel version +- +- for modname in mods_check: +- found = 0 +- +- if self.policy().allPkgsByNameRegex( "^" + modname ): +- found = 1 +- +- ret, out, time = self.callExtProg('/sbin/modinfo -F vermagic ' + modname) +- +- if ret == 0: +- found = 2 +- +- if len(self.fileGrep("^%s\s+" % modname, "/proc/modules")) > 0: +- found = 3 +- +- if found == 0: +- self.addDiagnose("required kernel module is missing: %s" % modname) +- elif found == 1: +- self.addDiagnose("required module is not available for current kernel: %s" % modname) +- elif found == 2: +- self.addDiagnose("required module is available but not loaded: %s" % modname) +- +- for pkg in pkgs_check: +- if not self.isInstalled(pkg): +- self.addDiagnose("required package is missing: %s" % pkg) +- +- if rhelver == "4": +- # (dlm, dlm-kernel) || gulm +- if not ((self.isInstalled("dlm") and self.isInstalled("dlm-kernel")) or self.isInstalled("gulm")): +- self.addDiagnose("required packages are missing: (dlm, dlm-kernel) || gulm") +- +- # check if all the needed daemons are active at sosreport time +- # check if they are started at boot time in RHEL4 RHCS (cman, ccsd, rgmanager, fenced) +- # and GFS (gfs, ccsd, clvmd, fenced) +- +- for service in serv_check: +- ret, out, time = self.callExtProg("/sbin/service %s status &> /dev/null" % service) +- if ret != 0: +- self.addDiagnose("service %s is not running" % service) +- +- if not self.policy().runlevelDefault() in self.policy().runlevelByService(service): +- self.addDiagnose("service %s is not started in default runlevel" % service) +- +- # FIXME: missing important cman services +- # FIXME: any cman service whose state != run ? +- # Fence Domain: "default" 2 2 run - +- +- # is cluster quorate +- if not self.is_cluster_quorate(): +- self.addDiagnose("cluster node is not quorate") +- +- # if there is no cluster.conf, diagnose() finishes here. +- try: +- os.stat("/etc/cluster/cluster.conf") +- except: +- self.addDiagnose("/etc/cluster/cluster.conf is missing") +- return +- +- # setup XML xpath context +- xml = libxml2.parseFile("/etc/cluster/cluster.conf") +- xpathContext = xml.xpathNewContext() +- +- # make sure that the node names are valid according to RFC 2181 +- for hostname in xpathContext.xpathEval('/cluster/clusternodes/clusternode/@name'): +- if not re.match('^[a-zA-Z]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$', hostname.content): +- self.addDiagnose("node name (%s) contains invalid characters" % hostname.content) +- +- # do not rely on DNS to resolve node names, must have them in /etc/hosts +- for hostname in xpathContext.xpathEval('/cluster/clusternodes/clusternode/@name'): +- if len(self.fileGrep(r'^.*\W+%s' % hostname.content , "/etc/hosts")) == 0: +- self.addDiagnose("node %s is not defined in /etc/hosts" % hostname.content) +- +- # check fencing (warn on no fencing) +- if len(xpathContext.xpathEval("/cluster/clusternodes/clusternode[not(fence/method/device)]")): +- if self.has_gfs(): +- self.addDiagnose("one or more nodes have no fencing agent configured: fencing is required for GFS to work") +- else: +- self.addDiagnose("one or more nodes have no fencing agent configured: the cluster infrastructure might not work as intended") +- +- # check fencing (warn on manual) +- if len(xpathContext.xpathEval("/cluster/clusternodes/clusternode[/cluster/fencedevices/fencedevice[@agent='fence_manual']/@name=fence/method/device/@name]")): +- self.addDiagnose("one or more nodes have manual fencing agent configured (data integrity is not guaranteed)") +- +- # if fence_ilo or fence_drac, make sure acpid is not running +- ret, hostname, time = self.callExtProg("/bin/uname -n") +- hostname = hostname.split(".")[0] +- if len(xpathContext.xpathEval('/cluster/clusternodes/clusternode[@name = "%s" and /cluster/fencedevices/fencedevice[@agent="fence_rsa" or @agent="fence_drac"]/@name=fence/method/device/@name]' % hostname )): +- ret, out, time = self.callExtProg("/sbin/service acpid status") +- if ret == 0 or self.policy().runlevelDefault() in self.policy().runlevelByService("acpid"): +- self.addDiagnose("acpid is enabled, this may cause problems with your fencing method.") +- +- # check for fs exported via nfs without nfsid attribute +- if len(xpathContext.xpathEval("/cluster/rm/service//fs[not(@fsid)]/nfsexport")): +- for xmlNode in xpathContext.xpathEval("/cluster/rm/service//fs[not(@fsid)]"): +- fsRefAttribute = xmlNode.xpathEval("@ref") +- if (len(fsRefAttribute) > 0) : +- fsRefName = fsRefAttribute[0].content +- if len(xpathContext.xpathEval("cluster/rm/resources/fs[@name='%s'][not(@fsid)]" % fsRefName)): +- self.addDiagnose("one or more nfs export do not have a fsid attribute set.") +- break +- else: +- self.addDiagnose("one or more nfs export do not have a fsid attribute set.") +- +- # cluster.conf file version and the in-memory cluster configuration version matches +- status, cluster_version, time = self.callExtProg("cman_tool status | grep 'Config version'") +- if not status: +- cluster_version = cluster_version[16:] +- else: +- cluster_version = None +- conf_version = xpathContext.xpathEval("/cluster/@config_version")[0].content +- +- if status == 0 and conf_version != cluster_version: +- self.addDiagnose("cluster.conf and in-memory configuration version differ (%s != %s)" % (conf_version, cluster_version) ) +- +- status, output, time = self.callExtProg("/usr/sbin/rg_test test /etc/cluster/cluster.conf") +- if output.find("Error: ") > 0: +- self.addDiagnose("configuration errors are present according to rg_test") +- +- # make sure the first part of the lock table matches the cluster name +- # and that the locking protocol is sane +- cluster_name = xpathContext.xpathEval("/cluster/@name")[0].content +- +- for fs in self.fileGrep(r'^[^#][/\w]*\W*[/\w]*\W*gfs', "/etc/fstab"): +- # for each gfs entry +- fs = fs.split() +- lockproto = self.get_gfs_sb_field(fs[0], "sb_lockproto") +- if lockproto and lockproto != self.get_locking_proto(): +- self.addDiagnose("gfs mountpoint (%s) is using the wrong locking protocol (%s)" % (fs[0], lockproto) ) +- +- locktable = self.get_gfs_sb_field(fs[0], "sb_locktable") +- try: locktable = locktable.split(":")[0] +- except: continue +- if locktable != cluster_name: +- self.addDiagnose("gfs mountpoint (%s) is using the wrong locking table" % fs[0]) +- +- # Check for existence of weak-updates in gfs2 prior to 2.6.18-128 +- if rhelver == 5: +- ret, vermagic, time = self.callExtProg("modinfo -F vermagic gfs2") +- # just kernel release from vermagic line +- vermagic = vermagic.split()[0].lstrip('2.6.18-') +- vermagic = vermagic[:vermagic.find('.')] +- if int(vermagic) < 128: +- self.addDiagnose('GFS2 is being used via weak-updates, kmod-gfs2 should be uninstalled and system reboot' \ +- 'to allow for kernel provided gfs2 module to be used.') +- +- def setup(self): +- self.collectExtOutput("/sbin/fdisk -l") + self.addCopySpec("/etc/cluster.conf") + self.addCopySpec("/etc/cluster.xml") + self.addCopySpec("/etc/cluster") +@@ -231,79 +50,82 @@ class cluster(sos.plugintools.PluginBase + self.addCopySpec("/etc/sysconfig/cman") + self.addCopySpec("/var/lib/ricci") + self.addCopySpec("/var/lib/luci") ++ self.addCopySpec("/var/log/cluster") ++ self.addCopySpec("/var/log/luci/luci.log") ++ ++ if self.getOption('gfslockdump'): ++ self.do_gfslockdump() ++ ++ if self.getOption('lockdump'): ++ self.do_lockdump() ++ + self.collectExtOutput("/usr/sbin/rg_test test /etc/cluster/cluster.conf") +- self.collectExtOutput("cman_tool status") +- self.collectExtOutput("cman_tool -a nodes") +- self.collectOutputNow("group_tool ls -g1") +- self.collectOutputNow("group_tool dump") +- self.collectExtOutput("ccs_tool lsnode") + self.collectExtOutput("fence_tool ls -n") +- self.collectExtOutput("dlm_tool ls -n") + self.collectExtOutput("gfs_control ls -n") +- self.collectExtOutput("fence_tool dump", root_symlink="fenced.txt") +- self.collectExtOutput("dlm_tool dump", root_symlink="dlm_controld.txt") +- self.collectExtOutput("gfs_control dump", root_symlink="gfs_controld.txt") +- self.collectExtOutput("dlm_tool log_plock", root_symlink="log_plock.txt") +- self.addCopySpec("/var/log/cluster") +- self.addCopySpec("/var/log/luci/luci.log") +- +- self.collectExtOutput("clustat") ++ self.collectExtOutput("dlm_tool log_plock") + ++ self.collectExtOutput("/sbin/fdisk -l") ++ self.collectOutputNow("clustat") ++ self.collectOutputNow("group_tool dump") ++ self.collectExtOutput("cman_tool services") ++ self.collectExtOutput("cman_tool nodes") ++ self.collectExtOutput("cman_tool status") ++ self.collectExtOutput("ccs_tool lsnode") + self.collectExtOutput("/sbin/ipvsadm -L") + +- if self.getOption('gfslockdump'): self.do_gfslockdump() +- if self.getOption('lockdump'): self.do_lockdump() +- +- return ++ if rhelver is 4: ++ self.addCopySpec("/proc/cluster/*") ++ self.collectExtOutput("cman_tool nodes") ++ ++ if rhelver is not 4: # 5+ ++ self.collectExtOutput("cman_tool -a nodes") ++ ++ if rhelver is 5: ++ self.collectExtOutput("group_tool -v") ++ self.collectExtOutput("group_tool dump fence") ++ self.collectExtOutput("group_tool dump gfs") ++ ++ if rhelver not in (4,5): # 6+ ++ self.collectExtOutput("corosync-quorumtool -l") ++ self.collectExtOutput("corosync-quorumtool -s") ++ self.collectExtOutput("corosync-cpgtool") ++ self.collectExtOutput("corosync-objctl") ++ self.collectExtOutput("group_tool ls -g1") ++ self.collectExtOutput("gfs_control ls -n") ++ self.collectExtOutput("gfs_control dump") ++ self.collectExtOutput("fence_tool dump") ++ self.collectExtOutput("dlm_tool dump") ++ self.collectExtOutput("dlm_tool ls -n") + + def do_lockdump(self): +- status, output, time= self.callExtProg("cman_tool services") +- if status: +- # command somehow failed +- return False +- + rhelver = self.policy().rhelVersion() + +- if rhelver == "4": +- regex = r'^DLM Lock Space:\s*"([^"]*)".*$' +- elif rhelver == "5Server" or rhelver == "5Client": +- regex = r'^dlm\s+[^\s]+\s+([^\s]+)\s.*$' +- +- reg=re.compile(regex,re.MULTILINE) +- for lockspace in reg.findall(output): +- ret, out, time = self.callExtProg("echo %s > /proc/cluster/dlm_locks" % lockspace) +- self.collectOutputNow("cat /proc/cluster/dlm_locks", root_symlink = "dlm_locks_%s" % lockspace) +- +- def get_locking_proto(self): +- # FIXME: what's the best way to find out ? +- return "lock_dlm" +- return "lock_gulm" ++ if rhelver is 4: ++ status, output, time = self.callExtProg("cman_tool services") ++ for lockspace in re.compile(r'^DLM Lock Space:\s*"([^"]*)".*$', re.MULTILINE).findall(output): ++ self.callExtProg("echo %s > /proc/cluster/dlm_locks" % lockspace) ++ self.collectOutputNow("cat /proc/cluster/dlm_locks", ++ suggest_filename = "dlm_locks_%s" % lockspace) ++ ++ if rhelver is 5: ++ status, output, time = self.callExtProg("group_tool") ++ for lockspace in re.compile(r'^dlm\s+[^\s]+\s+([^\s]+)$', re.MULTILINE).findall(output): ++ self.collectExtOutput("dlm_tool lockdebug '%s'" % lockspace, ++ suggest_filename = "dlm_locks_%s" % lockspace) ++ ++ else: # RHEL6 or recent Fedora ++ status, output, time = self.callExtProg("dlm_tool ls") ++ for lockspace in re.compile(r'^name\s+([^\s]+)$', re.MULTILINE).findall(output): ++ self.collectExtOutput("dlm_tool lockdebug -svw '%s'" % lockspace, ++ suggest_filename = "dlm_locks_%s" % lockspace) + + def do_gfslockdump(self): + for mntpoint in self.doRegexFindAll(r'^\S+\s+([^\s]+)\s+gfs\s+.*$', "/proc/mounts"): +- self.collectExtOutput("/sbin/gfs_tool lockdump %s" % mntpoint, root_symlink = "gfs_lockdump_" + self.mangleCommand(mntpoint) ) +- +- def do_rgmanager_bt(self): +- # FIXME: threads backtrace via SIGALRM +- return ++ self.collectExtOutput("/sbin/gfs_tool lockdump %s" % mntpoint, ++ suggest_filename = "gfs_lockdump_" + self.mangleCommand(mntpoint)) + + def postproc(self): +- for cluster_conf in glob.glob("/etc/cluster/cluster.conf*"): ++ for cluster_conf in glob("/etc/cluster/cluster.conf*"): + self.doRegexSub(cluster_conf, r"(\s*\ ++ ++### 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 sos.plugintools ++import os ++ ++class sssd(sos.plugintools.PluginBase): ++ """sssd-related Diagnostic Information ++ """ ++ ++ def checkenabled(self): ++ return self.isInstalled("sssd") ++ ++ def setup(self): ++ self.addCopySpec("/etc/sssd") ++ self.addCopySpec("/var/log/sssd/*") diff --git a/sos-bz659467-startup-drop-LC_ALL.patch b/sos-bz659467-startup-drop-LC_ALL.patch new file mode 100644 index 0000000..00e69fe --- /dev/null +++ b/sos-bz659467-startup-drop-LC_ALL.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/startup.py.orig sos-2.2/sos/plugins/startup.py +--- sos-2.2/sos/plugins/startup.py.orig 2011-02-25 11:55:10.000000000 +0000 ++++ sos-2.2/sos/plugins/startup.py 2011-02-25 11:55:24.000000000 +0000 +@@ -22,7 +22,7 @@ class startup(sos.plugintools.PluginBase + def setup(self): + self.addCopySpec("/etc/rc.d") + +- self.collectExtOutput("LC_ALL=C /sbin/chkconfig --list", root_symlink = "chkconfig") ++ self.collectExtOutput("/sbin/chkconfig --list", root_symlink = "chkconfig") + if self.getOption('servicestatus'): + self.collectExtOutput("/sbin/service --status-all") + self.collectExtOutput("/sbin/runlevel") diff --git a/sos-bz673244-add-infiniband-plugin.patch b/sos-bz673244-add-infiniband-plugin.patch new file mode 100644 index 0000000..92146f0 --- /dev/null +++ b/sos-bz673244-add-infiniband-plugin.patch @@ -0,0 +1,36 @@ +diff -up sos-2.2/sos/plugins/infiniband.py.orig sos-2.2/sos/plugins/infiniband.py +--- sos-2.2/sos/plugins/infiniband.py.orig 2011-08-12 20:51:28.450712897 +0100 ++++ sos-2.2/sos/plugins/infiniband.py 2011-08-12 21:02:17.143789131 +0100 +@@ -0,0 +1,32 @@ ++## Copyright (C) 2011 Red Hat ++ ++### 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 sos.plugintools ++ ++class infiniband(sos.plugintools.PluginBase): ++ """Infiniband related information ++ """ ++ ++ def checkenabled(self): ++ if self.cInfo["policy"].pkgByName("libibverbs-utils"): ++ return True ++ return False ++ ++ def setup(self): ++ self.collectExtOutput("/usr/bin/ibv_devices") ++ self.collectExtOutput("/usr/bin/ibv_devinfo") ++ return ++ diff --git a/sos-bz675559-devicemapper-collect-ls-tree.patch b/sos-bz675559-devicemapper-collect-ls-tree.patch new file mode 100644 index 0000000..d763ea3 --- /dev/null +++ b/sos-bz675559-devicemapper-collect-ls-tree.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/devicemapper.py.orig sos-2.2/sos/plugins/devicemapper.py +--- sos-2.2/sos/plugins/devicemapper.py.orig 2011-02-25 12:02:20.000000000 +0000 ++++ sos-2.2/sos/plugins/devicemapper.py 2011-02-25 12:02:38.000000000 +0000 +@@ -32,6 +32,7 @@ class devicemapper(sos.plugintools.Plugi + self.collectExtOutput("/sbin/dmsetup info -c") + self.collectExtOutput("/sbin/dmsetup table") + self.collectExtOutput("/sbin/dmsetup status") ++ self.collectExtOutput("/sbin/dmsetup ls --tree") + + self.collectExtOutput("/usr/sbin/vgdisplay -vv", root_symlink = "vgdisplay") + self.collectExtOutput("/usr/sbin/vgscan -vvv") diff --git a/sos-bz676522-collect-etc-dhcp.patch b/sos-bz676522-collect-etc-dhcp.patch new file mode 100644 index 0000000..660cb5f --- /dev/null +++ b/sos-bz676522-collect-etc-dhcp.patch @@ -0,0 +1,9 @@ +diff -up sos-2.2/sos/plugins/dhcp.py.orig sos-2.2/sos/plugins/dhcp.py +--- sos-2.2/sos/plugins/dhcp.py.orig 2011-02-25 11:59:12.000000000 +0000 ++++ sos-2.2/sos/plugins/dhcp.py 2011-02-25 11:59:57.000000000 +0000 +@@ -26,4 +26,5 @@ class dhcp(sos.plugintools.PluginBase): + self.addCopySpec("/etc/sysconfig/dhcrelay") + self.addCopySpec("/etc/sysconfig/dhcpd") + self.addCopySpec("/etc/dhcpd.conf") ++ self.addCopySpec("/etc/dhcp") + return diff --git a/sos-bz676656-add-iscsi-target-plugin.patch b/sos-bz676656-add-iscsi-target-plugin.patch new file mode 100644 index 0000000..bccab85 --- /dev/null +++ b/sos-bz676656-add-iscsi-target-plugin.patch @@ -0,0 +1,33 @@ +diff -up sos-2.2/sos/plugins/iscsitarget.py.orig sos-2.2/sos/plugins/iscsitarget.py +--- sos-2.2/sos/plugins/iscsitarget.py.orig 2011-08-12 21:31:06.822774059 +0100 ++++ sos-2.2/sos/plugins/iscsitarget.py 2011-08-12 21:17:01.115712664 +0100 +@@ -0,0 +1,29 @@ ++## Copyright (C) 2007-2010 Red Hat, Inc., Ben Turner ++ ++### 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 sos.plugintools ++ ++class iscsitarget(sos.plugintools.PluginBase): ++ """iscsi-target related information ++ """ ++ ++ def checkenabled(self): ++ self.packages = [ "scsi-target-utils" ] ++ return sos.plugintools.PluginBase.checkenabled(self) ++ ++ def setup(self): ++ self.addCopySpec("/etc/tgt/targets.conf") ++ self.collectExtOutput("tgtadm --lld iscsi --op show --mode target") diff --git a/sos-bz678665-collect-entitlement-certs.patch b/sos-bz678665-collect-entitlement-certs.patch new file mode 100644 index 0000000..9f40eee --- /dev/null +++ b/sos-bz678665-collect-entitlement-certs.patch @@ -0,0 +1,27 @@ +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2011-02-24 19:41:50.000000000 +0000 ++++ sos-2.2/sos/plugins/general.py 2011-02-24 19:43:02.000000000 +0000 +@@ -25,6 +25,7 @@ class general(sos.plugintools.PluginBase + ("all_logs", "collect all log files defined in syslog.conf", "", False)] + + def setup(self): ++ rhelver = self.policy().rhelVersion() + self.addCopySpec("/etc/redhat-release") + self.addCopySpec("/etc/fedora-release") + self.addCopySpec("/etc/inittab") +@@ -49,8 +50,14 @@ class general(sos.plugintools.PluginBase + self.collectExtOutput("/usr/sbin/alternatives --display java", root_symlink = "java") + self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java") + ++ # new entitlement certificate support ++ if rhelver == 6 or rhelver == 5: ++ self.addCopySpec("/etc/pki/product/*.pem") ++ self.addCopySpec("/etc/pki/consumer/cert.pem") ++ self.addCopySpec("/etc/pki/entitlement/*.pem") ++ self.addForbiddenPath("/etc/pki/entitlement/key.pem") ++ + if self.getOption('all_logs'): +- rhelver = self.policy().rhelVersion() + if rhelver == 5 or rhelver == 4: + logs=self.doRegexFindAll(r"^\S+\s+(\/.*log.*)\s+$", "/etc/syslog.conf") + for i in logs: diff --git a/sos-bz679433-filesys-add-lsblk-output.patch b/sos-bz679433-filesys-add-lsblk-output.patch new file mode 100644 index 0000000..52109e1 --- /dev/null +++ b/sos-bz679433-filesys-add-lsblk-output.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/filesys.py.orig sos-2.2/sos/plugins/filesys.py +--- sos-2.2/sos/plugins/filesys.py.orig 2011-02-25 12:21:24.000000000 +0000 ++++ sos-2.2/sos/plugins/filesys.py 2011-02-25 12:38:14.000000000 +0000 +@@ -37,6 +37,7 @@ class filesys(sos.plugintools.PluginBase + if self.getOption('lsof'): + self.collectExtOutput("/usr/sbin/lsof -b +M -n -l -P", root_symlink = "lsof") + self.collectExtOutput("/sbin/blkid -c /dev/null") ++ self.collectExtOutput("/bin/lsblk") + + part_titlep = re.compile("^major") + blankp = re.compile("^$") diff --git a/sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch b/sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch new file mode 100644 index 0000000..035c747 --- /dev/null +++ b/sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch @@ -0,0 +1,23 @@ +diff -up sos-2.2/sos/plugins/ldap.py.orig sos-2.2/sos/plugins/ldap.py +--- sos-2.2/sos/plugins/ldap.py.orig 2011-08-12 21:38:49.342684154 +0100 ++++ sos-2.2/sos/plugins/ldap.py 2011-08-12 21:48:37.714760213 +0100 +@@ -19,7 +19,7 @@ class ldap(sos.plugintools.PluginBase): + """LDAP related information + """ + def checkenabled(self): +- self.packages = [ "openldap" ] ++ self.packages = [ "openldap", "nss-pam-ldapd" ] + self.files = [ "/etc/openldap/ldap.conf" ] + return sos.plugintools.PluginBase.checkenabled(self) + +@@ -43,8 +43,10 @@ class ldap(sos.plugintools.PluginBase): + + def setup(self): + self.addCopySpec("/etc/ldap.conf") ++ self.addCopySpec("/etc/nslcd.conf") + self.addCopySpec("/etc/openldap") + + def postproc(self): + self.doRegexSub("/etc/ldap.conf", r"(\s*bindpw\s*)\S+", r"\1***") ++ self.doRegexSub("/etc/nslcd.conf", r"(\s*bindpw\s*)\S+", r"\1***") + return diff --git a/sos-bz683219-truncate-large-files.patch b/sos-bz683219-truncate-large-files.patch new file mode 100644 index 0000000..498978a --- /dev/null +++ b/sos-bz683219-truncate-large-files.patch @@ -0,0 +1,26 @@ +diff -up sos-2.2/sos/plugintools.py.orig sos-2.2/sos/plugintools.py +--- sos-2.2/sos/plugintools.py.orig 2011-08-15 01:33:35.900753944 +0100 ++++ sos-2.2/sos/plugintools.py 2011-08-15 01:33:43.762754017 +0100 +@@ -286,11 +286,19 @@ class PluginBase: + files = glob.glob(fname) + files.sort() + cursize = 0 ++ limit_reached = False ++ sizelimit *= 1024 * 1024 # in MB + for flog in files: + cursize += os.stat(flog)[ST_SIZE] +- if sizelimit and (cursize / 1024 / 1024) > sizelimit: +- break +- self.addCopySpec(flog) ++ if sizelimit and cursize > sizelimit: ++ limit_reached = True ++ else: ++ self.addCopySpec(flog) ++ # Truncate the first file (others would likely be compressed), ++ # ensuring we get at least some logs ++ if flog == files[0] and limit_reached: ++ self.collectExtOutput("tail -c%d %s" % (sizelimit, flog), ++ "tail_" + os.path.basename(flog)) + + def addCopySpec(self, copyspec): + """ Add a file specification (can be file, dir,or shell glob) to be diff --git a/sos-bz683404-fix-autofs-LC_ALL-usage.patch b/sos-bz683404-fix-autofs-LC_ALL-usage.patch new file mode 100644 index 0000000..7656e0d --- /dev/null +++ b/sos-bz683404-fix-autofs-LC_ALL-usage.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/autofs.py.orig sos-2.2/sos/plugins/autofs.py +--- sos-2.2/sos/plugins/autofs.py.orig 2011-08-12 21:54:09.405697055 +0100 ++++ sos-2.2/sos/plugins/autofs.py 2011-08-12 21:54:21.403820531 +0100 +@@ -54,7 +54,7 @@ class autofs(sos.plugintools.PluginBase) + self.collectExtOutput("ps auxwww | grep automount") + self.collectExtOutput("/bin/egrep -e 'automount|pid.*nfs' /proc/mounts") + self.collectExtOutput("/bin/mount | egrep -e 'automount|pid.*nfs'") +- self.collectExtOutput("LC_ALL=C /sbin/chkconfig --list autofs") ++ self.collectExtOutput("/sbin/chkconfig --list autofs") + if self.checkdebug(): + self.addCopySpec(self.getdaemondebug()) + return diff --git a/sos-bz689387-use-sha256-in-fips-mode.patch b/sos-bz689387-use-sha256-in-fips-mode.patch new file mode 100644 index 0000000..ba140d8 --- /dev/null +++ b/sos-bz689387-use-sha256-in-fips-mode.patch @@ -0,0 +1,82 @@ +diff -up sos-2.2/sos/policyredhat.py.orig sos-2.2/sos/policyredhat.py +--- sos-2.2/sos/policyredhat.py.orig 2011-04-07 11:57:19.000000000 +0100 ++++ sos-2.2/sos/policyredhat.py 2011-04-07 11:59:55.000000000 +0100 +@@ -24,10 +24,7 @@ from tempfile import gettempdir + from sos.helpers import * + import random + import re +-try: +- from hashlib import md5 +-except ImportError: +- from md5 import md5 ++import hashlib + import rpm + import time + from subprocess import Popen, PIPE +@@ -68,7 +65,7 @@ class SosPolicy: + def __init__(self): + self.report_file = "" + self.report_file_ext = "" +- self.report_md5 = "" ++ self.report_checksum = "" + self.reportName = "" + self.ticketNumber = "" + +@@ -306,31 +303,49 @@ class SosPolicy: + print _("There was a problem encrypting your report.") + sys.exit(1) + ++ def getChecksumAlgorithm(self): ++ checksum = "md5" ++ # this is the canonical check for FIPS ++ try: ++ fp = open("/proc/sys/crypto/fips_enabled", "r") ++ except: ++ return checksum ++ fips_enabled = fp.read() ++ if fips_enabled.find("1") >= 0: ++ checksum = "sha256" ++ fp.close() ++ return checksum ++ + def displayResults(self): + # make sure a report exists + if not self.report_file: + return False + +- # calculate md5 ++ # determine checksum algo and instantiate ++ checksum = self.getChecksumAlgorithm() ++ digest = hashlib.new(checksum) ++ ++ # calculate checksum + fp = open(self.report_file, "r") +- self.report_md5 = md5(fp.read()).hexdigest() ++ digest.update(fp.read()) + fp.close() ++ self.report_checksum = digest.hexdigest() + + self.renameResults("sosreport-%s-%s-%s.%s" % (self.reportName, + time.strftime("%Y%m%d%H%M%S"), +- self.report_md5[-4:], ++ self.report_checksum[-4:], + self.report_file_ext)) + +- # store md5 into file +- fp = open(self.report_file + ".md5", "w") +- fp.write(self.report_md5 + "\n") ++ # store checksum into file ++ fp = open(self.report_file + "." + checksum, "w") ++ fp.write(self.report_checksum + "\n") + fp.close() + + print + print _("Your sosreport has been generated and saved in:\n %s") % self.report_file + print +- if len(self.report_md5): +- print _("The md5sum is: ") + self.report_md5 ++ if len(self.report_checksum): ++ print _("The " + checksum + "sum is: ") + self.report_checksum + print + print _("Please send this file to your support representative.") + print diff --git a/sos-bz691477-fix-lsusb-and-add-t-and-v.patch b/sos-bz691477-fix-lsusb-and-add-t-and-v.patch new file mode 100644 index 0000000..9fd8828 --- /dev/null +++ b/sos-bz691477-fix-lsusb-and-add-t-and-v.patch @@ -0,0 +1,14 @@ +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2011-08-12 22:00:08.588682606 +0100 ++++ sos-2.2/sos/plugins/hardware.py 2011-08-12 22:12:23.255788988 +0100 +@@ -44,7 +44,9 @@ class hardware(sos.plugintools.PluginBas + if self.policy().getArch().endswith("386"): + self.collectExtOutput("/usr/sbin/x86info -a") + +- self.collectExtOutput("/sbin/lsusb") ++ self.collectExtOutput("/usr/sbin/lsusb") ++ self.collectExtOutput("/usr/sbin/lsusb -v") ++ self.collectExtOutput("/usr/sbin/lsusb -t 2>&1", suggest_filename = "lsusb_-t") + self.collectExtOutput("/usr/bin/lshal") + self.collectExtOutput("/usr/bin/systool -c fc_host -v") + self.collectExtOutput("/usr/bin/systool -c scsi_host -v") diff --git a/sos-bz691477-support-new-usbutils.patch b/sos-bz691477-support-new-usbutils.patch new file mode 100644 index 0000000..e40a68d --- /dev/null +++ b/sos-bz691477-support-new-usbutils.patch @@ -0,0 +1,29 @@ +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2011-09-23 16:00:34.000000000 +0100 ++++ sos-2.2/sos/plugins/hardware.py 2011-09-23 16:00:55.000000000 +0100 +@@ -13,6 +13,7 @@ + ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + import sos.plugintools ++import os + + class hardware(sos.plugintools.PluginBase): + """hardware related information +@@ -44,9 +45,14 @@ class hardware(sos.plugintools.PluginBas + if self.policy().getArch().endswith("386"): + self.collectExtOutput("/usr/sbin/x86info -a") + +- self.collectExtOutput("/usr/sbin/lsusb") +- self.collectExtOutput("/usr/sbin/lsusb -v") +- self.collectExtOutput("/usr/sbin/lsusb -t 2>&1", suggest_filename = "lsusb_-t") ++ if os.path.exists("/usr/bin/lsusb"): ++ self.collectExtOutput("/usr/bin/lsusb") ++ self.collectExtOutput("/usr/bin/lsusb -v") ++ self.collectExtOutput("/usr/bin/lsusb -t 2>&1", suggest_filename = "lsusb_-t") ++ elif os.path.exists("/sbin/lsusb"): ++ self.collectExtOutput("/sbin/lsusb") ++ self.collectExtOutput("/sbin/lsusb -v") ++ self.collectExtOutput("/sbin/lsusb -t 2>&1", suggest_filename = "lsusb_-t") + self.collectExtOutput("/usr/bin/lshal") + self.collectExtOutput("/usr/bin/systool -c fc_host -v") + self.collectExtOutput("/usr/bin/systool -c scsi_host -v") diff --git a/sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch b/sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch new file mode 100644 index 0000000..4f32dec --- /dev/null +++ b/sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch @@ -0,0 +1,30 @@ +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2011-08-14 12:09:59.224806981 +0100 ++++ sos-2.2/sos/plugins/general.py 2011-08-14 12:12:37.567686798 +0100 +@@ -29,6 +29,7 @@ class general(sos.plugintools.PluginBase + self.addCopySpec("/etc/redhat-release") + self.addCopySpec("/etc/fedora-release") + self.addCopySpec("/etc/inittab") ++ self.addCopySpec("/etc/init") + self.addCopySpec("/etc/sos.conf") + self.addCopySpec("/etc/sysconfig") + self.addCopySpec("/proc/stat") +@@ -50,12 +51,12 @@ class general(sos.plugintools.PluginBase + self.collectExtOutput("/usr/sbin/alternatives --display java", root_symlink = "java") + self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java") + +- # new entitlement certificate support +- if rhelver == 6 or rhelver == 5: +- self.addCopySpec("/etc/pki/product/*.pem") +- self.addCopySpec("/etc/pki/consumer/cert.pem") +- self.addCopySpec("/etc/pki/entitlement/*.pem") +- self.addForbiddenPath("/etc/pki/entitlement/key.pem") ++ # new entitlement certificate support ++ if rhelver == 6 or rhelver == 5: ++ self.addCopySpec("/etc/pki/product/*.pem") ++ self.addCopySpec("/etc/pki/consumer/cert.pem") ++ self.addCopySpec("/etc/pki/entitlement/*.pem") ++ self.addForbiddenPath("/etc/pki/entitlement/key.pem") + + if self.getOption('all_logs'): + if rhelver == 5 or rhelver == 4: diff --git a/sos-bz697899-collect-brctl-output.patch b/sos-bz697899-collect-brctl-output.patch new file mode 100644 index 0000000..b839a3c --- /dev/null +++ b/sos-bz697899-collect-brctl-output.patch @@ -0,0 +1,36 @@ +diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py +--- sos-2.2/sos/plugins/networking.py.orig 2011-08-15 01:44:30.290816400 +0100 ++++ sos-2.2/sos/plugins/networking.py 2011-08-15 02:03:36.814212707 +0100 +@@ -21,6 +21,20 @@ class networking(sos.plugintools.PluginB + """ + optionList = [("traceroute", "collects a traceroute to rhn.redhat.com", "slow", False)] + ++ def get_bridge_name(self,brctlFile): ++ """Return a dictionary for which key are bridge name according to the ++ output of brctl show stored in brctlFile. ++ """ ++ out=[] ++ fp = open(brctlFile, 'r') ++ for line in fp.readlines(): ++ if line.startswith("bridge name") or line.isspace(): ++ continue ++ brName, brRest = line.split(None, 1) ++ out.append(brName) ++ fp.close() ++ return out ++ + def get_interface_name(self,ifconfigFile): + """Return a dictionary for which key are interface name according to the + output of ifconifg-a stored in ifconfigFile. +@@ -77,6 +91,10 @@ class networking(sos.plugintools.PluginB + self.collectExtOutput("/sbin/ethtool -g "+eth) + if self.getOption("traceroute"): + self.collectExtOutput("/bin/traceroute -n rhn.redhat.com") +- ++ if os.path.exists("/usr/sbin/brctl"): ++ brctlFile=self.collectOutputNow("/usr/sbin/brctl show") ++ if brctlFile: ++ for brName in self.get_bridge_name(brctlFile): ++ self.collectExtOutput("/usr/sbin/brctl showstp "+brName) + return + diff --git a/sos-bz713449-dont-strip-command-output.patch b/sos-bz713449-dont-strip-command-output.patch new file mode 100644 index 0000000..2b2f346 --- /dev/null +++ b/sos-bz713449-dont-strip-command-output.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/helpers.py.orig sos-2.2/sos/helpers.py +--- sos-2.2/sos/helpers.py.orig 2011-08-14 13:15:07.018884665 +0100 ++++ sos-2.2/sos/helpers.py 2011-08-14 13:15:21.880027577 +0100 +@@ -55,7 +55,7 @@ def sosGetCommandOutput(command, timeout + + p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, bufsize=-1) + stdout, stderr = p.communicate() +- return (p.returncode, stdout.strip(), 0) ++ return (p.returncode, stdout, 0) + + def commonPrefix(l1, l2, common = []): + ''' return a list of common elements at the start of all sequences, diff --git a/sos-bz714293-collect-etc-rhsm.patch b/sos-bz714293-collect-etc-rhsm.patch new file mode 100644 index 0000000..4537ee8 --- /dev/null +++ b/sos-bz714293-collect-etc-rhsm.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2011-08-14 23:16:32.000000000 +0100 ++++ sos-2.2/sos/plugins/general.py 2011-08-14 23:16:56.000000000 +0100 +@@ -56,6 +56,7 @@ class general(sos.plugintools.PluginBase + self.addCopySpec("/etc/pki/product/*.pem") + self.addCopySpec("/etc/pki/consumer/cert.pem") + self.addCopySpec("/etc/pki/entitlement/*.pem") ++ self.addCopySpec("/etc/rhsm/") + self.addForbiddenPath("/etc/pki/entitlement/key.pem") + + if self.getOption('all_logs'): diff --git a/sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch b/sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch new file mode 100644 index 0000000..d948a26 --- /dev/null +++ b/sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py +--- sos-2.2/sos/plugins/networking.py.orig 2011-08-14 12:18:17.784697343 +0100 ++++ sos-2.2/sos/plugins/networking.py 2011-08-14 12:18:37.709228057 +0100 +@@ -66,6 +66,7 @@ class networking(sos.plugintools.PluginB + self.collectExtOutput("/sbin/ifenslave -a") + self.collectExtOutput("/sbin/ip mroute show") + self.collectExtOutput("/sbin/ip maddr show") ++ self.collectExtOutput("/sbin/ip neigh show") + if ifconfigFile: + for eth in self.get_interface_name(ifconfigFile): + self.collectExtOutput("/sbin/ethtool "+eth) diff --git a/sos-bz726360-qpidd-extend.patch b/sos-bz726360-qpidd-extend.patch new file mode 100644 index 0000000..80dd372 --- /dev/null +++ b/sos-bz726360-qpidd-extend.patch @@ -0,0 +1,52 @@ +diff -up sos-2.2/sos/plugins/qpidd.py.orig sos-2.2/sos/plugins/qpidd.py +--- sos-2.2/sos/plugins/qpidd.py.orig 2011-08-13 12:00:24.054712827 +0100 ++++ sos-2.2/sos/plugins/qpidd.py 2011-08-13 12:00:26.419712889 +0100 +@@ -19,25 +19,36 @@ class qpidd(sos.plugintools.PluginBase): + """ + def checkenabled(self): + """ checks if mrg enabled """ +- if self.cInfo["policy"].pkgByName("qpidd") and \ +- self.cInfo["policy"].pkgByName("python-qpid"): ++ if self.cInfo["policy"].pkgByName("qpid-cpp-server") and \ ++ self.cInfo["policy"].pkgByName("qpid-tools"): + return True + return False + + def setup(self): + """ performs data collection for mrg """ + self.addCopySpec("/etc/qpidd.conf") +- self.collectExtOutput("/usr/bin/qpid-stat -q") ++ self.addCopySpec("/etc/sasl2/qpidd.conf") ++ self.addCopySpec("/etc/qpid/qpidc.conf") ++ self.addCopySpec("/etc/sesame/sesame.conf") ++ self.addCopySpec("/etc/cumin/cumin.conf") ++ self.addCopySpec("/etc/corosync/corosync.conf") ++ self.addCopySpec("/var/lib/sesame") ++ self.addCopySpec("/var/log/qpidd.log") ++ self.addCopySpec("/var/log/sesame") ++ self.addCopySpec("/var/log/cumin") ++ self.addCopySpec("/var/log/cluster") ++ ++ self.collectExtOutput("/usr/bin/qpid-config queues") ++ self.collectExtOutput("/usr/bin/qpid-config exchanges") ++ self.collectExtOutput("/usr/bin/qpid-config exchanges -b") ++ self.collectExtOutput("/usr/bin/qpid-stat -b") + self.collectExtOutput("/usr/bin/qpid-stat -e") +- self.collectExtOutput("/usr/bin/qpid-stat -b") +- self.addCopySpec("/var/lib/qpid/syslog") +- self.collectExtOutput("/usr/bin/qpid-config") +- self.collectExtOutput("/usr/bin/qpid-config -b exchanges") +- self.collectExtOutput("/usr/bin/qpid-config -b queues") ++ self.collectExtOutput("/usr/bin/qpid-stat -q") ++ self.collectExtOutput("/usr/bin/qpid-stat -u") + self.collectExtOutput("/usr/bin/qpid-stat -c") +- self.collectExtOutput("/usr/bin/qpid-route link list") + self.collectExtOutput("/usr/bin/qpid-route route list") +- self.addCopySpec("/etc/ais/openais.conf") ++ self.collectExtOutput("/usr/bin/qpid-route link list") ++ self.collectExtOutput("/usr/bin/qpid-cluster") ++ self.collectExtOutput("/usr/bin/qpid-cluster -c") + self.collectExtOutput("ls -lR /var/lib/qpidd") +- self.addCopySpec("/var/log/cumin.log") +- self.addCopySpec("/var/log/mint.log") ++ self.collectExtOutput("ls -lR /opt/rh-qpid") diff --git a/sos-bz726427-add-ethtool-acg.patch b/sos-bz726427-add-ethtool-acg.patch new file mode 100644 index 0000000..7431af7 --- /dev/null +++ b/sos-bz726427-add-ethtool-acg.patch @@ -0,0 +1,13 @@ +diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py +--- sos-2.2/sos/plugins/networking.py.orig 2011-08-12 20:45:07.618990769 +0100 ++++ sos-2.2/sos/plugins/networking.py 2011-08-12 20:46:27.203697655 +0100 +@@ -72,6 +72,9 @@ class networking(sos.plugintools.PluginB + self.collectExtOutput("/sbin/ethtool -i "+eth) + self.collectExtOutput("/sbin/ethtool -k "+eth) + self.collectExtOutput("/sbin/ethtool -S "+eth) ++ self.collectExtOutput("/sbin/ethtool -a "+eth) ++ self.collectExtOutput("/sbin/ethtool -c "+eth) ++ self.collectExtOutput("/sbin/ethtool -g "+eth) + if self.getOption("traceroute"): + self.collectExtOutput("/bin/traceroute -n rhn.redhat.com") + diff --git a/sos-bz729455-collect-basic-cgroups-data.patch b/sos-bz729455-collect-basic-cgroups-data.patch new file mode 100644 index 0000000..900a1d1 --- /dev/null +++ b/sos-bz729455-collect-basic-cgroups-data.patch @@ -0,0 +1,31 @@ +diff -up sos-2.2/sos/plugins/cgroups.py.orig sos-2.2/sos/plugins/cgroups.py +--- sos-2.2/sos/plugins/cgroups.py.orig 2011-08-14 12:26:35.446697966 +0100 ++++ sos-2.2/sos/plugins/cgroups.py 2011-08-14 12:26:40.768745167 +0100 +@@ -0,0 +1,27 @@ ++### 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 sos.plugintools ++ ++class cgroups(sos.plugintools.PluginBase): ++ """cgroup subsystem information ++ """ ++ ++ def setup(self): ++ self.addCopySpec("/etc/sysconfig/cgconfig") ++ self.addCopySpec("/etc/sysconfig/cgred.conf") ++ self.addCopySpec("/etc/cgsnapshot_blacklist.conf") ++ self.addCopySpec("/etc/cgconfig.conf") ++ self.addCopySpec("/etc/cgrules.conf") ++ return diff --git a/sos-bz730641-fix-prox-net.patch b/sos-bz730641-fix-prox-net.patch new file mode 100644 index 0000000..5ba0048 --- /dev/null +++ b/sos-bz730641-fix-prox-net.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py +--- sos-2.2/sos/plugins/networking.py.orig 2012-03-06 11:18:02.339316914 +0000 ++++ sos-2.2/sos/plugins/networking.py 2012-03-06 11:18:04.615316966 +0000 +@@ -58,7 +58,7 @@ class networking(sos.plugintools.PluginB + self.writeTextToCommand(cmd,"IPTables module "+tablename+" not loaded\n") + + def setup(self): +- self.addCopySpec("/proc/net") ++ self.addCopySpec("/proc/net/") + self.addCopySpec("/etc/nsswitch.conf") + self.addCopySpec("/etc/yp.conf") + self.addCopySpec("/etc/inetd.conf") diff --git a/sos-bz736718-fix-hardware-plugin-paths.patch b/sos-bz736718-fix-hardware-plugin-paths.patch new file mode 100644 index 0000000..8ccc253 --- /dev/null +++ b/sos-bz736718-fix-hardware-plugin-paths.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2011-09-09 16:14:41.000000000 +0100 ++++ sos-2.2/sos/plugins/hardware.py 2011-09-09 16:14:53.000000000 +0100 +@@ -36,7 +36,7 @@ class hardware(sos.plugintools.PluginBas + self.addCopySpec("/proc/s390dbf/tape") + self.addCopySpec("/sys/bus/scsi") + self.addCopySpec("/sys/state") +- self.collectExtOutput("/usr/share/rhn/up2dateclient/hardware.py") ++ self.collectExtOutput("/usr/share/rhn/up2date_client/hardware.py") + self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci") + + self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode") diff --git a/sos-bz736718-fix-hardware.py-exec.patch b/sos-bz736718-fix-hardware.py-exec.patch new file mode 100644 index 0000000..51a013d --- /dev/null +++ b/sos-bz736718-fix-hardware.py-exec.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2011-09-23 15:34:51.000000000 +0100 ++++ sos-2.2/sos/plugins/hardware.py 2011-09-23 15:34:58.000000000 +0100 +@@ -36,7 +36,7 @@ class hardware(sos.plugintools.PluginBas + self.addCopySpec("/proc/s390dbf/tape") + self.addCopySpec("/sys/bus/scsi") + self.addCopySpec("/sys/state") +- self.collectExtOutput("/usr/share/rhn/up2date_client/hardware.py") ++ self.collectExtOutput("python /usr/share/rhn/up2date_client/hardware.py", suggest_filename="hardware.py") + self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci") + + self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode") diff --git a/sos-bz739080-collect-stderr.patch b/sos-bz739080-collect-stderr.patch new file mode 100644 index 0000000..13cd796 --- /dev/null +++ b/sos-bz739080-collect-stderr.patch @@ -0,0 +1,21 @@ +diff -up sos-2.2/sos/helpers.py.orig sos-2.2/sos/helpers.py +--- sos-2.2/sos/helpers.py.orig 2012-03-06 13:03:15.121460956 +0000 ++++ sos-2.2/sos/helpers.py 2012-03-06 13:03:16.400460986 +0000 +@@ -27,7 +27,7 @@ helper functions used by sosreport and p + """ + import os, sys + import logging +-from subprocess import Popen, PIPE ++from subprocess import Popen, PIPE, STDOUT + + def importPlugin(pluginname, name): + """ Import a plugin to extend capabilities of sosreport +@@ -53,7 +53,7 @@ def sosGetCommandOutput(command, timeout + # soslog.log(logging.VERBOSE, "binary '%s' does not exist or is not runnable" % cmdfile) + return (127, "", 0) + +- p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, bufsize=-1) ++ p = Popen(command, shell=True, stdout=PIPE, stderr=STDOUT, bufsize=-1) + stdout, stderr = p.communicate() + return (p.returncode, stdout, 0) + diff --git a/sos-bz749262-fix-sat-proxy-package-detection.patch b/sos-bz749262-fix-sat-proxy-package-detection.patch new file mode 100644 index 0000000..648d93b --- /dev/null +++ b/sos-bz749262-fix-sat-proxy-package-detection.patch @@ -0,0 +1,39 @@ +diff -up sos-2.2/sos/plugins/rhn.py.orig sos-2.2/sos/plugins/rhn.py +--- sos-2.2/sos/plugins/rhn.py.orig 2012-03-06 11:22:14.336322665 +0000 ++++ sos-2.2/sos/plugins/rhn.py 2012-03-06 11:22:23.937322883 +0000 +@@ -28,8 +28,13 @@ class rhn(sos.plugintools.PluginBase): + def checkenabled(self): + # enable if any related package is installed + +- self.satellite = self.isInstalled("rhns-satellite-tools") +- self.proxy = self.isInstalled("rhns-proxy-tools") ++ self.satellite = self.isInstalled("rhns-satellite-tools") \ ++ or self.isInstalled("spacewalk-java") \ ++ or self.isInstalled("rhn-base") ++ ++ self.proxy = self.isInstalled("rhns-proxy-tools") \ ++ or self.isInstalled("spacewalk-proxy-management") \ ++ or self.isInstalled("rhn-proxy-management") + + if self.satellite or self.proxy: + return True +@@ -72,15 +77,15 @@ class rhn(sos.plugintools.PluginBase): + self.addCopySpec("/etc/tomcat5") + self.addCopySpec("/var/log/tomcat5") + +- self.addCopySpec("/etc/tomcat5") +- self.addCopySpec("/var/log/tomcat5") ++ self.addCopySpec("/etc/tomcat5/") ++ self.addCopySpec("/var/log/tomcat5/") + + if self.proxy: + # copying configuration information +- self.addCopySpec("/etc/squid") ++ self.addCopySpec("/etc/squid/") + + # copying logs +- self.addCopySpec("/var/log/squid") ++ self.addCopySpec("/var/log/squid/") + + return + diff --git a/sos-bz749279-fix-rhn-el6-tomcat.patch b/sos-bz749279-fix-rhn-el6-tomcat.patch new file mode 100644 index 0000000..ab923e6 --- /dev/null +++ b/sos-bz749279-fix-rhn-el6-tomcat.patch @@ -0,0 +1,19 @@ +diff -up sos-2.2/sos/plugins/rhn.py.orig sos-2.2/sos/plugins/rhn.py +--- sos-2.2/sos/plugins/rhn.py.orig 2012-03-06 16:33:35.648748925 +0000 ++++ sos-2.2/sos/plugins/rhn.py 2012-03-06 16:33:38.357748986 +0000 +@@ -72,13 +72,8 @@ class rhn(sos.plugintools.PluginBase): + self.addCopySpec("/etc/tnsnames.ora") + self.addCopySpec("/etc/jabberd") + +- # tomcat (4.x and newer satellites only) +- if not self.policy().pkgNVRA(satellite)[1].startswith("3."): +- self.addCopySpec("/etc/tomcat5") +- self.addCopySpec("/var/log/tomcat5") +- +- self.addCopySpec("/etc/tomcat5/") +- self.addCopySpec("/var/log/tomcat5/") ++ self.addCopySpec("/etc/tomcat6/") ++ self.addCopySpec("/var/log/tomcat6/") + + if self.proxy: + # copying configuration information diff --git a/sos-bz749919-add-modprobe-dot-d.patch b/sos-bz749919-add-modprobe-dot-d.patch new file mode 100644 index 0000000..a304a4c --- /dev/null +++ b/sos-bz749919-add-modprobe-dot-d.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py +--- sos-2.2/sos/plugins/kernel.py.orig 2012-03-06 11:20:52.499320796 +0000 ++++ sos-2.2/sos/plugins/kernel.py 2012-03-06 11:20:59.206320950 +0000 +@@ -64,6 +64,7 @@ class kernel(sos.plugintools.PluginBase) + self.addCopySpec("/etc/conf.modules") + self.addCopySpec("/etc/modules.conf") + self.addCopySpec("/etc/modprobe.conf") ++ self.addCopySpec("/etc/modprobe.d/") + self.collectExtOutput("/usr/sbin/dkms status") + self.addCopySpec("/proc/cmdline") + self.addCopySpec("/proc/driver") diff --git a/sos-bz750607-forbid-more-pki-paths.patch b/sos-bz750607-forbid-more-pki-paths.patch new file mode 100644 index 0000000..40f98f0 --- /dev/null +++ b/sos-bz750607-forbid-more-pki-paths.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2011-11-01 18:33:37.631824485 +0000 ++++ sos-2.2/sos/plugins/general.py 2011-11-01 18:33:47.084880437 +0000 +@@ -58,6 +58,7 @@ class general(sos.plugintools.PluginBase + self.addCopySpec("/etc/pki/entitlement/*.pem") + self.addCopySpec("/etc/rhsm/") + self.addForbiddenPath("/etc/pki/entitlement/key.pem") ++ self.addForbiddenPath("/etc/pki/entitlement/*-key.pem") + + if self.getOption('all_logs'): + if rhelver == 5 or rhelver == 4: diff --git a/sos-bz751273-fix-brctl-showstp.patch b/sos-bz751273-fix-brctl-showstp.patch new file mode 100644 index 0000000..6e6be56 --- /dev/null +++ b/sos-bz751273-fix-brctl-showstp.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py +--- sos-2.2/sos/plugins/networking.py.orig 2012-03-06 11:20:00.128319602 +0000 ++++ sos-2.2/sos/plugins/networking.py 2012-03-06 11:20:10.820319845 +0000 +@@ -28,7 +28,7 @@ class networking(sos.plugintools.PluginB + out=[] + fp = open(brctlFile, 'r') + for line in fp.readlines(): +- if line.startswith("bridge name") or line.isspace(): ++ if line.startswith("bridge name") or line.isspace() or line[:1].isspace(): + continue + brName, brRest = line.split(None, 1) + out.append(brName) diff --git a/sos-bz752549-add-gluster-module.patch b/sos-bz752549-add-gluster-module.patch new file mode 100644 index 0000000..132b15f --- /dev/null +++ b/sos-bz752549-add-gluster-module.patch @@ -0,0 +1,99 @@ +diff -up sos-2.2/sos/plugins/gluster.py.orig ./sos/plugins/gluster.py +--- sos-2.2/sos/plugins/gluster.py.orig 2012-03-08 13:31:14.393436730 +0000 ++++ sos-2.2/sos/plugins/gluster.py 2012-03-08 13:30:55.024434492 +0000 +@@ -0,0 +1,84 @@ ++### 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.path ++import sos.plugintools ++ ++class gluster(sos.plugintools.PluginBase): ++ '''gluster related information''' ++ ++ def defaultenabled(self): ++ return True ++ ++ def get_volume_names(self, volume_file): ++ """Return a dictionary for which key are volume names according to the ++ output of gluster volume info stored in volume_file. ++ """ ++ out=[] ++ fp = open(volume_file, 'r') ++ for line in fp.readlines(): ++ if not line.startswith("Volume Name:"): ++ continue ++ volname = line[12:-1] ++ out.append(volname) ++ fp.close() ++ return out ++ ++ def checkenabled(self): ++ packages = ["glusterfs", "glusterfs-core"] ++ return os.path.exists("/etc/glusterd") \ ++ or os.path.exists("/var/lib/glusterd") \ ++ or sos.plugintools.PluginBase.checkenabled(self) ++ ++ def setup(self): ++ self.collectExtOutput("/usr/sbin/gluster peer status") ++ ++ # check package version handling rename of glusterfs-core -> glusterfs ++ pkg = self.policy().pkgByName("glusterfs-core"); ++ if not pkg: ++ pkg = self.policy().pkgByName("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.addCopySpec("/etc/glusterd/") ++ self.addForbiddenPath("/etc/glusterd/geo-replication/secret.pem") ++ else: ++ self.addCopySpec("/var/lib/glusterd/") ++ ++ # glusterfs-server rpm scripts stash this on migration to 3.3.x ++ self.addCopySpec("/etc/glusterd.rpmsave") ++ ++ # common to all versions ++ self.addCopySpec("/etc/glusterfs") ++ ++ # This will fail on <3.3.x but has no harmful side-effects ++ volume_file = self.collectOutputNow("/usr/sbin/gluster volume info", ++ "gluster_volume_info") ++ if volume_file: ++ for volname in self.get_volume_names(volume_file): ++ self.collectExtOutput("gluster volume statedump %s" % volname) ++ self.collectExtOutput("gluster volume status %s detail" % volname) ++ self.collectExtOutput("gluster volume status %s clients" % volname) ++ self.collectExtOutput("gluster volume status %s mem" % volname) ++ self.collectExtOutput("gluster volume status %s callpool" % volname) ++ self.collectExtOutput("gluster volume status %s inode" % volname) ++ self.collectExtOutput("gluster volume status %s fd" % volname) ++ ++ self.collectExtOutput("gluster volume status") ++ # collect this last as some of the other actions create log entries ++ self.addCopySpec("/var/log/glusterfs") +diff -up sos-2.2/sos/plugins/gluster.py.orig sos-2.2/sos/plugins/gluster.py +--- sos-2.2/sos/plugins/gluster.py.orig 2012-05-02 14:09:06.768072384 +0100 ++++ sos-2.2/sos/plugins/gluster.py 2012-05-02 14:10:10.568449078 +0100 +@@ -73,6 +73,7 @@ class gluster(sos.plugintools.PluginBase + if volume_file: + for volname in self.get_volume_names(volume_file): + self.collectExtOutput("gluster volume statedump %s" % volname) ++ self.collectExtOutput("gluster volume statedump %s nfs" % volname) + self.collectExtOutput("gluster volume status %s detail" % volname) + self.collectExtOutput("gluster volume status %s clients" % volname) + self.collectExtOutput("gluster volume status %s mem" % volname) diff --git a/sos-bz752549-gluster-forbid-more-pem-paths.patch b/sos-bz752549-gluster-forbid-more-pem-paths.patch new file mode 100644 index 0000000..501113d --- /dev/null +++ b/sos-bz752549-gluster-forbid-more-pem-paths.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/gluster.py.orig sos-2.2/sos/plugins/gluster.py +--- sos-2.2/sos/plugins/gluster.py.orig 2012-04-23 18:25:15.698646073 +0100 ++++ sos-2.2/sos/plugins/gluster.py 2012-04-23 18:25:25.257646291 +0100 +@@ -59,6 +59,7 @@ class gluster(sos.plugintools.PluginBase + self.addForbiddenPath("/etc/glusterd/geo-replication/secret.pem") + else: + self.addCopySpec("/var/lib/glusterd/") ++ self.addForbiddenPath("/var/lib/glusterd/geo-replication/secret.pem") + + # glusterfs-server rpm scripts stash this on migration to 3.3.x + self.addCopySpec("/etc/glusterd.rpmsave") diff --git a/sos-bz752666-cloudforms-debug.patch b/sos-bz752666-cloudforms-debug.patch new file mode 100644 index 0000000..dd6e1e9 --- /dev/null +++ b/sos-bz752666-cloudforms-debug.patch @@ -0,0 +1,31 @@ +diff -up sos-2.2/sos/plugins/cloudforms.py.orig ./sos/plugins/cloudforms.py +--- sos-2.2/sos/plugins/cloudforms.py.orig 2012-03-08 12:35:06.415447641 +0000 ++++ sos-2.2/sos/plugins/cloudforms.py 2012-03-08 12:45:53.485443241 +0000 +@@ -0,0 +1,27 @@ ++import sos.plugintools ++import os ++ ++class cloudforms(sos.plugintools.PluginBase): ++ """CloudForms related information ++ """ ++ ++ def defaultenabled(self): ++ return True ++ ++ def checkenabled(self): ++ self.packages = ["katello", "katello-common", ++ "katello-headpin", "aeolus-conductor"] ++ self.files = ["/usr/share/katello/script/katello-debug", ++ "/usr/bin/aeolus-debug"] ++ return sos.plugintools.PluginBase.checkenabled(self) ++ ++ def setup(self): ++ katello_debug = "/usr/share/katello/script/katello-debug" ++ aeolus_debug = "/usr/bin/aeolus-debug" ++ if os.path.isfile(katello_debug): ++ katello_debug_path = os.path.join(self.cInfo['dstroot'],"katello-debug") ++ self.collectExtOutput("%s --notar -d %s" % (katello_debug, katello_debug_path)) ++ if os.path.isfile(aeolus_debug): ++ aeolus_debug_path = os.path.join(self.cInfo['dstroot'],"aeolus-debug") ++ self.collectExtOutput("%s --notar -d %s" % (aeolus_debug, aeolus_debug_path)) ++ diff --git a/sos-bz760424-gather-cpufreq-info.patch b/sos-bz760424-gather-cpufreq-info.patch new file mode 100644 index 0000000..bb29079 --- /dev/null +++ b/sos-bz760424-gather-cpufreq-info.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2012-03-06 11:18:50.687318018 +0000 ++++ sos-2.2/sos/plugins/hardware.py 2012-03-06 11:19:04.559318335 +0000 +@@ -41,6 +41,7 @@ class hardware(sos.plugintools.PluginBas + self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci") + + self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode") ++ self.collectExtOutput("/usr/bin/cpufreq-info") + + if self.policy().getArch().endswith("386"): + self.collectExtOutput("/usr/sbin/x86info -a") diff --git a/sos-bz760995-fence_virt-conf.patch b/sos-bz760995-fence_virt-conf.patch new file mode 100644 index 0000000..8990805 --- /dev/null +++ b/sos-bz760995-fence_virt-conf.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/cluster.py.orig sos-2.2/sos/plugins/cluster.py +--- sos-2.2/sos/plugins/cluster.py.orig 2012-03-06 11:16:10.917314372 +0000 ++++ sos-2.2/sos/plugins/cluster.py 2012-03-06 11:16:24.354314679 +0000 +@@ -48,6 +48,7 @@ class cluster(sos.plugintools.PluginBase + self.addCopySpec("/etc/cluster") + self.addCopySpec("/etc/sysconfig/cluster") + self.addCopySpec("/etc/sysconfig/cman") ++ self.addCopySpec("/etc/fence_virt.conf") + self.addCopySpec("/var/lib/ricci") + self.addCopySpec("/var/lib/luci") + self.addCopySpec("/var/log/cluster") diff --git a/sos-bz766583-allow-nonroot-symlinks.patch b/sos-bz766583-allow-nonroot-symlinks.patch new file mode 100644 index 0000000..62c01f6 --- /dev/null +++ b/sos-bz766583-allow-nonroot-symlinks.patch @@ -0,0 +1,260 @@ +diff -up sos-2.2/sos/plugins/devicemapper.py.orig sos-2.2/sos/plugins/devicemapper.py +--- sos-2.2/sos/plugins/devicemapper.py.orig 2012-03-06 14:23:24.361570691 +0000 ++++ sos-2.2/sos/plugins/devicemapper.py 2012-03-06 14:23:27.535570770 +0000 +@@ -34,7 +34,7 @@ class devicemapper(sos.plugintools.Plugi + self.collectExtOutput("/sbin/dmsetup status") + self.collectExtOutput("/sbin/dmsetup ls --tree") + +- self.collectExtOutput("/sbin/vgdisplay -vv", root_symlink = "vgdisplay") ++ self.collectExtOutput("/sbin/vgdisplay -vv", symlink = "vgdisplay") + self.collectExtOutput("/sbin/vgscan -vvv") + self.collectExtOutput("/sbin/pvscan -v") + self.collectExtOutput("/sbin/lvs -a -o +devices") +diff -up sos-2.2/sos/plugins/filesys.py.orig sos-2.2/sos/plugins/filesys.py +--- sos-2.2/sos/plugins/filesys.py.orig 2012-03-06 14:23:24.364570691 +0000 ++++ sos-2.2/sos/plugins/filesys.py 2012-03-06 14:23:27.536570767 +0000 +@@ -30,12 +30,12 @@ class filesys(sos.plugintools.PluginBase + self.addCopySpec("/proc/mounts") + self.addCopySpec("/proc/mdstat") + self.addCopySpec("/etc/raidtab") +- mounts = self.collectOutputNow("/bin/mount -l", root_symlink = "mount") ++ mounts = self.collectOutputNow("/bin/mount -l", symlink = "mount") + self.addCopySpec("/etc/mdadm.conf") + +- self.collectExtOutput("/bin/df -al", root_symlink = "df") ++ self.collectExtOutput("/bin/df -al", symlink = "df") + if self.getOption('lsof'): +- self.collectExtOutput("/usr/sbin/lsof -b +M -n -l -P", root_symlink = "lsof") ++ self.collectExtOutput("/usr/sbin/lsof -b +M -n -l -P", symlink = "lsof") + self.collectExtOutput("/sbin/blkid -c /dev/null") + self.collectExtOutput("/bin/lsblk") + +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2012-03-06 14:23:24.366570691 +0000 ++++ sos-2.2/sos/plugins/general.py 2012-03-06 14:23:27.536570767 +0000 +@@ -43,12 +43,12 @@ class general(sos.plugintools.PluginBase + self.addCopySpec("/var/log/pm/suspend.log") + self.addCopySpec("/var/log/up2date") + self.addCopySpec("/etc/exports") +- self.collectExtOutput("/bin/hostname", root_symlink = "hostname") +- self.collectExtOutput("/bin/date", root_symlink = "date") +- self.collectExtOutput("/usr/bin/uptime", root_symlink = "uptime") ++ self.collectExtOutput("/bin/hostname", symlink = "hostname") ++ self.collectExtOutput("/bin/date", symlink = "date") ++ self.collectExtOutput("/usr/bin/uptime", symlink = "uptime") + self.collectExtOutput("/bin/dmesg") + self.addCopySpec("/root/anaconda-ks.cfg") +- self.collectExtOutput("/usr/sbin/alternatives --display java", root_symlink = "java") ++ self.collectExtOutput("/usr/sbin/alternatives --display java", symlink = "java") + self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java") + + # new entitlement certificate support +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2012-03-06 14:23:24.368570691 +0000 ++++ sos-2.2/sos/plugins/hardware.py 2012-03-06 14:23:27.537570765 +0000 +@@ -38,9 +38,9 @@ class hardware(sos.plugintools.PluginBas + self.addCopySpec("/sys/bus/scsi") + self.addCopySpec("/sys/state") + self.collectExtOutput("python /usr/share/rhn/up2date_client/hardware.py", suggest_filename="hardware.py") +- self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci") ++ self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", symlink = "lspci") + +- self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode") ++ self.collectExtOutput("/usr/sbin/dmidecode", symlink = "dmidecode") + self.collectExtOutput("/usr/bin/cpufreq-info") + + if self.policy().getArch().endswith("386"): +diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py +--- sos-2.2/sos/plugins/kernel.py.orig 2012-03-06 14:23:24.371570691 +0000 ++++ sos-2.2/sos/plugins/kernel.py 2012-03-06 14:23:27.537570765 +0000 +@@ -41,8 +41,8 @@ class kernel(sos.plugintools.PluginBase) + ] + + def setup(self): +- self.collectExtOutput("/bin/uname -a", root_symlink = "uname") +- self.moduleFile = self.collectOutputNow("/sbin/lsmod", root_symlink = "lsmod") ++ self.collectExtOutput("/bin/uname -a", symlink = "uname") ++ self.moduleFile = self.collectOutputNow("/sbin/lsmod", symlink = "lsmod") + + if self.getOption('modinfo'): + runcmd = "" +diff -up sos-2.2/sos/plugins/lsbrelease.py.orig sos-2.2/sos/plugins/lsbrelease.py +--- sos-2.2/sos/plugins/lsbrelease.py.orig 2012-03-06 14:23:24.373570691 +0000 ++++ sos-2.2/sos/plugins/lsbrelease.py 2012-03-06 14:23:27.538570762 +0000 +@@ -25,6 +25,6 @@ class lsbrelease(sos.plugintools.PluginB + return + def setup(self): + self.collectExtOutput("/usr/bin/lsb_release -a") +- self.collectExtOutput("/usr/bin/lsb_release -d", suggest_filename = "lsb_release", root_symlink = "lsb-release") ++ self.collectExtOutput("/usr/bin/lsb_release -d", suggest_filename = "lsb_release", symlink = "lsb-release") + self.addCopySpec("/etc/lsb-release*") + return +diff -up sos-2.2/sos/plugins/memory.py.orig sos-2.2/sos/plugins/memory.py +--- sos-2.2/sos/plugins/memory.py.orig 2012-03-06 14:23:24.375570691 +0000 ++++ sos-2.2/sos/plugins/memory.py 2012-03-06 14:23:27.538570762 +0000 +@@ -24,7 +24,7 @@ class memory(sos.plugintools.PluginBase) + self.addCopySpec("/proc/slabinfo") + + self.collectExtOutput("/bin/dmesg | grep -e 'e820.' -e 'aperature.'") +- self.collectExtOutput("/usr/bin/free", root_symlink = "free") ++ self.collectExtOutput("/usr/bin/free", symlink = "free") + self.collectExtOutput("/usr/bin/free -m") + return + +diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py +--- sos-2.2/sos/plugins/networking.py.orig 2012-03-06 14:23:24.378570691 +0000 ++++ sos-2.2/sos/plugins/networking.py 2012-03-06 14:23:27.539570760 +0000 +@@ -66,14 +66,14 @@ class networking(sos.plugintools.PluginB + self.addCopySpec("/etc/xinetd.d") + self.addCopySpec("/etc/host*") + self.addCopySpec("/etc/resolv.conf") +- ifconfigFile=self.collectOutputNow("/sbin/ifconfig -a", root_symlink = "ifconfig") +- self.collectExtOutput("/sbin/route -n", root_symlink = "route") ++ ifconfigFile=self.collectOutputNow("/sbin/ifconfig -a", symlink = "ifconfig") ++ self.collectExtOutput("/sbin/route -n", symlink = "route") + self.collectIPTable("filter") + self.collectIPTable("nat") + self.collectIPTable("mangle") + self.collectExtOutput("/bin/netstat -s") + self.collectExtOutput("/bin/netstat -agn") +- self.collectExtOutput("/bin/netstat -neopa", root_symlink = "netstat") ++ self.collectExtOutput("/bin/netstat -neopa", symlink = "netstat") + self.collectExtOutput("/sbin/ip route show table all") + self.collectExtOutput("/sbin/ip link") + self.collectExtOutput("/sbin/ip address") +diff -up sos-2.2/sos/plugins/process.py.orig sos-2.2/sos/plugins/process.py +--- sos-2.2/sos/plugins/process.py.orig 2012-03-06 14:23:24.380570691 +0000 ++++ sos-2.2/sos/plugins/process.py 2012-03-06 14:23:27.539570760 +0000 +@@ -20,11 +20,11 @@ class process(sos.plugintools.PluginBase + """process information + """ + def setup(self): +- self.collectExtOutput("/bin/ps auxwww", root_symlink = "ps") ++ self.collectExtOutput("/bin/ps auxwww", symlink = "ps") + self.collectExtOutput("/bin/ps auxwwwm") + self.collectExtOutput("/bin/ps alxwww") +- self.collectExtOutput("/usr/bin/pstree", root_symlink = "pstree") +- self.collectExtOutput("/usr/sbin/lsof -b +M -n -l", root_symlink = "lsof") ++ self.collectExtOutput("/usr/bin/pstree", symlink = "pstree") ++ self.collectExtOutput("/usr/sbin/lsof -b +M -n -l", symlink = "lsof") + return + + def find_mountpoint(s): +diff -up sos-2.2/sos/plugins/rhn.py.orig sos-2.2/sos/plugins/rhn.py +--- sos-2.2/sos/plugins/rhn.py.orig 2012-03-06 14:23:24.383570691 +0000 ++++ sos-2.2/sos/plugins/rhn.py 2012-03-06 14:23:27.540570760 +0000 +@@ -64,9 +64,9 @@ class rhn(sos.plugintools.PluginBase): + self.addCopySpec("/var/log/nocpulse/TSDBLocalQueue/TSDBLocalQueue.log") + + self.addCopySpec("/root/ssl-build") +- self.collectExtOutput("rpm -qa --last", root_symlink = "rpm-manifest") +- self.collectExtOutput("/usr/bin/rhn-schema-version", root_symlink = "database-schema-version") +- self.collectExtOutput("/usr/bin/rhn-charsets", root_symlink = "database-character-sets") ++ self.collectExtOutput("rpm -qa --last", symlink = "rpm-manifest") ++ self.collectExtOutput("/usr/bin/rhn-schema-version", symlink = "database-schema-version") ++ self.collectExtOutput("/usr/bin/rhn-charsets", symlink = "database-character-sets") + + if self.satellite: + self.addCopySpec("/etc/tnsnames.ora") +diff -up sos-2.2/sos/plugins/rpm.py.orig sos-2.2/sos/plugins/rpm.py +--- sos-2.2/sos/plugins/rpm.py.orig 2012-03-06 14:23:24.385570691 +0000 ++++ sos-2.2/sos/plugins/rpm.py 2012-03-06 14:23:27.540570760 +0000 +@@ -24,9 +24,9 @@ class rpm(sos.plugintools.PluginBase): + self.addCopySpec("/var/log/rpmpkgs") + + if self.getOption("rpmq"): +- self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-59s %s\\n\",$1,$2}'|sort", root_symlink = "installed-rpms") ++ self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-59s %s\\n\",$1,$2}'|sort", symlink = "installed-rpms") + + if self.getOption("rpmva"): +- self.collectExtOutput("/bin/rpm -Va", root_symlink = "rpm-Va", timeout = 3600) ++ self.collectExtOutput("/bin/rpm -Va", symlink = "rpm-Va", timeout = 3600) + return + +diff -up sos-2.2/sos/plugins/sar.py.orig sos-2.2/sos/plugins/sar.py +--- sos-2.2/sos/plugins/sar.py.orig 2012-03-06 14:23:24.387570691 +0000 ++++ sos-2.2/sos/plugins/sar.py 2012-03-06 14:23:27.540570760 +0000 +@@ -27,7 +27,7 @@ class sar(sos.plugintools.PluginBase): + sar_filename = 'sar' + fname[2:4] + if sar_filename not in dirList: + sar_command = "/bin/sh -c \"LANG=C /usr/bin/sar -A -f /var/log/sa/" + fname + "\"" +- self.collectOutputNow(sar_command, sar_filename, root_symlink=sar_filename) ++ self.collectOutputNow(sar_command, sar_filename, symlink=sar_filename) + return + + def checkenabled(self): +diff -up sos-2.2/sos/plugins/selinux.py.orig sos-2.2/sos/plugins/selinux.py +--- sos-2.2/sos/plugins/selinux.py.orig 2012-03-06 14:23:24.389570691 +0000 ++++ sos-2.2/sos/plugins/selinux.py 2012-03-06 14:23:27.540570760 +0000 +@@ -31,7 +31,7 @@ class selinux(sos.plugintools.PluginBase + def checkenabled(self): + # is selinux enabled ? + try: +- if self.collectOutputNow("/usr/sbin/sestatus", root_symlink = "sestatus").split(":")[1].strip() == "disabled": ++ if self.collectOutputNow("/usr/sbin/sestatus", symlink = "sestatus").split(":")[1].strip() == "disabled": + return False + except: + pass +diff -up sos-2.2/sos/plugins/startup.py.orig sos-2.2/sos/plugins/startup.py +--- sos-2.2/sos/plugins/startup.py.orig 2012-03-06 14:23:24.392570691 +0000 ++++ sos-2.2/sos/plugins/startup.py 2012-03-06 14:23:27.541570762 +0000 +@@ -22,7 +22,7 @@ class startup(sos.plugintools.PluginBase + def setup(self): + self.addCopySpec("/etc/rc.d") + +- self.collectExtOutput("/sbin/chkconfig --list", root_symlink = "chkconfig") ++ self.collectExtOutput("/sbin/chkconfig --list", symlink = "chkconfig") + if self.getOption('servicestatus'): + self.collectExtOutput("/sbin/service --status-all") + self.collectExtOutput("/sbin/runlevel") +diff -up sos-2.2/sos/plugintools.py.orig sos-2.2/sos/plugintools.py +--- sos-2.2/sos/plugintools.py.orig 2012-03-06 14:23:19.578570582 +0000 ++++ sos-2.2/sos/plugintools.py 2012-03-06 14:23:27.541570762 +0000 +@@ -302,7 +302,7 @@ class PluginBase: + # ensuring we get at least some logs + if flog == files[0] and limit_reached: + self.collectExtOutput("tail -c%d %s" % (sizelimit, flog), +- "tail_" + os.path.basename(flog)) ++ "tail_" + os.path.basename(flog), flog[1:]) + + def addCopySpec(self, copyspec): + """ Add a file specification (can be file, dir,or shell glob) to be +@@ -324,11 +324,11 @@ class PluginBase: + status, shout, runtime = sosGetCommandOutput(prog) + return (status, shout, runtime) + +- def collectExtOutput(self, exe, suggest_filename = None, root_symlink = None, timeout = 300): ++ def collectExtOutput(self, exe, suggest_filename = None, symlink = None, timeout = 300): + """ + Run a program and collect the output + """ +- self.collectProgs.append( (exe, suggest_filename, root_symlink, timeout) ) ++ self.collectProgs.append( (exe, suggest_filename, symlink, timeout) ) + + def fileGrep(self, regexp, fname): + try: +@@ -360,7 +360,7 @@ class PluginBase: + + return outfn + +- def collectOutputNow(self, exe, suggest_filename = None, root_symlink = False, timeout = 300): ++ def collectOutputNow(self, exe, suggest_filename = None, symlink = False, timeout = 300): + """ Execute a command and save the output to a file for inclusion in + the report + """ +@@ -385,11 +385,13 @@ class PluginBase: + outfd.write(shout+"\n") + outfd.close() + +- if root_symlink: ++ if symlink: ++ dst_from_root = outfn[len(self.cInfo['dstroot'])+1:] ++ target = ("../" * string.count(symlink, "/")) + dst_from_root + curdir = os.getcwd() + os.chdir(self.cInfo['dstroot']) + try: +- os.symlink(outfn[len(self.cInfo['dstroot'])+1:], root_symlink.strip("/.")) ++ os.symlink(target, symlink.strip("/.")) + except: + pass + os.chdir(curdir) diff --git a/sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch b/sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch new file mode 100644 index 0000000..4fa18a0 --- /dev/null +++ b/sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch @@ -0,0 +1,12 @@ +diff -up sos-2.2/sos/plugins/rpm.py.orig sos-2.2/sos/plugins/rpm.py +--- sos-2.2/sos/plugins/rpm.py.orig 2012-03-06 13:13:42.455475271 +0000 ++++ sos-2.2/sos/plugins/rpm.py 2012-03-06 13:13:43.919475297 +0000 +@@ -24,7 +24,7 @@ class rpm(sos.plugintools.PluginBase): + self.addCopySpec("/var/log/rpmpkgs") + + if self.getOption("rpmq"): +- self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-60s%s\\n\",$1,$2}'|sort", root_symlink = "installed-rpms") ++ self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-59s %s\\n\",$1,$2}'|sort", root_symlink = "installed-rpms") + + if self.getOption("rpmva"): + self.collectExtOutput("/bin/rpm -Va", root_symlink = "rpm-Va", timeout = 3600) diff --git a/sos-bz771393-improve-report-name-sanitization.patch b/sos-bz771393-improve-report-name-sanitization.patch new file mode 100644 index 0000000..856b31f --- /dev/null +++ b/sos-bz771393-improve-report-name-sanitization.patch @@ -0,0 +1,42 @@ +diff -up sos-2.2/sos/policyredhat.py.orig sos-2.2/sos/policyredhat.py +--- sos-2.2/sos/policyredhat.py.orig 2012-03-06 21:40:00.126168412 +0000 ++++ sos-2.2/sos/policyredhat.py 2012-03-06 21:46:14.875176961 +0000 +@@ -60,6 +60,12 @@ def memoized(function): + return result + return f + ++def sanitizeReportName(report_name): ++ return re.sub(r"[^-a-zA-Z.0-9]", "", report_name) ++ ++def sanitizeTicketNumber(ticket_number): ++ return re.sub(r"[^0-9]", "", ticket_number) ++ + class SosPolicy: + "This class implements various policies for sos" + def __init__(self): +@@ -208,10 +214,7 @@ class SosPolicy: + if not self.cInfo['cmdlineopts'].batch: + try: + self.reportName = raw_input(_("Please enter your first initial and last name [%s]: ") % localname) +- self.reportName = re.sub(r"[^a-zA-Z.0-9]", "", self.reportName) +- + self.ticketNumber = raw_input(_("Please enter the case number that you are generating this report for: ")) +- self.ticketNumber = re.sub(r"[^0-9]", "", self.ticketNumber) + print + except: + print +@@ -222,11 +225,12 @@ class SosPolicy: + + if self.cInfo['cmdlineopts'].customerName: + self.reportName = self.cInfo['cmdlineopts'].customerName +- self.reportName = re.sub(r"[^a-zA-Z.0-9]", "", self.reportName) + + if self.cInfo['cmdlineopts'].ticketNumber: + self.ticketNumber = self.cInfo['cmdlineopts'].ticketNumber +- self.ticketNumber = re.sub(r"[^0-9]", "", self.ticketNumber) ++ ++ self.reportName = sanitizeReportName(self.reportName) ++ self.ticketNumber = sanitizeTicketNumber(self.ticketNumber) + + return + diff --git a/sos-bz771501-fix-rsyslog-collection-and-size-limit.patch b/sos-bz771501-fix-rsyslog-collection-and-size-limit.patch new file mode 100644 index 0000000..7944157 --- /dev/null +++ b/sos-bz771501-fix-rsyslog-collection-and-size-limit.patch @@ -0,0 +1,30 @@ +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2012-03-06 13:16:08.835478612 +0000 ++++ sos-2.2/sos/plugins/general.py 2012-03-06 13:16:12.151478685 +0000 +@@ -61,18 +61,14 @@ class general(sos.plugintools.PluginBase + self.addForbiddenPath("/etc/pki/entitlement/*-key.pem") + + if self.getOption('all_logs'): +- if rhelver == 5 or rhelver == 4: +- logs=self.doRegexFindAll(r"^\S+\s+(\/.*log.*)\s+$", "/etc/syslog.conf") +- for i in logs: +- if not os.path.isfile(i): continue +- self.addCopySpec(i) +- +- if rhelver == 6: +- logs=self.doRegexFindAll(r"^\S+\s+(\/.*log.*)\s+$", "/etc/rsyslog.conf") +- for i in logs: +- if not os.path.isfile(i): continue +- self.addCopySpec(i) +- ++ logs = self.doRegexFindAll("^\S+\s+(-?\/.*$)\s+", "/etc/syslog.conf") ++ if self.cInfo["policy"].pkgByName("rsyslog") or os.path.exists("/etc/rsyslog.conf"): ++ logs += self.doRegexFindAll("^\S+\s+(-?\/.*$)\s+", "/etc/rsyslog.conf") ++ for i in logs: ++ if i.startswith("-"): ++ i = i[1:] ++ if os.path.isfile(i): ++ self.addCopySpecLimit(i, sizelimit = self.isOptionEnabled("syslogsize")) + return + + def postproc(self): diff --git a/sos-bz782339-unbreak-logging.patch b/sos-bz782339-unbreak-logging.patch new file mode 100644 index 0000000..ff3dadb --- /dev/null +++ b/sos-bz782339-unbreak-logging.patch @@ -0,0 +1,182 @@ +diff -up ./sos/plugintools.py.orig ./sos/plugintools.py +--- ./sos/plugintools.py.orig 2012-03-06 21:26:16.048149609 +0000 ++++ ./sos/plugintools.py 2012-03-06 21:26:22.901149765 +0000 +@@ -67,8 +67,8 @@ class PluginBase: + + self.must_exit = False + +- self.soslog = logging.getLogger('sos') +- self.proflog = logging.getLogger('sosprofile') ++ self.soslog = self.cInfo['soslog'] ++ self.proflog = self.cInfo['proflog'] + + # get the option list into a dictionary + for opt in self.optionList: +@@ -105,7 +105,7 @@ class PluginBase: + except KeyboardInterrupt: + raise KeyboardInterrupt + except Exception, e: +- # self.soslog.debug("problem at path %s (%s)" % (abspath,e)) ++ self.soslog.info("could not apply regex substitution at path %s (%s)" % (abspath,e)) + break + return False + +@@ -137,7 +137,7 @@ class PluginBase: + return '' + + if not os.path.exists(srcpath): +- # self.soslog.debug("file or directory %s does not exist" % srcpath) ++ self.soslog.info("file or directory %s does not exist" % srcpath) + return + + if os.path.islink(srcpath): +@@ -162,19 +162,19 @@ class PluginBase: + + # make sure the link doesn't already exists + if os.path.exists(dstslname): +- # self.soslog.debug("skipping symlink creation: already exists (%s)" % dstslname) ++ self.soslog.info("skipping symlink creation: already exists (%s)" % dstslname) + return + + # make sure the dst dir exists + if not (os.path.exists(os.path.dirname(dstslname)) and os.path.isdir(os.path.dirname(dstslname))): + os.makedirs(os.path.dirname(dstslname)) + +- # self.soslog.debug("creating symlink %s -> %s" % (dstslname, rpth)) ++ self.soslog.debug("creating symlink %s -> %s" % (dstslname, rpth)) + + try: + os.symlink(rpth, dstslname) + except OSError: +- # self.soslog.debug("skipping symlink creation: already exists (%s)" % dstslname) ++ self.soslog.info("skipping symlink creation: already exists (%s)" % dstslname) + return + if os.path.isabs(link): + self.doCopyFileOrDir(link) +@@ -195,17 +195,17 @@ class PluginBase: + + # if we get here, it's definitely a regular file (not a symlink or dir) + +- # self.soslog.debug("copying file %s" % srcpath) ++ self.soslog.debug("copying file %s" % srcpath) + try: + tdstpath, abspath = self.__copyFile(srcpath) +- except EnvironmentError: +- # self.soslog.debug("error copying file %s (already exists)" % (srcpath)) ++ except PluginException: ++ self.soslog.debug("error copying file %s (already exists)" % (srcpath)) + return + except IOError: +- # self.soslog.debug("error copying file %s (IOError)" % (srcpath)) ++ self.soslog.info("error copying file %s (IOError)" % (srcpath)) + return + except: +- # self.soslog.debug("error copying file %s (SOMETHING HAPPENED)" % (srcpath)) ++ self.soslog.exception("error copying file %s" % (srcpath)) + return + + self.copiedFiles.append({'srcpath':srcpath, 'dstpath':tdstpath, 'symlink':"no"}) # save in our list +@@ -285,7 +285,7 @@ class PluginBase: + """Add a file specification (with limits) + """ + if not ( fname and len(fname) ): +- # self.soslog.warning("invalid file path") ++ self.soslog.warning("invalid file path") + return False + files = glob.glob(fname) + files.sort() +@@ -309,7 +309,7 @@ class PluginBase: + copied into the sosreport by this module + """ + if not ( copyspec and len(copyspec) ): +- # self.soslog.warning("invalid file path") ++ self.soslog.warning("invalid file path") + return False + # Glob case handling is such that a valid non-glob is a reduced glob + for filespec in glob.glob(copyspec): +@@ -399,7 +399,7 @@ class PluginBase: + outfn_strip = outfn[len(self.cInfo['cmddir'])+1:] + + else: +- # self.soslog.debug("could not run command: %s" % exe) ++ self.soslog.info("could not run command: %s" % exe) + outfn = None + outfn_strip = None + +@@ -463,11 +463,11 @@ class PluginBase: + + for progs in izip(self.collectProgs): + prog, suggest_filename, root_symlink, timeout = progs[0] +- # self.soslog.debug("collecting output of '%s'" % prog) ++ self.soslog.debug("collecting output of '%s'" % prog) + try: + self.collectOutputNow(prog, suggest_filename, root_symlink, timeout) + except Exception, e: +- self.soslog.debug("error collection output of '%s', traceback follows:" % prog) ++ self.soslog.info("error collection output of '%s', traceback follows:" % prog) + + def exit_please(self): + """ This function tells the plugin that it should exit ASAP""" +diff -up ./sos/sosreport.py.orig ./sos/sosreport.py +--- ./sos/sosreport.py.orig 2012-03-06 21:26:16.051149609 +0000 ++++ ./sos/sosreport.py 2012-03-06 21:26:22.902149765 +0000 +@@ -361,17 +361,16 @@ def sosreport(opts): + soslog = logging.getLogger('sos') + soslog.setLevel(logging.DEBUG) + +- logging.VERBOSE = logging.INFO - 1 +- logging.VERBOSE2 = logging.INFO - 2 +- logging.VERBOSE3 = logging.INFO - 3 +- logging.addLevelName(logging.VERBOSE, "verbose") +- logging.addLevelName(logging.VERBOSE2,"verbose2") +- logging.addLevelName(logging.VERBOSE3,"verbose3") +- + if GlobalVars.__cmdLineOpts__.profiler: + proflog = logging.getLogger('sosprofile') + proflog.setLevel(logging.DEBUG) +- ++ else: ++ proflog = None ++ ++ # limit verbosity to DEBUG ++ if GlobalVars.__cmdLineOpts__.verbosity > 3: ++ GlobalVars.__cmdLineOpts__.verbosity = 3 ++ + # if stdin is not a tty, disable colors and don't ask questions + if not sys.stdin.isatty(): + GlobalVars.__cmdLineOpts__.nocolors = True +@@ -380,7 +379,11 @@ def sosreport(opts): + # log to a file + flog = logging.FileHandler(logdir + "/sos.log") + flog.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s')) +- flog.setLevel(logging.VERBOSE3) ++ if GlobalVars.__cmdLineOpts__.verbosity > 0: ++ # standard log levels have a step of 10 ++ flog.setLevel(logging.INFO - (GlobalVars.__cmdLineOpts__.verbosity * 10)) ++ else: ++ flog.setLevel(logging.INFO) + soslog.addHandler(flog) + + if GlobalVars.__cmdLineOpts__.profiler: +@@ -393,9 +396,10 @@ def sosreport(opts): + # define a Handler which writes INFO messages or higher to the sys.stderr + console = logging.StreamHandler(sys.stderr) + if GlobalVars.__cmdLineOpts__.verbosity > 0: +- console.setLevel(20 - GlobalVars.__cmdLineOpts__.verbosity) ++ # standard log levels have a step of 10 ++ console.setLevel(logging.WARNING - (GlobalVars.__cmdLineOpts__.verbosity * 10)) + else: +- console.setLevel(logging.INFO) ++ console.setLevel(logging.WARNING) + console.setFormatter(logging.Formatter('%(message)s')) + soslog.addHandler(console) + +@@ -403,7 +407,7 @@ def sosreport(opts): + + # set up dict so everyone can share the following + commons = {'dstroot': GlobalVars.dstroot, 'cmddir': cmddir, 'logdir': logdir, 'rptdir': rptdir, +- 'soslog': soslog, 'policy': GlobalVars.policy, 'verbosity' : GlobalVars.__cmdLineOpts__.verbosity, ++ 'soslog': soslog, 'proflog': proflog, 'policy': GlobalVars.policy, 'verbosity' : GlobalVars.__cmdLineOpts__.verbosity, + 'xmlreport' : xmlrep, 'cmdlineopts':GlobalVars.__cmdLineOpts__, 'config':config } + + # Make policy aware of the commons diff --git a/sos-bz782589-fix-symlink-target-collection.patch b/sos-bz782589-fix-symlink-target-collection.patch new file mode 100644 index 0000000..64ad8ce --- /dev/null +++ b/sos-bz782589-fix-symlink-target-collection.patch @@ -0,0 +1,14 @@ +diff -up sos-2.2/sos/plugintools.py.orig sos-2.2/sos/plugintools.py +--- sos-2.2/sos/plugintools.py.orig 2012-03-06 11:21:31.658321690 +0000 ++++ sos-2.2/sos/plugintools.py 2012-03-06 11:21:35.126321769 +0000 +@@ -176,6 +176,10 @@ class PluginBase: + except OSError: + # self.soslog.debug("skipping symlink creation: already exists (%s)" % dstslname) + return ++ if os.path.isabs(link): ++ self.doCopyFileOrDir(link) ++ else: ++ self.doCopyFileOrDir(os.path.join(os.path.dirname(srcpath), link)) + + self.copiedFiles.append({'srcpath':srcpath, 'dstpath':rpth, 'symlink':"yes", 'pointsto':link}) + return diff --git a/sos-bz784061-gluster-sunrpc.patch b/sos-bz784061-gluster-sunrpc.patch new file mode 100644 index 0000000..09ed1b3 --- /dev/null +++ b/sos-bz784061-gluster-sunrpc.patch @@ -0,0 +1,34 @@ +diff -up sos-2.2/sos/plugins/sunrpc.py.orig sos-2.2/sos/plugins/sunrpc.py +--- sos-2.2/sos/plugins/sunrpc.py.orig 2012-03-06 16:55:25.004778800 +0000 ++++ sos-2.2/sos/plugins/sunrpc.py 2012-03-06 16:55:27.598778861 +0000 +@@ -0,0 +1,30 @@ ++## Copyright (C) 2012 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 sos.plugintools ++ ++class sunrpc(sos.plugintools.PluginBase): ++ """Sun RPC related information ++ """ ++ def checkenabled(self): ++ if self.policy().runlevelDefault() in self.policy().runlevelByService("rpcbind"): ++ return True ++ return False ++ ++ def setup(self): ++ self.collectExtOutput("/usr/sbin/rpcinfo -p localhost") ++ return ++ diff --git a/sos-bz784862-collect-proc-irq.patch b/sos-bz784862-collect-proc-irq.patch new file mode 100644 index 0000000..d7112ad --- /dev/null +++ b/sos-bz784862-collect-proc-irq.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py +--- sos-2.2/sos/plugins/kernel.py.orig 2012-03-06 13:01:19.000000000 +0000 ++++ sos-2.2/sos/plugins/kernel.py 2012-03-06 13:10:38.638471077 +0000 +@@ -65,6 +65,7 @@ class kernel(sos.plugintools.PluginBase) + self.addCopySpec("/etc/modules.conf") + self.addCopySpec("/etc/modprobe.conf") + self.addCopySpec("/etc/modprobe.d/") ++ self.addCopySpec("/proc/irq/") + self.collectExtOutput("/usr/sbin/dkms status") + self.addCopySpec("/proc/cmdline") + self.addCopySpec("/proc/driver") diff --git a/sos-bz784874-collect-proc-cgroups.patch b/sos-bz784874-collect-proc-cgroups.patch new file mode 100644 index 0000000..11ae42d --- /dev/null +++ b/sos-bz784874-collect-proc-cgroups.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/cgroups.py.orig sos-2.2/sos/plugins/cgroups.py +--- sos-2.2/sos/plugins/cgroups.py.orig 2012-03-06 13:08:55.774468733 +0000 ++++ sos-2.2/sos/plugins/cgroups.py 2012-03-06 13:08:58.710468796 +0000 +@@ -19,6 +19,7 @@ class cgroups(sos.plugintools.PluginBase + """ + + def setup(self): ++ self.addCopySpec("/proc/cgroups") + self.addCopySpec("/etc/sysconfig/cgconfig") + self.addCopySpec("/etc/sysconfig/cgred.conf") + self.addCopySpec("/etc/cgsnapshot_blacklist.conf") diff --git a/sos-bz789096-kernel_realtime.patch b/sos-bz789096-kernel_realtime.patch new file mode 100644 index 0000000..8d87428 --- /dev/null +++ b/sos-bz789096-kernel_realtime.patch @@ -0,0 +1,51 @@ +diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py +--- sos-2.2/sos/plugins/kernel.py.orig 2012-03-06 11:22:54.880323589 +0000 ++++ sos-2.2/sos/plugins/kernel.py 2012-03-06 11:23:17.034324094 +0000 +@@ -71,6 +71,11 @@ class kernel(sos.plugintools.PluginBase) + self.addCopySpec("/proc/zoneinfo") + self.addCopySpec("/proc/sys/kernel/tainted") + self.addCopySpec("/proc/buddyinfo") ++ self.addCopySpec("/proc/softirqs") ++ self.addCopySpec("/proc/timer*") ++ self.addCopySpec("/proc/lock*") ++ self.addCopySpec("/sys/devices/system/clocksource/clocksource0/available_clocksource") ++ self.addCopySpec("/sys/devices/system/clocksource/clocksource0/current_clocksource") + + return + +diff -up sos-2.2/sos/plugins/kernel_realtime.py.orig sos-2.2/sos/plugins/kernel_realtime.py +--- sos-2.2/sos/plugins/kernel_realtime.py.orig 2012-03-06 11:23:54.319324945 +0000 ++++ sos-2.2/sos/plugins/kernel_realtime.py 2012-03-06 11:23:17.034324094 +0000 +@@ -0,0 +1,32 @@ ++# Copyright 2012 Red Hat Inc. ++# Guy Streeter ++# 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; version 2. ++# ++# This application 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. ++ ++import sos.plugintools ++import os ++ ++class kernel_realtime(sos.plugintools.PluginBase): ++ '''Information specific to the realtime kernel ++ ''' ++ ++ def checkenabled(self): ++ if os.path.exists('/sys/kernel/realtime'): ++ return True ++ return False ++ ++ def setup(self): ++ self.addCopySpec('/etc/rtgroups') ++ self.addCopySpec('/proc/sys/kernel/sched_rt_period_us') ++ self.addCopySpec('/proc/sys/kernel/sched_rt_runtime_us') ++ self.addCopySpec('/sys/kernel/realtime') ++ if self.isInstalled('tuna'): ++ self.collectExtOutput('/usr/bin/tuna -CP') diff --git a/sos-bz790402-obscure-anaconda-ks-passwords.patch b/sos-bz790402-obscure-anaconda-ks-passwords.patch new file mode 100644 index 0000000..37ba00c --- /dev/null +++ b/sos-bz790402-obscure-anaconda-ks-passwords.patch @@ -0,0 +1,21 @@ +diff -up sos-2.2/sos/plugins/anaconda.py.orig sos-2.2/sos/plugins/anaconda.py +--- sos-2.2/sos/plugins/anaconda.py.orig 2012-03-06 16:34:44.673750500 +0000 ++++ sos-2.2/sos/plugins/anaconda.py 2012-03-06 16:34:57.638750796 +0000 +@@ -32,3 +32,6 @@ class anaconda(sos.plugintools.PluginBas + self.addCopySpec("/var/log/anaconda.xlog") + return + ++ def postproc(self): ++ self.doRegexSub("/root/anaconda-ks.cfg", r"(\s*rootpw\s*).*", r"\1*** PASSWORD ELIDED ***") ++ return +diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py +--- sos-2.2/sos/plugins/general.py.orig 2012-03-06 16:34:54.774750731 +0000 ++++ sos-2.2/sos/plugins/general.py 2012-03-06 16:34:57.638750796 +0000 +@@ -47,7 +47,6 @@ class general(sos.plugintools.PluginBase + self.collectExtOutput("/bin/date", symlink = "date") + self.collectExtOutput("/usr/bin/uptime", symlink = "uptime") + self.collectExtOutput("/bin/dmesg") +- self.addCopySpec("/root/anaconda-ks.cfg") + self.collectExtOutput("/usr/sbin/alternatives --display java", symlink = "java") + self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java") + diff --git a/sos-bz810702-hw-collect-mcelog.patch b/sos-bz810702-hw-collect-mcelog.patch new file mode 100644 index 0000000..16c492c --- /dev/null +++ b/sos-bz810702-hw-collect-mcelog.patch @@ -0,0 +1,11 @@ +diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py +--- sos-2.2/sos/plugins/hardware.py.orig 2012-05-18 11:32:58.359804933 +0100 ++++ sos-2.2/sos/plugins/hardware.py 2012-05-18 11:33:17.075915442 +0100 +@@ -37,6 +37,7 @@ class hardware(sos.plugintools.PluginBas + self.addCopySpec("/proc/s390dbf/tape") + self.addCopySpec("/sys/bus/scsi") + self.addCopySpec("/sys/state") ++ self.addCopySpec("/var/log/mcelog") + self.collectExtOutput("python /usr/share/rhn/up2date_client/hardware.py", suggest_filename="hardware.py") + self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", symlink = "lspci") + diff --git a/sos-bz812395-ipa-updates.patch b/sos-bz812395-ipa-updates.patch new file mode 100644 index 0000000..d1d336c --- /dev/null +++ b/sos-bz812395-ipa-updates.patch @@ -0,0 +1,108 @@ +diff -up sos-2.2/sos/plugins/apache.py.orig sos-2.2/sos/plugins/apache.py +--- sos-2.2/sos/plugins/apache.py.orig 2012-05-15 18:27:52.822404631 +0100 ++++ sos-2.2/sos/plugins/apache.py 2012-05-15 18:28:03.005464754 +0100 +@@ -18,10 +18,16 @@ class apache(sos.plugintools.PluginBase) + """Apache related information + """ + optionList = [("log", "gathers all apache logs", "slow", False)] ++ ++ def checkenabled(self): ++ if self.isInstalled("httpd"): ++ return True ++ return False + + def setup(self): + self.addCopySpec("/etc/httpd/conf/httpd.conf") + self.addCopySpec("/etc/httpd/conf.d/*.conf") ++ self.addForbiddenPath("/etc/httpd/conf/password.conf") + if self.getOption("log"): + self.addCopySpec("/var/log/httpd/*") + return +diff -up sos-2.2/sos/plugins/ipa.py.orig sos-2.2/sos/plugins/ipa.py +--- sos-2.2/sos/plugins/ipa.py.orig 2012-05-15 18:27:52.823404637 +0100 ++++ sos-2.2/sos/plugins/ipa.py 2012-05-15 18:28:03.006464760 +0100 +@@ -20,18 +20,56 @@ import os + class ipa(sos.plugintools.PluginBase): + """IPA diagnostic information + """ +- # ntp and dirserver stuff are covered in existing sos plugins, so we really only +- # need to get kerberos and ipa specific addons. ++ ++ ipa_server = False ++ ipa_client = False + + def checkenabled(self): +- if self.isInstalled("ipa-server") or os.path.exists("/etc/ipa"): +- return True +- return False ++ self.ipa_server = self.isInstalled("ipa-server") ++ self.ipa_client = self.isInstalled("ipa-client") ++ if self.ipa_server or self.ipa_client: ++ return True ++ return False + + def setup(self): +- self.addCopySpec("/etc/dirsrv/ds.keytab") +- self.addCopySpec("/etc/ipa/ipa.conf") +- self.addCopySpec("/etc/krb5.conf") +- self.addCopySpec("/etc/krb5.keytab") ++ self.addCopySpec("/etc/hosts") ++ if self.ipa_server: ++ self.addCopySpec("/var/log/ipaserver-install.log") ++ self.addCopySpec("/var/log/ipareplica-install.log") ++ if self.ipa_client: ++ self.addCopySpec("/var/log/ipaclient-install.log") ++ ++ self.addCopySpec("/var/log/ipaupgrade.log") ++ ++ self.addCopySpec("/var/log/krb5kdc.log") ++ ++ self.addCopySpec("/var/log/pki-ca/debug") ++ self.addCopySpec("/var/log/pki-ca/catalina.out") ++ self.addCopySpec("/var/log/pki-ca/system") ++ self.addCopySpec("/var/log/pki-ca/transactions") ++ self.addForbiddenPath("/etc/pki/nssdb/key*") ++ self.addForbiddenPath("/etc/pki-ca/flatfile.txt") ++ self.addForbiddenPath("/etc/pki-ca/password.conf") ++ self.addForbiddenPath("/var/lib/pki-ca/alias/key*") ++ ++ self.addCopySpec("/var/log/dirsrv/slapd-*/logs/access") ++ self.addCopySpec("/var/log/dirsrv/slapd-*/logs/errors") ++ self.addCopySpec("/etc/dirsrv/slapd-*/dse.ldif") ++ self.addCopySpec("/etc/dirsrv/slapd-*/schema/99user.ldif") ++ self.addForbiddenPath("/etc/dirsrv/slapd-*/key*") ++ self.addForbiddenPath("/etc/dirsrv/slapd-*/pin.txt") ++ self.addForbiddenPath("/etc/dirsrv/slapd-*/pwdfile.txt") ++ ++ self.collectExtOutput("ls -la /etc/dirsrv/slapd-*/schema/") ++ ++ self.collectExtOutput("ipa-getcert list") ++ ++ self.collectExtOutput("certutil -L -d /etc/httpd/alias/") ++ self.collectExtOutput("certutil -L -d /etc/dirsrv/slapd-*/") ++ ++ self.collectExtOutput("klist -ket /etc/dirsrv/ds.keytab") ++ self.collectExtOutput("klist -ket /etc/httpd/conf/ipa.keytab") ++ self.collectExtOutput("klist -ket /etc/krb5.keytab") ++ + return + +diff -up sos-2.2/sos/plugins/named.py.orig sos-2.2/sos/plugins/named.py +--- sos-2.2/sos/plugins/named.py.orig 2012-05-15 18:27:52.825404648 +0100 ++++ sos-2.2/sos/plugins/named.py 2012-05-15 18:28:03.006464760 +0100 +@@ -40,5 +40,15 @@ class named(sos.plugintools.PluginBase): + self.addCopySpec(self.getDnsDir(cfg)) + self.addForbiddenPath(join(self.getDnsDir(cfg),"chroot/dev")) + self.addForbiddenPath(join(self.getDnsDir(cfg),"chroot/proc")) ++ ++ self.addCopySpec("/etc/named/") + self.addCopySpec("/etc/sysconfig/named") ++ self.collectExtOutput("klist -ket /etc/named.keytab") ++ self.addForbiddenPath("/etc/named.keytab") + return ++ ++ def postproc(self): ++ match = r"(\s*arg \"password )[^\"]*" ++ subst = r"\1*** PASSWORD REDACTED ***" ++ self.doRegexSub("/etc/named.conf", match, subst) ++ diff --git a/sos-bz814474-libvirt-wildcard-logs.patch b/sos-bz814474-libvirt-wildcard-logs.patch new file mode 100644 index 0000000..f179867 --- /dev/null +++ b/sos-bz814474-libvirt-wildcard-logs.patch @@ -0,0 +1,9 @@ +diff -up sos-2.2/sos/plugins/libvirt.py.orig sos-2.2/sos/plugins/libvirt.py +--- sos-2.2/sos/plugins/libvirt.py.orig 2012-05-01 18:33:36.212641798 +0100 ++++ sos-2.2/sos/plugins/libvirt.py 2012-05-01 18:37:09.736902492 +0100 +@@ -18,4 +18,4 @@ class libvirt(sos.plugintools.PluginBase + """ + def setup(self): + self.addCopySpec("/etc/libvirt/") +- self.addCopySpec("/var/log/libvirt/") ++ self.addCopySpec("/var/log/libvirt*") diff --git a/sos-bz822442-collect-etc-swift-in-gluster.patch b/sos-bz822442-collect-etc-swift-in-gluster.patch new file mode 100644 index 0000000..b5e9117 --- /dev/null +++ b/sos-bz822442-collect-etc-swift-in-gluster.patch @@ -0,0 +1,13 @@ +diff -up sos-2.2/sos/plugins/gluster.py.orig sos-2.2/sos/plugins/gluster.py +--- sos-2.2/sos/plugins/gluster.py.orig 2012-05-23 13:48:59.093154956 +0100 ++++ sos-2.2/sos/plugins/gluster.py 2012-05-23 13:53:17.685160857 +0100 +@@ -61,6 +61,9 @@ class gluster(sos.plugintools.PluginBase + self.addCopySpec("/var/lib/glusterd/") + self.addForbiddenPath("/var/lib/glusterd/geo-replication/secret.pem") + ++ # collect unified file and object storage configuration ++ self.addCopySpec("/etc/swift/") ++ + # glusterfs-server rpm scripts stash this on migration to 3.3.x + self.addCopySpec("/etc/glusterd.rpmsave") + diff --git a/sos.spec b/sos.spec index 9c79e5a..e1565b2 100644 --- a/sos.spec +++ b/sos.spec @@ -3,7 +3,7 @@ Summary: A set of tools to gather troubleshooting information from a system Name: sos Version: 2.2 -Release: 3%{?dist} +Release: 29%{?dist} Group: Applications/System Source0: https://fedorahosted.org/releases/s/o/sos/%{name}-%{version}.tar.gz License: GPLv2+ @@ -16,9 +16,73 @@ Requires: libxml2-python Requires: tar Requires: bzip2 Requires: xz +Requires: rpm-python Provides: sysreport = 1.4.3-13 Obsoletes: sysreport +Patch0: sos-bz582259.patch +Patch1: sos-bz584253.patch +Patch2: sos-bz585942.patch +Patch3: sos-bz622527-add-anacrontab.patch +Patch4: sos-bz622528-redhat-release-6-fixes.patch +Patch5: sos-bz622784-parted-dumpe2fs-s390.patch +Patch6: sos-bz624162-add-sssd.patch +Patch7: sos-bz622407-cluster-el6-fixes.patch +Patch8: sos-bz678665-collect-entitlement-certs.patch +Patch9: sos-bz659467-startup-drop-LC_ALL.patch +Patch10: sos-bz676522-collect-etc-dhcp.patch +Patch11: sos-bz675559-devicemapper-collect-ls-tree.patch +Patch12: sos-bz679433-filesys-add-lsblk-output.patch +Patch13: sos-bz622784-filesys-no-print-regex-debug.patch +Patch14: sos-bz689387-use-sha256-in-fips-mode.patch +Patch15: sos-bz600813-collect-repolist-by-default.patch +Patch16: sos-bz673244-add-infiniband-plugin.patch +patch17: sos-bz676656-add-iscsi-target-plugin.patch +Patch18: sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch +Patch19: sos-bz683404-fix-autofs-LC_ALL-usage.patch +Patch20: sos-bz691477-fix-lsusb-and-add-t-and-v.patch +Patch21: sos-bz726360-qpidd-extend.patch +Patch22: sos-bz726427-add-ethtool-acg.patch +Patch23: sos-2.2-bz704383-fix-lvm-data-collection.patch +Patch24: sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch +Patch25: sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch +Patch26: sos-bz713449-dont-strip-command-output.patch +Patch27: sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch +Patch28: sos-bz729455-collect-basic-cgroups-data.patch +Patch29: sos-bz714293-collect-etc-rhsm.patch +Patch30: sos-bz683219-truncate-large-files.patch +Patch31: sos-bz697899-collect-brctl-output.patch +Patch32: sos-bz736718-fix-hardware-plugin-paths.patch +Patch33: sos-bz736718-fix-hardware.py-exec.patch +Patch34: sos-bz691477-support-new-usbutils.patch +Patch35: sos-bz750607-forbid-more-pki-paths.patch +Patch36: sos-bz760995-fence_virt-conf.patch +Patch37: sos-bz730641-fix-prox-net.patch +Patch38: sos-bz760424-gather-cpufreq-info.patch +Patch39: sos-bz751273-fix-brctl-showstp.patch +Patch40: sos-bz749919-add-modprobe-dot-d.patch +Patch41: sos-bz782589-fix-symlink-target-collection.patch +Patch42: sos-bz749262-fix-sat-proxy-package-detection.patch +Patch43: sos-bz739080-collect-stderr.patch +Patch44: sos-bz784874-collect-proc-cgroups.patch +Patch45: sos-bz784862-collect-proc-irq.patch +Patch46: sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch +Patch47: sos-bz766583-allow-nonroot-symlinks.patch +Patch48: sos-bz771501-fix-rsyslog-collection-and-size-limit.patch +Patch49: sos-bz749279-fix-rhn-el6-tomcat.patch +Patch50: sos-bz790402-obscure-anaconda-ks-passwords.patch +Patch51: sos-bz784061-gluster-sunrpc.patch +Patch52: sos-bz752666-cloudforms-debug.patch +Patch53: sos-bz782339-unbreak-logging.patch +Patch54: sos-bz771393-improve-report-name-sanitization.patch +Patch55: sos-bz789096-kernel_realtime.patch +Patch56: sos-bz752549-add-gluster-module.patch +Patch57: sos-bz752549-gluster-forbid-more-pem-paths.patch +Patch58: sos-bz814474-libvirt-wildcard-logs.patch +Patch59: sos-bz810702-hw-collect-mcelog.patch +Patch60: sos-bz822442-collect-etc-swift-in-gluster.patch +Patch61: sos-bz812395-ipa-updates.patch + %description Sos is a set of tools that gathers information about system hardware and configuration. The information can then be used for @@ -27,6 +91,69 @@ 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 +%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 +%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 +%patch56 -p1 +%patch57 -p1 +%patch58 -p1 +%patch59 -p1 +%patch60 -p1 +%patch61 -p1 %build make @@ -50,33 +177,228 @@ rm -rf ${RPM_BUILD_ROOT} %config(noreplace) %{_sysconfdir}/sos.conf %changelog -* Sat Jan 14 2012 Fedora Release Engineering - 2.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild +* Wed May 23 2012 Bryn M. Reeves = 2.2-29.el6 +- Collect the swift configuration directory in gluster module + Resolves: bz822442 +- Update IPA module and related plug-ins + Resolves: bz812395 -* Wed Feb 09 2011 Fedora Release Engineering - 2.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild +* Fri May 18 2012 Bryn M. Reeves = 2.2-28.el6 +- Collect mcelog files in the hardware module + Resolves: bz810702 -* Thu Jul 22 2010 David Malcolm - 2.2-1 -- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild +* Wed May 02 2012 Bryn M. Reeves = 2.2-27.el6 +- Add nfs statedump collection to gluster module + Resolves: bz752549 -* Thu May 20 2010 Adam Stokes = 2.2-0 -- Corosync plugin added -- Cluster plugin updated +* Tue May 01 2012 Bryn M. Reeves = 2.2-26.el6 +- Use wildcard to match possible libvirt log paths + Resolves: bz814474 -* Thu Apr 22 2010 Adam Stokes = 2.1-0 -- Include --help in manpage -- If tmp-dir is defined then put compressed archive there +* Mon Apr 23 2012 Bryn M. Reeves = 2.2-25.el6 +- Add forbidden paths for new location of gluster private keys + Resolves: bz752549 -* Sun Apr 11 2010 Adam Stokes = 2.0-0 -- Bump release to 2 -- Fix problem where sos generates error on newline in hostname -- Remove references to sysreport* +* Fri Mar 9 2012 Bryn M. Reeves = 2.2-24.el6 +- Fix katello and aeolus command string syntax + Resolves: bz752666 +- Remove stray hunk from gluster module patch + Resolves: bz784061 -* Tue Mar 30 2010 Adam Stokes = 1.9-5 -- Remove references to rh-upload +* Thu Mar 8 2012 Bryn M. Reeves = 2.2-22.el6 +- Correct aeolus debug invocation in CloudForms module + Resolves: bz752666 +- Update gluster module for gluster-3.3 + Resolves: bz784061 +- Add additional command output to gluster module + Resolves: bz768641 +- Add support for collecting gluster configuration and logs + Resolves: bz752549 -* Fri Mar 26 2010 Adam Stokes = 1.9-4 +* Wed Mar 7 2012 Bryn M. Reeves = 2.2-19.el6 +- Collect additional diagnostic information for realtime systems + Resolves: bz789096 +- Improve sanitization of RHN user and case number in report name + Resolves: bz771393 +- Fix verbose output and debug logging + Resolves: bz782339 +- Add basic support for CloudForms data collection + Resolves: bz752666 +- Add support for Subscription Asset Manager diagnostics + Resolves: bz752670 + +* Tue Mar 6 2012 Bryn M. Reeves = 2.2-18.el6 +- Collect fence_virt.conf in cluster module + Resolves: bz760995 +- Fix collection of /proc/net directory tree + Resolves: bz730641 +- Gather output of cpufreq-info when present + Resolves: bz760424 +- Fix brctl showstp output when bridges contain multiple interfaces + Resolves: bz751273 +- Add /etc/modprobe.d to kernel module + Resolves: bz749919 +- Ensure relative symlink targets are correctly handled when copying + Resolves: bz782589 +- Fix satellite and proxy package detection in rhn plugin + Resolves: bz749262 +- Collect stderr output from external commands + Resolves: bz739080 +- Collect /proc/cgroups in the cgroups module + Resolve: bz784874 +- Collect /proc/irq in the kernel module + Resolves: bz784862 +- Fix installed-rpms formatting for long package names + Resolves: bz767827 +- Add symbolic links for truncated log files + Resolves: bz766583 +- Collect non-standard syslog and rsyslog log files + Resolves: bz771501 +- Use correct paths for tomcat6 in RHN module + Resolves: bz749279 +- Obscure root password if present in anacond-ks.cfg + Resolves: bz790402 +- Do not accept embedded forward slashes in RHN usernames + Resolves: bz771393 +- Add new sunrpc module to collect rpcinfo for gluster systems + Resolves: bz784061 + +* Tue Nov 1 2011 Bryn M. Reeves = 2.2-17 +- Do not collect subscription manager keys in general plugin + Resolves: bz750607 + +* Fri Sep 23 2011 Bryn M. Reeves = 2.2-16 +- Fix execution of RHN hardware.py from hardware plugin + Resolves: bz736718 +- Fix hardware plugin to support new lsusb path + Resolves: bz691477 + +* Fri Sep 09 2011 Bryn M. Reeves = 2.2-15 +- Fix brctl collection when a bridge contains no interfaces + Resolves: bz697899 +- Fix up2dateclient path in hardware plugin + Resolves: bz736718 + +* Mon Aug 15 2011 Bryn M. Reeves = 2.2-14 +- Collect brctl show and showstp output + Resolves: bz697899 +- Collect nslcd.conf in ldap plugin + Resolves: bz682124 + +* Sun Aug 14 2011 Bryn M. Reeves = 2.2-11 +- Truncate files that exceed specified size limit + Resolves: bz683219 +- Add support for collecting Red Hat Subscrition Manager configuration + Resolves: bz714293 +- Collect /etc/init on systems using upstart + Resolves: bz694813 +- Don't strip whitespace from output of external programs + Resolves: bz713449 +- Collect ipv6 neighbour table in network module + Resolves: bz721163 +- Collect basic cgroups configuration data + Resolves: bz729455 + +* Sat Aug 13 2011 Bryn M. Reeves = 2.2-10 +- Fix collection of data from LVM2 reporting tools in devicemapper plugin + Resolves: bz704383 +- Add /proc/vmmemctl collection to vmware plugin + Resolves: bz709491 + +* Fri Aug 12 2011 Bryn M. Reeves = 2.2-9 +- Collect yum repository list by default + Resolves: bz600813 +- Add basic Infiniband plugin + Resolves: bz673244 +- Add plugin for scsi-target-utils iSCSI target + Resolves: bz677124 +- Fix autofs plugin LC_ALL usage + Resolves: bz683404 +- Fix collection of lsusb and add collection of -t and -v outputs + Resolves: bz691477 +- Extend data collection by qpidd plugin + Resolves: bz726360 +- Add ethtool pause, coalesce and ring (-a, -c, -g) options to network plugin + Resolves: bz726427 + +* Thu Apr 07 2011 Bryn M. Reeves = 2.2-8 +- Use sha256 for report digest when operating in FIPS mode + Resolves: bz689387 + +* Tue Apr 05 2011 Bryn M. Reeves = 2.2-7 +- Fix parted and dumpe2fs output on s390 + Resolves: bz622784 + +* Fri Feb 25 2011 Bryn M. Reeves = 2.2-6 +- Fix collection of chkconfig output in startup.py + Resolves: bz659467 +- Collect /etc/dhcp in dhcp.py plugin + Resolves: bz676522 +- Collect dmsetup ls --tree output in devicemapper.py + Resolves: bz675559 +- Collect lsblk output in filesys.py + Resolves: bz679433 + +* Thu Feb 24 2011 Bryn M. Reeves = 2.2-4 +- Fix collection of logs and config files in sssd.py + Resolves: bz624162 +- Add support for collecting entitlement certificates in rhn.py + Resolves: bz678665 + +* Thu Feb 03 2011 Bryn M. Reeves = 2.2-3 +- Fix cluster plugin dlm lockdump for el6 + Resolves: bz622407 +- Add sssd plugin to collect configuration and logs + Resolves: bz624162 +- Collect /etc/anacrontab in system plugin + Resolves: bz622527 +- Correct handling of redhat-release for el6 + Resolves: bz622528 + +* Thu Jul 29 2010 Adam Stokes = 2.2-2 +- Resolves: bz582259 +- Resolves: bz585942 +- Resolves: bz584253 +- Resolves: bz581817 + +* Thu Jun 10 2010 Adam Stokes = 2.2-0 +- Resolves: bz581921 +- Resolves: bz584253 +- Resolves: bz562651 +- Resolves: bz566170 +- Resolves: bz586450 +- Resolves: bz588223 +- Resolves: bz559737 +- Resolves: bz586405 +- Resolves: bz598978 +- Resolves: bz584763 + +* Wed Apr 28 2010 Adam Stokes = 2.1-0 +- Resolves: bz585923 +- Resolves: bz585942 +- Resolves: bz586409 +- Resolves: bz586389 +- Resolves: bz548096 +- Resolves: bz557828 +- Resolves: bz563637 +- Resolves: bz584253 +- Resolves: bz462823 +- Resolves: bz528881 +- Resolves: bz566170 +- Resolves: bz578787 +- Resolves: bz581817 +- Resolves: bz581826 +- Resolves: bz584695 +- Resolves: bz568637 +- Resolves: bz584767 +- Resolves: bz586370 + +* Mon Apr 12 2010 Adam Stokes = 2.0-0 +- Resolves: bz580015 + +* 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 @@ -133,10 +455,6 @@ rm -rf ${RPM_BUILD_ROOT} * Wed Feb 25 2009 Fedora Release Engineering - 1.8-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild -* Wed Jan 21 2009 Adam Stokes - 1.8-9 -- Resolves: bz436053 /usr/share/sos is not owned by any package -- Resolves: bz434626 Wrong directory structure for translations - * Mon Dec 29 2008 Adam Stokes - 1.8-5 - removed source defines as python manifest handles this diff --git a/sources b/sources index 5b2e59a..a876920 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -907db46b18a1552fa4fcfed97fa10a99 sos-2.2.tar.gz +14a1c1e96dac3e8d25064c8435a5e0ec sos-2.2.tar.gz