aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* [archive] make FileCacheArchive methods re-entrantBryn M. Reeves2018-06-182-74/+177
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since plugins are now run concurrently the Archive class must be re-entrant: different plugins may attempt to create the same paths in the archive, and since they are executing in parallel and with no locking, there exists a TOCTOU race between the use of os.path.{exists,isdir, etc.}() and the subsequent creation of a new path. Address this by implementing a simple monitor-style locking scheme for the FileCacheArchive class. A `_path_lock` member is added to the class and this must be held across any operation that modifies the namespace of the archive (including file, directory, symlink, and special node creation). Additionally, the `_check_path()` Archive method (which checks for the existence of path components up to the basename of the file, creating directories as required) is extended to also carry out a test for the existence of the path, and if the path does exist, that the object is of the expected type. A mismatch in the object type generates a ValueError with an appropriate string description of the problem. Benchmarking shows a consistent small improvement with the patch: this is a result of reduced redundant copy operations that the previous archive structure allowed (since duplicate operations are now aborted as soon as the _path_lock is acquired). Resolves: #1340 Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* netplan conf files can exist in 3 locationsEric Desrochers2018-06-071-0/+2
| | | | | | | | | | | | | | | | | Configuration files can exist in three different locations with the precedence from most important to least as follows: /run/netplan/*.yaml /etc/netplan/*.yaml /lib/netplan/*.yaml Alphabetically later files, no matter what directory in, will amend keys if the key does not already exist and override previous keys if they do. Resolves: #1318 Signed-off-by: Eric Desrochers <eric.desrochers@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [Ubuntu] Add ubuntu-advantage status, u-s-s to better default and hweBryan Quigley2018-06-071-12/+5
| | | | | | | | | | | | | | | | | Add ubuntu-advantage status which is installed by default on Ubuntu and shows when various UA items are enabled - esm, fips, and livepatch. Switch ubuntu-support-status to always --show-all. It takes exactly the same amount of time to run (in both cases it's relatively slow at 3 seconds), and only adds 30k uncompressed/12k compressed. Add hwe-support-status to give more details about Ubuntu Hardware enablement if present. Resolves: #1330 Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [omnipath_*] Add two pluginsPavel Moravec2018-06-072-0/+109
| | | | | | | | | | | plugins added: - omnipath_manager for OPA fabric subnet manager - omnipath_client for management/head node of the cluster Resolves: #1291 Signed-off-by: Pavel Moravec <pmoravec@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [archive] switch compression preset from -1 to -2Bryan Quigley2018-06-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I've noted an uptick of users recompressing sosreports to get a better compression rate for uploading over slow links. My tests indicate that -2 is a better default and should remove any benefit of compressing again. In tested cases -2 does not cause any significant CPU increase and always has shown an improvment - sometimes substancial. The worst was 3seconds more for a 15MB savings. I would generally expect to see similar percentage savings as sosreports get bigger. -3 and higher were evaluated but had diminshing returns that didn't seem worth it. Tests results: NVMe drive xz -a --batch -1 5.9M 30.766s -2 5.7M 30.673s -3 5.6M 30.101s -4 5.5M 35.882s bz2 bz2 -a --batch -1 11M 36.675s -2 8.3M 38.792s xz -a --all-logs --batch -1 87M 1m8.994s -2 72M 1m11.926s -3 69M 1m18.210s -4 70M 2m33.930s Old hard drive -a --batch -1 5.3M 14.935s -2 5.2M 15.611s -a --batch --all-logs -1 35M 38.881s -2 26M 38.337s Resolves: #1307 Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [filesys] Add permission and selinux check for /tmpJake Hunsaker2018-06-071-1/+8
| | | | | | | | | | | | | | | | Adds a check for the /tmp directory for permissions and selinux context. If either of these are incorrect, the system in question can exhibit strange behavior and otherwise be difficult for support teams to detect. On systems where SELinux is disabled, the permission check is still relevant and the command still produces useful output with the -Z option. Resolves: #1327 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [docker] Collect events and storage informationJake Hunsaker2018-06-071-1/+4
| | | | | | | | | | | Adds collection of the previous day's worth of events handled by the daemon, a summarized output of storage needs, and a listing of volumes known to the daemon. Resolves: #1328 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [docker] Simplify command buildingJake Hunsaker2018-06-071-29/+11
| | | | | | | | | | An early change to the docker plugin corrected the Debian/Ubuntu docker command to be "docker" instead of "docker.io". This means that the docker commands run by the plugin are not going to be different across distributions. As such, the way the commands are built by the plugin have been simplified to ease readability. Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
* [sosreport] Handle cases when creating archive failsPavel Moravec2018-06-071-30/+37
| | | | | | | | Don't compute archive's checksum and print a message to stdout rather. Resolves: #1329 Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [sosreport] more logging when creating archive failedPavel Moravec2018-06-071-3/+4
| | | | | | (Also) in case of not fatal FS error, print some valuable message Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [sosreport] remove tmpdir only if it existsPavel Moravec2018-06-071-1/+1
| | | | | | Prevents raising exception when the dir has been removed. Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [lxd] Add check for the presence of lxd packageEric Desrochers2018-06-071-0/+1
| | | | | | | | Closes: #1306 Resolves: #1313 Signed-off-by: Eric Desrochers <eric.desrochers@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [multiple plugins] Fix package list tuplesJake Hunsaker2018-06-073-3/+3
| | | | | | | | | | | Fixes the nis, nfsganesha, and os_net_config plugins package lists to use a 1-tuple instead of a string that would break package verification for those plugins. Resolves: #1315 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [block] Use add_udev_info for block devicesJake Hunsaker2018-06-071-1/+2
| | | | | | | | | | Updates the block plugin to use the new add_udev_info() method, once with an attribute walk and once without. Resolves: #1319 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [watchdog] Add watchdog pluginReid Wahl2018-06-071-0/+94
| | | | | | | | | | | | | | | This new plugin collects information related to the watchdog service, including configuration, custom executables for test-binary and repair-binary, and stdout/stderr log files. This will be helpful to support teams seeking to understand why an unexpected reboot occurred or, conversely, why a reboot did not occur as expected. Resolves: #1305 Signed-off-by: Reid Wahl <nwahl@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [systemd] Add configuration files of systemd-modules-load.serviceAkhil John2018-06-071-1/+2
| | | | | | | | | | | | It is possible to load kernel modules during boot in a static list as mentioned under /etc/modules-load.d/*.conf. These files are used by systemd-modules-load.service. Collect this information using systemd plugin. Resolves: #1303 Signed-off-by: Akhil John <ajohn@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [powerpc] Capture the opal-prd log fileAnanth N Mavinakayanahalli2018-06-071-1/+2
| | | | | | | | | | | Opal-prd is the Processor Runtime Diagnostics daemon on Power systems running OPAL firmware. Capture this log file with sosreport. Resolves: #1295 Signed-off-by: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [Plugin] Do not run verify on empty package listJake Hunsaker2018-06-071-1/+5
| | | | | | | | | | | | | | | In some instances, the regex match in all_pkgs_by_name_regex() was returning an empty list when no match was made. This in turn caused sos to run an empty verify command, e.g. 'rpm -V '. By filtering the list of packages to verify, we can remove these empty lists and avoid the empty verify command. Closes: #1304 Resolves: #1314 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [kernel] Avoid capturing blanket 'find -ls'Jake Hunsaker2018-06-061-2/+4
| | | | | | | | | | | | | | | | | | | | | | Previously, if sos was run in an environment where '/lib/modules/*' did not exist, the kernel plugin would pass an empty extra_mod_paths list to 'find -ls', which would in turn cause sos to execute 'find -ls' on the entire filesystem. While this situation may seem rare, this is a possiblity whenever sos is run in a container that does not have the proper environment variable set that indicates to the active policy that sos is in fact in a container. On top of generating a sosreport with little to useful information in this case, the generated sosreport could potentially be very large due to the collection of a blanket 'find -ls'. This prevents this from occuring, by not running 'find -ls' if the extra_mod_paths list is empty. Resolves: #1288 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [systemd] collect additional useful informationRenaud Métrich2018-06-061-1/+10
| | | | | | | | | | | | | | | - Added "systemd-analyze dump" which is the complete systemd picture, containing dependencies, start/stop timestamps, aliases, etc. - Added "systemd-analyze plot" which provides a convenient visual way to understand dependencies and startup times. - Added collect of "/run/systemd/*" which contains many useful data, such as generated units, current sessions on system (useful to debug session leaks) and transient units. Resolves: #1285 Signed-off-by: Renaud Métrich <rmetrich@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [s390] gather info about HW cryptoDan Horák2018-06-061-1/+4
| | | | | | | | Fixes: #1283 Resolves: #1284 Signed-off-by: Dan Horák <dan@danny.cz> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [libraries] collect standard library pathsRenaud Métrich2018-06-061-1/+18
| | | | | | | | | | | Collects the paths to the libraries cached by "ldconfig". This is useful when a customer replaced a standard library by its own or when he added his own libraries to the standard paths or through symbolic links. Resolves: #1282 Signed-off-by: Renaud Métrich <rmetrich@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [ipa] collect klist on http.keytabPavel Moravec2018-06-061-1/+2
| | | | | | Resolves: #1280 Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [nfs] Add nfs.confPierguido Lambri2018-06-061-0/+1
| | | | | | | | | | | Many NFS (and other related programs) options can now be set through the config file /etc/nfs.conf. Collect this from the 'nfs' plugin. Resolves: #1278 Signed-off-by: Pierguido Lambri <plambri@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [docs] Fixed errors while generating docs.Sachin Patil2018-06-061-23/+31
| | | | | | | | | | | | | | | | | | | | | | | I see below errors when generating docs using `make`. Decided to cleanup a bit. The docstring look better than previous and no more errors when generating docs. ``` /home/psachin/github/sos/sos/plugins/__init__.py:docstring of sos.plugins.Plugin.add_journal:5: ERROR: Unexpected indentation. /home/psachin/github/sos/sos/plugins/__init__.py:docstring of sos.plugins.Plugin.add_journal:6: WARNING: Block quote ends without a blank line; unexpected unindent. /home/psachin/github/sos/sos/plugins/__init__.py:docstring of sos.plugins.Plugin.add_journal:13: WARNING: Definition list ends without a blank line; unexpected unindent. /home/psachin/github/sos/sos/plugins/__init__.py:docstring of sos.plugins.Plugin.add_journal:15: ERROR: Unexpected indentation. /home/psachin/github/sos/sos/plugins/__init__.py:docstring of sos.plugins.Plugin.add_journal:16: WARNING: Block quote ends without a blank line; unexpected unindent. /home/psachin/github/sos/sos/plugins/__init__.py:docstring of sos.plugins.Plugin.add_journal:18: WARNING: Definition list ends without a blank line; unexpected unindent. ``` I tried to keep the changes in Sphinx format. Not all functions are changed in this patch but the one generating errors. Let me know if anything else needs cleanup in `sos/sos/plugins/__init__.py` Signed-off-by: Sachin Patil <psachin@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [sosreport] make Ctrl-C exit messages consistentBryn M. Reeves2018-06-061-2/+3
| | | | Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [build] make futures dep conditional on python versionBryn M. Reeves2018-06-061-1/+1
| | | | Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [sosreport] Concurrently run pluginsJake Hunsaker2018-06-066-27/+100
| | | | | | | | | | | | | | | | | | | | | Changes sos to run plugins concurrently. By default sos will now use four (4) threads to run plugins, allowing for faster overall execution of sosreport. The number of threads can be changed using the --threads commandline option. Plugins now also have a timeout applied to them as a whole to avoid situations where sosreport appears to be hung. If a plugin exceeds the timeout threshold, the plugin will be terminated immediately. - this allows sos to not only continue running normally, but should still allow for collection of commands run by the plugin up until it was terminated. The timeout is plugin controlled, and defaults to 300 seconds if not set. Note that for python2 environments, this adds a dependency on python-futures. The futures module is present in the standard library for python3 environments. Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
* [utilities] Allow size limits for command outputJake Hunsaker2018-05-292-17/+83
| | | | | | | | | | | | | | | | | | | | | | | Previously, any command output generated from plugins from add_cmd_output and add_journal would be collected in full in memory. For example, if a journal was 4GB in size, then 4GB would be read into memory and subsequently written to the final sos archive. This lead to not only potentially large archives, but in some cases failure to collect data or produce an archive due to memory constraints on the system. This patch adds the ability to use a sizelimit option in both add_cmd_output and add_journal. This will limit the collected output from commands or journals to the given limit, both what is read into memory and what is written to the final archive. If not given, sizelimit will default to --log-size. For journal collection, if no sizelimit is given then the larger of either --log-size or 100mb is used. Resolves: #1120 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [kernel] fix except syntaxBryn M. Reeves2018-05-291-2/+2
| | | | Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [sosreport] add separator argument to _format_list()Bryn M. Reeves2018-05-291-5/+5
| | | | | | | | | | | | | | The _format_list() function handles formatting lists as comma- separated strings, including line wrapping and indentation to match an outer indentation level. Add a new 'sep' parameter to allow the list to be separated by an arbitrary character sequence. This allows space-separated command line option lists to be printed by --list-presets. Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [policies/redhat] use os-release instead of redhat|fedora-releaseBryn M. Reeves2018-05-291-5/+26
| | | | | | | | Rather than testing for the presence of /etc/redhat-release and the absence of /etc/fedora-release, open /etc/os-release and check for the presence of the RHEL release string in the NAME field. Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [build] make build and install targets .PHONYBryn M. Reeves2018-05-271-0/+2
| | | | Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [sos] add po/en.poBryn M. Reeves2018-05-271-0/+166
| | | | | | | 'make po' complains about this file being missing: add it, with the same translations as en_GB.po, and set the locale to 'en'. Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [build] kill sos/__init__.py.inBryn M. Reeves2018-05-262-34/+1
| | | | Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [logs] rework: collect journalctl verbosed logs with --all-logs onlyKazuhito Hagio2018-05-241-2/+1
| | | | | | | | | | | | commit 7bc90f618f0549279544d26effae2e5197d85e2b ("[logs] collect journalctl verbosed logs with --all-logs only") did not suppress the journalctl verbosed logs by default. Let's rework it. Related: #1225 Resolves: #1310 Signed-off-by: Kazuhito Hagio <k-hagio@ab.jp.nec.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [maas] add package checksBryan Quigley2018-05-241-0/+1
| | | | | | | | | | Previously this had no checks and would run on every Ubuntu machine - the majority of which are not maas servers Resolves: #1309 Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [networkmanager] Add Ubuntu package nameBryan Quigley2018-05-241-1/+1
| | | | | | | | | Add 'network-manager' name so it runs on Ubuntu. Resolves: #1308 Signed-off-by: Bryan Quigley <bryan.quigley@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [SCLPlugin] fix missing 'self' in add_cmd_output_scl()Sachin Patil2018-05-241-1/+1
| | | | | | | Resolves: #1302 Signed-off-by: Sachin Patil <psachin@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [system,kernel] dont collect some empty nonreadable filesPavel Moravec2018-05-242-1/+8
| | | | | | | | To prevent confusing errors on stdout in py3 Relevant to: #1299 Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [kata_containers] Add new plugin for Kata ContainersJames O. D. Hunt2018-05-241-0/+53
| | | | | | | | | | | | | | | Add a new plugin for the Kata Containers project runtime (`kata-runtime`). See: - https://github.com/kata-containers - https://katacontainers.io/ Resolves: #1298 Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [lustre] make the join call py3 compatiblePavel Moravec2018-05-241-2/+1
| | | | | | | | python3 fails with "cannot import name 'join'" error otherwise Resolves: #1297 Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [policies] use py3-compliant string.ascii_lowercasePavel Moravec2018-05-241-1/+1
| | | | | | | | | string.lowercase works in python2 only, use equivalent string.ascii_lowercase in either python 2 or 3 Resolves: #1296 Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
* [origin] OpenShift 3.10 updatesBrenton Leanhardt2018-05-241-38/+44
| | | | | | | | | | Several new files need to be collected and master logs are now in a different location. The NodeConfigCheck plugin for oadm diagnostics no longer exists. Resolves: #1294 Signed-off-by: Brenton Leanhardt <bleanhar@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [dnf] collect installed modules and info about themPavel Moravec2018-05-241-0/+19
| | | | | | | | | | collect "dnf module list --installed" and for each module, get info about it Resolves: #1292 Signed-off-by: Pavel Moravec <pmoravec@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [fibrechannel] Add new pluginJake Hunsaker2018-05-241-0/+37
| | | | | | | | | Adds a new plugin for fibrechannel devices. Resolves: #1290 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [Plugins] Add new add_udev_info() methodJake Hunsaker2018-05-241-0/+19
| | | | | | | | | | | | | | | | | Adds a new collection method add_udev_info() which will collect 'udevadm info' output for a given device or list of devices. An optional 'attrs' boolean will, if True, have udevadm perform an attribute-walk of the device's sysfs attributes. This method can take either device names such as '/dev/sda' or sysfs paths such as '/sys/class/scsi_host/host0' and these styles may be freely interchanged in a list given to a single call. Resolves: #1293 Signed-off-by: Jake Hunsaker <jhunsake@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [kernel] list loaded eBPF programs and mapsPavel Moravec2018-05-241-0/+33
| | | | | | | | | | Collect the list all loaded eBPF programs and maps and dump their content. Resolves: #1287 Signed-off-by: Pavel Moravec <pmoravec@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [archive] handle No space left on device for compress, checksumFilip Krska2018-05-242-6/+11
| | | | | | | | | | | | | Handle compression command failure. Handle checksum file writing failure. Make moving checksum file failure non fatal. Avoid double cleanup. Signed-off-by: Filip Krska <fkrska@redhat.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
* [Plugin] Fix string decoding for debug log outputDan Streetman2018-05-241-13/+8
| | | | | | | | | | | | | | | | | | | | | | | | | In add_string_as_file and _collect_strings, the first line of each string is printed to debug log, however there is a bug in _collect_strings that tries to decode the first line of '...' instead of the actual string; this causes a error like: File "/usr/share/sosreport/sos/sosreport.py", line 1300, in collect plug.collect() File "/usr/share/sosreport/sos/plugins/__init__.py", line 877, in collect self._collect_strings() File "/usr/share/sosreport/sos/plugins/__init__.py", line 860, in _collect_strings (content.splitlines()[0]).decode('utf8', 'ignore')) AttributeError: 'str' object has no attribute 'decode' This simplifies the (string or bytearray)-to-first-line-string of both functions, which also fixes the bug using the wrong variable to decode. Fixes: 7ba2fb47d05b608f3863fda9271894e38b43937a Resolves: #1267 Signed-off-by: Dan Streetman <ddstreet@canonical.com> Signed-off-by: Bryn M. Reeves <bmr@redhat.com>