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