sosreport-3.2+git276-g7da50d6/0000755000175000017500000000000012625313241015504 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/example_plugins/0000755000175000017500000000000012625313241020700 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/example_plugins/example.py0000755000175000017500000000522412625313241022713 0ustar cariboucaribou### 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 # the class name determines the plugin name # if you want to override it simply provide a @classmethod name() # that returns the name you want class example(Plugin, RedHatPlugin): '''This is the description for the example plugin''' # Plugin developers want to override setup() from which they will call # add_copy_spec() to collect files and collectExtOutput() to collect programs # output. # Add your options here, indicate whether they are slow to run, and set # whether they are enabled by default # each option is a tuple of the following format: # (name, description, fast or slow, default value) # each option will be addressable like -k name=value option_list = [("init.d", 'Gathers the init.d directory', 'slow', 0), ('follicles', 'Gathers information about each follicle on every toe', 'slow', 0), ('color', 'Gathers toenail polish color', 'fast', 0)] def setup(self): ''' First phase - Collect all the information we need. Directories are copied recursively. arbitrary commands may be executed using the collectExtOutput() method. Information is automatically saved, and links are presented in the report to each file or directory which has been copied to the saved tree. Also, links are provided to the output from each command. ''' # Here's how to copy files and directory trees self.add_copy_spec("/etc/hosts") with open("/proc/cpuinfo") as f: for line in f: if "vendor_id" in line: self.add_alert("Vendor ID string is: %s
\n" % line) # Here's how to test your options and execute if enabled if self.option_enabled("init.d"): self.add_copy_spec("/etc/init.d") # copies a whole directory tree # Here's how to execute a command self.collectExtOutput("/bin/ps -ef") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/0000755000175000017500000000000012625313247016316 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/sos/archive.py0000644000175000017500000003373012625313247020317 0ustar cariboucaribou# Copyright (C) 2012 Red Hat, Inc., # Jesse Jaggars # Bryn M. Reeves # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os import time import tarfile import shutil import logging import shlex import re import codecs import sys # required for compression callout (FIXME: move to policy?) from subprocess import Popen, PIPE try: import selinux except ImportError: pass # PYCOMPAT import six if six.PY3: long = int class Archive(object): """Abstract base class for archives.""" @classmethod def archive_type(class_): """Returns the archive class's name as a string. """ return class_.__name__ log = logging.getLogger("sos") _name = "unset" _debug = False def _format_msg(self, msg): return "[archive:%s] %s" % (self.archive_type(), msg) def set_debug(self, debug): self._debug = debug def log_error(self, msg): self.log.error(self._format_msg(msg)) def log_warn(self, msg): self.log.warning(self._format_msg(msg)) def log_info(self, msg): self.log.info(self._format_msg(msg)) def log_debug(self, msg): if not self._debug: return self.log.debug(self._format_msg(msg)) # this is our contract to clients of the Archive class hierarchy. # All sub-classes need to implement these methods (or inherit concrete # implementations from a parent class. def add_file(self, src, dest=None): raise NotImplementedError def add_string(self, content, dest): raise NotImplementedError def add_link(self, source, link_name): raise NotImplementedError def add_dir(self, path): raise NotImplementedError def add_node(self, path, mode, device): raise NotImplementedError def get_tmp_dir(self): """Return a temporary directory that clients of the archive may use to write content to. The content of the path is guaranteed to be included in the generated archive.""" raise NotImplementedError def name_max(self): """Return the maximum file name length this archive can support. This is the lesser of the name length limit of the archive format and any temporary file system based cache.""" 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 def finalize(self, method): """Finalize an archive object via method. This may involve creating An archive that is subsequently compressed or simply closing an archive that supports in-line handling. If method is automatic then the following methods are tried in order: xz, bz2 and gzip""" self.close() class FileCacheArchive(Archive): """ Abstract superclass for archive types that use a temporary cache directory in the file system. """ _tmp_dir = "" _archive_root = "" _archive_name = "" def __init__(self, name, tmpdir): self._name = name self._tmp_dir = tmpdir self._archive_root = os.path.join(tmpdir, name) os.makedirs(self._archive_root, 0o700) self.log_info("initialised empty FileCacheArchive at '%s'" % (self._archive_root,)) def dest_path(self, name): if os.path.isabs(name): name = name.lstrip(os.sep) return (os.path.join(self._archive_root, name)) def _check_path(self, dest): dest_dir = os.path.split(dest)[0] if not dest_dir: return if not os.path.isdir(dest_dir): self._makedirs(dest_dir) def add_file(self, src, dest=None): if not dest: dest = src dest = self.dest_path(dest) self._check_path(dest) try: shutil.copy(src, dest) except IOError as e: self.log_info("caught '%s' copying '%s'" % (e, src)) try: shutil.copystat(src, dest) except OSError: # SELinux xattrs in /proc and /sys throw this pass try: stat = os.stat(src) os.chown(dest, stat.st_uid, stat.st_gid) except Exception as e: self.log_debug("caught '%s' setting ownership of '%s'" % (e, dest)) self.log_debug("added '%s' to FileCacheArchive '%s'" % (src, self._archive_root)) def add_string(self, content, dest): src = dest dest = self.dest_path(dest) self._check_path(dest) f = codecs.open(dest, 'w', encoding='utf-8') if isinstance(content, bytes): content = content.decode('utf8', 'ignore') f.write(content) if os.path.exists(src): try: shutil.copystat(src, dest) except OSError as e: self.log_error( "Unable to add '%s' to FileCacheArchive: %s" % (dest, e)) self.log_debug("added string at '%s' to FileCacheArchive '%s'" % (src, self._archive_root)) def add_link(self, source, link_name): dest = self.dest_path(link_name) self._check_path(dest) if not os.path.lexists(dest): os.symlink(source, dest) self.log_debug("added symlink at '%s' to '%s' in FileCacheArchive '%s'" % (dest, source, self._archive_root)) def add_dir(self, path): self.makedirs(path) def add_node(self, path, mode, device): dest = self.dest_path(path) self._check_path(dest) if not os.path.exists(dest): os.mknod(dest, mode, device) shutil.copystat(path, dest) def _makedirs(self, path, mode=0o700): os.makedirs(path, mode) def name_max(self): if 'PC_NAME_MAX' in os.pathconf_names: pc_name_max = os.pathconf_names['PC_NAME_MAX'] return os.pathconf(self._archive_root, pc_name_max) else: return 255 def get_tmp_dir(self): return self._archive_root def get_archive_path(self): return self._archive_root def makedirs(self, path, mode=0o700): self._makedirs(self.dest_path(path)) self.log_debug("created directory at '%s' in FileCacheArchive '%s'" % (path, self._archive_root)) def open_file(self, path): path = self.dest_path(path) return codecs.open(path, "r", encoding='utf-8') def cleanup(self): shutil.rmtree(self._archive_root) def finalize(self, method): self.log_info("finalizing archive '%s' using method '%s'" % (self._archive_root, method)) self._build_archive() self.cleanup() self.log_info("built archive at '%s' (size=%d)" % (self._archive_name, os.stat(self._archive_name).st_size)) self.method = method return self._compress() # Compatibility version of the tarfile.TarFile class. This exists to allow # compatibility with PY2 runtimes that lack the 'filter' parameter to the # TarFile.add() method. The wrapper class is used on python2.6 and earlier # only; all later versions include 'filter' and the native TarFile class is # used directly. class _TarFile(tarfile.TarFile): # Taken from the python 2.7.5 tarfile.py def add(self, name, arcname=None, recursive=True, exclude=None, filter=None): """Add the file `name' to the archive. `name' may be any type of file (directory, fifo, symbolic link, etc.). If given, `arcname' specifies an alternative name for the file in the archive. Directories are added recursively by default. This can be avoided by setting `recursive' to False. `exclude' is a function that should return True for each filename to be excluded. `filter' is a function that expects a TarInfo object argument and returns the changed TarInfo object, if it returns None the TarInfo object will be excluded from the archive. """ self._check("aw") if arcname is None: arcname = name # Exclude pathnames. if exclude is not None: import warnings warnings.warn("use the filter argument instead", DeprecationWarning, 2) if exclude(name): self._dbg(2, "tarfile: Excluded %r" % name) return # Skip if somebody tries to archive the archive... if self.name is not None and os.path.abspath(name) == self.name: self._dbg(2, "tarfile: Skipped %r" % name) return self._dbg(1, name) # Create a TarInfo object from the file. tarinfo = self.gettarinfo(name, arcname) if tarinfo is None: self._dbg(1, "tarfile: Unsupported type %r" % name) return # Change or exclude the TarInfo object. if filter is not None: tarinfo = filter(tarinfo) if tarinfo is None: self._dbg(2, "tarfile: Excluded %r" % name) return # Append the tar header and data to the archive. if tarinfo.isreg(): with tarfile.bltn_open(name, "rb") as f: self.addfile(tarinfo, f) elif tarinfo.isdir(): self.addfile(tarinfo) if recursive: for f in os.listdir(name): self.add(os.path.join(name, f), os.path.join(arcname, f), recursive, exclude, filter) else: self.addfile(tarinfo) class TarFileArchive(FileCacheArchive): """ archive class using python TarFile to create tar archives""" method = None _with_selinux_context = False def __init__(self, name, tmpdir): super(TarFileArchive, self).__init__(name, tmpdir) self._suffix = "tar" 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 tar_info.pax_headers['atime'] = "%.9f" % fstat.st_atime tar_info.pax_headers['ctime'] = "%.9f" % fstat.st_ctime if mode: tar_info.mode = mode else: tar_info.mode = fstat.st_mode tar_info.uid = fstat.st_uid tar_info.gid = fstat.st_gid # this can be used to set permissions if using the # tarfile.add() interface to add directory trees. def copy_permissions_filter(self, tarinfo): orig_path = tarinfo.name[len(os.path.split(self._name)[-1]):] if not orig_path: orig_path = self._archive_root try: fstat = os.stat(orig_path) except OSError: return tarinfo if self._with_selinux_context: context = self.get_selinux_context(orig_path) if(context): tarinfo.pax_headers['RHT.security.selinux'] = context self.set_tarinfo_from_stat(tarinfo, fstat) return tarinfo def get_selinux_context(self, path): try: (rc, c) = selinux.getfilecon(path) return c except: return None def name(self): return "%s.%s" % (self._name, self._suffix) def name_max(self): # GNU Tar format supports unlimited file name length. Just return # the limit of the underlying FileCacheArchive. return super(TarFileArchive, self).name_max() def _build_archive(self): # python2.6 TarFile lacks the filter parameter if not six.PY3 and sys.version_info[1] < 7: tar = _TarFile.open(self._archive_name, mode="w") else: tar = tarfile.open(self._archive_name, mode="w") # we need to pass the absolute path to the archive root but we # want the names used in the archive to be relative. tar.add(self._archive_root, arcname=os.path.split(self._name)[1], filter=self.copy_permissions_filter) tar.close() def _compress(self): methods = ['xz', 'bzip2', 'gzip'] if self.method in methods: methods = [self.method] last_error = Exception("compression failed for an unknown reason") for cmd in methods: suffix = "." + cmd.replace('ip', '') # use fast compression if using xz or bz2 if cmd != "gzip": cmd = "%s -1" % cmd try: command = shlex.split("%s %s" % (cmd, self.name())) p = Popen(command, stdout=PIPE, stderr=PIPE, bufsize=-1, close_fds=True) stdout, stderr = p.communicate() if stdout: self.log_info(stdout.decode('utf-8', 'ignore')) if stderr: self.log_error(stderr.decode('utf-8', 'ignore')) self._suffix += suffix return self.name() except Exception as e: last_error = e raise last_error # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/utilities.py0000644000175000017500000001724312625313241020704 0ustar cariboucaribou# 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 __future__ import with_statement import os import re import inspect from subprocess import Popen, PIPE, STDOUT import hashlib import logging import fnmatch import errno import shlex from contextlib import closing # PYCOMPAT import six from six import StringIO def tail(filename, number_of_bytes): """Returns the last number_of_bytes of filename""" with open(filename, "rb") as f: if os.stat(filename).st_size > number_of_bytes: f.seek(-number_of_bytes, 2) return f.read() def fileobj(path_or_file, mode='r'): """Returns a file-like object that can be used as a context manager""" if isinstance(path_or_file, six.string_types): try: return open(path_or_file, mode) except: log = logging.getLogger('sos') log.debug("fileobj: %s could not be opened" % path_or_file) return closing(StringIO()) else: return closing(path_or_file) def get_hash_name(): """Returns the algorithm used when computing a hash""" import sos.policies policy = sos.policies.load() try: name = policy.get_preferred_hash_algorithm() hashlib.new(name) return name except: return 'sha256' def convert_bytes(bytes_, K=1 << 10, M=1 << 20, G=1 << 30, T=1 << 40): """Converts a number of bytes to a shorter, more human friendly format""" fn = float(bytes_) if bytes_ >= T: return '%.1fT' % (fn / T) elif bytes_ >= G: return '%.1fG' % (fn / G) elif bytes_ >= M: return '%.1fM' % (fn / M) elif bytes_ >= K: return '%.1fK' % (fn / K) else: return '%d' % bytes_ def find(file_pattern, top_dir, max_depth=None, path_pattern=None): """generator function to find files recursively. Usage: for filename in find("*.properties", "/var/log/foobar"): print filename """ if max_depth: base_depth = os.path.dirname(top_dir).count(os.path.sep) max_depth += base_depth for path, dirlist, filelist in os.walk(top_dir): if max_depth and path.count(os.path.sep) >= max_depth: del dirlist[:] if path_pattern and not fnmatch.fnmatch(path, path_pattern): continue for name in fnmatch.filter(filelist, file_pattern): yield os.path.join(path, name) def grep(pattern, *files_or_paths): """Returns lines matched in fnames, where fnames can either be pathnames to files to grep through or open file objects to grep through line by line""" matches = [] for fop in files_or_paths: with fileobj(fop) as fo: matches.extend((line for line in fo if re.match(pattern, line))) return matches def is_executable(command): """Returns if a command matches an executable on the PATH""" paths = os.environ.get("PATH", "").split(os.path.pathsep) candidates = [command] + [os.path.join(p, command) for p in paths] return any(os.access(path, os.X_OK) for path in candidates) def sos_get_command_output(command, timeout=300, stderr=False, chroot=None, chdir=None): """Execute a command and return a dictionary of status and output, optionally changing root or current working directory before executing command. """ # Change root or cwd for child only. Exceptions in the prexec_fn # closure are caught in the parent (chroot and chdir are bound from # the enclosing scope). def _child_prep_fn(): if (chroot): os.chroot(chroot) if (chdir): os.chdir(chdir) cmd_env = os.environ # ensure consistent locale for collected command output cmd_env['LC_ALL'] = 'C' # use /usr/bin/timeout to implement a timeout if timeout and is_executable("timeout"): command = "timeout %ds %s" % (timeout, command) # shlex.split() reacts badly to unicode on older python runtimes. if not six.PY3: command = command.encode('utf-8', 'ignore') args = shlex.split(command) try: p = Popen(args, shell=False, stdout=PIPE, stderr=STDOUT if stderr else PIPE, bufsize=-1, env=cmd_env, close_fds=True, preexec_fn=_child_prep_fn) stdout, stderr = p.communicate() except OSError as e: if e.errno == errno.ENOENT: return {'status': 127, 'output': ""} else: raise e if p.returncode == 126 or p.returncode == 127: stdout = six.binary_type(b"") return { 'status': p.returncode, 'output': stdout.decode('utf-8', 'ignore') } def import_module(module_fqname, superclasses=None): """Imports the module module_fqname and returns a list of defined classes from that module. If superclasses is defined then the classes returned will be subclasses of the specified superclass or superclasses. If superclasses is plural it must be a tuple of classes.""" module_name = module_fqname.rpartition(".")[-1] module = __import__(module_fqname, globals(), locals(), [module_name]) modules = [class_ for cname, class_ in inspect.getmembers(module, inspect.isclass) if class_.__module__ == module_fqname] if superclasses: modules = [m for m in modules if issubclass(m, superclasses)] return modules def shell_out(cmd, timeout=30, chroot=None, runat=None): """Shell out to an external command and return the output or the empty string in case of error. """ return sos_get_command_output(cmd, timeout=timeout, chroot=chroot, chdir=runat)['output'] class ImporterHelper(object): """Provides a list of modules that can be imported in a package. Importable modules are located along the module __path__ list and modules are files that end in .py. """ def __init__(self, package): """package is a package module import my.package.module helper = ImporterHelper(my.package.module)""" self.package = package def _plugin_name(self, path): "Returns the plugin module name given the path" base = os.path.basename(path) name, ext = os.path.splitext(base) return name def _get_plugins_from_list(self, list_): plugins = [self._plugin_name(plugin) for plugin in list_ if "__init__" not in plugin and plugin.endswith(".py")] plugins.sort() return plugins def _find_plugins_in_dir(self, path): if os.path.exists(path): py_files = list(find("*.py", path)) pnames = self._get_plugins_from_list(py_files) if pnames: return pnames else: return [] def get_modules(self): """Returns the list of importable modules in the configured python package. """ plugins = [] for path in self.package.__path__: if os.path.isdir(path) or path == '': plugins.extend(self._find_plugins_in_dir(path)) return plugins # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/policies/0000755000175000017500000000000012625313241020117 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/sos/policies/osx.py0000644000175000017500000000046212625313241021304 0ustar cariboucariboufrom sos.policies import Policy from sos.utilities import shell_out class OSXPolicy(Policy): distro = "Mac OS X" @classmethod def check(class_): try: return "Mac OS X" in shell_out("sw_vers") except Exception: return False # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/policies/redhat.py0000644000175000017500000002015612625313241021744 0ustar cariboucaribou# Copyright (C) Steve Conklin # 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 enables the use of with syntax in python 2.5 (e.g. jython) from __future__ import print_function import os import sys from sos.plugins import RedHatPlugin from sos.policies import LinuxPolicy, PackageManager from sos import _sos as _ sys.path.insert(0, "/usr/share/rhn/") try: from up2date_client import up2dateAuth from up2date_client import config from rhn import rpclib except: # might fail if non-RHEL pass class RedHatPolicy(LinuxPolicy): distro = "Red Hat" vendor = "Red Hat" vendor_url = "http://www.redhat.com/" _redhat_release = '/etc/redhat-release' _tmp_dir = "/var/tmp" _rpmq_cmd = 'rpm -qa --queryformat "%{NAME}|%{VERSION}\\n"' _in_container = False _host_sysroot = '/' def __init__(self, sysroot=None): super(RedHatPolicy, self).__init__(sysroot=sysroot) self.report_name = "" self.ticket_number = "" # need to set _host_sysroot before PackageManager() if sysroot: self._container_init() self._host_sysroot = sysroot else: sysroot = self._container_init() self.package_manager = PackageManager(self._rpmq_cmd, chroot=sysroot) self.valid_subclasses = [RedHatPlugin] pkgs = self.package_manager.all_pkgs() # If rpm query timed out after timeout duration exit if not pkgs: print("Could not obtain installed package list", file=sys.stderr) sys.exit(1) # handle PATH for UsrMove if pkgs['filesystem']['version'][0] == '3': self.PATH = "/usr/sbin:/usr/bin:/root/bin" else: self.PATH = "/sbin:/bin:/usr/sbin:/usr/bin:/root/bin" self.PATH += os.pathsep + "/usr/local/bin" self.PATH += os.pathsep + "/usr/local/sbin" self.set_exec_path() @classmethod def check(self): """This method checks to see if we are running on Red Hat. It must be overriden by concrete subclasses to return True when running on a Fedora, RHEL or other Red Hat distribution or False otherwise.""" return False def _container_init(self): """Check if sos is running in a container and perform container specific initialisation based on ENV_HOST_SYSROOT. """ if ENV_CONTAINER_UUID in os.environ: self._in_container = True if ENV_HOST_SYSROOT in os.environ: self._host_sysroot = os.environ[ENV_HOST_SYSROOT] use_sysroot = self._in_container and self._host_sysroot != '/' if use_sysroot: host_tmp_dir = os.path.abspath(self._host_sysroot + self._tmp_dir) self._tmp_dir = host_tmp_dir return self._host_sysroot if use_sysroot else None def runlevel_by_service(self, name): from subprocess import Popen, PIPE ret = [] p = Popen("LC_ALL=C /sbin/chkconfig --list %s" % name, shell=True, stdout=PIPE, stderr=PIPE, bufsize=-1, close_fds=True) out, err = p.communicate() if err: return ret for tabs in out.split()[1:]: try: (runlevel, onoff) = tabs.split(":", 1) except: pass else: if onoff == "on": ret.append(int(runlevel)) return ret 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() # Container environment variables on Red Hat systems. ENV_CONTAINER_UUID = 'container_uuid' ENV_HOST_SYSROOT = 'HOST' class RHELPolicy(RedHatPolicy): distro = "Red Hat Enterprise Linux" vendor = "Red Hat" vendor_url = "https://access.redhat.com/support/" msg = _("""\ This command will collect diagnostic and configuration \ information from this %(distro)s system and installed \ applications. An archive containing the collected information will be \ generated in %(tmpdir)s and may be provided to a %(vendor)s \ support representative. Any information provided to %(vendor)s will be treated in \ accordance with the published support policies at:\n %(vendor_url)s The generated archive may contain data considered sensitive \ and its content should be reviewed by the originating \ organization before being passed to any third party. No changes will be made to system configuration. %(vendor_text)s """) def __init__(self, sysroot=None): super(RHELPolicy, self).__init__(sysroot=sysroot) @classmethod def check(self): """This method checks to see if we are running on RHEL. It returns True or False.""" return (os.path.isfile(self._redhat_release) and not os.path.isfile('/etc/fedora-release')) def dist_version(self): try: pkg = self.pkg_by_name("redhat-release") or \ self.all_pkgs_by_name_regex("redhat-release-.*")[-1] pkgname = pkg["version"] if pkgname[0] == "4": return 4 elif pkgname[0] in ["5Server", "5Client"]: return 5 elif pkgname[0] == "6": return 6 elif pkgname[0] == "7": return 7 except: pass return False def rhn_username(self): try: # cfg = config.initUp2dateConfig() return rpclib.xmlrpclib.loads( up2dateAuth.getSystemId())[0][0]['username'] except: # ignore any exception and return an empty username return "" def get_local_name(self): return self.rhn_username() or self.host_name() class RedHatAtomicPolicy(RHELPolicy): distro = "Red Hat Atomic Host" msg = _("""\ This command will collect diagnostic and configuration \ information from this %(distro)s system. An archive containing the collected information will be \ generated in %(tmpdir)s and may be provided to a %(vendor)s \ support representative. Any information provided to %(vendor)s will be treated in \ accordance with the published support policies at:\n %(vendor_url)s The generated archive may contain data considered sensitive \ and its content should be reviewed by the originating \ organization before being passed to any third party. %(vendor_text)s """) @classmethod def check(self): atomic = False if ENV_HOST_SYSROOT not in os.environ: return atomic host_release = os.environ[ENV_HOST_SYSROOT] + self._redhat_release if not os.path.exists(host_release): return False try: for line in open(host_release, "r").read().splitlines(): atomic |= 'Atomic' in line except: pass return atomic class FedoraPolicy(RedHatPolicy): distro = "Fedora" vendor = "the Fedora Project" vendor_url = "https://fedoraproject.org/" def __init__(self, sysroot=None): super(FedoraPolicy, self).__init__(sysroot=sysroot) @classmethod def check(self): """This method checks to see if we are running on Fedora. It returns True or False.""" return os.path.isfile('/etc/fedora-release') def fedora_version(self): pkg = self.pkg_by_name("fedora-release") or \ self.all_pkgs_by_name_regex("fedora-release-.*")[-1] return int(pkg["version"]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/policies/ibmkvm.py0000644000175000017500000000470612625313241021765 0ustar cariboucaribou# Copyright (C) IBM Corporation, 2015 # # Authors: Kamalesh Babulal # # 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # from __future__ import print_function from sos.plugins import PowerKVMPlugin, ZKVMPlugin, RedHatPlugin from sos.policies.redhat import RedHatPolicy import os class PowerKVMPolicy(RedHatPolicy): distro = "PowerKVM" vendor = "IBM" vendor_url = "http://www-03.ibm.com/systems/power/software/linux/powerkvm" def __init__(self): super(PowerKVMPolicy, self).__init__() self.valid_subclasses = [PowerKVMPlugin, RedHatPlugin] @classmethod def check(self): """This method checks to see if we are running on PowerKVM. It returns True or False.""" return os.path.isfile('/etc/ibm_powerkvm-release') def dist_version(self): try: with open('/etc/ibm_powerkvm-release', 'r') as fp: version_string = fp.read() return version_string[2][0] return False except: return False class ZKVMPolicy(RedHatPolicy): distro = "IBM Hypervisor" vendor = "IBM Hypervisor" vendor_url = "http://www.ibm.com/systems/z/linux/IBMHypervisor/support/" def __init__(self): super(ZKVMPolicy, self).__init__() self.valid_subclasses = [ZKVMPlugin, RedHatPlugin] @classmethod def check(self): """This method checks to see if we are running on IBM Z KVM. It returns True or False.""" return os.path.isfile('/etc/base-release') def dist_version(self): try: with open('/etc/base-release', 'r') as fp: version_string = fp.read() return version_string.split(' ', 4)[3][0] return False except: return False # vim: set ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/policies/Makefile0000644000175000017500000000110412433366740021564 0ustar cariboucaribouPYTHON=python PACKAGE = $(shell basename `pwd`) PYFILES = $(wildcard *.py) PYVER := $(shell $(PYTHON) -c 'import sys; print("%.3s" %(sys.version))') PYSYSDIR := $(shell $(PYTHON) -c 'import sys; print(sys.prefix)') PYLIBDIR = $(PYSYSDIR)/lib/python$(PYVER) PKGDIR = $(PYLIBDIR)/site-packages/sos/$(PACKAGE) all: echo "nada" clean: rm -f *.pyc *.pyo *~ install: mkdir -p $(DESTDIR)/$(PKGDIR) for p in $(PYFILES) ; do \ install -m 644 $$p $(DESTDIR)/$(PKGDIR)/$$p; \ done $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/$(PKGDIR)', 1, '$(PYDIR)', 1)" sosreport-3.2+git276-g7da50d6/sos/policies/__init__.py0000644000175000017500000003347312625313241022242 0ustar cariboucariboufrom __future__ import with_statement import os import re import platform import time import fnmatch import tempfile from os import environ from sos.utilities import (ImporterHelper, import_module, get_hash_name, shell_out) from sos.plugins import IndependentPlugin, ExperimentalPlugin from sos import _sos as _ import hashlib from textwrap import fill from six import print_ from six.moves import input def import_policy(name): policy_fqname = "sos.policies.%s" % name try: return import_module(policy_fqname, Policy) except ImportError: return None def load(cache={}, sysroot=None): if 'policy' in cache: return cache.get('policy') import sos.policies helper = ImporterHelper(sos.policies) for module in helper.get_modules(): for policy in import_policy(module): if policy.check(): cache['policy'] = policy(sysroot=sysroot) if 'policy' not in cache: cache['policy'] = GenericPolicy() return cache['policy'] class PackageManager(object): """Encapsulates a package manager. If you provide a query_command to the constructor it should print each package on the system in the following format: package name|package.version\n You may also subclass this class and provide a get_pkg_list method to build the list of packages and versions. """ query_command = None timeout = 30 chroot = None def __init__(self, query_command=None, chroot=None): self.packages = {} if query_command: self.query_command = query_command if chroot: self.chroot = chroot def all_pkgs_by_name(self, name): """ Return a list of packages that match name. """ return fnmatch.filter(self.all_pkgs().keys(), name) def all_pkgs_by_name_regex(self, regex_name, flags=0): """ Return a list of packages that match regex_name. """ reg = re.compile(regex_name, flags) return [pkg for pkg in self.all_pkgs().keys() if reg.match(pkg)] def pkg_by_name(self, name): """ Return a single package that matches name. """ pkgmatches = self.all_pkgs_by_name(name) if (len(pkgmatches) != 0): return self.all_pkgs_by_name(name)[-1] else: return None def get_pkg_list(self): """ returns a dictionary of packages in the following format: {'package_name': {'name': 'package_name', ' version': 'major.minor.version'}} """ if self.query_command: cmd = self.query_command pkg_list = shell_out( cmd, timeout=self.timeout, chroot=self.chroot ).splitlines() for pkg in pkg_list: if '|' not in pkg: continue name, version = pkg.split("|") self.packages[name] = { 'name': name, 'version': version.split(".") } return self.packages def all_pkgs(self): """ Return a list of all packages. """ if not self.packages: self.packages = self.get_pkg_list() return self.packages def pkg_nvra(self, pkg): fields = pkg.split("-") version, release, arch = fields[-3:] name = "-".join(fields[:-3]) return (name, version, release, arch) class Policy(object): msg = _("""\ This command will collect system configuration and diagnostic information \ from this %(distro)s system. An archive containing the collected information \ will be generated in %(tmpdir)s. For more information on %(vendor)s visit: %(vendor_url)s The generated archive may contain data considered sensitive and its content \ should be reviewed by the originating organization before being passed to \ any third party. No changes will be made to system configuration. %(vendor_text)s """) distro = "Unknown" vendor = "Unknown" vendor_url = "http://www.example.com/" vendor_text = "" PATH = "" _in_container = False _host_sysroot = '/' def __init__(self, sysroot=None): """Subclasses that choose to override this initializer should call super() to ensure that they get the required platform bits attached. super(SubClass, self).__init__(). Policies that require runtime tests to construct PATH must call self.set_exec_path() after modifying PATH in their own initializer.""" self._parse_uname() self.report_name = self.hostname self.case_id = None self.package_manager = PackageManager() self._valid_subclasses = [] self.set_exec_path() self._host_sysroot = sysroot def get_valid_subclasses(self): return [IndependentPlugin] + self._valid_subclasses def set_valid_subclasses(self, subclasses): self._valid_subclasses = subclasses def del_valid_subclasses(self): del self._valid_subclasses valid_subclasses = property(get_valid_subclasses, set_valid_subclasses, del_valid_subclasses, "list of subclasses that this policy can " "process") def check(self): """ This function is responsible for determining if the underlying system is supported by this policy. """ return False def in_container(self): """ Returns True if sos is running inside a container environment. """ return self._in_container def host_sysroot(self): return self._host_sysroot def dist_version(self): """ Return the OS version """ pass def get_preferred_archive(self): """ Return the class object of the prefered archive format for this platform """ from sos.archive import TarFileArchive return TarFileArchive def get_archive_name(self): """ This function should return the filename of the archive without the extension. """ if self.case_id: self.report_name += "." + self.case_id return "sosreport-%s-%s" % (self.report_name, time.strftime("%Y%m%d%H%M%S")) def get_tmp_dir(self, opt_tmp_dir): if not opt_tmp_dir: return tempfile.gettempdir() return opt_tmp_dir def match_plugin(self, plugin_classes): if len(plugin_classes) > 1: for p in plugin_classes: # Give preference to the first listed tagging class # so that e.g. UbuntuPlugin is chosen over DebianPlugin # on an Ubuntu installation. if issubclass(p, self.valid_subclasses[0]): return p return plugin_classes[0] def validate_plugin(self, plugin_class, experimental=False): """ Verifies that the plugin_class should execute under this policy """ valid_subclasses = [IndependentPlugin] + self.valid_subclasses if experimental: valid_subclasses += [ExperimentalPlugin] return any(issubclass(plugin_class, class_) for class_ in valid_subclasses) def pre_work(self): """ This function is called prior to collection. """ pass def post_work(self): """ This function is called after the sosreport has been generated. """ pass def pkg_by_name(self, pkg): return self.package_manager.pkg_by_name(pkg) def _parse_uname(self): (system, node, release, version, machine, processor) = platform.uname() self.system = system self.hostname = node self.release = release self.smp = version.split()[1] == "SMP" self.machine = machine def set_commons(self, commons): self.commons = commons def _set_PATH(self, path): environ['PATH'] = path def set_exec_path(self): self._set_PATH(self.PATH) def is_root(self): """This method should return true if the user calling the script is considered to be a superuser""" return (os.getuid() == 0) def _create_checksum(self, final_filename=None): if not final_filename: return False archive_fp = open(final_filename, 'rb') digest = hashlib.new(get_hash_name()) digest.update(archive_fp.read()) archive_fp.close() return digest.hexdigest() def get_preferred_hash_algorithm(self): """Returns the string name of the hashlib-supported checksum algorithm to use""" return "md5" def display_results(self, final_filename=None, build=False): # make sure a report exists if not final_filename: return False self._print() 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() def _print(self, msg=None): """A wrapper around print that only prints if we are not running in quiet mode""" if not self.commons['cmdlineopts'].quiet: if msg: print_(msg) else: print_() def get_msg(self): """This method is used to prepare the preamble text to display to the user in non-batch mode. If your policy sets self.distro that text will be substituted accordingly. You can also override this method to do something more complicated.""" width = 72 _msg = self.msg % {'distro': self.distro, 'vendor': self.vendor, 'vendor_url': self.vendor_url, 'vendor_text': self.vendor_text, 'tmpdir': self.commons['tmpdir']} _fmt = "" for line in _msg.splitlines(): _fmt = _fmt + fill(line, width, replace_whitespace=False) + '\n' return _fmt class GenericPolicy(Policy): """This Policy will be returned if no other policy can be loaded. This should allow for IndependentPlugins to be executed on any system""" def get_msg(self): return self.msg % {'distro': self.system} class LinuxPolicy(Policy): """This policy is meant to be an abc class that provides common implementations used in Linux distros""" distro = "Linux" vendor = "None" PATH = "/bin:/sbin:/usr/bin:/usr/sbin" def __init__(self, sysroot=None): super(LinuxPolicy, self).__init__(sysroot=sysroot) def get_preferred_hash_algorithm(self): checksum = "md5" try: fp = open("/proc/sys/crypto/fips_enabled", "r") except: return checksum fips_enabled = fp.read() if fips_enabled.find("1") >= 0: checksum = "sha256" fp.close() return checksum def default_runlevel(self): try: with open("/etc/inittab") as fp: pattern = r"id:(\d{1}):initdefault:" text = fp.read() return int(re.findall(pattern, text)[0]) except: return 3 def kernel_version(self): return self.release def host_name(self): return self.hostname def is_kernel_smp(self): return self.smp def get_arch(self): return self.machine def get_local_name(self): """Returns the name usd in the pre_work step""" return self.host_name() def sanitize_report_name(self, report_name): return re.sub(r"[^-a-zA-Z.0-9]", "", report_name) def sanitize_case_id(self, case_id): return re.sub(r"[^-a-z,A-Z.0-9]", "", case_id) def pre_work(self): # this method will be called before the gathering begins cmdline_opts = self.commons['cmdlineopts'] customer_name = cmdline_opts.customer_name localname = customer_name if customer_name else self.get_local_name() caseid = cmdline_opts.case_id if cmdline_opts.case_id else "" if not cmdline_opts.batch and not \ cmdline_opts.quiet: try: self.report_name = input(_("Please enter your first initial " "and last name [%s]: ") % localname) self.case_id = input(_("Please enter the case id " "that you are generating this " "report for [%s]: ") % caseid) self._print() except: self._print() self.report_name = localname if len(self.report_name) == 0: self.report_name = localname if customer_name: self.report_name = customer_name if cmdline_opts.case_id: self.case_id = cmdline_opts.case_id self.report_name = self.sanitize_report_name(self.report_name) if self.case_id: self.case_id = self.sanitize_case_id(self.case_id) if (self.report_name == ""): self.report_name = "default" return # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/policies/ubuntu.py0000644000175000017500000000220412625313241022011 0ustar cariboucariboufrom __future__ import with_statement from sos.plugins import UbuntuPlugin, DebianPlugin from sos.policies.debian import DebianPolicy class UbuntuPolicy(DebianPolicy): distro = "Ubuntu" vendor = "Ubuntu" vendor_url = "http://www.ubuntu.com/" def __init__(self, sysroot=None): super(UbuntuPolicy, self).__init__(sysroot=sysroot) self.valid_subclasses = [UbuntuPlugin, DebianPlugin] @classmethod def check(self): """This method checks to see if we are running on Ubuntu. It returns True or False.""" try: with open('/etc/lsb-release', 'r') as fp: return "Ubuntu" in fp.read() except: return False def dist_version(self): """ Returns the version stated in DISTRIB_RELEASE """ try: with open('/etc/lsb-release', 'r') as fp: lines = fp.readlines() for line in lines: if "DISTRIB_RELEASE" in line: return line.split("=")[1].strip() return False except: return False # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/policies/debian.py0000644000175000017500000000262512625313241021720 0ustar cariboucariboufrom sos.plugins import DebianPlugin from sos.policies import PackageManager, LinuxPolicy import os class DebianPolicy(LinuxPolicy): distro = "Debian" vendor = "the Debian project" vendor_url = "http://www.debian.org/" report_name = "" ticket_number = "" package_manager = PackageManager( "dpkg-query -W -f='${Package}|${Version}\\n' \*") valid_subclasses = [DebianPlugin] PATH = "/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" \ + ":/usr/local/sbin:/usr/local/bin" def __init__(self, sysroot=None): super(DebianPolicy, self).__init__(sysroot=sysroot) self.report_name = "" self.ticket_number = "" self.package_manager = PackageManager( "dpkg-query -W -f='${Package}|${Version}\\n' \*") self.valid_subclasses = [DebianPlugin] @classmethod def check(self): """This method checks to see if we are running on Debian. It returns True or False.""" return os.path.isfile('/etc/debian_version') def dist_version(self): try: with open('/etc/lsb-release', 'r') as fp: rel_string = fp.read() if "wheezy/sid" in rel_string: return 6 elif "jessie/sid" in rel_string: return 7 return False except: return False # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/Makefile0000644000175000017500000000105312433366740017760 0ustar cariboucaribouPYTHON=python PACKAGE = $(shell basename `pwd`) PYVER := $(shell $(PYTHON) -c 'import sys; print("%.3s" %(sys.version))') PYSYSDIR := $(shell $(PYTHON) -c 'import sys; print(sys.prefix)') PYLIBDIR = $(PYSYSDIR)/lib/python$(PYVER) PKGDIR = $(PYLIBDIR)/site-packages/$(PACKAGE) all: echo "nada" clean: rm -f *.pyc *.pyo *~ install: mkdir -p $(DESTDIR)/$(PKGDIR) for p in $(wildcard *.py) ; do \ install -m 644 $$p $(DESTDIR)/$(PKGDIR)/$$p; \ done $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/$(PKGDIR)', 1, '$(PYDIR)', 1)" sosreport-3.2+git276-g7da50d6/sos/__init__.py0000644000175000017500000000214012605172031020414 0ustar cariboucaribou# Copyright 2010 Red Hat, Inc. # Author: Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. """ This module houses the i18n setup and message function. The default is to use gettext to internationalize messages. """ import gettext __version__ = "3.2.0a1" gettext_dir = "/usr/share/locale" gettext_app = "sos" gettext.bindtextdomain(gettext_app, gettext_dir) def _default(msg): return gettext.dgettext(gettext_app, msg) _sos = _default sosreport-3.2+git276-g7da50d6/sos/__init__.py.in0000644000175000017500000000214412433366740021040 0ustar cariboucaribou# Copyright 2010 Red Hat, Inc. # Author: Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. """ This module houses the i18n setup and message function. The default is to use gettext to internationalize messages. """ __version__ = "@SOSVERSION@" import gettext gettext_dir = "/usr/share/locale" gettext_app = "sos" gettext.bindtextdomain(gettext_app, gettext_dir) def _default(msg): return gettext.dgettext(gettext_app, msg) _sos = _default sosreport-3.2+git276-g7da50d6/sos/reporting.py0000644000175000017500000000754112625313241020702 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., # Bryn M. Reeves # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. """ This provides a restricted tag language to define the sosreport index/report """ try: import json except ImportError: import simplejson as json # PYCOMPAT from six import iteritems class Node(object): def __str__(self): return json.dumps(self.data) def can_add(self, node): return False class Leaf(Node): """Marker class that can be added to a Section node""" pass class Report(Node): """The root element of a report. This is a container for sections.""" def __init__(self): self.data = {} def can_add(self, node): return isinstance(node, Section) def add(self, *nodes): for node in nodes: if self.can_add(node): self.data[node.name] = node.data class Section(Node): """A section is a container for leaf elements. Sections may be nested inside of Report objects only.""" def __init__(self, name): self.name = name self.data = {} def can_add(self, node): return isinstance(node, Leaf) def add(self, *nodes): for node in nodes: if self.can_add(node): self.data.setdefault(node.ADDS_TO, []).append(node.data) class Command(Leaf): ADDS_TO = "commands" def __init__(self, name, return_code, href): self.data = {"name": name, "return_code": return_code, "href": href} class CopiedFile(Leaf): ADDS_TO = "copied_files" def __init__(self, name, href): self.data = {"name": name, "href": href} class CreatedFile(Leaf): ADDS_TO = "created_files" def __init__(self, name): self.data = {"name": name} class Alert(Leaf): ADDS_TO = "alerts" def __init__(self, content): self.data = content class Note(Leaf): ADDS_TO = "notes" def __init__(self, content): self.data = content class PlainTextReport(object): """Will generate a plain text report from a top_level Report object""" LEAF = " * %(name)s" ALERT = " ! %s" NOTE = " * %s" DIVIDER = "=" * 72 subsections = ( (Command, LEAF, "- commands executed:"), (CopiedFile, LEAF, "- files copied:"), (CreatedFile, LEAF, "- files created:"), (Alert, ALERT, "- alerts:"), (Note, NOTE, "- notes:"), ) buf = [] def __init__(self, report_node): self.report_node = report_node def __str__(self): self.buf = buf = [] for section_name, section_contents in sorted(iteritems( self.report_node.data)): buf.append(section_name + "\n" + self.DIVIDER) for type_, format_, header in self.subsections: self.process_subsection(section_contents, type_.ADDS_TO, header, format_) return "\n".join(buf) def process_subsection(self, section, key, header, format_): if key in section: self.buf.append(header) for item in section.get(key): self.buf.append(format_ % item) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/0000755000175000017500000000000012625313247017777 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/sos/plugins/lsbrelease.py0000644000175000017500000000225312625313241022466 0ustar cariboucaribou# 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 LsbRelease(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Linux standard base """ plugin_name = 'lsbrelease' profiles = ('system',) def setup(self): self.add_cmd_output("lsb_release -a") self.add_cmd_output( "lsb_release -d", suggest_filename="lsb_release", root_symlink="lsb-release") self.add_copy_spec("/etc/lsb-release*") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/fcoe.py0000644000175000017500000000247712625313241021271 0ustar cariboucaribou# 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 class fcoe(Plugin, RedHatPlugin): """Fibre Channel over Ethernet """ plugin_name = 'fcoe' profiles = ('storage', 'hardware') packages = ('fcoe-utils',) def setup(self): # Here we capture the information about all # FCoE instances with the -i option, and # information about all discovered FCFs # with the -f option self.add_cmd_output([ "fcoeadm -i", "fcoeadm -f" ]) # Here we grab information about the # interfaces's config files self.add_copy_spec("/etc/fcoe") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/x11.py0000644000175000017500000000245612625313241020763 0ustar cariboucaribou# 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 X11(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """X windowing system """ plugin_name = 'x11' profiles = ('hardware', 'desktop') files = ('/etc/X11',) def setup(self): self.add_copy_spec([ "/etc/X11", "/var/log/Xorg.*.log", "/var/log/XFree86.*.log", ]) self.add_forbidden_path("/etc/X11/X") self.add_forbidden_path("/etc/X11/fontpath.d") self.add_cmd_output([ "glxinfo", "xrandr --verbose" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/monit.py0000644000175000017500000000524612625313241021500 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., # Pablo Iranzo Gomez # 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 from glob import glob class Monit(Plugin, RedHatPlugin): """Monit monitoring daemon """ packages = ('monit',) profiles = ('system') plugin_name = 'monit' # Define configuration files monit_conf = glob("/etc/monit.d/*") monit_conf.append("/etc/monit.conf") monit_conf.append("/etc/monitrc") # Define log files monit_log = ["/var/log/monit.log"] option_list = [] def setup(self): self.add_cmd_output("monit status") self.add_copy_spec([self.monit_log, self.monit_conf]) def postproc(self): # Post process the files included to scrub any # password or other sensitive data # usernames and emails are cleaned to not disclose any # confidential data for file in self.monit_conf: # Remove username:password from files self.do_file_sub(file, r"allow (.*):(.*)", r"allow ********:********" ) self.do_file_sub(file, r"ALLOW (.*):(.*)", r"ALLOW ********:********" ) # Remove MAILSERVER username/password self.do_file_sub(file, r"username (\w)+", r"username ********" ) self.do_file_sub(file, r"password (\w)+", r"password ********" ) self.do_file_sub(file, r"USERNAME (\w)+", r"USERNAME ********" ) self.do_file_sub(file, r"PASSWORD (\w)+", r"PASSWORD ********" ) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/sanlock.py0000644000175000017500000000251512625313241022000 0ustar cariboucaribou# 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 class SANLock(Plugin): """SANlock daemon """ plugin_name = "sanlock" profiles = ('cluster', 'virt') packages = ["sanlock"] def setup(self): self.add_copy_spec("/var/log/sanlock.log*") self.add_cmd_output([ "sanlock client status -D", "sanlock client host_status -D", "sanlock client log_dump" ]) return class RedHatSANLock(SANLock, RedHatPlugin): files = ["/etc/sysconfig/sanlock"] def setup(self): super(RedHatSANLock, self).setup() self.add_copy_spec("/etc/sysconfig/sanlock") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/kubernetes.py0000644000175000017500000000425612625313247022527 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Neependra Khare # Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class kubernetes(Plugin, RedHatPlugin): """Kubernetes plugin """ option_list = [("podslog", "capture logs for pods", 'slow', False)] def setup(self): self.add_copy_spec("/etc/kubernetes") self.add_copy_spec("/var/run/flannel") # Kubernetes master info self.add_cmd_output("kubectl version") self.add_cmd_output("kubectl get -o json pods") self.add_cmd_output("kubectl get -o json nodes") self.add_cmd_output("kubectl get -o json services") self.add_cmd_output("kubectl get -o json replicationController") self.add_cmd_output("kubectl get -o json events") self.add_cmd_output("journalctl -u kubelet") self.add_cmd_output("journalctl -u kube-apiserver") self.add_cmd_output("journalctl -u kube-controller-manager") self.add_cmd_output("journalctl -u kube-scheduler") self.add_cmd_output("journalctl -u kube-proxy") if self.get_option('podslog'): result = self.get_command_output("kubectl get pods") if result['status'] == 0: for line in result['output'].splitlines()[1:]: pod_name = line.split(" ")[0] self.add_cmd_output([ "{0} log {1}".format("kubectl", pod_name) ]) # vim: et ts=5 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/saphana.py0000644000175000017500000000623112625313241021760 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os from sos.plugins import Plugin, RedHatPlugin class saphana(Plugin, RedHatPlugin): """SAP HANA""" plugin_name = 'saphana' profiles = ['sap'] files = ['/hana'] def setup(self): sids = [] if os.path.isdir("/hana/shared"): s = os.listdir("/hana/shared") for sid in s: if len(sid) == 3: sid = sid.strip() sids.append(sid) for sid in sids: sidadm = '%sadm' % sid.lower() prefix = 'su - %s -c' % sidadm self.add_cmd_output('%s "HDB info"' % prefix, suggest_filename="%s_HDB_info" % sid) self.add_cmd_output('%s "hdbsrvutil -v"' % prefix, suggest_filename="%s_version" % sid) self.add_cmd_output('%s \'hdbcons "mm l -s -S -p"\'' % prefix, suggest_filename="%s_memusage" % sid) self.add_cmd_output('%s \'hdbcons -e hdbindexserver \ "replication info"\'' % prefix, suggest_filename="%s_replicainfo" % sid) if os.path.isdir("/hana/shared/%s/" % sid): i = os.listdir("/hana/shared/%s/" % sid) for inst in i: if "HDB" in inst: inst = inst.strip()[-2:] # get GREEN/RED status self.add_cmd_output( 'su - %s -c "sapcontrol -nr %s \ -function GetProcessList"' % (sidadm, inst), suggest_filename="%s_%s_status" % (sid, inst) ) path = '/usr/sap/%s/HDB%s/exe/python_support' path %= (sid, inst) if os.path.isdir("%s" % path): # SCALE OUT - slow self.add_cmd_output( 'su - %s -c "python \ %s/landscapeHostConfiguration.py"' % (sidadm, path), suggest_filename="%s_%s_landscapeConfig" % (sid, inst) ) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_heat.py0000644000175000017500000000462312625313247023346 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc. # 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 OpenStackHeat(Plugin): """OpenStack Heat """ plugin_name = "openstack_heat" profiles = ('openstack', 'openstack_controller') option_list = [] def setup(self): # Heat self.add_cmd_output( "heat-manage db_version", suggest_filename="heat_db_version" ) self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/heat/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/heat/*.log", sizelimit=self.limit) self.add_copy_spec("/etc/heat/") def postproc(self): protect_keys = [ "admin_password", "memcache_secret_key", "password", "connection", "qpid_password", "rabbit_password", "stack_domain_admin_password", ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/heat/*", regexp, r"\1*********") class DebianHeat(OpenStackHeat, DebianPlugin, UbuntuPlugin): packages = ( 'heat-api', 'heat-api-cfn', 'heat-api-cloudwatch', 'heat-common', 'heat-engine', 'python-heat', 'python-heatclient' ) class RedHatHeat(OpenStackHeat, RedHatPlugin): packages = ( 'openstack-heat-api', 'openstack-heat-api-cfn', 'openstack-heat-api-cloudwatch', 'openstack-heat-cli', 'openstack-heat-common', 'openstack-heat-engine', 'python-heatclient' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/mpt.py0000644000175000017500000000212012625313241021136 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Mpt(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """ LSI Message Passing Technology """ files = ('/proc/mpt',) profiles = ('storage', ) plugin_name = 'mpt' def setup(self): self.add_copy_spec("/proc/mpt") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ata.py0000644000175000017500000000274112625313241021114 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin import os class Ata(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """ ATA and IDE information """ plugin_name = "ata" profiles = ('storage', 'hardware') packages = ('hdparm', 'smartmontools') def setup(self): dev_path = '/dev' sys_block = '/sys/block' self.add_copy_spec('/proc/ide') if os.path.isdir(sys_block): for disk in os.listdir(sys_block): if disk.startswith("sd") or disk.startswith("hd"): disk_path = os.path.join(dev_path, disk) self.add_cmd_output([ "hdparm %s" % disk_path, "smartctl -a %s" % disk_path ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/apt.py0000644000175000017500000000323512625313241021132 0ustar cariboucaribou# Copyright (C) 2013 Louis Bouchard # # 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, UbuntuPlugin, DebianPlugin class Apt(Plugin, DebianPlugin, UbuntuPlugin): """ APT - advanced packaging tool """ plugin_name = 'apt' profiles = ('system', 'sysmgmt', 'packagemanager') def setup(self): self.add_copy_spec([ "/etc/apt", "/var/log/apt" ]) self.add_cmd_output([ "apt-get check", "apt-config dump", "apt-cache stats", "apt-cache policy" ]) dpkg_result = self.call_ext_prog( "dpkg-query -W -f='${binary:Package}\t${status}\n'") dpkg_output = dpkg_result['output'].splitlines() pkg_list = ' '.join( [v.split('\t')[0] for v in dpkg_output if 'ok installed' in v]) self.add_cmd_output( "apt-cache policy {}".format(pkg_list), suggest_filename="apt-cache_policy_details" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/nfsserver.py0000644000175000017500000000346312625313241022366 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Eugene Teo # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os from stat import ST_SIZE class NfsServer(Plugin, RedHatPlugin): """NFS server information """ plugin_name = 'nfsserver' profiles = ('storage', 'network', 'services', 'nfs') def check_enabled(self): default_runlevel = self.policy().default_runlevel() nfs_runlevels = self.policy().runlevel_by_service("nfs") if default_runlevel in nfs_runlevels: return True try: exports = os.stat("/etc/exports")[ST_SIZE] xtab = os.stat("/var/lib/nfs/xtab")[ST_SIZE] if exports or xtab: return True except: pass return False def setup(self): self.add_copy_spec([ "/etc/exports", "/etc/exports.d", "/var/lib/nfs/etab", "/var/lib/nfs/xtab", "/var/lib/nfs/rmtab" ]) self.add_cmd_output([ "rpcinfo -p localhost", "nfsstat -o all", "exportfs -v" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ipvs.py0000644000175000017500000000215612625313241021330 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin class Ipvs(Plugin, RedHatPlugin, DebianPlugin): """Linux IP virtual server """ plugin_name = 'ipvs' profiles = ('cluster', 'network') packages = ('ipvsadm',) def setup(self): self.add_cmd_output([ "ipvsadm -Ln", "ipvsadm -Lc" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_sahara.py0000644000175000017500000000533612625313247023666 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc.,Poornima M. Kshirsagar # 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 OpenStackSahara(Plugin): """OpenStack Sahara""" plugin_name = 'openstack_sahara' profiles = ('openstack', 'openstack_controller') option_list = [] def setup(self): self.add_copy_spec("/etc/sahara/") self.add_cmd_output("journalctl -u openstack-sahara-all") self.add_cmd_output("journalctl -u openstack-sahara-api") self.add_cmd_output("journalctl -u openstack-sahara-engine") self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/sahara/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/sahara/*.log", sizelimit=self.limit) def postproc(self): protect_keys = [ "admin_password", "memcache_secret_key", "password", "qpid_password", "rabbit_password", "ssl_key_password", "xenapi_connection_password", "connection" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/sahara/*", regexp, r"\1*********") class DebianSahara(OpenStackSahara, DebianPlugin, UbuntuPlugin): """OpenStackSahara related information for Debian based distributions.""" packages = ( 'sahara-api', 'sahara-common', 'sahara-engine', 'python-sahara', 'python-saharaclient', ) def setup(self): super(DebianSahara, self).setup() class RedHatSahara(OpenStackSahara, RedHatPlugin): """OpenStack sahara related information for Red Hat distributions.""" packages = ( 'openstack-sahara', 'openstack-sahara-api', 'openstack-sahara-engine', 'python-saharaclient' ) def setup(self): super(RedHatSahara, self).setup() self.add_copy_spec("/etc/sudoers.d/sahara") # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/sapnw.py0000644000175000017500000001341312625313241021475 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os from sos.plugins import Plugin, RedHatPlugin def get_directory_listing(path): try: dir_list = os.listdir(path) except: dir_list = [] return dir_list class sapnw(Plugin, RedHatPlugin): """SAP NetWeaver""" plugin_name = 'sapnw' profiles = ['sap'] files = ['/usr/sap'] def collect_list_instances(self): # list installed instances inst_out = self.get_cmd_output_now("/usr/sap/hostctrl/exe/saphostctrl \ -function ListInstances", suggest_filename="SAPInstances") if not inst_out: return sidsunique = set() # Cycle through all the instances, get 'sid', 'instance_number' # and 'vhost' to determine the proper profile p = open(inst_out, "r").read().splitlines() for line in p: if "DAA" not in line: fields = line.strip().split() sid = fields[3] inst = fields[5] vhost = fields[7] sidsunique.add(sid) for line in get_directory_listing("/usr/sap/%s/SYS/profile/" % sid): if sid in line and inst in line and vhost in line: ldenv = 'LD_LIBRARY_PATH=/usr/sap/%s/SYS/exe/run' % sid # TODO: I am assuming unicode here # nuc should be accounted pt = '/usr/sap/%s/SYS/exe/uc/linuxx86_64' % sid profile = line.strip() # collect profiles self.add_cmd_output( "env -i %s %s/sappfpar \ all pf=/usr/sap/%s/SYS/profile/%s" % (ldenv, pt, sid, profile), suggest_filename="%s_parameters" % profile) # collect instance status self.add_cmd_output( "env -i %s %s/sapcontrol -nr %s \ -function GetProcessList" % (ldenv, pt, inst), suggest_filename="%s_%s_GetProcList" % (sid, inst)) # collect version info for the various components self.add_cmd_output( "env -i %s %s/sapcontrol -nr %s \ -function GetVersionInfo" % (ldenv, pt, inst), suggest_filename="%s_%s_GetVersInfo" % (sid, inst)) # collect adm user environment lowsid = sid.lower() self.add_cmd_output( "su - %sadm -c \"sapcontrol -nr %s -function \ GetEnvironment\"" % (lowsid, inst), suggest_filename="%s_%sadm_%s_userenv" % (sid, lowsid, inst)) # traverse the sids list, collecting info about dbclient for sid in sidsunique: for line in get_directory_listing("/usr/sap/%s/" % sid): if 'DVEB' in line: self.add_cmd_output( "grep 'client driver' /usr/sap/%s/%s/work/dev_w0" % (sid, line), suggest_filename="%s_dbclient" % sid) def collect_list_dbs(self): # list installed sap dbs db_out = self.get_cmd_output_now("/usr/sap/hostctrl/exe/saphostctrl \ -function ListDatabases", suggest_filename="SAPDatabases") if not db_out: return dbl = open(db_out, "r").read().splitlines() for line in dbl: if "Instance name" in line: fields = line.strip().split() dbadm = fields[2][:-1] dbtype = fields[8][:-1] sid = dbadm[3:].upper() if dbtype == 'db6': # IBM DB2 self.add_cmd_output( "su - %s -c \"db2 get dbm cfg\"" % dbadm, suggest_filename="%s_%s_db2_info" % (sid, dbadm)) if dbtype == 'sap': # SAP MAXDB sid = fields[2][:-1] self.add_copy_spec( "/sapdb/%s/data/config/%s.pah" % (sid, sid)) if dbtype == 'ora': # Oracle sid = fields[2][:-1] self.add_copy_spec("/oracle/%s/*/dbs/init.ora" % sid) if dbtype == 'syb': # Sybase sid = fields[2][:-1] self.add_copy_spec("/sybase/%s/ASE*/%s.cfg" % (sid, sid)) def setup(self): self.collect_list_instances() self.collect_list_dbs() # run sapconf in check mode self.add_cmd_output("sapconf -n", suggest_filename="sapconf_checkmode") # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/rpm.py0000644000175000017500000000516512625313241021150 0ustar cariboucaribou# 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 class Rpm(Plugin, RedHatPlugin): """RPM Package Manager """ plugin_name = 'rpm' profiles = ('system', 'packagemanager') 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', 'initscripts', 'pam_.*', 'java.*', 'perl.*', 'rpm', 'yum', 'spacewalk.*', ] def setup(self): self.add_copy_spec("/var/log/rpmpkgs") if self.get_option("rpmq"): query_fmt = '"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~' query_fmt = query_fmt + '%{INSTALLTIME:date}\t%{INSTALLTIME}\t' query_fmt = query_fmt + '%{VENDOR}\t%{BUILDHOST}\t' query_fmt = query_fmt + '%{SIGPGP}\t%{SIGPGP:pgpsig}\n"' rpmq_cmd = "rpm --nodigest -qa --qf=%s" % query_fmt filter_cmd = 'awk -F "~~" ' \ '"{printf \\"%-59s %s\\n\\",\$1,\$2}"|sort' shell_cmd = "sh -c '%s'" % (rpmq_cmd + "|" + filter_cmd) self.add_cmd_output(shell_cmd, root_symlink="installed-rpms") if self.get_option("verify"): if self.get_option("rpmva"): self.add_cmd_output("rpm -Va", root_symlink="rpm-Va", timeout=180) else: pkgs_by_regex = \ self.policy().package_manager.all_pkgs_by_name_regex verify_list = map(pkgs_by_regex, self.verify_list) verify_pkgs = "" for pkg_list in verify_list: for pkg in pkg_list: if 'debuginfo' in pkg or 'devel' in pkg: continue verify_pkgs = "%s %s" % (verify_pkgs, pkg) self.add_cmd_output("rpm -V %s" % verify_pkgs) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/snmp.py0000644000175000017500000000250712625313241021324 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 Snmp(Plugin): """Simple network management protocol """ plugin_name = "snmp" profiles = ('system', 'sysmgmt') files = ('/etc/snmp/snmpd.conf',) def setup(self): self.add_copy_spec("/etc/snmp") class RedHatSnmp(Snmp, RedHatPlugin): packages = ('net-snmp',) def setup(self): super(RedHatSnmp, self).setup() class DebianSnmp(Snmp, DebianPlugin, UbuntuPlugin): packages = ('snmp',) def setup(self): super(DebianSnmp, self).setup() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_ceilometer.py0000644000175000017500000000552412625313247024556 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Eoghan Lynn # Copyright (C) 2012 Rackspace US, Inc. # 2012 Justin Shepherd # Copyright (C) 2009 Red Hat, Inc. # 2009 Joey Boggs # 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 OpenStackCeilometer(Plugin): """Openstack Ceilometer""" plugin_name = "openstack_ceilometer" profiles = ('openstack', 'openstack_controller', 'openstack_compute') option_list = [] def setup(self): # Ceilometer self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/ceilometer/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/ceilometer/*.log", sizelimit=self.limit) self.add_copy_spec("/etc/ceilometer/") def postproc(self): protect_keys = [ "admin_password", "connection_password", "host_password", "memcache_secret_key", "os_password", "password", "qpid_password", "rabbit_password", "readonly_user_password", "secret_key", "ssl_key_password", "telemetry_secret", "connection", "metering_secret" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/ceilometer/*", regexp, r"\1*********") class DebianCeilometer(OpenStackCeilometer, DebianPlugin, UbuntuPlugin): packages = ( 'ceilometer-api', 'ceilometer-agent-central', 'ceilometer-agent-compute', 'ceilometer-collector', 'ceilometer-common', 'python-ceilometer', 'python-ceilometerclient' ) class RedHatCeilometer(OpenStackCeilometer, RedHatPlugin): packages = ( 'openstack-ceilometer', 'openstack-ceilometer-api', 'openstack-ceilometer-central', 'openstack-ceilometer-collector', 'openstack-ceilometer-common', 'openstack-ceilometer-compute', 'python-ceilometerclient' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/azure.py0000644000175000017500000000240012625313241021465 0ustar cariboucaribou# Copyright (C) 2013 Adam Stokes # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, UbuntuPlugin class Azure(Plugin, UbuntuPlugin): """ Microsoft Azure client """ plugin_name = 'azure' profiles = ('virt',) packages = ('walinuxagent',) def setup(self): self.add_copy_spec([ "/var/log/waagent*", "/var/lib/cloud", "/etc/default/kv-kvp-daemon-init", "/sys/module/hv_netvsc/parameters/ring_size", "/sys/module/hv_storvsc/parameters/storvsc_ringbuffer_size" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/cs.py0000644000175000017500000000707412625313241020760 0ustar cariboucaribou# Copyright (C) 2007-2010 Red Hat, Inc., Kent Lamb # Marc Sauton # Pierre Carrier # 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 from os.path import exists from glob import glob class CertificateSystem(Plugin, RedHatPlugin): """Certificate System and Dogtag """ plugin_name = 'certificatesystem' profiles = ('identity', 'security') packages = ( "redhat-cs", "rhpki-common", "pki-common" ) files = ( "/opt/redhat-cs", "/usr/share/java/rhpki", "/usr/share/java/pki" ) def checkversion(self): if self.is_installed("redhat-cs") or exists("/opt/redhat-cs"): return 71 elif self.is_installed("rhpki-common") or \ len(glob("/var/lib/rhpki-*")): return 73 # 8 should cover dogtag elif self.is_installed("pki-common") or exists("/usr/share/java/pki"): return 8 return False def setup(self): csversion = self.checkversion() if not csversion: self.add_alert("Red Hat Certificate System not found.") return if csversion == 71: self.add_copy_spec([ "/opt/redhat-cs/slapd-*/logs/access", "/opt/redhat-cs/slapd-*/logs/errors", "/opt/redhat-cs/slapd-*/config/dse.ldif", "/opt/redhat-cs/cert-*/errors", "/opt/redhat-cs/cert-*/config/CS.cfg", "/opt/redhat-cs/cert-*/access", "/opt/redhat-cs/cert-*/errors", "/opt/redhat-cs/cert-*/system", "/opt/redhat-cs/cert-*/transactions", "/opt/redhat-cs/cert-*/debug", "/opt/redhat-cs/cert-*/tps-debug.log" ]) if csversion == 73: self.add_copy_spec([ "/var/lib/rhpki-*/conf/*cfg*", "/var/lib/rhpki-*/conf/*.ldif", "/var/lib/rhpki-*/logs/debug", "/var/lib/rhpki-*/logs/catalina.*", "/var/lib/rhpki-*/logs/ra-debug.log", "/var/lib/rhpki-*/logs/transactions", "/var/lib/rhpki-*/logs/system" ]) if csversion in (73, 8): self.add_copy_spec([ "/etc/dirsrv/slapd-*/dse.ldif", "/var/log/dirsrv/slapd-*/access", "/var/log/dirsrv/slapd-*/errors" ]) if csversion == 8: self.add_copy_spec([ "/etc/pki-*/CS.cfg", "/var/lib/pki-*/conf/*cfg*", "/var/log/pki-*/debug", "/var/log/pki-*/catalina.*", "/var/log/pki-*/ra-debug.log", "/var/log/pki-*/transactions", "/var/log/pki-*/system" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/pcp.py0000644000175000017500000001366712625313241021142 0ustar cariboucaribou# Copyright (C) 2014 Michele Baldessari # 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 import os import os.path from socket import gethostname class Pcp(Plugin, RedHatPlugin, DebianPlugin): """Performance Co-Pilot data """ plugin_name = 'pcp' profiles = ('system', 'performance') packages = ('pcp',) pcp_conffile = '/etc/pcp.conf' # size-limit total PCP log data collected by default (MB) pcplog_totalsize = 100 pcp_sysconf_dir = None pcp_var_dir = None pcp_log_dir = None pcp_hostname = '' def get_size(self, path): total_size = 0 for dirpath, dirnames, filenames in os.walk(path): for f in filenames: fp = os.path.join(dirpath, f) total_size += os.path.getsize(fp) return total_size def pcp_parse_conffile(self): try: pcpconf = open(self.pcp_conffile, "r") lines = pcpconf.readlines() pcpconf.close() except: return False env_vars = {} for line in lines: if line.startswith('#'): continue try: (key, value) = line.strip().split('=') env_vars[key] = value except: pass try: self.pcp_sysconf_dir = env_vars['PCP_SYSCONF_DIR'] self.pcp_var_dir = env_vars['PCP_VAR_DIR'] self.pcp_log_dir = env_vars['PCP_LOG_DIR'] except: # Fail if all three env variables are not found return False return True def setup(self): if self.get_option("all_logs"): self.pcplog_totalsize = 0 if not self.pcp_parse_conffile(): self._log_warn("could not parse %s" % self.pcp_conffile) return # Add PCP_SYSCONF_DIR (/etc/pcp) and PCP_VAR_DIR (/var/lib/pcp/config) # unconditionally. Obviously if someone messes up their /etc/pcp.conf # in a ridiculous way (i.e. setting PCP_SYSCONF_DIR to '/') this will # break badly. var_conf_dir = os.path.join(self.pcp_var_dir, 'config') self.add_copy_spec([ self.pcp_sysconf_dir, self.pcp_conffile, var_conf_dir ]) # We explicitely avoid /var/lib/pcp/config/{pmchart,pmlogconf,pmieconf, # pmlogrewrite} as in 99% of the cases they are just copies from the # rpms. It does not make up for a lot of size but it contains many # files self.add_forbidden_path(os.path.join(var_conf_dir, 'pmchart')) self.add_forbidden_path(os.path.join(var_conf_dir, 'pmlogconf')) self.add_forbidden_path(os.path.join(var_conf_dir, 'pmieconf')) self.add_forbidden_path(os.path.join(var_conf_dir, 'pmlogrewrite')) # The *default* directory structure for pmlogger is the following: # Dir: PCP_LOG_DIR/pmlogger/HOST/ (we only collect the HOST data # itself) # - YYYYMMDD.HH.MM.{N,N.index,N.meta} N in [0,1,...] # - Latest # - pmlogger.{log,log.prior} # # Can be changed via configuration in PCP_SYSCONF_DIR/pmlogger/control # As a default strategy, collect PCP_LOG_DIR/pmlogger/* only if the # total size is moderately small: < 100MB. Override is possible via # the 'all_pcplogs' option. # FIXME: Doing a recursive size check because add_copy_spec_limit # won't work for directory trees. I.e. we can't say fetch /foo/bar/ # only if it is < 100MB. To be killed once the Plugin base class will # add a method for this use case via issue #281 self.pcp_hostname = gethostname() # Make sure we only add PCP_LOG_DIR/pmlogger/`hostname` if hostname # is set, otherwise we'd collect everything if self.pcp_hostname != '': path = os.path.join(self.pcp_log_dir, 'pmlogger', self.pcp_hostname) dirsize = self.get_size(path) max_mb_size = self.pcplog_totalsize * 1024 * 1024 # If explicitely asked collect all logs, otherwise only if < 100MB # in total if self.pcplog_totalsize == 0 or dirsize < max_mb_size: if os.path.isdir(path): self.add_copy_spec(path) else: self._log_warn("%s not found" % path) else: self._log_warn("skipped %s. Size %d bigger than %d" % (path, dirsize, max_mb_size)) else: self._log_warn("pcp_hostname was not set. Skipping.") self.add_copy_spec([ # Collect PCP_LOG_DIR/pmcd and PCP_LOG_DIR/NOTICES os.path.join(self.pcp_log_dir, 'pmcd'), os.path.join(self.pcp_log_dir, 'NOTICES*'), # Collect PCP_VAR_DIR/pmns os.path.join(self.pcp_var_dir, 'pmns'), # Also collect any other log and config files # (as suggested by fche) os.path.join(self.pcp_log_dir, '*/*.log*'), os.path.join(self.pcp_log_dir, '*/*/*.log*'), os.path.join(self.pcp_log_dir, '*/*/config*') ]) # Need to get the current status of the PCP infrastructure self.add_cmd_output("pcp") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/etcd.py0000644000175000017500000000261612625313241021267 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc. Neependra Khare # Copyright (C) 2015 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class etcd(Plugin, RedHatPlugin): """etcd plugin """ def setup(self): self.add_copy_spec("/etc/etcd") self.add_cmd_output("curl http://localhost:4001/version") self.add_cmd_output("curl http://localhost:4001/v2/members") self.add_cmd_output("curl http://localhost:4001/v2/stats/leader") self.add_cmd_output("curl http://localhost:4001/v2/stats/self") self.add_cmd_output("curl http://localhost:4001/v2/stats/store") self.add_cmd_output("ls -lR /var/lib/etcd/") # vim: et ts=5 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/yum.py0000644000175000017500000000456312625313241021165 0ustar cariboucaribou# 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 class Yum(Plugin, RedHatPlugin): """yum information """ plugin_name = 'yum' profiles = ('system', 'packagemanager', 'sysmgmt') files = ('/etc/yum.conf',) packages = ('yum',) option_list = [ ("yumlist", "list repositories and packages", "slow", False), ("yumdebug", "gather yum debugging data", "slow", False) ] def setup(self): # Pull all yum related information self.add_copy_spec([ "/etc/yum", "/etc/yum.repos.d", "/etc/yum.conf", "/var/log/yum.log" ]) # Get a list of channels the machine is subscribed to. self.add_cmd_output("yum -C repolist") # candlepin info self.add_forbidden_path("/etc/pki/entitlement/key.pem") self.add_forbidden_path("/etc/pki/entitlement/*-key.pem") self.add_copy_spec([ "/etc/pki/product/*.pem", "/etc/pki/consumer/cert.pem", "/etc/pki/entitlement/*.pem" ]) self.add_cmd_output("yum history") if self.get_option("yumlist"): # List various information about available packages self.add_cmd_output("yum list") if self.get_option("yumdebug") and self.is_installed('yum-utils'): # RHEL6+ alternative for this whole function: # self.add_cmd_output("yum-debug-dump '%s'" # % os.path.join(self.commons['dstroot'],"yum-debug-dump")) r = self.call_ext_prog("yum-debug-dump") try: self.add_cmd_output("zcat %s" % (r['output'].split()[-1],)) except IndexError: pass # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/radius.py0000644000175000017500000000330712625313241021635 0ustar cariboucaribou# Copyright (C) 2007 Navid Sheikhol-Eslami # 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 Radius(Plugin): """RADIUS service information """ plugin_name = "radius" profiles = ('network', 'identity') packages = ('freeradius',) class RedHatRadius(Radius, RedHatPlugin): files = ('/etc/raddb',) def setup(self): super(RedHatRadius, self).setup() self.add_copy_spec([ "/etc/raddb", "/etc/pam.d/radiusd", "/var/log/radius" ]) def postproc(self): self.do_file_sub( "/etc/raddb/sql.conf", r"(\s*password\s*=\s*)\S+", r"\1***") class DebianRadius(Radius, DebianPlugin, UbuntuPlugin): files = ('/etc/freeradius',) def setup(self): super(DebianRadius, self).setup() self.add_copy_spec([ "/etc/freeradius", "/etc/pam.d/radiusd", "/etc/default/freeradius", "/var/log/freeradius" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/auditd.py0000644000175000017500000000270112625313241021615 0ustar cariboucaribou# 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 Auditd(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Audit daemon information """ plugin_name = 'auditd' profiles = ('system', 'security') packages = ('audit',) def setup(self): self.add_copy_spec([ "/etc/audit/auditd.conf", "/etc/audit/audit.rules" ]) self.add_cmd_output("ausearch --input-logs -m avc,user_avc -ts today") if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/audit/audit.log", sizelimit=limit) else: self.add_copy_spec("/var/log/audit") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/dmraid.py0000644000175000017500000000316112625313241021604 0ustar cariboucaribou# 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 Dmraid(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """dmraid software RAID """ plugin_name = 'dmraid' profiles = ('hardware', 'storage') option_list = [ ("metadata", "capture dmraid device metadata", "slow", False) ] # V - {-V/--version} # b - {-b|--block_devices} # r - {-r|--raid_devices} # s - {-s|--sets} # t - [-t|--test] # a - {-a|--activate} {y|n|yes|no} # D - [-D|--dump_metadata] dmraid_options = ['V', 'b', 'r', 's', 'tay'] def setup(self): for opt in self.dmraid_options: self.add_cmd_output("dmraid -%s" % (opt,)) if self.get_option("metadata"): metadata_path = self.get_cmd_output_path("metadata") self.add_cmd_output("dmraid -rD", runat=metadata_path, chroot=self.tmp_in_sysroot()) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/hts.py0000644000175000017500000000201712625313241021141 0ustar cariboucaribou# 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 class HardwareTestSuite(Plugin, RedHatPlugin): """Red Hat Hardware Test Suite """ plugin_name = 'hardwaretestsuite' profiles = ('debug',) def setup(self): self.add_copy_spec([ "/etc/httpd/conf.d/hts.conf", "/var/hts" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/cron.py0000644000175000017500000000244112625313241021305 0ustar cariboucaribou# 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 Cron(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Cron job scheduler """ plugin_name = "cron" profiles = ('system',) files = ('/etc/crontab') def setup(self): self.add_copy_spec([ "/etc/cron*", "/var/log/cron", "/var/spool/cron" ]) if self.get_option("all_logs"): self.add_copy_spec("/var/log/cron*") self.add_cmd_output("crontab -l -u root", suggest_filename="root_crontab") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ovirt.py0000644000175000017500000001565712625313241021524 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Sandro Bonazzola # Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # Copyright (C) 2010 Red Hat, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os import re import signal from sos.plugins import Plugin, RedHatPlugin # Class name must be the same as file name and method names must not change class Ovirt(Plugin, RedHatPlugin): """oVirt Engine""" plugin_name = "ovirt" profiles = ('virt',) packages = ( 'ovirt-engine', 'ovirt-engine-dwh', 'ovirt-engine-reports', 'ovirt-scheduler-proxy', 'rhevm', 'rhevm-dwh', 'rhevm-reports' ) DB_PASS_FILES = re.compile( flags=re.VERBOSE, pattern=r""" ^ /etc/ (rhevm|ovirt-engine|ovirt-engine-dwh)/ (engine.conf|ovirt-engine-dwhd.conf) (\.d/.+.conf)? $ """ ) DEFAULT_SENSITIVE_KEYS = ( 'ENGINE_DB_PASSWORD:ENGINE_PKI_TRUST_STORE_PASSWORD:' 'ENGINE_PKI_ENGINE_STORE_PASSWORD:DWH_DB_PASSWORD' ) option_list = [ ('jbosstrace', 'Enable oVirt Engine JBoss stack trace collection', '', True), ('sensitive_keys', 'Sensitive keys to be masked', '', DEFAULT_SENSITIVE_KEYS) ] def setup(self): if self.get_option('jbosstrace'): engine_pattern = "^ovirt-engine\ -server.*jboss-modules.jar" pgrep = "pgrep -f '%s'" % engine_pattern lines = self.call_ext_prog(pgrep)['output'].splitlines() engine_pids = [int(x) for x in lines] if not engine_pids: self.soslog.error('Unable to get ovirt-engine pid') self.add_alert('Unable to get ovirt-engine pid') for pid in engine_pids: try: # backtrace written to '/var/log/ovirt-engine/console.log os.kill(pid, signal.SIGQUIT) except OSError as e: self.soslog.error('Unable to send signal to %d' % pid, e) self.add_forbidden_path('/etc/ovirt-engine/.pgpass') self.add_forbidden_path('/etc/rhevm/.pgpass') # Copy all engine tunables and domain information self.add_cmd_output("engine-config --all") self.add_cmd_output("engine-manage-domains list") # Copy engine config files. self.add_copy_spec([ "/etc/ovirt-engine", "/etc/rhevm/", "/etc/ovirt-engine-dwh", "/etc/ovirt-engine-reports", "/var/log/ovirt-engine", "/var/log/ovirt-engine-dwh", "/var/log/ovirt-engine-reports", "/var/log/ovirt-scheduler-proxy", "/var/log/rhevm", "/etc/sysconfig/ovirt-engine", "/usr/share/ovirt-engine/conf", "/var/log/ovirt-guest-agent", "/var/lib/ovirt-engine/setup-history.txt", "/var/lib/ovirt-engine/setup/answers", "/var/lib/ovirt-engine/external_truststore", "/var/tmp/ovirt-engine/config", "/var/lib/ovirt-engine/jboss_runtime/config", "/var/lib/ovirt-engine-reports/jboss_runtime/config" ]) def postproc(self): """ Obfuscate sensitive keys. """ self.do_file_sub( "/etc/ovirt-engine/engine-config/engine-config.properties", r"Password.type=(.*)", r"Password.type=********" ) self.do_file_sub( "/etc/rhevm/rhevm-config/rhevm-config.properties", r"Password.type=(.*)", r"Password.type=********" ) engine_files = ( 'ovirt-engine.xml', 'ovirt-engine_history/current/ovirt-engine.v1.xml', 'ovirt-engine_history/ovirt-engine.boot.xml', 'ovirt-engine_history/ovirt-engine.initial.xml', 'ovirt-engine_history/ovirt-engine.last.xml', ) for filename in engine_files: self.do_file_sub( "/var/tmp/ovirt-engine/config/%s" % filename, r"(.*)", r"********" ) self.do_file_sub( "/etc/ovirt-engine/redhatsupportplugin.conf", r"proxyPassword=(.*)", r"proxyPassword=********" ) passwd_files = [ "logcollector.conf", "imageuploader.conf", "isouploader.conf" ] for conf_file in passwd_files: conf_path = os.path.join("/etc/ovirt-engine", conf_file) self.do_file_sub( conf_path, r"passwd=(.*)", r"passwd=********" ) self.do_file_sub( conf_path, r"pg-pass=(.*)", r"pg-pass=********" ) sensitive_keys = self.DEFAULT_SENSITIVE_KEYS # Handle --alloptions case which set this to True. keys_opt = self.get_option('sensitive_keys') if keys_opt and keys_opt is not True: sensitive_keys = keys_opt key_list = [x for x in sensitive_keys.split(':') if x] for key in key_list: self.do_path_regex_sub( self.DB_PASS_FILES, r'{key}=(.*)'.format(key=key), r'{key}=********'.format(key=key) ) # Answer files contain passwords for key in ( 'OVESETUP_CONFIG/adminPassword', 'OVESETUP_CONFIG/remoteEngineHostRootPassword', 'OVESETUP_DWH_DB/password', 'OVESETUP_DB/password', 'OVESETUP_REPORTS_CONFIG/adminPassword', 'OVESETUP_REPORTS_DB/password', ): self.do_path_regex_sub( r'/var/lib/ovirt-engine/setup/answers/.*', r'{key}=(.*)'.format(key=key), r'{key}=********'.format(key=key) ) # aaa profiles contain passwords protect_keys = [ "vars.password", "pool.default.auth.simple.password", "pool.default.ssl.truststore.password" ] regexp = r"((?m)^\s*#*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/ovirt-engine/aaa/.*\.properties", regexp, r"\1*********") # vim: expandtab tabstop=4 shiftwidth=4 sosreport-3.2+git276-g7da50d6/sos/plugins/veritas.py0000644000175000017500000000317312625313241022024 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os class Veritas(Plugin, RedHatPlugin): """Veritas software """ plugin_name = 'veritas' profiles = ('cluster', 'storage') # Information about VRTSexplorer obtained from # http://seer.entsupport.symantec.com/docs/243150.htm option_list = [("script", "Define VRTSexplorer script path", "", "/opt/VRTSspt/VRTSexplorer")] def check_enabled(self): return os.path.isfile(self.get_option("script")) def setup(self): """ interface with vrtsexplorer to capture veritas related data """ r = self.call_ext_prog(self.get_option("script")) if r['status'] == 0: tarfile = "" for line in r['output']: line = line.strip() tarfile = self.do_regex_find_all(r"ftp (.*tar.gz)", line) if len(tarfile) == 1: self.add_copy_spec(tarfile[0]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_horizon.py0000644000175000017500000000575312625313247024122 0ustar cariboucaribou# Copyright (C) 2009 Red Hat, Inc., Joey Boggs # Copyright (C) 2012 Rackspace US, Inc., # Justin Shepherd # Copyright (C) 2013 Red Hat, Inc., Jeremy Agee # 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 OpenStackHorizon(Plugin): """OpenStack Horizon """ plugin_name = "openstack_horizon" profiles = ('openstack', 'openstack_controller') option_list = [] def setup(self): self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/horizon/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/horizon/*.log", sizelimit=self.limit) self.add_copy_spec("/etc/openstack-dashboard/") def postproc(self): protect_keys = [ "SECRET_KEY", "EMAIL_HOST_PASSWORD" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/openstack-dashboard/.*\.json", regexp, r"\1*********") self.do_path_regex_sub("/etc/openstack-dashboard/local_settings", regexp, r"\1*********") class DebianHorizon(OpenStackHorizon, DebianPlugin): packages = ( 'python-django-horizon', 'openstack-dashboard', 'openstack-dashboard-apache' ) def setup(self): super(DebianHorizon, self).setup() self.add_copy_spec("/etc/apache2/sites-available/") class UbuntuHorizon(OpenStackHorizon, UbuntuPlugin): packages = ( 'python-django-horizon', 'openstack-dashboard', 'openstack-dashboard-ubuntu-theme' ) def setup(self): super(UbuntuHorizon, self).setup() self.add_copy_spec("/etc/apache2/conf.d/openstack-dashboard.conf") class RedHatHorizon(OpenStackHorizon, RedHatPlugin): packages = ( 'python-django-horizon', 'openstack-dashboard' ) def setup(self): super(RedHatHorizon, self).setup() self.add_copy_spec("/etc/httpd/conf.d/openstack-dashboard.conf") if self.get_option("log"): self.add_copy_spec("/var/log/httpd/") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/anacron.py0000644000175000017500000000211612625313241021764 0ustar cariboucaribou# 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 Anacron(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Anacron job scheduling service""" plugin_name = 'anacron' profiles = ('system',) # anacron may be provided by anacron, cronie-anacron etc. # just look for the configuration file which is common files = ('/etc/anacrontab',) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/hpasm.py0000644000175000017500000000236412625313241021460 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Hpasm(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """HP Advanced Server Management """ plugin_name = 'hpasm' profiles = ('system', 'hardware') packages = ('hp-health',) def setup(self): self.add_copy_spec("/var/log/hp-health/hpasmd.log") self.add_cmd_output([ "hpasmcli -s 'show asr'", "hpasmcli -s 'show server'" ], timeout=0) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/acpid.py0000644000175000017500000000227312625313241021427 0ustar cariboucaribou# 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 Acpid(Plugin): """ACPI daemon information""" plugin_name = "acpid" profiles = ('hardware',) class RedHatAcpid(Acpid, RedHatPlugin): def setup(self): self.add_copy_spec([ "/var/log/acpid*", "/etc/acpi/events/power.conf"]) class DebianAcpid(Acpid, DebianPlugin, UbuntuPlugin): def setup(self): self.add_copy_spec([ "/etc/acpi/events/powerbtn*"]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/lightdm.py0000644000175000017500000000345212625313241021777 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class LightDm(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Light Display Manager """ packages = ('lightdm', ) profiles = ('desktop', ) plugin_name = 'lightdm' def setup(self): self.add_cmd_output([ "journalctl -u lightdm", "systemctl status lightdm.service" ]) self.add_copy_spec([ "/etc/lightdm/lightdm.conf", "/etc/lightdm/users.conf" ]) if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/lightdm/lightdm.log", sizelimit=limit) self.add_copy_spec_limit("/var/log/lightdm/x-0-greeter.log", sizelimit=limit) self.add_copy_spec_limit("/var/log/lightdm/x-0.log", sizelimit=limit) else: self.add_copy_spec("/var/log/lightdm") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/insights.py0000644000175000017500000000304112625313247022177 0ustar cariboucaribou# 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 class RedHatAccessInsights(Plugin, RedHatPlugin): '''Collect config and log for Red Hat Access Insights ''' plugin_name = 'insights' packages = ['redhat-access-insights'] profiles = ('system', 'sysmgmt') conf_file = '/etc/redhat-access-insights/redhat-access-insights.conf' def setup(self): log_size = self.get_option('log_size') self.add_copy_spec(self.conf_file) self.add_copy_spec_limit('/var/log/redhat-access-insights/*.log', sizelimit=log_size) def postproc(self): self.do_file_sub( self.conf_file, r'(password[\t\ ]*=[\t\ ]*)(.+)', r'\1********' ) self.do_file_sub( self.conf_file, r'(proxy[\t\ ]*=.*)(:)(.*)(@.*)', r'\1\2********\4' ) sosreport-3.2+git276-g7da50d6/sos/plugins/puppet.py0000644000175000017500000000260612625313241021664 0ustar cariboucaribou# 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 from glob import glob class Puppet(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Puppet service """ plugin_name = 'puppet' profiles = ('services',) def setup(self): self.add_copy_spec([ "/etc/puppet/*.conf", "/etc/puppet/rack/*", "/etc/puppet/manifests/*", "/var/log/puppet/*.log", ]) def postproc(self): for device_conf in glob("/etc/puppet/device.conf*"): self.do_file_sub( device_conf, r"(.*url*.ssh://.*:).*(@.*)", r"\1%s\2" % ('***') ) return # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/ppp.py0000644000175000017500000000230312625313241021140 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 Ppp(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Point-to-point protocol """ plugin_name = 'ppp' profiles = ('system', 'network') packages = ('ppp',) def setup(self): self.add_copy_spec([ "/etc/wvdial.conf", "/etc/ppp", "/var/log/ppp" ]) self.add_cmd_output("adsl-status") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/landscape.py0000644000175000017500000000606212625313241022301 0ustar cariboucaribou# 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, UbuntuPlugin class Landscape(Plugin, UbuntuPlugin): """Ubuntu Landscape client """ plugin_name = 'landscape' profiles = ('sysmgmt',) files = ('/etc/landscape/client.conf', '/etc/landscape/service.conf') packages = ('landscape-client', 'landscape-server') def setup(self): self.add_copy_spec("/etc/landscape/client.conf") self.add_copy_spec("/etc/default/landscape-client") self.add_copy_spec("/etc/landscape/service.conf") self.add_copy_spec("/etc/landscape/service.conf.old") self.add_copy_spec("/etc/default/landscape-server") if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/landscape/*.log", sizelimit=limit) self.add_copy_spec_limit("/var/log/landscape-server/*.log", sizelimit=limit) else: self.add_copy_spec("/var/log/landscape") self.add_copy_spec("/var/log/landscape-server") self.add_cmd_output("gpg --verify /etc/landscape/license.txt") self.add_cmd_output("head -n 5 /etc/landscape/license.txt") self.add_cmd_output("lsctl status") def postproc(self): self.do_file_sub( "/etc/landscape/client.conf", r"registration_password(.*)", r"registration_password[********]" ) self.do_file_sub( "/etc/landscape/service.conf", r"password = (.*)", r"password = [********]" ) self.do_file_sub( "/etc/landscape/service.conf", r"store_password = (.*)", r"store_password = [********]" ) self.do_file_sub( "/etc/landscape/service.conf", r"secret-token = (.*)", r"secret-token = [********]" ) self.do_file_sub( "/etc/landscape/service.conf.old", r"password = (.*)", r"password = [********]" ) self.do_file_sub( "/etc/landscape/service.conf.old", r"store_password = (.*)", r"store_password = [********]" ) self.do_file_sub( "/etc/landscape/service.conf.old", r"secret-token = (.*)", r"secret-token = [********]" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ds.py0000644000175000017500000000556512625313241020764 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Kent Lamb # Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os class DirectoryServer(Plugin, RedHatPlugin): """Directory Server """ plugin_name = 'directoryserver' profiles = ('identity',) files = ('/etc/dirsrv', '/opt/redhat-ds') packages = ('redhat-ds-base', 'redhat-ds-7') def check_version(self): if self.is_installed("redhat-ds-base") or \ os.path.exists("/etc/dirsrv"): return "ds8" elif self.is_installed("redhat-ds-7") or \ os.path.exists("/opt/redhat-ds"): return "ds7" return False def setup(self): self.add_forbidden_path("/etc/dirsrv/slapd*/pin.txt") self.add_forbidden_path("/etc/dirsrv/slapd*/key3.db") self.add_forbidden_path("/etc/dirsrv/slapd*/pwfile.txt") self.add_forbidden_path("/etc/dirsrv/slapd*/*passw*") self.add_forbidden_path("/etc/dirsrv/admin-serv/key3.db") self.add_forbidden_path("/etc/dirsrv/admin-serv/admpw") self.add_forbidden_path("/etc/dirsrv/admin-serv/password.conf") try: for d in os.listdir("/etc/dirsrv"): if d[0:5] == 'slapd': certpath = os.path.join("/etc/dirsrv", d) self.add_cmd_output("certutil -L -d %s" % certpath) except: self._log_warn("could not list /etc/dirsrv") if not self.check_version(): self.add_alert("Directory Server not found.") elif "ds8" in self.check_version(): self.add_copy_spec([ "/etc/dirsrv/slapd*/cert8.db", "/etc/dirsrv/slapd*/certmap.conf", "/etc/dirsrv/slapd*/dse.ldif", "/etc/dirsrv/slapd*/dse.ldif.startOK", "/etc/dirsrv/slapd*/secmod.db", "/etc/dirsrv/slapd*/schema/*.ldif", "/var/log/dirsrv/*" ]) elif "ds7" in self.check_version(): self.add_copy_spec([ "/opt/redhat-ds/slapd-*/config", "/opt/redhat-ds/slapd-*/logs" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/nscd.py0000644000175000017500000000261712625313241021300 0ustar cariboucaribou# Copyright (C) 2007 Shijoe George # 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 Nscd(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Name service caching daemon """ plugin_name = 'nscd' profiles = ('services', 'identity', 'system') files = ('/etc/nscd.conf',) packages = ('nscd',) def setup(self): self.add_copy_spec("/etc/nscd.conf") opt = self.file_grep(r"^\s*logfile", "/etc/nscd.conf") if (len(opt) > 0): for o in opt: f = o.split() self.add_copy_spec_limit(f[1], sizelimit=self.get_option("log_size")) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/docker.py0000644000175000017500000000460012625313247021620 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin class Docker(Plugin): """Docker containers """ plugin_name = 'docker' profiles = ('virt',) docker_bin = "docker" option_list = [("all", "capture all container logs even the " "terminated ones", 'fast', False)] def setup(self): self.add_copy_spec([ "/var/lib/docker/repositories-*" ]) self.add_cmd_output([ "journalctl -u docker", "{0} info".format(self.docker_bin), "{0} ps".format(self.docker_bin), "{0} images".format(self.docker_bin) ]) ps_cmd = "{0} ps".format(self.docker_bin) if self.get_option('all'): ps_cmd = "{0} -a".format(ps_cmd) result = self.get_command_output(ps_cmd) if result['status'] == 0: for line in result['output'].splitlines()[1:]: container_id = line.split(" ")[0] self.add_cmd_output([ "{0} logs {1}".format(self.docker_bin, container_id) ]) class RedHatDocker(Docker, RedHatPlugin): packages = ('docker', 'docker-io') def setup(self): super(RedHatDocker, self).setup() self.add_copy_spec([ "/etc/udev/rules.d/80-docker.rules" ]) class UbuntuDocker(Docker, UbuntuPlugin): packages = ('docker.io',) # Name collision with another package requires docker binary rename docker_bin = 'docker.io' def setup(self): super(UbuntuDocker, self).setup() self.add_copy_spec([ "/etc/default/docker.io" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/devicemapper.py0000644000175000017500000000216512625313241023013 0ustar cariboucaribou# 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 DeviceMapper(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """device-mapper framework """ plugin_name = 'devicemapper' profiles = ('storage',) def setup(self): self.add_cmd_output([ "dmsetup info -c", "dmsetup table", "dmsetup status", "dmsetup ls --tree" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/services.py0000644000175000017500000000357412625313241022177 0ustar cariboucaribou# 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 Services(Plugin): """System services """ plugin_name = "services" profiles = ('system', 'boot') option_list = [("servicestatus", "get a status of all running services", "slow", False)] def setup(self): self.add_copy_spec([ "/etc/inittab", "/etc/rc.d" ]) if self.get_option('servicestatus'): self.add_cmd_output("/sbin/service --status-all") self.add_cmd_output([ "/sbin/runlevel", "ls /var/lock/subsys" ]) class RedHatServices(Services, RedHatPlugin): def setup(self): super(RedHatServices, self).setup() self.add_cmd_output("/sbin/chkconfig --list", root_symlink="chkconfig") class DebianServices(Services, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianServices, self).setup() self.add_copy_spec("/etc/rc*.d") self.add_cmd_output("/sbin/initctl show-config", root_symlink="initctl") if self.get_option('servicestatus'): self.add_cmd_output("/sbin/initctl list") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/pam.py0000644000175000017500000000274312625313241021126 0ustar cariboucaribou# 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 Pam(Plugin): """Pluggable Authentication Modules """ plugin_name = "pam" profiles = ('security', 'identity', 'system') security_libs = "" def setup(self): self.add_copy_spec([ "/etc/pam.d", "/etc/security" ]) self.add_cmd_output([ "ls -lanF %s" % self.security_libs, "pam_tally2", "faillock" ]) class RedHatPam(Pam, RedHatPlugin): security_libs = "/lib*/security" def setup(self): super(RedHatPam, self).setup() class DebianPam(Pam, DebianPlugin, UbuntuPlugin): security_libs = "/lib/x86_64-linux-gnu/security" def setup(self): super(DebianPam, self).setup() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_trove.py0000644000175000017500000000424712625313247023566 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., Lee Yarwood # 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 OpenStackTrove(Plugin): """OpenStack Trove """ plugin_name = "openstack_trove" profiles = ('openstack', 'openstack_controller') option_list = [] def setup(self): self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/trove/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/trove/*.log", sizelimit=self.limit) self.add_copy_spec('/etc/trove/') def postproc(self): protect_keys = [ "default_password_length", "notifier_queue_password", "rabbit_password", "replication_password", "connection", "admin_password", "dns_passkey" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/trove/*", regexp, r"\1*********") class DebianTrove(OpenStackTrove, DebianPlugin, UbuntuPlugin): packages = [ 'python-trove', 'trove-common', 'trove-api', 'trove-taskmanager' ] def setup(self): super(DebianTrove, self).setup() class RedHatTrove(OpenStackTrove, RedHatPlugin): packages = ['openstack-trove'] def setup(self): super(RedHatTrove, self).setup() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/processor.py0000644000175000017500000000264412625313241022370 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin class Processor(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """CPU information """ plugin_name = 'processor' profiles = ('system', 'hardware', 'memory') files = ('/proc/cpuinfo',) packages = ('cpufreq-utils') def setup(self): self.add_copy_spec([ "/proc/cpuinfo", "/sys/class/cpuid", "/sys/devices/system/cpu" ]) self.add_cmd_output([ "lscpu", "cpupower info", "cpupower idle-info", "cpupower frequency-info" ]) if '86' in self.policy().get_arch(): self.add_cmd_output("x86info -a") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/manageiq.py0000644000175000017500000000644712625313241022140 0ustar cariboucaribou# -*- python -*- # -*- coding: utf-8 -*- # Copyright (C) 2015 Red Hat, Inc., Pep Turró Mauri # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os.path class ManageIQ(Plugin, RedHatPlugin): """ManageIQ/CloudForms related information """ plugin_name = 'manageiq' miq_dir = '/var/www/miq/vmdb' packages = ('cfme',) files = ( os.path.join(miq_dir, 'BUILD'), os.path.join(miq_dir, 'GUID'), os.path.join(miq_dir, 'VERSION') ) # Config files to collect from miq_dir/config/ miq_conf_dir = os.path.join(miq_dir, "config") miq_conf_files = [ 'application.rb', 'boot.rb', 'environment.rb', 'preinitializer.rb', 'routes.rb', 'environments/metric_fu.rb', 'environments/production.rb', 'api.yml', 'broker_notify_properties.tmpl.yml', 'capacity.tmpl.yml', 'dashboard.yml', 'event_handling.tmpl.yml', 'hostdefaults.tmpl.yml', 'mongrel_cluster.yml', 'mongrel_win.yml', 'storage.tmpl.yml', 'vmdb.tmpl.yml', 'vmdb.yml.db', 'event_handling.yml.db', 'lighttpd.conf', 'replication.conf' ] # Log files to collect from miq_dir/log/ miq_log_dir = os.path.join(miq_dir, "log") miq_log_files = [ 'appliance_console.log', 'api.log', 'audit.log', 'automation.log', 'aws.log', 'evm.log', 'fog.log', 'miq_ntpdate.log', 'mongrel.log', 'policy.log', 'prince.log', 'production.log', 'rhevm.log', 'scvmm.log', 'top_output.log', 'vim.log', 'vmdb_restart.log', 'vmstat_output.log', 'vmstat_output.log', 'apache/miq_apache.log', 'apache/ssl_access.log', 'apache/ssl_error.log', 'apache/ssl_request.log', 'apache/ssl_mirror_request.log', 'apache/ssl_mirror_error.log', 'apache/ssl_mirror_access_error.log', 'gem_list.txt', 'last_startup.txt', 'package_list_rpm.txt', 'vendor_gems.txt' ] def setup(self): if self.get_option("all_logs"): # turn all log files to a glob to include logrotated ones self.miq_log_files = map(lambda x: x + '*', self.miq_log_files) self.add_copy_spec(list(self.files)) self.add_copy_spec([ os.path.join(self.miq_conf_dir, x) for x in self.miq_conf_files ]) self.add_copy_spec([ os.path.join(self.miq_log_dir, x) for x in self.miq_log_files ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/oddjob.py0000644000175000017500000000225412625313241021607 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 class Oddjob(Plugin, RedHatPlugin): """OddJob task scheduler """ plugin_name = 'oddjob' profiles = ('services', 'sysmgmt') files = ('/etc/oddjobd.conf',) packages = ('oddjob',) def setup(self): self.add_copy_spec([ "/etc/oddjobd.conf", "/etc/oddjobd.conf.d", "/etc/dbus-1/system.d/oddjob.conf" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/pacemaker.py0000644000175000017500000000220612435106710022273 0ustar cariboucaribou# 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 Pacemaker(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): "HA Cluster resource manager" plugin_name = "pacemaker" profiles = ("cluster", ) packages = ("pacemaker", ) def setup(self): self.add_copy_spec([ "/var/lib/pacemaker/cib/cib.xml" ]) self.add_cmd_output([ "crm status", "crm configure show", ]) sosreport-3.2+git276-g7da50d6/sos/plugins/apport.py0000644000175000017500000000344112625313241021652 0ustar cariboucaribou# Copyright (c) 2012 Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, DebianPlugin, UbuntuPlugin class Apport(Plugin, DebianPlugin, UbuntuPlugin): """Apport crash reporting tool """ plugin_name = 'apport' profiles = ('debug',) def setup(self): if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/apport.log", sizelimit=limit) self.add_copy_spec_limit("/var/log/apport.log.1", sizelimit=limit) else: self.add_copy_spec("/var/log/apport*") self.add_copy_spec("/etc/apport/*") self.add_copy_spec("/var/lib/whoopsie/whoopsie-id") self.add_cmd_output( "gdbus call -y -d com.ubuntu.WhoopsiePreferences \ -o /com/ubuntu/WhoopsiePreferences \ -m com.ubuntu.WhoopsiePreferences.GetIdentifier") self.add_cmd_output("ls -alh /var/crash/") self.add_cmd_output("bash -c 'grep -B 50 -m 1 ProcMaps /var/crash/*'") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/nis.py0000644000175000017500000000216112625313241021134 0ustar cariboucaribou# 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 Nis(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Network information service """ plugin_name = 'nis' profiles = ('identity', 'services') files = ('/var/yp',) def setup(self): self.add_copy_spec([ "/etc/yp*.conf", "/var/yp/*" ]) self.add_cmd_output("domainname") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/dovecot.py0000644000175000017500000000270212625313241022007 0ustar cariboucaribou# 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 Dovecot(Plugin): """Dovecot IMAP and POP3 """ plugin_name = "dovecot" profiles = ('mail',) def setup(self): self.add_copy_spec("/etc/dovecot*") self.add_cmd_output("dovecot -n") class RedHatDovecot(Dovecot, RedHatPlugin): """dovecot server related information """ def setup(self): super(RedHatDovecot, self).setup() packages = ('dovecot', ) files = ('/etc/dovecot.conf',) class DebianDovecot(Dovecot, DebianPlugin, UbuntuPlugin): """dovecot server related information for Debian based distribution """ def setup(self): super(DebianDovecot, self).setup() files = ('/etc/dovecot/README',) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/targetcli.py0000644000175000017500000000245012625313241022322 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class TargetCli(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """TargetCLI TCM/LIO configuration """ packages = ('targetcli', 'python-rtslib') profiles = ('storage', ) plugin_name = 'targetcli' def setup(self): self.add_cmd_output([ "targetcli ls", "targetcli status", "journalctl -u target", "systemctl status target.service" ]) self.add_copy_spec("/etc/target") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_nova.py0000644000175000017500000001226112625313247023365 0ustar cariboucaribou# Copyright (C) 2009 Red Hat, Inc., Joey Boggs # Copyright (C) 2012 Rackspace US, Inc., # Justin Shepherd # Copyright (C) 2013 Red Hat, Inc., Jeremy Agee # 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 OpenStackNova(Plugin): """OpenStack Nova """ plugin_name = "openstack_nova" profiles = ('openstack', 'openstack_controller', 'openstack_compute') option_list = [("cmds", "gathers openstack nova commands", "slow", False)] def setup(self): if self.get_option("cmds"): self.add_cmd_output( "nova-manage config list", suggest_filename="nova_config_list") self.add_cmd_output( "nova-manage service list", suggest_filename="nova_service_list") self.add_cmd_output( "nova-manage db version", suggest_filename="nova_db_version") self.add_cmd_output( "nova-manage fixed list", suggest_filename="nova_fixed_ip_list") self.add_cmd_output( "nova-manage floating list", suggest_filename="nova_floating_ip_list") self.add_cmd_output( "nova-manage flavor list", suggest_filename="nova_flavor_list") self.add_cmd_output( "nova-manage network list", suggest_filename="nova_network_list") self.add_cmd_output( "nova-manage vm list", suggest_filename="nova_vm_list") self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/nova/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/nova/*.log", sizelimit=self.limit) self.add_copy_spec("/etc/nova/") def postproc(self): protect_keys = [ "ldap_dns_password", "neutron_admin_password", "rabbit_password", "qpid_password", "powervm_mgr_passwd", "virtual_power_host_pass", "xenapi_connection_password", "password", "host_password", "vnc_password", "connection", "sql_connection", "admin_password", "connection_password", "memcache_secret_key", "s3_secret_key", "metadata_proxy_shared_secret" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/nova/*", regexp, r"\1*********") class DebianNova(OpenStackNova, DebianPlugin, UbuntuPlugin): nova = False packages = ( 'nova-api-ec2', 'nova-api-metadata', 'nova-api-os-compute', 'nova-api-os-volume', 'nova-common', 'nova-compute', 'nova-compute-kvm', 'nova-compute-lxc', 'nova-compute-qemu', 'nova-compute-uml', 'nova-compute-xcp', 'nova-compute-xen', 'nova-xcp-plugins', 'nova-consoleauth', 'nova-network', 'nova-scheduler', 'nova-volume', 'novnc', 'python-nova', 'python-novaclient', 'python-novnc' ) def check_enabled(self): self.nova = self.is_installed("nova-common") return self.nova def setup(self): super(DebianNova, self).setup() self.add_copy_spec(["/etc/sudoers.d/nova_sudoers"]) class RedHatNova(OpenStackNova, RedHatPlugin): nova = False packages = ( 'openstack-nova-common', 'openstack-nova-network', 'openstack-nova-conductor', 'openstack-nova-conductor', 'openstack-nova-scheduler', 'openstack-nova-console', 'openstack-nova-novncproxy', 'openstack-nova-compute', 'openstack-nova-api', 'openstack-nova-cert', 'openstack-nova-cells', 'openstack-nova-objectstore', 'python-nova', 'python-novaclient', 'novnc' ) def check_enabled(self): self.nova = self.is_installed("openstack-nova-common") return self.nova def setup(self): super(RedHatNova, self).setup() self.add_copy_spec([ "/etc/logrotate.d/openstack-nova", "/etc/polkit-1/localauthority/50-local.d/50-nova.pkla", "/etc/sudoers.d/nova", "/etc/security/limits.d/91-nova.conf", "/etc/sysconfig/openstack-nova-novncproxy" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/vsftpd.py0000644000175000017500000000203112625313241021645 0ustar cariboucaribou# 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 class Vsftpd(Plugin, RedHatPlugin): """Vsftpd server """ plugin_name = 'vsftpd' profiles = ('services',) files = ('/etc/vsftpd',) packages = ('vsftpd',) def setup(self): self.add_copy_spec([ "/etc/ftp*", "/etc/vsftpd" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/dhcp.py0000644000175000017500000000257712625313241021274 0ustar cariboucaribou# 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, UbuntuPlugin class Dhcp(Plugin): """DHCP daemon """ plugin_name = "dhcp" profiles = ('network',) class RedHatDhcp(Dhcp, RedHatPlugin): files = ('/etc/rc.d/init.d/dhcpd',) packages = ('dhcp',) def setup(self): super(RedHatDhcp, self).setup() self.add_copy_spec([ "/etc/dhcpd.conf", "/etc/dhcp" ]) class UbuntuDhcp(Dhcp, UbuntuPlugin): files = ('/etc/init.d/udhcpd',) packages = ('udhcpd',) def setup(self): super(UbuntuDhcp, self).setup() self.add_copy_spec([ "/etc/default/udhcpd", "/etc/udhcpd.conf" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/maas.py0000644000175000017500000000474412625313241021275 0ustar cariboucaribou# Copyright (C) 2013 Adam Stokes # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, UbuntuPlugin class Maas(Plugin, UbuntuPlugin): """Ubuntu Metal-As-A-Service """ plugin_name = 'maas' profiles = ('sysmgmt',) option_list = [ ('profile-name', 'The name with which you will later refer to this remote', '', False), ('url', 'The URL of the remote API', '', False), ('credentials', 'The credentials, also known as the API key', '', False) ] def _has_login_options(self): return self.get_option("url") and self.get_option("credentials") \ and self.get_option("profile-name") def _remote_api_login(self): ret = self.call_ext_prog("maas login %s %s %s" % ( self.get_option("profile-name"), self.get_option("url"), self.get_option("credentials"))) return ret['status'] == 0 def setup(self): self.add_copy_spec([ "/etc/squid-deb-proxy", "/etc/maas", "/var/lib/maas/dhcp*", "/var/log/apache2*", "/var/log/maas*", "/var/log/upstart/maas-*", ]) self.add_cmd_output([ "apt-cache policy maas-*", "apt-cache policy python-django-*", ]) if self.is_installed("maas-region-controller"): self.add_cmd_output([ "maas-region-admin dumpdata", ]) if self._has_login_options(): if self._remote_api_login(): self.add_cmd_output("maas %s commissioning-results list" % self.get_option("profile-name")) else: self._log_error( "Cannot login into MAAS remote API with provided creds.") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/md.py0000644000175000017500000000216112625313241020743 0ustar cariboucaribou# 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 Md(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """MD RAID subsystem """ plugin_name = 'md' profiles = ('storage',) def setup(self): self.add_cmd_output("mdadm -D /dev/md*") self.add_copy_spec([ "/proc/mdstat", "/etc/mdadm.conf", "/dev/md/md-device-map" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/tuned.py0000644000175000017500000000257512625313241021473 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Peter Portante # 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 class Tuned(Plugin, RedHatPlugin): """Tuned system tuning daemon """ packages = ('tuned',) profiles = ('system', 'performance') plugin_name = 'tuned' def setup(self): self.add_cmd_output([ "tuned-adm list", "tuned-adm active", "tuned-adm recommend" ]) self.add_copy_spec([ "/etc/tuned.conf", "/etc/tune-profiles" ]) self.add_copy_spec([ "/etc/tuned", "/usr/lib/tuned", "/var/log/tuned/tuned.log" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/mysql.py0000644000175000017500000000651012625313241021512 0ustar cariboucaribou# 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 class Mysql(Plugin): """MySQL and MariaDB RDBMS """ plugin_name = "mysql" profiles = ('services',) mysql_cnf = "/etc/my.cnf" pw_warn_text = " (password visible in process listings)" option_list = [ ("dbuser", "username for database dumps", "", "mysql"), ("dbpass", "password for database dumps" + pw_warn_text, "", False), ("dbdump", "collect a database dump", "", False) ] def setup(self): super(Mysql, self).setup() self.add_copy_spec([ self.mysql_cnf, # Required for MariaDB under pacemaker (MariaDB-Galera) "/var/log/mysqld.log", "/var/log/mysql/mysqld.log", "/var/log/mariadb/mariadb.log", ]) if self.get_option("all_logs"): self.add_copy_spec([ "/var/log/mysql*", "/var/log/mariadb*" ]) if self.get_option("dbdump"): msg = "database user name and password must be supplied" dbdump_err = "mysql.dbdump: %s" % msg dbuser = self.get_option("dbuser") dbpass = self.get_option("dbpass") if 'MYSQL_PWD' in os.environ: dbpass = os.environ['MYSQL_PWD'] if dbuser is True or dbpass is True: # sosreport -a or -k mysql.{dbuser,dbpass} self.soslog.warning(dbdump_err) return if not dbpass or dbpass is False: # no MySQL password self.soslog.warning(dbdump_err) return # no need to save/restore as this variable is private to # the mysql plugin. os.environ['MYSQL_PWD'] = dbpass opts = "--user=%s --all-databases" % dbuser name = "mysqldump_--all-databases" self.add_cmd_output("mysqldump %s" % opts, suggest_filename=name) class RedHatMysql(Mysql, RedHatPlugin): packages = ( 'mysql-server', 'mysql', 'mariadb-server', 'mariadb' ) def setup(self): super(RedHatMysql, self).setup() self.add_copy_spec([ "/etc/ld.so.conf.d/mysql-*.conf", "/etc/ld.so.conf.d/mariadb-*.conf" ]) self.add_copy_spec("/etc/my.cnf.d/*") class DebianMysql(Mysql, DebianPlugin, UbuntuPlugin): packages = ( 'mysql-server', 'mysql-common', 'mariadb-server', 'mariadb-common' ) def setup(self): super(DebianMysql, self).setup() self.add_copy_spec("/etc/mysql/conf.d/mysql*") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/smartcard.py0000644000175000017500000000252112625313241022323 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 class Smartcard(Plugin, RedHatPlugin): """PKCS#11 smart cards """ plugin_name = 'smartcard' profiles = ('security', 'identity', 'hardware') files = ('/etc/pam_pkcs11/pam_pkcs11.conf',) packages = ('pam_pkcs11',) def setup(self): self.add_copy_spec([ "/etc/reader.conf", "/etc/reader.conf.d/", "/etc/pam_pkcs11/"]) self.add_cmd_output([ "pkcs11_inspect debug", "pklogin_finder debug", "ls -nl /usr/lib*/pam_pkcs11/" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/named.py0000644000175000017500000000554212625313241021435 0ustar cariboucaribou# 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 from os.path import exists, join, normpath class Named(Plugin): """BIND named server """ plugin_name = "named" profiles = ('system', 'services', 'network') named_conf = "/etc/named.conf" config_files = named_conf def setup(self): for cfg in self.config_files: if exists(cfg): self.add_copy_spec([ cfg, self.get_dns_dir(cfg) ]) self.add_forbidden_path(join(self.get_dns_dir(cfg), "chroot/dev")) self.add_forbidden_path(join(self.get_dns_dir(cfg), "chroot/proc")) def get_dns_dir(self, config_file): """ grab directory path from named{conf,boot} """ directory_list = self.do_regex_find_all("directory\s+\"(.*)\"", config_file) if directory_list: return normpath(directory_list[0]) else: return "" def postproc(self): match = r"(\s*arg \"password )[^\"]*" subst = r"\1******" self.do_file_sub(self.named_conf, match, subst) class RedHatNamed(Named, RedHatPlugin): named_conf = "/etc/named.conf" config_files = ("/etc/named.conf", "/etc/named.boot") files = (named_conf, '/etc/sysconfig/named') packages = ('bind',) def setup(self): super(RedHatNamed, self).setup() self.add_copy_spec("/etc/named/") self.add_copy_spec("/etc/sysconfig/named") self.add_cmd_output("klist -ket /etc/named.keytab") self.add_forbidden_path("/etc/named.keytab") return class DebianNamed(Named, DebianPlugin, UbuntuPlugin): files = ('/etc/bind/named.conf') packages = ('bind9',) named_conf = "/etc/bind/named.conf" config_files = (named_conf, "/etc/bind/named.conf.options", "/etc/bind/named.conf.local") def setup(self): super(DebianNamed, self).setup() self.add_copy_spec("/etc/bind/") return # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/quagga.py0000644000175000017500000000207012625313241021607 0ustar cariboucaribou# Copyright (C) 2007 Ranjith Rajaram # 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 class Quagga(Plugin, RedHatPlugin): """Quagga routing service """ plugin_name = 'quagga' profiles = ('network',) files = ('/etc/quagga/zebra.conf',) packages = ('quagga',) def setup(self): self.add_copy_spec("/etc/quagga/") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/boot.py0000644000175000017500000000327412625313241021314 0ustar cariboucaribou# 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 from glob import glob class Boot(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Bootloader information """ plugin_name = 'boot' profiles = ('system', 'boot') option_list = [ ("all-images", "collect lsinitrd for all images", "slow", False) ] def setup(self): self.add_copy_spec([ # legacy / special purpose bootloader configs "/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", "lsinitrd" ]) self.add_cmd_output("efibootmgr") if self.get_option("all-images"): for image in glob('/boot/initr*.img'): if image[-9:] == "kdump.img": continue self.add_cmd_output("lsinitrd %s" % image) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/tomcat.py0000644000175000017500000000260212625313241021632 0ustar cariboucaribou# 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 class Tomcat(Plugin, RedHatPlugin): """Apache Tomcat server """ plugin_name = 'tomcat' profiles = ('webserver', 'java', 'services', 'sysmgmt') packages = ('tomcat6', 'tomcat') def setup(self): self.add_copy_spec([ "/etc/tomcat", "/etc/tomcat6" ]) limit = self.get_option("log_size") log_glob = "/var/log/tomcat*/catalina.out" self.add_copy_spec_limit(log_glob, sizelimit=limit) def postproc(self): self.do_path_regex_sub( r"\/etc\/tomcat.*\/tomcat-users.xml", r"password=(\S*)", r'password="********"' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/gluster.py0000644000175000017500000001130512625313241022030 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import time import os.path import os import string from sos.plugins import Plugin, RedHatPlugin class Gluster(Plugin, RedHatPlugin): """GlusterFS storage""" plugin_name = 'gluster' profiles = ('storage', 'virt') statedump_dir = '/tmp/glusterfs-statedumps' packages = ["glusterfs", "glusterfs-core"] files = ["/etc/glusterd", "/var/lib/glusterd"] def get_volume_names(self, volume_file): """Return a dictionary for which key are volume names according to the output of gluster volume info stored in volume_file. """ out = [] fp = open(volume_file, 'r') for line in fp.readlines(): if not line.startswith("Volume Name:"): continue volname = line[12:-1] out.append(volname) fp.close() return out def make_preparations(self, name_dir): try: os.mkdir(name_dir) except: pass fp = open('/tmp/glusterdump.options', 'w') data = 'path=' + name_dir + '\n' fp.write(data) fp.write('all=yes') fp.close() def wait_for_statedump(self, name_dir): statedumps_present = 0 statedump_entries = os.listdir(name_dir) for statedump_file in statedump_entries: statedumps_present = statedumps_present+1 last_line = 'tmp' ret = -1 while ret == -1: last_line = file( name_dir + '/' + statedump_file, "r").readlines()[-1] ret = string.count(last_line, 'DUMP_END_TIME') def postproc(self): if not os.path.exists(self.statedump_dir): return try: for dirs in os.listdir(self.statedump_dir): os.remove(os.path.join(self.statedump_dir, dirs)) os.rmdir(self.statedump_dir) os.unlink('/tmp/glusterdump.options') except: pass def setup(self): self.add_forbidden_path("/var/lib/glusterd/geo-replication/secret.pem") self.add_cmd_output("gluster peer status") self.add_copy_spec([ "/etc/redhat-storage-release", # collect unified file and object storage configuration "/etc/swift/", # glusterfs-server rpm scripts stash this on migration to 3.3.x "/etc/glusterd.rpmsave", # common to all versions "/etc/glusterfs", "/var/lib/glusterd/", "/var/log/glusterfs" ]) self.make_preparations(self.statedump_dir) if self.check_ext_prog("killall -USR1 glusterfs glusterfsd"): # let all the processes catch the signal and create statedump file # entries. time.sleep(1) self.wait_for_statedump(self.statedump_dir) self.add_copy_spec('/tmp/glusterdump.options') self.add_copy_spec(self.statedump_dir) else: self.soslog.info("could not send SIGUSR1 to glusterfs processes") volume_file = self.get_cmd_output_now("gluster volume info") if volume_file: for volname in self.get_volume_names(volume_file): self.add_cmd_output([ "gluster volume geo-replication %s status" % volname, "gluster volume heal %s info" % volname, "gluster volume heal %s info split-brain" % volname, "gluster snapshot list %s" % volname, "gluster volume quota %s list" % volname, "gluster volume rebalance %s status" % volname, "gluster snapshot info %s" % volname, "gluster snapshot status %s" % volname]) self.add_cmd_output("gluster pool list") self.add_cmd_output("gluster volume status") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/sar.py0000644000175000017500000000575312625313241021142 0ustar cariboucaribou# 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 class Sar(Plugin,): """System Activity Reporter """ plugin_name = 'sar' profiles = ('system', 'performance') 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 setup(self): if self.get_option("all_sar"): self.sa_size = 0 # Copy all sa??, sar??, sa??.* and sar??.* files, which will net # compressed and uncompressed versions, typically. for suffix in ('', '.*'): self.add_copy_spec_limit( os.path.join(self.sa_path, "sa[0-3][0-9]" + suffix), sizelimit=self.sa_size, tailit=False ) self.add_copy_spec_limit( os.path.join(self.sa_path, "sar[0-3][0-9]" + suffix), sizelimit=self.sa_size, tailit=False ) try: dir_list = os.listdir(self.sa_path) except: self._log_warn("sar: could not list %s" % self.sa_path) return # find all the sa files that don't have an existing sar file for fname in dir_list: if fname.startswith('sar'): continue if not fname.startswith('sa'): continue if len(fname) != 4: # We either have an "sa" or "sa?" file, or more likely, a # compressed data file like, "sa??.xz". # # FIXME: We don't have a detector for the kind of compression # use for this file right now, so skip these kinds of files. continue sa_data_path = os.path.join(self.sa_path, fname) sar_filename = 'sar' + fname[2:] if sar_filename not in dir_list: sar_cmd = 'sh -c "sar -A -f %s"' % sa_data_path self.add_cmd_output(sar_cmd, sar_filename) sadf_cmd = "sadf -x %s" % sa_data_path self.add_cmd_output(sadf_cmd, "%s.xml" % fname) class RedHatSar(Sar, RedHatPlugin): sa_path = '/var/log/sa' class DebianSar(Sar, DebianPlugin, UbuntuPlugin): sa_path = '/var/log/sysstat' # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/logs.py0000644000175000017500000001035212625313241021310 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Logs(Plugin): """System logs""" plugin_name = "logs" profiles = ('system', 'hardware', 'storage') def setup(self): self.add_copy_spec([ "/etc/syslog.conf", "/etc/rsyslog.conf", "/etc/rsyslog.d" ]) self.limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/boot.log", sizelimit=self.limit) self.add_copy_spec_limit("/var/log/cloud-init*", sizelimit=self.limit) self.add_cmd_output([ "journalctl --all --this-boot --no-pager", "journalctl --all --this-boot --no-pager -o verbose", ]) if self.get_option('all_logs'): syslog_conf = self.join_sysroot("/etc/syslog.conf") logs = self.do_regex_find_all("^\S+\s+(-?\/.*$)\s+", syslog_conf) if self.is_installed("rsyslog") \ or os.path.exists("/etc/rsyslog.conf"): rsyslog_conf = self.join_sysroot("/etc/rsyslog.conf") logs += self.do_regex_find_all("^\S+\s+(-?\/.*$)\s+", rsyslog_conf) for i in logs: if i.startswith("-"): i = i[1:] if os.path.isfile(i): self.add_copy_spec_limit(i, sizelimit=self.limit) def postproc(self): self.do_path_regex_sub( r"/etc/rsyslog*", r"ActionLibdbiPassword (.*)", r"ActionLibdbiPassword [********]" ) self.do_path_regex_sub( r"/etc/rsyslog*", r"pwd=.*", r"pwd=[******]" ) class RedHatLogs(Logs, RedHatPlugin): option_list = [ ("log_days", "the number of days logs to collect", "", 3) ] def setup(self): super(RedHatLogs, self).setup() messages = "/var/log/messages" self.add_copy_spec_limit("/var/log/secure*", sizelimit=self.limit) self.add_copy_spec_limit(messages + "*", sizelimit=self.limit) # collect three days worth of logs by default if the system is # configured to use the journal and not /var/log/messages if not os.path.exists(messages) and self.is_installed("systemd"): try: days = int(self.get_option("log_days")) except: days = 3 if self.get_option("all_logs"): since_opt = "" else: since_opt = '--since="-%ddays"' % days self.add_cmd_output('journalctl --all %s' % since_opt) class DebianLogs(Logs, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianLogs, self).setup() if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/syslog", sizelimit=limit) self.add_copy_spec_limit("/var/log/syslog.1", sizelimit=limit) self.add_copy_spec_limit("/var/log/kern.log", sizelimit=limit) self.add_copy_spec_limit("/var/log/kern.log.1", sizelimit=limit) self.add_copy_spec_limit("/var/log/udev", sizelimit=limit) self.add_copy_spec_limit("/var/log/dist-upgrade", sizelimit=limit) self.add_copy_spec_limit("/var/log/installer", sizelimit=limit) self.add_copy_spec_limit("/var/log/unattended-upgrades", sizelimit=limit) self.add_cmd_output('ls -alRh /var/log/') else: self.add_copy_spec("/var/log/") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/mrgmessg.py0000644000175000017500000000202112625313241022162 0ustar cariboucaribou# 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 class MrgMessg(Plugin, RedHatPlugin): """MRG Messaging subsystem """ plugin_name = 'mrgmessg' profiles = ('mrg',) def setup(self): self.add_copy_spec([ "/etc/qpidd.conf", "/etc/sasl2/qpidd.conf", "/var/rhm" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/postgresql.py0000644000175000017500000001201412625313241022544 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Sandro Bonazzola # Copyright (C) 2013 Chris J Arges # Copyright (C) 2012-2013 Red Hat, Inc., Bryn M. Reeves # Copyright (C) 2011 Red Hat, Inc., Jesse Jaggars # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os import tempfile from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin from sos.utilities import find class PostgreSQL(Plugin): """PostgreSQL RDBMS""" plugin_name = "postgresql" profiles = ('services',) packages = ('postgresql',) tmp_dir = None password_warn_text = " (password visible in process listings)" option_list = [ ('pghome', 'PostgreSQL server home directory.', '', '/var/lib/pgsql'), ('username', 'username for pg_dump', '', 'postgres'), ('password', 'password for pg_dump' + password_warn_text, '', False), ('dbname', 'database name to dump for pg_dump', '', ''), ('dbhost', 'database hostname/IP (do not use unix socket)', '', ''), ('dbport', 'database server port number', '', '5432') ] def pg_dump(self): dest_file = os.path.join(self.tmp_dir, "sos_pgdump.tar") # We're only modifying this for ourself and our children so there # is no need to save and restore environment variables if the user # decided to pass the password on the command line. if self.get_option("password") is not False: os.environ["PGPASSWORD"] = str(self.get_option("password")) if self.get_option("dbhost"): cmd = "pg_dump -U %s -h %s -p %s -w -f %s -F t %s" % ( self.get_option("username"), self.get_option("dbhost"), self.get_option("dbport"), dest_file, self.get_option("dbname") ) else: cmd = "pg_dump -C -U %s -w -f %s -F t %s " % ( self.get_option("username"), dest_file, self.get_option("dbname") ) result = self.call_ext_prog(cmd) if (result['status'] == 0): self.add_copy_spec(dest_file) else: self._log_error( "Unable to execute pg_dump. Error(%s)" % (result['output']) ) self.add_alert( "ERROR: Unable to execute pg_dump. Error(%s)" % (result['output']) ) def setup(self): if self.get_option("dbname"): if self.get_option("password") or "PGPASSWORD" in os.environ: self.tmp_dir = tempfile.mkdtemp() self.pg_dump() else: self.soslog.warning( "password must be supplied to dump a database." ) self.add_alert( "WARN: password must be supplied to dump a database." ) def postproc(self): import shutil if self.tmp_dir: try: shutil.rmtree(self.tmp_dir) except shutil.Error: self.soslog.exception( "Unable to remove %s." % (self.tmp_dir) ) self.add_alert("ERROR: Unable to remove %s." % (self.tmp_dir)) class RedHatPostgreSQL(PostgreSQL, RedHatPlugin): def setup(self): super(RedHatPostgreSQL, self).setup() # Copy PostgreSQL log files. for filename in find("*.log", self.get_option("pghome")): self.add_copy_spec(filename) # Copy PostgreSQL config files. for filename in find("*.conf", self.get_option("pghome")): self.add_copy_spec(filename) self.add_copy_spec( os.path.join( self.get_option("pghome"), "data", "PG_VERSION" ) ) self.add_copy_spec( os.path.join( self.get_option("pghome"), "data", "postmaster.opts" ) ) class DebianPostgreSQL(PostgreSQL, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianPostgreSQL, self).setup() self.add_copy_spec([ "/var/log/postgresql/*.log", "/etc/postgresql/*/main/*.conf", "/var/lib/postgresql/*/main/PG_VERSION", "/var/lib/postgresql/*/main/postmaster.opts" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/kernel.py0000644000175000017500000000603612625313247021636 0ustar cariboucaribou# 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 glob class Kernel(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Linux kernel """ plugin_name = 'kernel' profiles = ('system', 'hardware', 'kernel') sys_module = '/sys/module' def setup(self): # compat self.add_cmd_output("uname -a", root_symlink="uname") self.add_cmd_output("lsmod", root_symlink="lsmod") self.add_cmd_output("ls -lt /sys/kernel/slab") try: modules = os.listdir(self.sys_module) self.add_cmd_output("modinfo " + " ".join(modules)) except OSError: self._log_warn("could not list %s" % self.sys_module) # find /lib/modules/*/{extras,updates,weak-updates} -ls extra_mod_patterns = [ "/lib/modules/*/extra", "/lib/modules/*/updates", "/lib/modules/*/weak-updates", ] extra_mod_paths = [] for pattern in extra_mod_patterns: extra_mod_paths.extend(glob.glob(pattern)) self.add_cmd_output([ "dmesg", "sysctl -a", "dkms status", "find %s -ls" % " ".join(extra_mod_paths) ]) clocksource_path = "/sys/devices/system/clocksource/clocksource0/" self.add_copy_spec([ "/proc/modules", "/proc/sys/kernel/random/boot_id", "/sys/module/*/parameters", "/sys/module/*/initstate", "/sys/module/*/refcnt", "/sys/module/*/taint", "/sys/firmware/acpi/*", "/proc/kallsyms", "/proc/buddyinfo", "/proc/slabinfo", "/proc/zoneinfo", "/lib/modules/%s/modules.dep" % self.policy().kernel_version(), "/etc/conf.modules", "/etc/modules.conf", "/etc/modprobe.conf", "/etc/modprobe.d", "/etc/sysctl.conf", "/etc/sysctl.d", "/lib/sysctl.d", "/proc/cmdline", "/proc/driver", "/proc/sys/kernel/tainted", "/proc/softirqs", "/proc/timer*", "/proc/lock*", "/proc/misc", "/var/log/dmesg", clocksource_path + "available_clocksource", clocksource_path + "current_clocksource" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/devices.py0000644000175000017500000000201712625313241021765 0ustar cariboucaribou# 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 Devices(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """ devices specific commands """ plugin_name = 'devices' profiles = ('system', 'hardware', 'boot') def setup(self): self.add_cmd_output("udevadm info --export-db") # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/process.py0000644000175000017500000000317612625313241022030 0ustar cariboucaribou# 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 Process(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """process information """ plugin_name = 'process' profiles = ('system',) def setup(self): ps_axo = "ps axo" # process group and thread options ps_group_opts = "pid,ppid,user,group,lwp,nlwp,start_time,comm,cgroup" ps_sched_opts = "flags,state,uid,pid,ppid,pgid,sid,cls,pri,addr,sz," ps_sched_opts += "wchan,stime,tty,time,cmd" self.add_copy_spec("/proc/sched_debug") self.add_cmd_output("ps auxwww", root_symlink="ps") self.add_cmd_output("pstree", root_symlink="pstree") self.add_cmd_output("lsof -b +M -n -l", root_symlink="lsof") self.add_cmd_output([ "ps auxwwwm", "ps alxwww", "%s %s" % (ps_axo, ps_group_opts), "%s %s" % (ps_axo, ps_sched_opts) ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/grub2.py0000644000175000017500000000430512625313241021366 0ustar cariboucaribou# 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 Grub2(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """GRUB2 bootloader """ plugin_name = 'grub2' profiles = ('boot',) packages = ('grub2',) def setup(self): self.add_copy_spec([ "/boot/efi/EFI/*/grub.cfg", "/boot/grub2/grub.cfg", "/boot/grub2/grubenv", "/boot/grub/grub.cfg", "/etc/default/grub", "/etc/grub2.cfg", "/etc/grub.d" ]) self.add_cmd_output([ "ls -lanR /boot", "grub2-mkconfig" ]) def postproc(self): # the trailing space is required; python treats '_' as whitespace # causing the passwd_exp to match pbkdf2 passwords and mangle them. passwd_exp = r"(password )\s*(\S*)\s*(\S*)" passwd_pbkdf2_exp = r"(password_pbkdf2)\s*(\S*)\s*(\S*)" passwd_sub = r"\1 \2 ********" passwd_pbkdf2_sub = r"\1 \2 grub.pbkdf2.********" self.do_cmd_output_sub( "grub2-mkconfig", passwd_pbkdf2_exp, passwd_pbkdf2_sub ) self.do_cmd_output_sub( "grub2-mkconfig", passwd_exp, passwd_sub ) self.do_path_regex_sub( r".*\/grub\.", passwd_exp, passwd_sub ) self.do_path_regex_sub( r".*\/grub\.", passwd_pbkdf2_exp, passwd_pbkdf2_sub ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/cgroups.py0000644000175000017500000000263412625313241022032 0ustar cariboucaribou# 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 Cgroups(Plugin, DebianPlugin, UbuntuPlugin): """Control groups subsystem """ plugin_name = "cgroups" profiles = ('system',) files = ('/proc/cgroups',) def setup(self): self.add_copy_spec([ "/proc/cgroups", "/sys/fs/cgroup" ]) return class RedHatCgroups(Cgroups, RedHatPlugin): def setup(self): super(RedHatCgroups, self).setup() self.add_copy_spec([ "/etc/sysconfig/cgconfig", "/etc/sysconfig/cgred", "/etc/cgsnapshot_blacklist.conf", "/etc/cgconfig.conf", "/etc/cgrules.conf" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/usb.py0000644000175000017500000000211612625313241021134 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin class Usb(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """USB devices """ plugin_name = "usb" profiles = ('hardware',) def setup(self): self.add_copy_spec("/sys/bus/usb") self.add_cmd_output([ "lsusb", "lsusb -v", "lsusb -t" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ctdb.py0000644000175000017500000000316012625313241021257 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Ctdb(Plugin, DebianPlugin, UbuntuPlugin): """Samba Clustered TDB """ packages = ('ctdb',) profiles = ('cluster', 'storage') plugin_name = "ctdb" def setup(self): self.add_copy_spec([ "/etc/ctdb/public_addresses", "/etc/ctdb/static-routes", "/etc/ctdb/multipathd", "/var/log/log.ctdb" ]) self.add_cmd_output([ "ctdb ip", "ctdb ping", "ctdb status", "ctdb ifaces", "ctdb listnodes", "ctdb listvars", "ctdb statistics", "ctdb getdbmap" ]) class RedHatCtdb(Ctdb, RedHatPlugin): def setup(self): super(RedHatCtdb, self).setup() self.add_copy_spec("/etc/sysconfig/ctdb") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/upstart.py0000644000175000017500000000334512625313241022052 0ustar cariboucaribou# Copyright (C) 2012 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Upstart(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Upstart init system """ plugin_name = 'upstart' profiles = ('system', 'services', 'boot') packages = ('upstart',) def setup(self): self.add_cmd_output([ 'initctl --system list', 'initctl --system version', 'init --version', "ls -l /etc/init/" ]) # Job Configuration Files self.add_copy_spec([ '/etc/init.conf', '/etc/event.d/*', '/etc/init/*.conf' ]) # State file self.add_copy_spec('/var/log/upstart/upstart.state') # Log files self.add_copy_spec_limit('/var/log/upstart/*', sizelimit=self.get_option('log_size')) # Session Jobs (running Upstart as a Session Init) self.add_copy_spec('/usr/share/upstart/') # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/udev.py0000644000175000017500000000215112625313241021305 0ustar cariboucaribou# 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 Udev(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """udev dynamic device management """ plugin_name = 'udev' profiles = ('system', 'hardware', 'boot') def setup(self): self.add_copy_spec([ "/etc/udev/udev.conf", "/lib/udev/rules.d", "/etc/udev/rules.d/*" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/libvirt.py0000644000175000017500000000537012625313241022023 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin import glob import os class Libvirt(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """libvirt virtualization API """ plugin_name = 'libvirt' profiles = ('system', 'virt') def setup(self): libvirt_keytab = "/etc/libvirt/krb5.tab" # authentication databases used for libvirt SASL authentication self.add_forbidden_path("/etc/libvirt/passwd.db") self.add_forbidden_path("/etc/libvirt/krb5.tab") self.add_copy_spec([ "/etc/libvirt/libvirt.conf", "/etc/libvirt/libvirtd.conf", "/etc/libvirt/lxc.conf", "/etc/libvirt/nwfilter/*.xml", "/etc/libvirt/qemu/*.xml", "/var/run/libvirt/qemu/*.xml", "/etc/libvirt/qemu/networks/*.xml", "/etc/libvirt/qemu/networks/autostart/*.xml", "/etc/libvirt/storage/*.xml", "/etc/libvirt/storage/autostart/*.xml", "/etc/libvirt/qemu-lockd.conf", "/etc/libvirt/virtlockd.conf" ]) if not self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/libvirt/libvirtd.log", sizelimit=5) self.add_copy_spec_limit("/var/log/libvirt/qemu/*.log", sizelimit=5) self.add_copy_spec_limit("/var/log/libvirt/lxc/*.log", sizelimit=5) self.add_copy_spec_limit("/var/log/libvirt/uml/*.log", sizelimit=5) else: self.add_copy_spec("/var/log/libvirt") if os.path.exists(self.join_sysroot(libvirt_keytab)): self.add_cmd_output("klist -ket %s" % libvirt_keytab) self.add_cmd_output("ls -lR /var/lib/libvirt/qemu") def postproc(self): for loc in ["/etc/", "/var/run/"]: for xmlfile in glob.glob(loc + "libvirt/qemu/*.xml"): self.do_file_sub( xmlfile, r"(\s*passwd=\s*')([^']*)('.*)", r"\1******\3" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/distupgrade.py0000644000175000017500000000327012625313241022660 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class DistUpgrade(Plugin): """ Distribution upgrade data """ plugin_name = "distupgrade" profiles = ('system', 'sysmgmt') files = None class RedHatDistUpgrade(DistUpgrade, RedHatPlugin): files = ( "/var/log/upgrade.log", "/var/log/redhat_update_tool.log", "/root/preupgrade/all-xccdf*", "/root/preupgrade/kickstart" ) def postproc(self): self.do_file_sub( "/root/preupgrade/kickstart/anaconda-ks.cfg", r"(useradd --password) (.*)", r"\1 ********" ) self.do_file_sub( "/root/preupgrade/kickstart/anaconda-ks.cfg", r"(\s*rootpw\s*).*", r"\1********" ) self.do_file_sub( "/root/preupgrade/kickstart/untrackeduser", r"\/home\/.*", r"/home/******** path redacted ********" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/haproxy.py0000644000175000017500000000227512625313241022043 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin class HAProxy(Plugin, RedHatPlugin, DebianPlugin): """HAProxy load balancer """ plugin_name = 'haproxy' profiles = ('webserver',) packages = ('haproxy',) def setup(self): self.add_copy_spec("/etc/haproxy/haproxy.cfg") self.add_cmd_output("haproxy -f /etc/haproxy/haproxy.cfg -c") self.add_copy_spec("/var/log/haproxy.log") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/Makefile0000644000175000017500000000110412433366740021436 0ustar cariboucaribouPYTHON=python PACKAGE = $(shell basename `pwd`) PYFILES = $(wildcard *.py) PYVER := $(shell $(PYTHON) -c 'import sys; print("%.3s" %(sys.version))') PYSYSDIR := $(shell $(PYTHON) -c 'import sys; print(sys.prefix)') PYLIBDIR = $(PYSYSDIR)/lib/python$(PYVER) PKGDIR = $(PYLIBDIR)/site-packages/sos/$(PACKAGE) all: echo "nada" clean: rm -f *.pyc *.pyo *~ install: mkdir -p $(DESTDIR)/$(PKGDIR) for p in $(PYFILES) ; do \ install -m 644 $$p $(DESTDIR)/$(PKGDIR)/$$p; \ done $(PYTHON) -c "import compileall; compileall.compile_dir('$(DESTDIR)/$(PKGDIR)', 1, '$(PYDIR)', 1)" sosreport-3.2+git276-g7da50d6/sos/plugins/openshift.py0000644000175000017500000001433412625313241022347 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os.path class Openshift(Plugin, RedHatPlugin): '''Openshift node and broker''' plugin_name = "openshift" profiles = ('virt', 'openshift') # The 'broker' and 'node' options are obsolete but are maintained # here for compatibility with external programs that call sosreport # with these names. option_list = [("broker", "Gathers broker specific files", "slow", False), ("node", "Gathers node specific files", "slow", False)] ruby = "ruby193" vendor = "rh" mco_config_dir = "/opt/%s/%s/root/etc/mcollective" % (vendor, ruby) gear_base_dir = "/var/lib/openshift" node_settings_dir = os.path.join(gear_base_dir, ".settings") node_proxy_dir = os.path.join(gear_base_dir, ".httpd.d") httpd_config_dir = "/etc/httpd/conf.d" def is_broker(self): return os.path.exists("/etc/openshift/broker.conf") def is_node(self): return os.path.exists("/etc/openshift/node.conf") def setup(self): self.add_copy_spec([ "/etc/openshift-enterprise-release", "/var/log/openshift", "/etc/openshift/*.conf", "/etc/openshift/upgrade", ]) self.add_cmd_output("oo-diagnostics -v") if self.is_broker(): self.add_copy_spec([ "/etc/openshift/quickstarts.json", "/etc/openshift/plugins.d/*.conf", os.path.join(self.mco_config_dir, "client.cfg"), "/var/www/openshift/broker/httpd/httpd.conf", "/var/www/openshift/broker/httpd/conf.d/*.conf", "/var/www/openshift/console/httpd/httpd.conf", "/var/www/openshift/console/httpd/conf.d/*.conf", ]) self.add_cmd_output([ "oo-accept-broker -v", "oo-admin-chk -v", "oo-mco ping", ]) if self.is_node(): self.add_copy_spec([ "/etc/openshift/node-plugins.d/*.conf", "/etc/openshift/cart.conf.d", "/etc/openshift/iptables.*.rules", "/etc/openshift/env", os.path.join(self.httpd_config_dir, "openshift-vhost-logconf.include"), os.path.join(self.httpd_config_dir, "openshift-http-vhost.include"), os.path.join(self.httpd_config_dir, "openshift_restorer.include"), os.path.join(self.mco_config_dir, "server.cfg"), os.path.join(self.mco_config_dir, "facts.yaml"), os.path.join(self.node_settings_dir, "district.info"), os.path.join(self.node_proxy_dir, "*.conf"), os.path.join(self.node_proxy_dir, "aliases.txt"), os.path.join(self.node_proxy_dir, "nodes.txt"), os.path.join(self.node_proxy_dir, "idler.txt"), os.path.join(self.node_proxy_dir, "sts.txt"), os.path.join(self.node_proxy_dir, "routes.json"), os.path.join(self.node_proxy_dir, "geardb.json"), os.path.join(self.node_proxy_dir, "sniproxy.json"), "/var/log/httpd/openshift_log", "/var/log/mcollective.log", "/var/log/node-web-proxy/access.log", "/var/log/node-web-proxy/error.log", "/var/log/node-web-proxy/websockets.log", "/var/log/node-web-proxy/supervisor.log", ]) self.add_cmd_output([ "oo-accept-node -v", "oo-admin-ctl-gears list", "ls -laZ %s" % self.gear_base_dir, "ls -la %s" % self.node_proxy_dir ]) def postproc(self): # Redact broker's MongoDB credentials: # MONGO_PASSWORD="PasswordForOpenshiftUser" self.do_file_sub('/etc/openshift/broker.conf', r"(MONGO_PASSWORD\s*=\s*)(.*)", r"\1*******") # Redact session SHA keys: # SESSION_SECRET=0c31...a7c8 self.do_file_sub('/etc/openshift/broker.conf', r"(SESSION_SECRET\s*=\s*)(.*)", r"\1*******") self.do_file_sub('/etc/openshift/console.conf', r"(SESSION_SECRET\s*=\s*)(.*)", r"\1*******") # Redact passwords of the form: # plugin.activemq.pool.1.password = Pa$sW0Rd self.do_file_sub(os.path.join(self.mco_config_dir, "server.cfg"), r"(.*password\s*=\s*)\S+", r"\1********") self.do_file_sub(os.path.join(self.mco_config_dir, "client.cfg"), r"(.*password\s*=\s*)\S+", r"\1********") # Redact DNS plugin credentials # Dynect DNS: DYNECT_PASSWORD=s0ME-p4$_w0RD._ plugin_dir = '/etc/openshift/plugins.d/' self.do_file_sub(plugin_dir + 'openshift-origin-dns-dynect.conf', r"(DYNECT_PASSWORD\s*=\s*)(.*)", r"\1********") # Fog cloud: FOG_RACKSPACE_API_KEY="apikey" self.do_file_sub(plugin_dir + 'openshift-origin-dns-fog.conf', r"(FOG_RACKSPACE_API_KEY\s*=\s*)(.*)", r"\1********") # ISC bind: BIND_KEYVALUE="rndc key" self.do_file_sub(plugin_dir + 'openshift-origin-dns-nsupdate.conf', r"(BIND_KEYVALUE\s*=\s*)(.*)", r"\1********") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/juju.py0000644000175000017500000001025412625313241021322 0ustar cariboucaribou# Copyright (C) 2013 Adam Stokes # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os from sos.plugins import Plugin, UbuntuPlugin from json import loads as json_load def ensure_service_is_running(service): def wrapper(callback): def wrapped_f(self, *args, **kwargs): try: result = self.call_ext_prog("service {0} stop".format(service)) if result["status"] != 0: raise Exception("Cannot stop {0} service".format(service)) callback(self, *args, **kwargs) except Exception as ex: self._log_error("Cannot stop {0}, exception: {1}".format( service, ex.message)) finally: self.call_ext_prog("service {0} start".format(service)) return wrapped_f return wrapper class Juju(Plugin, UbuntuPlugin): """ Juju orchestration tool """ plugin_name = 'juju' profiles = ('virt', 'sysmgmt') packages = ('juju',) option_list = [ ('export-mongodb', 'Export mongodb collections as json files', '', False), ('generate-bundle', """Generate a YAML bundle of the current environment (requires juju-deployerizer)""", '', False), ] def get_deployed_services(self): cmd = "juju status --format json" return json_load( self.call_ext_prog(cmd)['output'])['services'].keys() @ensure_service_is_running("juju-db") def export_mongodb(self): collections = ( "relations", "environments", "linkednetworks", "system", "settings", ) for collection in collections: self.add_cmd_output( "/usr/lib/juju/bin/mongoexport --ssl \ --dbpath=/var/lib/juju/db --db juju --collection {0} \ --jsonArray".format(collection), suggest_filename="{}.json".format(collection)) def setup(self): self.add_copy_spec([ "/var/lib/juju" ]) limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/upstart/juju-db.log", sizelimit=limit) self.add_copy_spec_limit("/var/log/upstart/juju-db.log.1", sizelimit=limit) if not self.get_option("all_logs"): # Capture the last bit of all files for filename in os.listdir("/var/log/juju/"): if filename.endswith(".log"): fullname = "/var/log/juju/" + filename self.add_copy_spec_limit(fullname, sizelimit=limit) # Do just the all-machines from juju local self.add_copy_spec_limit("/var/log/juju-*/all-machines.log", sizelimit=limit) self.add_cmd_output('ls -alRh /var/log/juju*') else: self.add_copy_spec([ "/var/log/juju", "/var/log/juju-*" ]) self.add_cmd_output([ "juju -v status", "juju -v get-constraints" ]) for service in self.get_deployed_services(): self.add_cmd_output("juju get {}".format(service)) if self.get_option("export-mongodb"): self.export_mongodb() if self.get_option("generate-bundle"): self.add_cmd_output("juju deployerizer --include-charm-versions", suggest_filename="juju-env-bundle.yaml") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ssh.py0000644000175000017500000000220512625313241021137 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Eugene Teo # 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 Ssh(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Secure shell service """ plugin_name = 'ssh' profiles = ('services', 'security', 'identity') def setup(self): self.add_copy_spec([ "/etc/ssh/ssh_config", "/etc/ssh/sshd_config" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/scsi.py0000644000175000017500000000245112625313241021306 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin class Scsi(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """SCSI devices """ plugin_name = 'scsi' profiles = ('storage', 'hardware') def setup(self): self.add_copy_spec([ "/proc/scsi", "/etc/stinit.def", "/sys/bus/scsi", "/sys/class/scsi_host", "/sys/class/scsi_disk", "/sys/class/scsi_device", "/sys/class/scsi_generic" ]) self.add_cmd_output([ "lsscsi", "sg_map" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/lilo.py0000644000175000017500000000202112625313241021275 0ustar cariboucaribou# 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, UbuntuPlugin class Lilo(Plugin, RedHatPlugin, UbuntuPlugin): """Lilo bootloader """ plugin_name = 'lilo' profiles = ('system', 'boot') packages = ('lilo',) def setup(self): self.add_copy_spec("/etc/lilo.conf") self.add_cmd_output("lilo -q") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/python.py0000644000175000017500000000216412625313241021667 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc.,Poornima M. Kshirsagar # 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 Python(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Python runtime """ plugin_name = 'python' profiles = ('system',) packages = ('python',) def setup(self): self.add_cmd_output("python -V", suggest_filename="python-version") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/qpid.py0000644000175000017500000000721512625313247021313 0ustar cariboucaribou# 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 class Qpid(Plugin, RedHatPlugin): """Qpid messaging """ plugin_name = 'qpid' profiles = ('services',) packages = ('qpidd', 'qpid-cpp-server', 'qpid-tools') option_list = [("port", "listening port to connect to", '', ""), ("ssl-certificate", "Path to file containing client SSL certificate", '', ""), ("ssl-key", "Path to file containing client SSL private key", '', ""), ("ssl", "enforce SSL / amqps connection", '', False)] def setup(self): """ performs data collection for qpid broker """ options = "" amqps_prefix = "" # set amqps:// when SSL is used if self.get_option("ssl"): amqps_prefix = "amqps://" # for either present option, add --option=value to 'options' variable for option in ["ssl-certificate", "ssl-key"]: if self.get_option(option): amqps_prefix = "amqps://" options = (options + " --%s=" % (option) + self.get_option(option)) if self.get_option("port"): options = (options + " -b " + amqps_prefix + "localhost:%s" % (self.get_option("port"))) self.add_cmd_output([ "qpid-stat -g" + options, # applies since 0.18 version "qpid-stat -b" + options, # applies to pre-0.18 versions "qpid-stat -c" + options, "qpid-stat -e" + options, "qpid-stat -q" + options, "qpid-stat -u" + options, "qpid-stat -m" + options, # applies since 0.18 version "qpid-config exchanges" + options, "qpid-config queues" + options, "qpid-config exchanges -b" + options, # applies to pre-0.18 vers. "qpid-config queues -b" + options, # applies to pre-0.18 versions "qpid-config exchanges -r" + options, # applies since 0.18 version "qpid-config queues -r" + options, # applies since 0.18 version "qpid-route link list" + options, "qpid-route route list" + options, "qpid-cluster" + options, # applies to pre-0.22 versions "qpid-ha query" + options, # applies since 0.22 version "ls -lanR /var/lib/qpidd" ]) self.add_copy_spec([ "/etc/qpidd.conf", # applies to pre-0.22 versions "/etc/qpid/qpidd.conf", # applies since 0.22 version "/var/lib/qpid/syslog", "/etc/ais/openais.conf", "/var/log/cumin.log", "/var/log/mint.log", "/etc/sasl2/qpidd.conf", "/etc/qpid/qpidc.conf", "/etc/sesame/sesame.conf", "/etc/cumin/cumin.conf", "/etc/corosync/corosync.conf", "/var/lib/sesame", "/var/log/qpidd.log", "/var/log/sesame", "/var/log/cumin" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/apparmor.py0000644000175000017500000000260712625313241022171 0ustar cariboucaribou# Copyright (c) 2012 Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, UbuntuPlugin class Apparmor(Plugin, UbuntuPlugin): """Apparmor mandatory access control """ plugin_name = 'apparmor' profiles = ('security',) def setup(self): self.add_copy_spec([ "/etc/apparmor*" ]) self.add_forbidden_path("/etc/apparmor.d/cache") self.add_forbidden_path("/etc/apparmor.d/libvirt/libvirt*") self.add_forbidden_path("/etc/apparmor.d/abstractions") self.add_cmd_output([ "apparmor_status", "ls -alh /etc/apparmor.d/abstractions", "ls -alh /etc/apparmor.d/libvirt", ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/postfix.py0000644000175000017500000000301112625313241022032 0ustar cariboucaribou# 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 Postfix(Plugin): """Postfix smtp server """ plugin_name = "postfix" profiles = ('mail', 'services') packages = ('postfix',) def setup(self): self.add_copy_spec([ "/etc/postfix/main.cf", "/etc/postfix/master.cf" ]) self.add_cmd_output("postconf") class RedHatPostfix(Postfix, RedHatPlugin): files = ('/etc/rc.d/init.d/postfix',) packages = ('postfix',) def setup(self): super(RedHatPostfix, self).setup() self.add_copy_spec("/etc/mail") class DebianPostfix(Postfix, DebianPlugin, UbuntuPlugin): packages = ('postfix',) def setup(self): super(DebianPostfix, self).setup() self.add_copy_spec("/etc/postfix/dynamicmaps.cf") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ovirt_hosted_engine.py0000644000175000017500000000601212435106707024406 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Sandro Bonazzola # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import glob from sos.plugins import Plugin, RedHatPlugin class OvirtHostedEngine(Plugin, RedHatPlugin): """oVirt Hosted Engine""" packages = ( 'ovirt-hosted-engine-setup', 'ovirt-hosted-engine-ha', ) plugin_name = 'ovirt_hosted_engine' profiles = ('virt',) SETUP_LOG_GLOB = '/var/log/ovirt-hosted-engine-setup/*.log' HA_LOG_GLOB = '/var/log/ovirt-hosted-engine-ha/*.log' def setup(self): self.limit = self.get_option('log_size') # Add configuration files # Collecting the whole directory since it may contain branding # configuration files or third party plugins configuration files self.add_copy_spec(['/etc/ovirt-hosted-engine-setup.env.d/']) self.add_copy_spec([ '/etc/ovirt-hosted-engine/answers.conf', '/etc/ovirt-hosted-engine/hosted-engine.conf', '/etc/ovirt-hosted-engine/vm.conf', '/etc/ovirt-hosted-engine-ha/agent.conf', '/etc/ovirt-hosted-engine-ha/agent-log.conf', '/etc/ovirt-hosted-engine-ha/broker.conf', '/etc/ovirt-hosted-engine-ha/broker-log.conf', '/etc/ovirt-hosted-engine-ha/notifications/state_transition.txt', ]) all_setup_logs = glob.glob(self.SETUP_LOG_GLOB) all_setup_logs.sort(reverse=True) if len(all_setup_logs): # Add latest ovirt-hosted-engine-setup log file self.add_copy_spec(all_setup_logs[0]) # Add older ovirt-hosted-engine-setup log files only if requested if self.get_option('all_logs'): self.add_copy_spec_limit( self.SETUP_LOG_GLOB, sizelimit=self.limit ) self.add_copy_spec([ '/var/log/ovirt-hosted-engine-ha/agent.log', '/var/log/ovirt-hosted-engine-ha/broker.log', ]) # Add older ovirt-hosted-engine-ha log files only if requested if self.get_option('all_logs'): self.add_copy_spec_limit( self.HA_LOG_GLOB, sizelimit=self.limit, ) # Add run-time status self.add_cmd_output([ 'hosted-engine --vm-status', 'hosted-engine --check-liveliness', ]) # vim: expandtab tabstop=4 shiftwidth=4 sosreport-3.2+git276-g7da50d6/sos/plugins/pxe.py0000644000175000017500000000325712625313241021146 0ustar cariboucaribou# 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 Pxe(Plugin): """PXE service """ plugin_name = "pxe" profiles = ('sysmgmt', 'network') option_list = [("tftpboot", 'gathers content from the tftpboot path', 'slow', False)] class RedHatPxe(Pxe, RedHatPlugin): files = ('/usr/sbin/pxeos',) packages = ('system-config-netboot-cmd',) def setup(self): super(RedHatPxe, self).setup() self.add_cmd_output("/usr/sbin/pxeos -l") self.add_copy_spec("/etc/dhcpd.conf") if self.get_option("tftpboot"): self.add_copy_spec("/tftpboot") class DebianPxe(Pxe, DebianPlugin, UbuntuPlugin): packages = ('tftpd-hpa',) def setup(self): super(DebianPxe, self).setup() self.add_copy_spec([ "/etc/dhcp/dhcpd.conf", "/etc/default/tftpd-hpa" ]) if self.get_option("tftpboot"): self.add_copy_spec("/var/lib/tftpboot") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/__init__.py0000644000175000017500000010022612625313241022103 0ustar cariboucaribou# Copyright (C) 2006 Steve Conklin # 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 exports methods available for use by plugins for sos """ from __future__ import with_statement from sos.utilities import (sos_get_command_output, import_module, grep, fileobj, tail) import os import glob import re import stat from time import time import logging import fnmatch import errno # PYCOMPAT import six from six.moves import zip, filter def regex_findall(regex, fname): '''Return a list of all non overlapping matches in the string(s)''' try: with fileobj(fname) as f: return re.findall(regex, f.read(), re.MULTILINE) except AttributeError: return [] def _mangle_command(command, name_max): mangledname = re.sub(r"^/(usr/|)(bin|sbin)/", "", command) mangledname = re.sub(r"[^\w\-\.\/]+", "_", mangledname) mangledname = re.sub(r"/", ".", mangledname).strip(" ._-") mangledname = mangledname[0:name_max] return mangledname def _path_in_path_list(path, path_list): return any(p in path for p in path_list) def _node_type(st): """ return a string indicating the type of special node represented by the stat buffer st (block, character, fifo, socket). """ _types = [ (stat.S_ISBLK, "block device"), (stat.S_ISCHR, "character device"), (stat.S_ISFIFO, "named pipe"), (stat.S_ISSOCK, "socket") ] for t in _types: if t[0](st.st_mode): return t[1] class Plugin(object): """ This is the base class for sosreport plugins. Plugins should subclass this and set the class variables where applicable. plugin_name is a string returned by plugin.name(). If this is set to None (the default) class_.__name__.tolower() will be returned. Be sure to set this if you are defining multiple plugins that do the same thing on different platforms. requires_root is a boolean that specifies whether or not sosreport should execute this plugin as a super user. version is a string representing the version of the plugin. This can be useful for post-collection tooling. packages (files) is an iterable of the names of packages (the paths of files) to check for before running this plugin. If any of these packages or files is found on the system, the default implementation of check_enabled will return True. profiles is an iterable of profile names that this plugin belongs to. Whenever any of the profiles is selected on the command line the plugin will be enabled (subject to normal check_enabled tests). """ plugin_name = None requires_root = True version = 'unversioned' packages = () files = () archive = None profiles = () sysroot = '/' def __init__(self, commons): if not getattr(self, "option_list", False): self.option_list = [] self.copied_files = [] self.executed_commands = [] self.alerts = [] self.custom_text = "" self.opt_names = [] self.opt_parms = [] self.commons = commons self.forbidden_paths = [] self.copy_paths = set() self.copy_strings = [] self.collect_cmds = [] self.sysroot = commons['sysroot'] self.soslog = self.commons['soslog'] if 'soslog' in self.commons \ else logging.getLogger('sos') # get the option list into a dictionary for opt in self.option_list: self.opt_names.append(opt[0]) self.opt_parms.append({'desc': opt[1], 'speed': opt[2], 'enabled': opt[3]}) @classmethod def name(class_): """Returns the plugin's name as a string. This should return a lowercase string. """ if class_.plugin_name: return class_.plugin_name return class_.__name__.lower() def _format_msg(self, msg): return "[plugin:%s] %s" % (self.name(), msg) def _log_error(self, msg): self.soslog.error(self._format_msg(msg)) def _log_warn(self, msg): self.soslog.warning(self._format_msg(msg)) def _log_info(self, msg): self.soslog.info(self._format_msg(msg)) def _log_debug(self, msg): self.soslog.debug(self._format_msg(msg)) def policy(self): return self.commons["policy"] def join_sysroot(self, path): if path[0] == os.sep: path = path[1:] return os.path.join(self.sysroot, path) def strip_sysroot(self, path): if not self.use_sysroot(): return path if path.startswith(self.sysroot): return path[len(self.sysroot):] return path def use_sysroot(self): return self.sysroot != os.path.abspath(os.sep) def tmp_in_sysroot(self): paths = [self.sysroot, self.archive.get_tmp_dir()] return os.path.commonprefix(paths) == self.sysroot def is_installed(self, package_name): '''Is the package $package_name installed?''' return self.policy().pkg_by_name(package_name) is not None def do_cmd_output_sub(self, cmd, regexp, subst): '''Apply a regexp substitution to command output archived by sosreport. cmd is the command name from which output is collected (i.e. excluding parameters). The regexp can be a string or a compiled re object. The substitution string, subst, is a string that replaces each occurrence of regexp in each file collected from cmd. Internally 'cmd' is treated as a glob with a leading and trailing '*' and each matching file from the current module's command list is subjected to the replacement. This function returns the number of replacements made. ''' globstr = '*' + cmd + '*' self._log_debug("substituting '%s' for '%s' in commands matching '%s'" % (subst, regexp, globstr)) if not self.executed_commands: return 0 replacements = None try: for called in self.executed_commands: # was anything collected? if called['file'] is None: continue if fnmatch.fnmatch(called['exe'], globstr): path = os.path.join(self.commons['cmddir'], called['file']) self._log_debug("applying substitution to '%s'" % path) readable = self.archive.open_file(path) result, replacements = re.subn( regexp, subst, readable.read()) if replacements: self.archive.add_string(result, path) except Exception as e: msg = "regex substitution failed for '%s' with: '%s'" self._log_error(msg % (called['exe'], e)) replacements = None return replacements def do_file_sub(self, srcpath, regexp, subst): '''Apply a regexp substitution to a file archived by sosreport. srcpath is the path in the archive where the file can be found. regexp can be a regexp string or a compiled re object. subst is a string to replace each occurance of regexp in the content of srcpath. This function returns the number of replacements made. ''' try: path = self._get_dest_for_srcpath(srcpath) self._log_debug("substituting scrpath '%s'" % srcpath) self._log_debug("substituting '%s' for '%s' in '%s'" % (subst, regexp, path)) if not path: return 0 readable = self.archive.open_file(path) result, replacements = re.subn(regexp, subst, readable.read()) if replacements: self.archive.add_string(result, srcpath) else: replacements = 0 except Exception as e: msg = "regex substitution failed for '%s' with: '%s'" self._log_error(msg % (path, e)) replacements = 0 return replacements def do_path_regex_sub(self, pathexp, regexp, subst): '''Apply a regexp substituation to a set of files archived by sos. The set of files to be substituted is generated by matching collected file pathnames against pathexp which may be a regular expression string or compiled re object. The portion of the file to be replaced is specified via regexp and the replacement string is passed in subst.''' if not hasattr(pathexp, "match"): pathexp = re.compile(pathexp) match = pathexp.match file_list = [f for f in self.copied_files if match(f['srcpath'])] for file in file_list: self.do_file_sub(file['srcpath'], regexp, subst) def do_regex_find_all(self, regex, fname): return regex_findall(regex, fname) def _copy_symlink(self, srcpath): # the target stored in the original symlink linkdest = os.readlink(srcpath) dest = os.path.join(os.path.dirname(srcpath), linkdest) # Absolute path to the link target. If SYSROOT != '/' this path # is relative to the host root file system. absdest = os.path.normpath(dest) # adjust the target used inside the report to always be relative if os.path.isabs(linkdest): reldest = os.path.relpath(linkdest, os.path.dirname(srcpath)) # trim leading /sysroot if self.use_sysroot(): reldest = reldest[len(os.sep + os.pardir):] self._log_debug("made link target '%s' relative as '%s'" % (linkdest, reldest)) else: reldest = linkdest self._log_debug("copying link '%s' pointing to '%s' with isdir=%s" % (srcpath, linkdest, os.path.isdir(absdest))) dstpath = self.strip_sysroot(srcpath) # use the relative target path in the tarball self.archive.add_link(reldest, dstpath) if os.path.isdir(absdest): self._log_debug("link '%s' is a directory, skipping..." % linkdest) return # copy the symlink target translating relative targets # to absolute paths to pass to _do_copy_path. self._log_debug("normalized link target '%s' as '%s'" % (linkdest, absdest)) # skip recursive copying of symlink pointing to itself. if (absdest != srcpath): self._do_copy_path(self.strip_sysroot(absdest)) else: self._log_debug("link '%s' points to itself, skipping target..." % linkdest) self.copied_files.append({'srcpath': srcpath, 'dstpath': dstpath, 'symlink': "yes", 'pointsto': linkdest}) def _copy_dir(self, srcpath): try: for afile in os.listdir(srcpath): self._log_debug("recursively adding '%s' from '%s'" % (afile, srcpath)) self._do_copy_path(os.path.join(srcpath, afile), dest=None) except OSError as e: if e.errno == errno.ELOOP: msg = "Too many levels of symbolic links copying" self._log_error("_copy_dir: %s '%s'" % (msg, srcpath)) return raise e def _get_dest_for_srcpath(self, srcpath): if self.use_sysroot(): srcpath = self.join_sysroot(srcpath) for copied in self.copied_files: if srcpath == copied["srcpath"]: return copied["dstpath"] return None def _is_forbidden_path(self, path): if self.use_sysroot(): path = self.join_sysroot(path) return _path_in_path_list(path, self.forbidden_paths) def _copy_node(self, path, st): dev_maj = os.major(st.st_rdev) dev_min = os.minor(st.st_rdev) mode = st.st_mode self.archive.add_node(path, mode, os.makedev(dev_maj, dev_min)) # Methods for copying files and shelling out def _do_copy_path(self, srcpath, dest=None): '''Copy file or directory to the destination tree. If a directory, then everything below it is recursively copied. A list of copied files are saved for use later in preparing a report. ''' if self._is_forbidden_path(srcpath): self._log_debug("skipping forbidden path '%s'" % srcpath) return '' if not dest: dest = srcpath if self.use_sysroot(): dest = self.strip_sysroot(dest) try: st = os.lstat(srcpath) except (OSError, IOError): self._log_info("failed to stat '%s'" % srcpath) return if stat.S_ISLNK(st.st_mode): self._copy_symlink(srcpath) return else: if stat.S_ISDIR(st.st_mode): self._copy_dir(srcpath) return # handle special nodes (block, char, fifo, socket) if not (stat.S_ISREG(st.st_mode) or stat.S_ISDIR(st.st_mode)): ntype = _node_type(st) self._log_debug("creating %s node at archive:'%s'" % (ntype, dest)) self._copy_node(srcpath, st) return # if we get here, it's definitely a regular file (not a symlink or dir) self._log_debug("copying path '%s' to archive:'%s'" % (srcpath, dest)) # if not readable(srcpath) if not st.st_mode & 0o444: # FIXME: reflect permissions in archive self.archive.add_string("", dest) else: self.archive.add_file(srcpath, dest) self.copied_files.append({ 'srcpath': srcpath, 'dstpath': dest, 'symlink': "no" }) def add_forbidden_path(self, forbidden): """Specify a path to not copy, even if it's part of a copy_specs[] entry. """ if self.use_sysroot(): forbidden = self.join_sysroot(forbidden) # Glob case handling is such that a valid non-glob is a reduced glob for path in glob.glob(forbidden): self.forbidden_paths.append(path) def get_all_options(self): """return a list of all options selected""" return (self.opt_names, self.opt_parms) def set_option(self, optionname, value): '''set the named option to value.''' for name, parms in zip(self.opt_names, self.opt_parms): if name == optionname: parms['enabled'] = value return True else: return False def get_option(self, optionname, default=0): """Returns the first value that matches 'optionname' in parameters passed in via the command line or set via set_option or via the global_plugin_options dictionary, in that order. optionaname may be iterable, in which case the first option that matches any of the option names is returned. """ global_options = ('verify', 'all_logs', 'log_size') if optionname in global_options: return getattr(self.commons['cmdlineopts'], optionname) def _check(key): if hasattr(optionname, "__iter__"): return key in optionname else: return key == optionname for name, parms in zip(self.opt_names, self.opt_parms): if _check(name): val = parms['enabled'] if val is not None: return val items = six.iteritems(self.commons.get('global_plugin_options', {})) for key, value in items: if _check(key): return value return default def get_option_as_list(self, optionname, delimiter=",", default=None): '''Will try to return the option as a list separated by the delimiter. ''' option = self.get_option(optionname) try: opt_list = [opt.strip() for opt in option.split(delimiter)] return list(filter(None, opt_list)) except Exception: return default def _add_copy_paths(self, copy_paths): self.copy_paths.update(copy_paths) def add_copy_spec_limit(self, copyspec, sizelimit=None, tailit=True): """Add a file or glob but limit it to sizelimit megabytes. If fname is a single file the file will be tailed to meet sizelimit. If the first file in a glob is too large it will be tailed to meet the sizelimit. """ if not (copyspec and len(copyspec)): return False if self.use_sysroot(): copyspec = self.join_sysroot(copyspec) files = glob.glob(copyspec) files.sort() if len(files) == 0: return current_size = 0 limit_reached = False sizelimit *= 1024 * 1024 # in MB _file = None for _file in files: current_size += os.stat(_file)[stat.ST_SIZE] if sizelimit and current_size > sizelimit: limit_reached = True break self._add_copy_paths([_file]) if limit_reached and tailit: file_name = _file if file_name[0] == os.sep: file_name = file_name.lstrip(os.sep) strfile = file_name.replace(os.path.sep, ".") + ".tailed" self.add_string_as_file(tail(_file, sizelimit), strfile) rel_path = os.path.relpath('/', os.path.dirname(_file)) link_path = os.path.join(rel_path, 'sos_strings', self.name(), strfile) self.archive.add_link(link_path, _file) def add_copy_spec(self, copyspecs): """Add a file specification (can be file, dir,or shell glob) to be copied into the sosreport by this module. """ if isinstance(copyspecs, six.string_types): copyspecs = [copyspecs] for copyspec in copyspecs: if self.use_sysroot(): copyspec = self.join_sysroot(copyspec) if not (copyspec and len(copyspec)): self._log_warn("added null or empty copy spec") return False copy_paths = self._expand_copy_spec(copyspec) self._add_copy_paths(copy_paths) self._log_info("added copyspec '%s'" % copy_paths) def get_command_output(self, prog, timeout=300, stderr=True, chroot=True, runat=None): if chroot or self.commons['cmdlineopts'].chroot == 'always': root = self.sysroot else: root = None result = sos_get_command_output(prog, timeout=timeout, stderr=stderr, chroot=root, chdir=runat) if result['status'] == 124: self._log_warn("command '%s' timed out after %ds" % (prog, timeout)) # command not found or not runnable if result['status'] == 126 or result['status'] == 127: # automatically retry chroot'ed commands in the host namespace if chroot and self.commons['cmdlineopts'].chroot != 'always': self._log_info("command '%s' not found in %s - " "re-trying in host root" % (prog.split()[0], root)) return self.get_command_output(prog, timeout=timeout, chroot=False, runat=runat) self._log_debug("could not run '%s': command not found" % prog) return result def call_ext_prog(self, prog, timeout=300, stderr=True, chroot=True, runat=None): """Execute a command independantly of the output gathering part of sosreport. """ return self.get_command_output(prog, timeout=timeout, stderr=stderr, chroot=chroot, runat=runat) def check_ext_prog(self, prog): """Execute a command independently of the output gathering part of sosreport and check the return code. Return True for a return code of 0 and False otherwise. """ return self.call_ext_prog(prog)['status'] == 0 def add_cmd_output(self, cmds, suggest_filename=None, root_symlink=None, timeout=300, stderr=True, chroot=True, runat=None): """Run a program or a list of programs and collect the output""" if isinstance(cmds, six.string_types): cmds = [cmds] if len(cmds) > 1 and (suggest_filename or root_symlink): self._log_warn("ambiguous filename or symlink for command list") for cmd in cmds: cmdt = ( cmd, suggest_filename, root_symlink, timeout, stderr, chroot, runat ) _tuplefmt = "('%s', '%s', '%s', %s, '%s', '%s', '%s')" _logstr = "packed command tuple: " + _tuplefmt self._log_debug(_logstr % cmdt) self.collect_cmds.append(cmdt) self._log_info("added cmd output '%s'" % cmd) def get_cmd_output_path(self, name=None, make=True): """Return a path into which this module should store collected command output """ cmd_output_path = os.path.join(self.archive.get_tmp_dir(), 'sos_commands', self.name()) if name: cmd_output_path = os.path.join(cmd_output_path, name) if make: os.makedirs(cmd_output_path) return cmd_output_path def file_grep(self, regexp, *fnames): """Returns lines matched in fnames, where fnames can either be pathnames to files to grep through or open file objects to grep through line by line. """ return grep(regexp, *fnames) def _mangle_command(self, exe): name_max = self.archive.name_max() return _mangle_command(exe, name_max) def _make_command_filename(self, exe): """The internal function to build up a filename based on a command.""" outfn = os.path.join(self.commons['cmddir'], self.name(), self._mangle_command(exe)) # check for collisions if os.path.exists(outfn): inc = 2 while True: newfn = "%s_%d" % (outfn, inc) if not os.path.exists(newfn): outfn = newfn break inc += 1 return outfn def add_string_as_file(self, content, filename): """Add a string to the archive as a file named `filename`""" self.copy_strings.append((content, filename)) content = "..." + (content.splitlines()[0]).decode('utf8', 'ignore') self._log_debug("added string '%s' as '%s'" % (content, filename)) def get_cmd_output_now(self, exe, suggest_filename=None, root_symlink=False, timeout=300, stderr=True, chroot=True, runat=None): """Execute a command and save the output to a file for inclusion in the report. """ start = time() result = self.get_command_output(exe, timeout=timeout, stderr=stderr, chroot=chroot, runat=runat) # 126 means 'found but not executable' if result['status'] == 126 or result['status'] == 127: return None self._log_debug("collected output of '%s' in %s" % (exe.split()[0], time() - start)) if suggest_filename: outfn = self._make_command_filename(suggest_filename) else: outfn = self._make_command_filename(exe) outfn_strip = outfn[len(self.commons['cmddir'])+1:] self.archive.add_string(result['output'], outfn) if root_symlink: self.archive.add_link(outfn, root_symlink) # save info for later # save in our list self.executed_commands.append({'exe': exe, 'file': outfn_strip}) self.commons['xmlreport'].add_command(cmdline=exe, exitcode=result['status'], f_stdout=outfn_strip) return os.path.join(self.archive.get_archive_path(), outfn) def is_module_loaded(self, module_name): """Return whether specified moudle as module_name is loaded or not""" if len(grep("^" + module_name + " ", "/proc/modules")) == 0: return None else: return True # For adding output def add_alert(self, alertstring): """Add an alert to the collection of alerts for this plugin. These will be displayed in the report """ self.alerts.append(alertstring) def add_custom_text(self, text): """Append text to the custom text that is included in the report. This is freeform and can include html. """ self.custom_text += text def _expand_copy_spec(self, copyspec): return glob.glob(copyspec) def _collect_copy_specs(self): for path in self.copy_paths: self._log_info("collecting path '%s'" % path) self._do_copy_path(path) def _collect_cmd_output(self): for progs in zip(self.collect_cmds): ( prog, suggest_filename, root_symlink, timeout, stderr, chroot, runat ) = progs[0] self._log_debug("unpacked command tuple: " + "('%s', '%s', '%s', %s, '%s', '%s', '%s')" % progs[0]) self._log_info("collecting output of '%s'" % prog) self.get_cmd_output_now(prog, suggest_filename=suggest_filename, root_symlink=root_symlink, timeout=timeout, stderr=stderr, chroot=chroot, runat=runat) def _collect_strings(self): for string, file_name in self.copy_strings: content = "..." content += (string.splitlines()[0]).decode('utf8', 'ignore') self._log_info("collecting string '%s' as '%s'" % (content, file_name)) try: self.archive.add_string(string, os.path.join('sos_strings', self.name(), file_name)) except Exception as e: self._log_debug("could not add string '%s': %s" % (file_name, e)) def collect(self): """Collect the data for a plugin.""" start = time() self._collect_copy_specs() self._collect_cmd_output() self._collect_strings() fields = (self.name(), time() - start) self._log_debug("collected plugin '%s' in %s" % fields) def get_description(self): """ This function will return the description for the plugin""" try: if hasattr(self, '__doc__') and self.__doc__: return self.__doc__.strip() return super(self.__class__, self).__doc__.strip() except: return "" def check_enabled(self): """This method will be used to verify that a plugin should execute given the condition of the underlying environment. The default implementation will return True if neither class.files or class.packages is specified. If either are specified the plugin will check for the existence of any of the supplied files or packages and return True if any exist. It is encouraged to override this method if this behavior isn't applicable. """ # some files or packages have been specified for this package if self.files or self.packages: if isinstance(self.files, six.string_types): self.files = [self.files] if isinstance(self.packages, six.string_types): self.packages = [self.packages] return (any(os.path.exists(fname) for fname in self.files) or any(self.is_installed(pkg) for pkg in self.packages)) return True def default_enabled(self): """This decides whether a plugin should be automatically loaded or only if manually specified in the command line.""" return True def setup(self): """Collect the list of files declared by the plugin. This method may be overridden to add further copy_specs, forbidden_paths, and external programs if required. """ self.add_copy_spec(list(self.files)) def postproc(self): """Perform any postprocessing. To be replaced by a plugin if required. """ pass def report(self): """ Present all information that was gathered in an html file that allows browsing the results. """ # make this prettier html = '
\n' % self.name() # Intro html = html + "

Plugin " + self.name() + "

\n" # Files if len(self.copied_files): html = html + "

Files copied:

    \n" for afile in self.copied_files: html = html + '
  • %s' % \ (".." + afile['dstpath'], afile['srcpath']) if afile['symlink'] == "yes": html = html + " (symlink to %s)" % afile['pointsto'] html = html + '
  • \n' html = html + "

\n" # Command Output if len(self.executed_commands): html = html + "

Commands Executed:

    \n" # convert file name to relative path from our root # don't use relpath - these are HTML paths not OS paths. for cmd in self.executed_commands: if cmd["file"] and len(cmd["file"]): cmd_rel_path = "../" + self.commons['cmddir'] \ + "/" + cmd['file'] html = html + '
  • %s
  • \n' % \ (cmd_rel_path, cmd['exe']) else: html = html + '
  • %s
  • \n' % (cmd['exe']) html = html + "

\n" # Alerts if len(self.alerts): html = html + "

Alerts:

    \n" for alert in self.alerts: html = html + '
  • %s
  • \n' % alert html = html + "

\n" # Custom Text if self.custom_text != "": html = html + "

Additional Information:
\n" html = html + self.custom_text + "

\n" return html class RedHatPlugin(object): """Tagging class for Red Hat's Linux distributions""" pass class PowerKVMPlugin(RedHatPlugin): """Tagging class for IBM PowerKVM Linux""" pass class ZKVMPlugin(RedHatPlugin): """Tagging class for IBM ZKVM Linux""" pass class UbuntuPlugin(object): """Tagging class for Ubuntu Linux""" pass class DebianPlugin(object): """Tagging class for Debian Linux""" pass class IndependentPlugin(object): """Tagging class for plugins that can run on any platform""" pass class ExperimentalPlugin(object): """Tagging class that indicates that this plugin is experimental""" pass def import_plugin(name, superclasses=None): """Import name as a module and return a list of all classes defined in that module. superclasses should be a tuple of valid superclasses to import, this defaults to (Plugin,). """ plugin_fqname = "sos.plugins.%s" % name if not superclasses: superclasses = (Plugin,) return import_module(plugin_fqname, superclasses) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/iscsitarget.py0000644000175000017500000000315612625313241022671 0ustar cariboucaribou# Copyright (C) 2007-2012 Red Hat, Inc., Ben Turner # Copyright (C) 2012 Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class IscsiTarget(Plugin): """iSCSI target """ plugin_name = "iscsitarget" profiles = ('storage',) class RedHatIscsiTarget(IscsiTarget, RedHatPlugin): packages = ('scsi-target-utils',) def setup(self): super(RedHatIscsiTarget, self).setup() self.add_copy_spec("/etc/tgt/targets.conf") self.add_cmd_output("tgtadm --lld iscsi --op show --mode target") class DebianIscsiTarget(IscsiTarget, DebianPlugin, UbuntuPlugin): packages = ('iscsitarget',) def setup(self): super(DebianIscsiTarget, self).setup() self.add_copy_spec([ "/etc/iet", "/etc/sysctl.d/30-iscsitarget.conf", "/etc/default/iscsitarget" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ceph.py0000644000175000017500000000350712625313241021267 0ustar cariboucaribou# 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, UbuntuPlugin class Ceph(Plugin, RedHatPlugin, UbuntuPlugin): """CEPH distributed storage """ plugin_name = 'ceph' profiles = ('storage', 'virt') option_list = [ ("log", "gathers all ceph logs", "slow", False) ] packages = ( 'ceph', 'ceph-mds', 'ceph-common', 'libcephfs1', 'ceph-fs-common', 'calamari-server', 'librados2' ) def setup(self): self.add_copy_spec([ "/etc/ceph/", "/var/log/ceph/", "/etc/calamari/", "/var/log/calamari", "/var/log/radosgw" ]) self.add_cmd_output([ "ceph status", "ceph health detail", "ceph osd tree", "ceph osd stat", "ceph osd dump", "ceph mon stat", "ceph mon dump", "ceph df", "ceph report" ]) self.add_forbidden_path("/etc/ceph/*keyring") self.add_forbidden_path("/var/lib/ceph/*/*keyring") self.add_forbidden_path("/var/lib/ceph/*keyring") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/block.py0000644000175000017500000000352012625313241021435 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Block(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Block device information """ plugin_name = 'block' profiles = ('storage', 'hardware') def setup(self): self.add_cmd_output([ "lsblk", "blkid -c /dev/null", "blockdev --report", "ls -lanR /dev", "ls -lanR /sys/block" ]) # legacy location for non-/run distributions self.add_copy_spec([ "/etc/blkid.tab", "/run/blkid/blkid.tab", "/proc/partitions", "/proc/diskstats" ]) if os.path.isdir("/sys/block"): for disk in os.listdir("/sys/block"): if disk in [".", ".."] or disk.startswith("ram"): continue disk_path = os.path.join('/dev/', disk) self.add_cmd_output([ "udevadm info -ap /sys/block/%s" % (disk), "parted -s %s unit s print" % (disk_path), "fdisk -l %s" % disk_path ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/apache.py0000644000175000017500000000444212625313241021570 0ustar cariboucaribou# 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 Apache(Plugin): """Apache http daemon """ plugin_name = "apache" profiles = ('webserver', 'openshift') option_list = [ ("log", "gathers all apache logs", "slow", False) ] class RedHatApache(Apache, RedHatPlugin): files = ('/etc/httpd/conf/httpd.conf',) def setup(self): super(RedHatApache, self).setup() self.add_copy_spec([ "/etc/httpd/conf/httpd.conf", "/etc/httpd/conf.d/*.conf", "/etc/httpd/conf.modules.d/*.conf" ]) self.add_forbidden_path("/etc/httpd/conf/password.conf") # collect only the current log set by default self.add_copy_spec_limit("/var/log/httpd/access_log", 5) self.add_copy_spec_limit("/var/log/httpd/error_log", 5) self.add_copy_spec_limit("/var/log/httpd/ssl_access_log", 5) self.add_copy_spec_limit("/var/log/httpd/ssl_error_log", 5) if self.get_option("log"): self.add_copy_spec("/var/log/httpd/*") class DebianApache(Apache, DebianPlugin, UbuntuPlugin): files = ('/etc/apache2/apache2.conf',) def setup(self): super(DebianApache, self).setup() self.add_copy_spec([ "/etc/apache2/*", "/etc/default/apache2" ]) # collect only the current log set by default self.add_copy_spec_limit("/var/log/apache2/access_log", 15) self.add_copy_spec_limit("/var/log/apache2/error_log", 15) if self.get_option("log"): self.add_copy_spec("/var/log/apache2/*") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/navicli.py0000644000175000017500000000717012625313241021775 0ustar cariboucaribou# Copyright (C) 2008 EMC Corporation. Keith Kearnan # Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # 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, os from sos.utilities import is_executable # Just for completeness sake. from six.moves import input class Navicli(Plugin, RedHatPlugin): """ EMC Navicli """ plugin_name = 'navicli' profiles = ('storage', 'hardware') def check_enabled(self): return is_executable("navicli") def get_navicli_config(self): """ EMC Navisphere Host Agent NAVICLI specific information - files """ self.add_copy_spec([ "/etc/Navisphere/agent.config", "/etc/Navisphere/Navimon.cfg", "/etc/Navisphere/Quietmode.cfg", "/etc/Navisphere/messages/[a-z]*", "/etc/Navisphere/log/[a-z]*" ]) def get_navicli_SP_info(self, SP_address): """ EMC Navisphere Host Agent NAVICLI specific information - CLARiiON - commands """ self.add_cmd_output([ "navicli -h %s getall" % SP_address, "navicli -h %s getsptime -spa" % SP_address, "navicli -h %s getsptime -spb" % SP_address, "navicli -h %s getlog" % SP_address, "navicli -h %s getdisk" % SP_address, "navicli -h %s getcache" % SP_address, "navicli -h %s getlun" % SP_address, "navicli -h %s getlun -rg -type -default -owner -crus " "-capacity" % SP_address, "navicli -h %s lunmapinfo" % SP_address, "navicli -h %s getcrus" % SP_address, "navicli -h %s port -list -all" % SP_address, "navicli -h %s storagegroup -list" % SP_address, "navicli -h %s spportspeed -get" % SP_address ]) def setup(self): self.get_navicli_config() CLARiiON_IP_address_list = [] CLARiiON_IP_loop = "stay_in" while CLARiiON_IP_loop == "stay_in": try: ans = input("CLARiiON SP IP Address or [Enter] to exit: ") except: return if self.check_ext_prog("navicli -h %s getsptime" % (ans,)): CLARiiON_IP_address_list.append(ans) else: if ans != "": print("The IP address you entered, %s, is not to an " "active CLARiiON SP." % ans) if ans == "": CLARiiON_IP_loop = "get_out" # Sort and dedup the list of CLARiiON IP Addresses CLARiiON_IP_address_list.sort() for SP_address in CLARiiON_IP_address_list: if CLARiiON_IP_address_list.count(SP_address) > 1: CLARiiON_IP_address_list.remove(SP_address) for SP_address in CLARiiON_IP_address_list: if SP_address != "": print(" Gathering NAVICLI information for %s..." % SP_address) self.get_navicli_SP_info(SP_address) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/cluster.py0000644000175000017500000001402212625313241022023 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import re import os.path from glob import glob from datetime import datetime, timedelta class Cluster(Plugin, RedHatPlugin): """Red Hat Cluster High Availability and GFS2 """ plugin_name = 'cluster' profiles = ('cluster',) option_list = [ ("gfs2lockdump", 'gather output of gfs2 lockdumps', 'slow', False), ("crm_from", 'specify the start time for crm_report', 'fast', False), ('lockdump', 'gather dlm lockdumps', 'slow', False), ('crm_scrub', 'enable password scrubbing for crm_report', '', True), ] packages = [ "luci", "ricci", "corosync", "openais", "cman", "clusterlib", "fence-agents", "pacemaker" ] files = ["/etc/cluster/cluster.conf"] debugfs_path = "/sys/kernel/debug" _debugfs_cleanup = False def setup(self): self.add_copy_spec([ "/etc/cluster.conf", "/etc/cluster", "/etc/sysconfig/dlm", "/etc/sysconfig/pacemaker", "/etc/sysconfig/cluster", "/etc/sysconfig/cman", "/etc/fence_virt.conf", "/var/lib/ricci", "/var/lib/luci/data/luci.db", "/var/lib/luci/etc", "/var/log/cluster", "/var/log/luci", "/sys/fs/gfs2/*/withdraw" ]) if self.get_option('gfs2lockdump'): if self._mount_debug(): self.add_copy_spec(["/sys/kernel/debug/gfs2/*"]) if self.get_option('lockdump'): self.do_lockdump() self.add_cmd_output([ "rg_test test /etc/cluster/cluster.conf", "fence_tool ls -n", "gfs_control ls -n", "dlm_tool log_plock", "clustat", "group_tool dump", "cman_tool services", "cman_tool nodes", "cman_tool status", "ccs_tool lsnode", "corosync-quorumtool -l", "corosync-quorumtool -s", "corosync-cpgtool", "corosync-objctl", "gfs_control ls -n", "gfs_control dump", "fence_tool dump", "dlm_tool dump", "dlm_tool ls -n", "mkqdisk -L", "pcs config", "pcs status", "pcs property list --all" ]) # crm_report needs to be given a --from "YYYY-MM-DD HH:MM:SS" start # time in order to collect data. crm_from = (datetime.today() - timedelta(hours=72)).strftime("%Y-%m-%d %H:%m:%S") if self.get_option('crm_from') is not False: if re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', str(self.get_option('crm_from'))): crm_from = self.get_option('crm_from') else: self._log_error( "crm_from parameter '%s' is not a valid date: using " "default" % self.get_option('crm_from')) crm_dest = self.get_cmd_output_path(name='crm_report', make=False) crm_scrub = '-p "passw.*"' if not self.get_option("crm_scrub"): crm_scrub = '' self._log_warn("scrubbing of crm passwords has been disabled:") self._log_warn("data collected by crm_report may contain" " sensitive values.") self.add_cmd_output('crm_report %s -S -d --dest %s --from "%s"' % (crm_scrub, crm_dest, crm_from), chroot=self.tmp_in_sysroot()) def do_lockdump(self): if self._mount_debug(): dlm_tool = "dlm_tool ls" result = self.call_ext_prog(dlm_tool) if result['status'] != 0: return lock_exp = r'^name\s+([^\s]+)$' lock_re = re.compile(lock_exp, re.MULTILINE) for lockspace in lock_re.findall(result['output']): self.add_cmd_output( "dlm_tool lockdebug -svw '%s'" % lockspace, suggest_filename="dlm_locks_%s" % lockspace ) def _mount_debug(self): if not os.path.ismount(self.debugfs_path): self._debugfs_cleanup = True r = self.call_ext_prog("mount -t debugfs debugfs %s" % self.debugfs_path) if r['status'] != 0: self._log_error("debugfs not mounted and mount attempt failed") self._debugfs_cleanup = False return os.path.ismount(self.debugfs_path) def postproc(self): for cluster_conf in glob("/etc/cluster/cluster.conf*"): self.do_file_sub( cluster_conf, r"(\s*\ # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin from socket import gethostname class QpidDispatch(Plugin, RedHatPlugin): """Qpid dispatch router """ plugin_name = 'qpid_dispatch' profiles = ('services',) packages = ('qdrouterd', 'qpid-dispatch-tools', 'qpid-dispatch-router') option_list = [("port", "listening port to connect to", '', ""), ("ssl-certificate", "Path to file containing client SSL certificate", '', ""), ("ssl-key", "Path to file containing client SSL private key", '', ""), ("ssl-trustfile", "trusted CA database file", '', "")] def setup(self): """ performs data collection for qpid dispatch router """ options = "" if self.get_option("port"): options = (options + " -b " + gethostname() + ":%s" % (self.get_option("port"))) # gethostname() is due to DISPATCH-156 # for either present option, add --option=value to 'options' variable for option in ["ssl-certificate", "ssl-key", "ssl-trustfile"]: if self.get_option(option): options = (options + " --%s=" % (option) + self.get_option(option)) self.add_cmd_output([ "qdstat -a" + options, # Show Router Addresses "qdstat -n" + options, # Show Router Nodes "qdstat -c" + options, # Show Connections "qdstat -m" + options # Show Broker Memory Stats ]) self.add_copy_spec([ "/etc/qpid-dispatch/qdrouterd.conf" ]) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/java.py0000644000175000017500000000227712625313241021274 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin class Java(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """Java runtime""" plugin_name = "java" profiles = ('webserver', 'java') def setup(self): self.add_copy_spec("/etc/java") self.add_forbidden_path("/etc/java/security") self.add_cmd_output("alternatives --display java", root_symlink="java") self.add_cmd_output("readlink -f /usr/bin/java") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/logrotate.py0000644000175000017500000000227112625313241022345 0ustar cariboucaribou# 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 LogRotate(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """LogRotate service """ plugin_name = 'logrotate' profiles = ('system',) def setup(self): self.add_cmd_output("logrotate --debug /etc/logrotate.conf", suggest_filename="logrotate_debug") self.add_copy_spec([ "/etc/logrotate*", "/var/lib/logrotate.status" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/sysvipc.py0000644000175000017500000000235112625313241022044 0ustar cariboucaribou# Copyright (C) 2007-2012 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class SysVIPC(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """SysV IPC """ plugin_name = "sysvipc" profiles = ('system', 'services') def setup(self): self.add_copy_spec([ "/proc/sysvipc/msg", "/proc/sysvipc/sem", "/proc/sysvipc/shm" ]) self.add_cmd_output([ "ipcs", "ipcs -u" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/rabbitmq.py0000644000175000017500000000256112625313241022150 0ustar cariboucaribou# 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 RabbitMQ(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """RabbitMQ messaging service """ plugin_name = 'rabbitmq' profiles = ('services',) files = ('/etc/rabbitmq/rabbitmq.conf',) packages = ('rabbitmq-server',) def setup(self): self.add_cmd_output("rabbitmqctl report") self.add_cmd_output("rabbitmqctl cluster_status") self.add_cmd_output("rabbitmqctl list_policies") self.add_copy_spec("/etc/rabbitmq/*") self.add_copy_spec_limit("/var/log/rabbitmq/*", sizelimit=self.get_option('log_size')) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/vhostmd.py0000644000175000017500000000420012625313241022023 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os class vhostmd(Plugin, RedHatPlugin): """vhostmd virtualization metrics collection """ plugin_name = 'vhostmd' profiles = ['sap', 'virt', 'system'] packages = ['virt-what'] def setup(self): vw = self.get_command_output("virt-what")['output'].splitlines() if not vw: return if "vmware" in vw or "kvm" in vw or "xen" in vw: if self.is_installed("vm-dump-metrics"): # if vm-dump-metrics is installed use it self.add_cmd_output("vm-dump-metrics", suggest_filename="virt_metrics") else: # otherwise use the raw vhostmd disk presented (256k size) sysblock = "/sys/block" if not os.path.isdir(sysblock): return for disk in os.listdir(sysblock): if "256K" in disk: dev = disk.split()[0] check = self.get_command_output( "dd if=/dev/%s bs=25 count=1" % dev) if 'metric' in check['output']: self.add_cmd_output("dd if=/dev/%s bs=256k count=1" % dev, suggest_filename="virt_\ metrics") # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/tftpserver.py0000644000175000017500000000210512625313241022545 0ustar cariboucaribou# Copyright (C) 2007 Shijoe George # 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 class TftpServer(Plugin, RedHatPlugin): """TFTP server """ plugin_name = 'tftpserver' profiles = ('sysmgmt', 'network') files = ('/etc/xinetd.d/tftp',) packages = ('tftp-server',) def setup(self): self.add_cmd_output("ls -lanR /tftpboot") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/rhui.py0000644000175000017500000000254612625313241021321 0ustar cariboucaribou# 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 class Rhui(Plugin, RedHatPlugin): """Red Hat Update Infrastructure """ plugin_name = 'rhui' profiles = ('sysmgmt',) rhui_debug_path = "/usr/share/rh-rhua/rhui-debug.py" packages = ["rh-rhui-tools"] files = [rhui_debug_path] def setup(self): if self.is_installed("pulp-cds"): cds = "--cds" else: cds = "" rhui_debug_dst_path = self.get_cmd_output_path() self.add_cmd_output( "python %s %s --dir %s" % (self.rhui_debug_path, cds, rhui_debug_dst_path), suggest_filename="rhui-debug") return # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/selinux.py0000644000175000017500000000340212625313241022031 0ustar cariboucaribou# 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 class SELinux(Plugin, RedHatPlugin): """SELinux access control """ plugin_name = 'selinux' profiles = ('system', 'security', 'openshift') option_list = [("fixfiles", 'Print incorrect file context labels', 'slow', False), ("list", 'List objects and their context', 'slow', False)] packages = ('libselinux',) def setup(self): self.add_copy_spec("/etc/selinux") self.add_cmd_output([ "sestatus -b", "semodule -l", "selinuxdefcon root", "selinuxconlist root", "selinuxexeccon /bin/passwd", "semanage -o -", "ps axuZww" ]) if self.get_option('fixfiles'): self.add_cmd_output("restorecon -Rvn /", stderr=False) if self.get_option('list'): self.add_cmd_output([ "semanage fcontext -l", "semanage user -l", "semanage login -l", "semanage port -l" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/soundcard.py0000644000175000017500000000270312625313241022327 0ustar cariboucaribou# 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 Soundcard(Plugin): """ Sound devices """ plugin_name = "soundcard" profiles = ('desktop', 'hardware') def setup(self): self.add_copy_spec("/proc/asound/*") self.add_cmd_output([ "aplay -l", "aplay -L", "amixer" ]) class RedHatSoundcard(Soundcard, RedHatPlugin): def setup(self): super(RedHatSoundcard, self).setup() self.add_copy_spec([ "/etc/alsa/*", "/etc/asound.*" ]) class DebianSoundcard(Soundcard, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianSoundcard, self).setup() self.add_copy_spec("/etc/pulse/*") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/iprconfig.py0000644000175000017500000001107612625313241022330 0ustar cariboucaribou# 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 import os import re from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin from sos.utilities import is_executable class IprConfig(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """IBM Power RAID storage adapter configuration information """ plugin_name = 'iprconfig' def check_enabled(self): arch = self.policy().get_arch() return "ppc64" in arch and is_executable("iprconfig") def setup(self): self.add_cmd_output([ "iprconfig -c show-config", "iprconfig -c show-alt-config", "iprconfig -c show-arrays", "iprconfig -c show-jbod-disks", "iprconfig -c show-ioas", ]) show_ioas = self.call_ext_prog("iprconfig -c show-ioas") if not show_ioas['status'] == 0: return devices = [] if show_ioas['output']: p = re.compile('sg') for line in show_ioas['output'].splitlines(): temp = line.split(' ') # temp[0] holds the device name if p.search(temp[0]): devices.append(temp[0]) for device in devices: self.add_cmd_output("iprconfig -c show-details %s" % (device,)) # Look for IBM Power RAID enclosures (iprconfig lists them) show_config = self.call_ext_prog("iprconfig -c show-config") if not show_config['status'] == 0: return if not show_config['output']: return # iprconfig -c show-config # Name PCI/SCSI Location Description Status # ------ ------------------------- ------------------------- ----------------- # 0005:60:00.0/0: PCI-E SAS RAID Adapter Operational # sda 0005:60:00.0/0:0:0:0 Physical Disk Active # sdb 0005:60:00.0/0:1:0:0 Physical Disk Active # sdc 0005:60:00.0/0:2:0:0 Physical Disk Active # sdd 0005:60:00.0/0:3:0:0 Physical Disk Active # sde 0005:60:00.0/0:4:0:0 Physical Disk Active # sdf 0005:60:00.0/0:5:0:0 Physical Disk Active # 0005:60:00.0/0:8:0:0 Enclosure Active # 0005:60:00.0/0:8:1:0 Enclosure Active show_alt_config = "iprconfig -c show-alt-config" altconfig = self.call_ext_prog(show_alt_config) if not (altconfig['status'] == 0): return if not altconfig['output']: return # iprconfig -c show-alt-config # Name Resource Path/Address Vendor Product ID Status # ------ -------------------------- -------- ---------------- ----------------- # sg9 0: IBM 57C7001SISIOA Operational # sg0 0:0:0:0 IBM MBF2300RC Active # sg1 0:1:0:0 IBM MBF2300RC Active # sg2 0:2:0:0 IBM HUC106030CSS600 Active # sg3 0:3:0:0 IBM HUC106030CSS600 Active # sg4 0:4:0:0 IBM HUC106030CSS600 Active # sg5 0:5:0:0 IBM HUC106030CSS600 Active # sg7 0:8:0:0 IBM VSBPD6E4A 3GSAS Active # sg8 0:8:1:0 IBM VSBPD6E4B 3GSAS Active for line in show_config['output'].splitlines(): if "Enclosure" in line: temp = re.split('\s+', line) # temp[1] holds the PCI/SCSI location pci, scsi = temp[1].split('/') for line in altconfig['output'].splitlines(): if scsi in line: temp = line.split(' ') # temp[0] holds device name self.add_cmd_output("iprconfig -c " "query-ses-mode %s" % (temp[0],)) sosreport-3.2+git276-g7da50d6/sos/plugins/kimchi.py0000644000175000017500000000312312605172031021604 0ustar cariboucaribou# Copyright IBM, Corp. 2014, Christy Perez # 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, UbuntuPlugin, DebianPlugin class Kimchi(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """kimchi-related information """ plugin_name = 'kimchi' packages = ('kimchi',) def setup(self): log_limit = self.get_option('log_size') self.add_copy_spec('/etc/kimchi/') if not self.get_option('all_logs'): self.add_copy_spec_limit('/var/log/kimchi/*.log', sizelimit=log_limit) self.add_copy_spec_limit('/etc/kimchi/kimchi*', sizelimit=log_limit) self.add_copy_spec_limit('/etc/kimchi/distros.d/*.json', sizelimit=log_limit) else: self.add_copy_spec('/var/log/kimchi/') # vim: expandtab tabstop=4 shiftwidth=4 sosreport-3.2+git276-g7da50d6/sos/plugins/sunrpc.py0000644000175000017500000000317012625313241021656 0ustar cariboucaribou# Copyright (C) 2012 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class SunRPC(Plugin): """Sun RPC service """ plugin_name = "sunrpc" profiles = ('system', 'storage', 'network', 'nfs') service = None def check_enabled(self): if self.policy().default_runlevel() in \ self.policy().runlevel_by_service(self.service): return True return False def setup(self): self.add_cmd_output("rpcinfo -p localhost") return class RedHatSunRPC(SunRPC, RedHatPlugin): service = 'rpcbind' # FIXME: depends on addition of runlevel_by_service (or similar) # in Debian/Ubuntu policy classes # class DebianSunRPC(SunRPC, DebianPlugin, UbuntuPlugin): # """Sun RPC related information # """ # # service = 'rpcbind-boot' # # def setup(self): # self.add_cmd_output("rpcinfo -p localhost") # return # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/subscription_manager.py0000644000175000017500000000307412625313241024565 0ustar cariboucaribou# 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 class SubscriptionManager(Plugin, RedHatPlugin): """subscription-manager information """ plugin_name = 'subscription-manager' profiles = ('system', 'packagemanager', 'sysmgmt') files = ('/etc/rhsm/rhsm.conf',) packages = ('subscription-manager',) def setup(self): # rhsm config and logs self.add_copy_spec([ "/etc/rhsm/", "/var/log/rhsm/rhsm.log", "/var/log/rhsm/rhsmcertd.log"]) self.add_cmd_output([ "subscription-manager list --installed", "subscription-manager list --consumed", "subscription-manager identity" ]) self.add_cmd_output("rhsm-debug system --sos --no-archive " "--no-subscriptions --destination %s" % self.get_cmd_output_path()) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_neutron.py0000644000175000017500000001646312625313247024124 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Brent Eagles # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os import re from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin # The Networking plugin includes most of what is needed from a snapshot # of the networking, so we only need to focus on the parts that are specific # to OpenStack Networking. The Process plugin should capture the dnsmasq # command line. The libvirt plugin grabs the instance's XML definition which # has the interface names for an instance. So what remains is relevant database # info... class OpenStackNeutron(Plugin): """OpenStack Networking """ plugin_name = "openstack_neutron" profiles = ('openstack', 'openstack_controller', 'openstack_compute') option_list = [("quantum", "Overrides checks for newer Neutron components", "fast", False)] component_name = "neutron" def setup(self): if not os.path.exists("/etc/neutron/") or self.get_option("quantum"): self.component_name = "quantum" self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/%s/" % self.component_name, sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/%s/*.log" % self.component_name, sizelimit=self.limit) self.add_copy_spec("/etc/%s/" % self.component_name) self.netns_dumps() def postproc(self): protect_keys = [ "rabbit_password", "qpid_password", "nova_admin_password", "xenapi_connection_password", "password", "connection", "admin_password", "metadata_proxy_shared_secret", "eapi_password", "crd_password", "primary_l3_host_password", "serverauth", "ucsm_password", "ha_vrrp_auth_password", "ssl_key_password", "nsx_password", "vcenter_password", "edge_appliance_password", "tenant_admin_password", "apic_password", "server_auth" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/%s/*" % self.component_name, regexp, r"\1*********") def netns_dumps(self): # It would've been beautiful if we could get parts of the networking # plugin to run in different namespaces. There are a couple of options # in the short term: create a local instance and "borrow" some of the # functionality, or simply copy some of the functionality. prefixes = ["qdhcp", "qrouter"] ip_netns_result = self.call_ext_prog("ip netns") if not (ip_netns_result['status'] == 0): return nslist = ip_netns_result['output'] lease_directories = [] if nslist: for nsname in nslist.splitlines(): prefix, netid = nsname.split('-', 1) if len(netid) > 0 and prefix in prefixes: self.ns_gather_data(nsname) lease_directories.append( "/var/lib/%s/dhcp/%s/" % (self.component_name, netid)) self.add_copy_spec(lease_directories) # TODO: Refactor! Copied from Networking plugin. def get_interface_name(self, ip_addr_out): """Return a dictionary for which key are interface name according to the output of ifconifg-a stored in ifconfig_file. """ out = {} for line in ip_addr_out.splitlines(): match = re.match('.*link/ether', line) if match: int = match.string.split(':')[1].lstrip() out[int] = True return out def ns_gather_data(self, nsname): cmd_prefix = "ip netns exec %s " % nsname self.add_cmd_output([ cmd_prefix + "iptables-save", cmd_prefix + "ifconfig -a", cmd_prefix + "route -n" ]) # borrowed from networking plugin ip_addr_result = self.call_ext_prog(cmd_prefix + "ip -o addr") if ip_addr_result['status'] == 0: for eth in self.get_interface_name(ip_addr_result['output']): # Most, if not all, IFs in the namespaces are going to be # virtual. The '-a', '-c' and '-g' options are not likely to be # supported so these ops are not copied from the network # plugin. self.add_cmd_output([ cmd_prefix + "ethtool "+eth, cmd_prefix + "ethtool -i "+eth, cmd_prefix + "ethtool -k "+eth, cmd_prefix + "ethtool -S "+eth ]) # As all of the bridges are in the "global namespace", we do not need # to gather info on them. def gen_pkg_tuple(self, packages): names = [] for p in packages: names.append(p % {"comp": self.component_name}) return tuple(names) class DebianNeutron(OpenStackNeutron, DebianPlugin, UbuntuPlugin): package_list_template = [ '%(comp)s-common', '%(comp)s-plugin-cisco', '%(comp)s-plugin-linuxbridge-agent', '%(comp)s-plugin-nicira', '%(comp)s-plugin-openvswitch', '%(comp)s-plugin-openvswitch-agent', '%(comp)s-plugin-ryu', '%(comp)s-plugin-ryu-agent', '%(comp)s-server', 'python-%(comp)s', 'python-%(comp)sclient' ] def check_enabled(self): return self.is_installed("%s-common" % self.component_name) def setup(self): super(DebianNeutron, self).setup() self.packages = self.gen_pkg_tuple(self.package_list_template) self.add_copy_spec("/etc/sudoers.d/%s_sudoers" % self.component_name) class RedHatNeutron(OpenStackNeutron, RedHatPlugin): package_list_template = [ 'openstack-%(comp)s', 'openstack-%(comp)s-linuxbridge' 'openstack-%(comp)s-metaplugin', 'openstack-%(comp)s-openvswitch', 'openstack-%(comp)s-bigswitch', 'openstack-%(comp)s-brocade', 'openstack-%(comp)s-cisco', 'openstack-%(comp)s-hyperv', 'openstack-%(comp)s-midonet', 'openstack-%(comp)s-nec' 'openstack-%(comp)s-nicira', 'openstack-%(comp)s-plumgrid', 'openstack-%(comp)s-ryu', 'python-%(comp)s', 'python-%(comp)sclient' ] def check_enabled(self): return self.is_installed("openstack-%s" % self.component_name) def setup(self): super(RedHatNeutron, self).setup() self.packages = self.gen_pkg_tuple(self.package_list_template) self.add_copy_spec("/etc/sudoers.d/%s-rootwrap" % self.component_name) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_instack.py0000644000175000017500000000620312625313247024055 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., Lee Yarwood # 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 class OpenStackInstack(Plugin): """OpenStack Instack """ plugin_name = "openstack_instack" profiles = ('openstack', 'openstack_undercloud') def setup(self): self.add_copy_spec("/home/stack/.instack/install-undercloud.log") self.add_copy_spec("/home/stack/instackenv.json") self.add_copy_spec("/home/stack/undercloud.conf") def postproc(self): protected_keys = [ "UNDERCLOUD_TUSKAR_PASSWORD", "UNDERCLOUD_ADMIN_PASSWORD", "UNDERCLOUD_CEILOMETER_METERING_SECRET", "UNDERCLOUD_CEILOMETER_PASSWORD", "UNDERCLOUD_CEILOMETER_SNMPD_PASSWORD", "UNDERCLOUD_DB_PASSWORD", "UNDERCLOUD_GLANCE_PASSWORD", "UNDERCLOUD_HEAT_PASSWORD", "UNDERCLOUD_HEAT_STACK_DOMAIN_ADMIN_PASSWORD", "UNDERCLOUD_HORIZON_SECRET_KEY", "UNDERCLOUD_IRONIC_PASSWORD", "UNDERCLOUD_NEUTRON_PASSWORD", "UNDERCLOUD_NOVA_PASSWORD", "UNDERCLOUD_RABBIT_PASSWORD", "UNDERCLOUD_SWIFT_PASSWORD", "UNDERCLOUD_TUSKAR_PASSWORD", "OS_PASSWORD", "undercloud_db_password", "undercloud_admin_password", "undercloud_glance_password", "undercloud_heat_password", "undercloud_neutron_password", "undercloud_nova_password", "undercloud_ironic_password", "undercloud_tuskar_password", "undercloud_ceilometer_password", "undercloud_ceilometer_metering_secret", "undercloud_ceilometer_snmpd_password", "undercloud_swift_password", "undercloud_rabbit_password", "undercloud_heat_stack_domain_admin_password" ] regexp = r"((?m)(%s)=)(.*)" % "|".join(protected_keys) self.do_file_sub("/home/stack/.instack/install-undercloud.log", regexp, r"\1*********") self.do_file_sub("/home/stack/undercloud.conf", regexp, r"\1*********") protected_json_keys = ["pm_password", "ssh-key", "password"] json_regexp = r'((?m)"(%s)": )(".*?")' % "|".join(protected_json_keys) self.do_file_sub("/home/stack/instackenv.json", json_regexp, r"\1*********") class RedHatRDOManager(OpenStackInstack, RedHatPlugin): packages = [ 'instack', 'instack-undercloud', ] def setup(self): super(RedHatRDOManager, self).setup() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/psacct.py0000644000175000017500000000317212625313241021623 0ustar cariboucaribou# 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 Psacct(Plugin): """Process accounting information """ plugin_name = "psacct" profiles = ('system',) option_list = [("all", "collect all process accounting files", "slow", False)] packages = ["psacct"] class RedHatPsacct(Psacct, RedHatPlugin): packages = ["psacct"] def setup(self): super(RedHatPsacct, self).setup() self.add_copy_spec("/var/account/pacct") if self.get_option("all"): self.add_copy_spec("/var/account/pacct*.gz") class DebianPsacct(Psacct, DebianPlugin, UbuntuPlugin): plugin_name = "acct" packages = ["acct"] def setup(self): super(DebianPsacct, self).setup() self.add_copy_spec(["/var/log/account/pacct", "/etc/default/acct"]) if self.get_option("all"): self.add_copy_spec("/var/log/account/pacct*.gz") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ipsec.py0000644000175000017500000000257512625313241021457 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 IPSec(Plugin): """Internet protocol security """ plugin_name = "ipsec" profiles = ('network',) packages = ('ipsec-tools',) class RedHatIpsec(IPSec, RedHatPlugin): files = ('/etc/racoon/racoon.conf',) def setup(self): self.add_copy_spec("/etc/racoon") class DebianIPSec(IPSec, DebianPlugin, UbuntuPlugin): files = ('/etc/ipsec-tools.conf',) def setup(self): self.add_copy_spec([ "/etc/ipsec-tools.conf", "/etc/ipsec-tools.d", "/etc/default/setkey" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_ironic.py0000644000175000017500000000606212625313247023707 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc., Lee Yarwood # 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 OpenStackIronic(Plugin): """OpenStack Ironic """ plugin_name = "openstack_ironic" profiles = ('openstack', 'openstack_undercloud') def setup(self): self.conf_list = ['/etc/ironic/*'] self.add_copy_spec('/etc/ironic/') self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/ironic/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/ironic/*.log", sizelimit=self.limit) self.add_cmd_output('ls -laRt /var/lib/ironic/') def postproc(self): protect_keys = [ "dns_passkey", "memcache_secret_key", "rabbit_password", "password", "qpid_password", "connection", "sql_connection", "admin_password", "ssl_key_password", "os_password" ] regexp = r"((?m)^\s*#*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) for conf in self.conf_list: self.do_path_regex_sub(conf, regexp, r"\1*********") class DebianIronic(OpenStackIronic, DebianPlugin, UbuntuPlugin): packages = [ 'ironic-api', 'ironic-common', 'ironic-conductor', ] def setup(self): super(DebianIronic, self).setup() class RedHatIronic(OpenStackIronic, RedHatPlugin): packages = [ 'openstack-ironic-api', 'openstack-ironic-common', 'openstack-ironic-conductor', ] discoverd_packages = [ 'openstack-ironic-discoverd', 'openstack-ironic-discoverd-ramdisk' ] def setup(self): super(RedHatIronic, self).setup() # is the optional ironic-discoverd service installed? if any([self.is_installed(p) for p in self.discoverd_packages]): self.conf_list.append('/etc/ironic-discoverd/*') self.add_copy_spec('/etc/ironic-discoverd/') self.add_copy_spec('/var/lib/ironic-discoverd/') self.add_copy_spec('/var/log/ironic-discoverd/') self.add_cmd_output('journalctl -u openstack-ironic-discoverd') self.add_cmd_output('journalctl ' '-u openstack-ironic-discoverd-dnsmasq') # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/systemtap.py0000644000175000017500000000234112625313241022374 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Eugene Teo # 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 SystemTap(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """SystemTap dynamic instrumentation """ plugin_name = 'systemtap' profiles = ('debug', 'performance') files = ('stap',) packages = ('systemtap', 'systemtap-runtime') def setup(self): self.add_cmd_output([ "stap -V 2", "uname -r", "stap-report" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/infiniband.py0000644000175000017500000000314112625313241022443 0ustar cariboucaribou# Copyright (C) 2011, 2012 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Infiniband(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Infiniband data """ plugin_name = 'infiniband' profiles = ('hardware',) packages = ('libibverbs-utils', 'opensm', 'rdma', 'infiniband-diags') def setup(self): self.add_copy_spec([ "/etc/ofed/openib.conf", "/etc/ofed/opensm.conf", "/etc/rdma" ]) self.add_copy_spec_limit("/var/log/opensm*", sizelimit=self.get_option("log_size")) self.add_cmd_output([ "ibv_devices", "ibv_devinfo", "ibstat", "ibstatus", "ibhosts", "iblinkinfo", "sminfo", "perfquery" ]) return # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/nfs.py0000644000175000017500000000227212625313241021134 0ustar cariboucaribou# 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): """Network file system information """ plugin_name = 'nfs' profiles = ('storage', 'network', 'nfs') packages = ['nfs-utils'] def setup(self): self.add_copy_spec([ "/etc/nfsmount.conf", "/etc/idmapd.conf", "/proc/fs/nfsfs/servers", "/proc/fs/nfsfs/volumes" ]) return # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/xfs.py0000644000175000017500000000307012625313241021143 0ustar cariboucaribou# 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 from six.moves import zip class Xfs(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """XFS filesystem """ plugin_name = 'xfs' profiles = ('storage',) 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 zip(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 zip(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])) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/krb5.py0000644000175000017500000000224312625313241021207 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Krb5(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Kerberos authentication """ plugin_name = 'krb5' profiles = ('identity', 'system') packages = ('krb5-libs', 'krb5-user') def setup(self): self.add_copy_spec("/etc/krb5.conf") self.add_cmd_output("klist -ket /etc/krb5.keytab") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/samba.py0000644000175000017500000000272412625313241021433 0ustar cariboucaribou# 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 Samba(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Samba Windows interoperability """ packages = ('samba-common',) plugin_name = "samba" profiles = ('services',) def setup(self): self.add_copy_spec([ "/etc/samba/smb.conf", "/etc/samba/lmhosts", "/var/log/samba/log.smbd", "/var/log/samba/log.nmbd" ]) self.add_cmd_output([ "wbinfo --domain='.' -g", "wbinfo --domain='.' -u", "testparm -s -v" ]) class RedHatSamba(Samba, RedHatPlugin): def setup(self): super(RedHatSamba, self).setup() self.add_copy_spec("/etc/sysconfig/samba") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/kernelrt.py0000644000175000017500000000306312625313241022173 0ustar cariboucaribou# -*- python -*- # -*- coding: utf-8 -*- # # Copyright 2012 Red Hat Inc. # Guy Streeter # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; version 2. # # This application is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. from sos.plugins import Plugin, RedHatPlugin class KernelRT(Plugin, RedHatPlugin): '''Realtime kernel variant ''' plugin_name = 'kernelrt' profiles = ('system', 'hardware', 'kernel', 'mrg') # this file exists only when the realtime kernel is booted # this plugin will not be called is this file does not exist files = ('/sys/kernel/realtime',) def setup(self): clocksource_path = '/sys/devices/system/clocksource/clocksource0/' self.add_copy_spec([ '/etc/rtgroups', '/proc/sys/kernel/sched_rt_period_us', '/proc/sys/kernel/sched_rt_runtime_us', '/sys/kernel/realtime', clocksource_path + 'available_clocksource', clocksource_path + 'current_clocksource' ]) # note: rhbz#1059685 'tuna - NameError: global name 'cgroups' is not # defined this command throws an exception on versions prior to # 0.10.4-5. self.add_cmd_output('tuna -CP') # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/xen.py0000644000175000017500000000755012625313241021144 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os import re from stat import * class Xen(Plugin, RedHatPlugin): """Xen virtualization """ plugin_name = 'xen' profiles = ('virt',) def determine_xen_host(self): if os.access("/proc/acpi/dsdt", os.R_OK): result = self.call_ext_prog("grep -qi xen /proc/acpi/dsdt") if result['status'] == 0: return "hvm" if os.access("/proc/xen/capabilities", os.R_OK): result = self.call_ext_prog( "grep -q control_d /proc/xen/capabilities") if result['status'] == 0: return "dom0" else: return "domU" return "baremetal" def check_enabled(self): return (self.determine_xen_host() == "baremetal") def is_running_xenstored(self): xs_pid = self.call_ext_prof("pidof xenstored")['ouput'] xs_pidnum = re.split('\n$', xs_pid)[0] return xs_pidnum.isdigit() def dom_collect_proc(self): self.add_copy_spec([ "/proc/xen/balloon", "/proc/xen/capabilities", "/proc/xen/xsd_kva", "/proc/xen/xsd_port"]) # determine if CPU has PAE support self.add_cmd_output("grep pae /proc/cpuinfo") # determine if CPU has Intel-VT or AMD-V support self.add_cmd_output("egrep -e 'vmx|svm' /proc/cpuinfo") def setup(self): host_type = self.determine_xen_host() if host_type == "domU": # we should collect /proc/xen and /sys/hypervisor self.dom_collect_proc() # determine if hardware virtualization support is enabled # in BIOS: /sys/hypervisor/properties/capabilities self.add_copy_spec("/sys/hypervisor") elif host_type == "hvm": # what do we collect here??? pass elif host_type == "dom0": # default of dom0, collect lots of system information self.add_copy_spec([ "/var/log/xen", "/etc/xen", "/sys/hypervisor/version", "/sys/hypervisor/compilation", "/sys/hypervisor/properties", "/sys/hypervisor/type"]) self.add_cmd_output([ "xm dmesg", "xm info", "xm list", "xm list --long", "brctl show" ]) self.dom_collect_proc() if self.is_running_xenstored(): self.add_copy_spec("/sys/hypervisor/uuid") self.add_cmd_output("xenstore-ls") else: # we need tdb instead of xenstore-ls if cannot get it. self.add_copy_spec("/var/lib/xenstored/tdb") # FIXME: we *might* want to collect things in /sys/bus/xen*, # /sys/class/xen*, /sys/devices/xen*, /sys/modules/blk*, # /sys/modules/net*, but I've never heard of them actually being # useful, so I'll leave it out for now else: # for bare-metal, we don't have to do anything special return # USEFUL self.add_custom_text("Xen hostType: "+host_type) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/lvm2.py0000644000175000017500000000576412625313241021237 0ustar cariboucaribou# 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 Lvm2(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """LVM2 volume manager """ plugin_name = 'lvm2' profiles = ('storage',) option_list = [("lvmdump", 'collect an lvmdump tarball', 'fast', False), ("lvmdump-am", 'attempt to collect an lvmdump with ' 'advanced options and raw metadata collection', 'slow', False)] def do_lvmdump(self, metadata=False): """Collects an lvmdump in standard format with optional metadata archives for each physical volume present. """ lvmdump_cmd = "lvmdump %s -d '%s'" lvmdump_opts = "" if metadata: lvmdump_opts = "-a -m" cmd = lvmdump_cmd % (lvmdump_opts, self.get_cmd_output_path(name="lvmdump")) self.add_cmd_output(cmd, chroot=self.tmp_in_sysroot()) def setup(self): # use locking_type 0 (no locks) when running LVM2 commands, # from lvm.conf: # Turn locking off by setting to 0 (dangerous: risks metadata # corruption if LVM2 commands get run concurrently). # None of the commands issued by sos ever modify metadata and this # avoids the possibility of hanging lvm commands when another process # or node holds a conflicting lock. lvm_opts = '--config="global{locking_type=0}"' self.add_cmd_output( "vgdisplay -vv %s" % lvm_opts, root_symlink="vgdisplay" ) pvs_cols = 'pv_mda_free,pv_mda_size,pv_mda_count,pv_mda_used_count' pvs_cols = pvs_cols + ',' + 'pe_start' vgs_cols = 'vg_mda_count,vg_mda_free,vg_mda_size,vg_mda_used_count' vgs_cols = vgs_cols + ',' + 'vg_tags' lvs_cols = 'lv_tags,devices' self.add_cmd_output([ "vgscan -vvv %s" % lvm_opts, "pvscan -v %s" % lvm_opts, "pvs -a -v -o +%s %s" % (pvs_cols, lvm_opts), "vgs -v -o +%s %s" % (vgs_cols, lvm_opts), "lvs -a -o +%s %s" % (lvs_cols, lvm_opts) ]) self.add_copy_spec("/etc/lvm") if self.get_option('lvmdump'): self.do_lvmdump() elif self.get_option('lvmdump-am'): self.do_lvmdump(metadata=True) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/iscsi.py0000644000175000017500000000263312625313241021461 0ustar cariboucaribou# Copyright (C) 2007-2012 Red Hat, Inc., Ben Turner # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class Iscsi(Plugin): """iSCSI initiator """ plugin_name = "iscsi" profiles = ('storage',) class RedHatIscsi(Iscsi, RedHatPlugin): packages = ('iscsi-initiator-utils',) def setup(self): super(RedHatIscsi, self).setup() self.add_copy_spec([ "/etc/iscsi/iscsid.conf", "/etc/iscsi/initiatorname.iscsi", "/var/lib/iscsi" ]) self.add_cmd_output([ "iscsiadm -m session -P 3", "iscsiadm -m node -P 1", "iscsiadm -m iface -P 1", "iscsiadm -m node --op=show" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ntp.py0000644000175000017500000000276612625313241021157 0ustar cariboucaribou# 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 Ntp(Plugin): """Network time protocol """ plugin_name = "ntp" profiles = ('system', 'services') packages = ('ntp',) def setup(self): self.add_copy_spec([ "/etc/ntp.conf", "/etc/ntp/step-tickers", "/etc/ntp/ntpservers" ]) self.add_cmd_output([ "ntptime", "ntpq -p" ]) class RedHatNtp(Ntp, RedHatPlugin): def setup(self): super(RedHatNtp, self).setup() self.add_copy_spec("/etc/sysconfig/ntpd") self.add_cmd_output("ntpstat") class DebianNtp(Ntp, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianNtp, self).setup() self.add_copy_spec('/etc/default/ntp') # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/numa.py0000644000175000017500000000276612625313241021316 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Numa(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """NUMA state and configuration """ plugin_name = 'numa' profiles = ('hardware', 'system', 'memory', 'performance') packages = ('numad', 'numactl') def setup(self): self.add_copy_spec([ "/etc/numad.conf", "/etc/logrotate.d/numad" ]) self.add_copy_spec_limit( "/var/log/numad.log*", sizelimit=self.get_option("log_size") ) self.add_cmd_output([ "numastat", "numastat -m", "numastat -n", "numactl --show", "numactl --hardware", ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/kvm.py0000644000175000017500000000405112625313241021140 0ustar cariboucaribou# Copyright (C) 2009 Red Hat, Inc., Joey Boggs # 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 class Kvm(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Kernel virtual machine """ plugin_name = 'kvm' profiles = ('system', 'virt') debugfs_path = "/sys/kernel/debug" _debugfs_cleanup = False def check_enabled(self): return os.access("/sys/module/kvm", os.R_OK) def setup(self): self.add_copy_spec([ "/sys/module/kvm/srcversion", "/sys/module/kvm_intel/srcversion", "/sys/module/kvm_amd/srcversion", "/sys/module/ksm/srcversion" ]) if not os.path.ismount(self.debugfs_path): self._debugfs_cleanup = True r = self.call_ext_prog("mount -t debugfs debugfs %s" % self.debugfs_path) if r['status'] != 0: self._log_error("debugfs not mounted and mount attempt failed") self._debugfs_cleanup = False return self.add_cmd_output("kvm_stat --once") def postproc(self): if self._debugfs_cleanup and os.path.ismount(self.debugfs_path): self.call_ext_prog("umount %s" % self.debugfs_path) self._log_error("could not unmount %s" % self.debugfs_path) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/sssd.py0000644000175000017500000000307712625313241021326 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Pierre Carrier # 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 Sssd(Plugin): """System security service daemon """ plugin_name = "sssd" profiles = ('services', 'security', 'identity') packages = ('sssd',) def setup(self): self.add_copy_spec([ "/etc/sssd/sssd.conf", "/var/log/sssd/*" ]) def postproc(self): self.do_file_sub("/etc/sssd/sssd.conf", r"(\s*ldap_default_authtok\s*=\s*)\S+", r"\1********") class RedHatSssd(Sssd, RedHatPlugin): def setup(self): super(RedHatSssd, self).setup() class DebianSssd(Sssd, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianSssd, self).setup() self.add_copy_spec("/etc/default/sssd") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/kpatch.py0000644000175000017500000000253012625313241021615 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import re class Kpatch(Plugin, RedHatPlugin): """Kpatch information """ plugin_name = 'kpatch' packages = ('kpatch',) def setup(self): kpatch_list = self.get_cmd_output_now("kpatch list") if not kpatch_list: return kpatches = open(kpatch_list, "r").read().splitlines() for patch in kpatches: if not re.match("^kpatch-.*\(.*\)", patch): continue (module, version) = patch.split() self.add_cmd_output("kpatch info " + module) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/sendmail.py0000644000175000017500000000305512625313241022142 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Eugene Teo # 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 Sendmail(Plugin): """sendmail service """ plugin_name = "sendmail" profiles = ('services', 'mail') packages = ('sendmail',) class RedHatSendmail(Sendmail, RedHatPlugin): files = ('/etc/rc.d/init.d/sendmail',) packages = ('sendmail',) def setup(self): super(RedHatSendmail, self).setup() self.add_copy_spec([ "/etc/mail/*", "/var/log/maillog" ]) class DebianSendmail(Sendmail, DebianPlugin, UbuntuPlugin): files = ('/etc/init.d/sendmail',) packages = ('sendmail',) def setup(self): super(DebianSendmail, self).setup() self.add_copy_spec([ "/etc/mail/*", "/var/log/mail.*" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/virsh.py0000644000175000017500000000340012625313241021473 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin import glob import os class LibvirtClient(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """client for libvirt virtualization API """ plugin_name = 'virsh' profiles = ('system', 'virt') packages = ('libvirt-client') def setup(self): # virt-manager logs if not self.get_option("all_logs"): self.add_copy_spec_limit("/root/.virt-manager/*", sizelimit=5) else: self.add_copy_spec("/root/.virt-manager/*") # get lit of VMs/domains domains_file = self.get_cmd_output_now('virsh list --all') # cycle through the VMs/domains list, ignore 2 header lines and latest # empty line, and dumpxml domain name in 2nd column if domains_file: domains_lines = open(domains_file, "r").read().splitlines()[2:] for domain in filter(lambda x: x, domains_lines): self.add_cmd_output("virsh -r dumpxml %s" % domain.split()[1], timeout=180) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/system.py0000644000175000017500000000225612625313241021674 0ustar cariboucaribou# 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 System(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """core system information """ plugin_name = "system" profiles = ('system', 'kernel') def setup(self): self.add_copy_spec("/proc/sys") self.add_forbidden_path( "/proc/sys/net/ipv6/neigh/*/retrans_time") self.add_forbidden_path( "/proc/sys/net/ipv6/neigh/*/base_reachable_time") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_cinder.py0000644000175000017500000000720112625313247023664 0ustar cariboucaribou# Copyright (C) 2009 Red Hat, Inc., Joey Boggs # Copyright (C) 2012 Rackspace US, Inc., # Justin Shepherd # Copyright (C) 2013 Red Hat, Inc., Flavio Percoco # Copyright (C) 2013 Red Hat, Inc., Jeremy Agee # 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 OpenStackCinder(Plugin): """OpenStack cinder """ plugin_name = "openstack_cinder" profiles = ('openstack', 'openstack_controller') option_list = [("db", "gathers openstack cinder db version", "slow", False)] def setup(self): if self.get_option("db"): self.add_cmd_output( "cinder-manage db version", suggest_filename="cinder_db_version") self.add_copy_spec(["/etc/cinder/"]) self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/cinder/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/cinder/*.log", sizelimit=self.limit) def postproc(self): protect_keys = [ "admin_password", "backup_tsm_password", "chap_password", "nas_password", "cisco_fc_fabric_password", "coraid_password", "eqlx_chap_password", "fc_fabric_password", "hitachi_auth_password", "hitachi_horcm_password", "hp3par_password", "hplefthand_password", "memcache_secret_key", "netapp_password", "netapp_sa_password", "nexenta_password", "password", "qpid_password", "rabbit_password", "san_password", "ssl_key_password", "vmware_host_password", "zadara_password", "zfssa_initiator_password", "connection", "zfssa_target_password", "os_privileged_user_password", "hmac_keys" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/cinder/*", regexp, r"\1*********") class DebianCinder(OpenStackCinder, DebianPlugin, UbuntuPlugin): cinder = False packages = ( 'cinder-api', 'cinder-backup', 'cinder-common', 'cinder-scheduler', 'cinder-volume', 'python-cinder', 'python-cinderclient' ) def check_enabled(self): self.cinder = self.is_installed("cinder-common") return self.cinder def setup(self): super(DebianCinder, self).setup() class RedHatCinder(OpenStackCinder, RedHatPlugin): cinder = False packages = ('openstack-cinder', 'python-cinder', 'python-cinderclient') def check_enabled(self): self.cinder = self.is_installed("openstack-cinder") return self.cinder def setup(self): super(RedHatCinder, self).setup() self.add_copy_spec(["/etc/sudoers.d/cinder"]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/unity.py0000644000175000017500000000200412625313241021507 0ustar cariboucaribou# 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, UbuntuPlugin class unity(Plugin, UbuntuPlugin): """Unity """ plugin_name = 'unity' profiles = ('hardware', 'desktop') packages = ( 'nux-tools', 'unity' ) def setup(self): self.add_cmd_output("/usr/lib/nux/unity_support_test -p") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/atomichost.py0000644000175000017500000000315412625313241022520 0ustar cariboucaribou# Copyright (C) 2015 Red Hat, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os.path class AtomicHost(Plugin, RedHatPlugin): """ Atomic Host """ plugin_name = "atomichost" option_list = [("info", "gather atomic info for each image", "fast", False)] def check_enabled(self): if not os.path.exists("/host/etc/system-release-cpe"): return False cpe = open("/host/etc/system-release-cpe", "r").readlines() return ':atomic-host' in cpe[0] def setup(self): self.add_copy_spec("/etc/ostree/remotes.d") self.add_cmd_output("atomic host status") if self.get_option('info'): images = self.get_command_output("docker images -q") for image in set( images['output'].splitlines() ): if image: self.add_cmd_output("atomic info {0}".format(image)) sosreport-3.2+git276-g7da50d6/sos/plugins/multipath.py0000644000175000017500000000226612625313241022360 0ustar cariboucaribou# 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 Multipath(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Device-mapper multipath tools """ plugin_name = 'multipath' profiles = ('system', 'storage', 'hardware') def setup(self): self.add_copy_spec([ "/etc/multipath/", "/etc/multipath.conf" ]) self.add_cmd_output([ "multipath -l", "multipath -v4 -ll" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/hardware.py0000644000175000017500000000235412625313241022144 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin class Hardware(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """General hardware information """ plugin_name = "hardware" profiles = ('system', 'hardware') def setup(self): self.add_copy_spec([ "/proc/interrupts", "/proc/irq", "/proc/dma", "/proc/devices", "/proc/rtc", "/var/log/mcelog" ]) self.add_cmd_output("dmidecode", root_symlink="dmidecode") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openvswitch.py0000644000175000017500000000423412625313241022717 0ustar cariboucaribou# Copyright (C) 2014 Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class OpenVSwitch(Plugin): """ OpenVSwitch networking """ plugin_name = "openvswitch" profiles = ('network', 'virt') def setup(self): self.add_copy_spec([ "/var/log/openvswitch/ovs-vswitchd.log", "/var/log/openvswitch/ovsdb-server.log" ]) self.add_cmd_output([ # The '-s' option enables dumping of packet counters on the # ports. "ovs-dpctl -s show", # The '-t 5' adds an upper bound on how long to wait to connect # to the Open vSwitch server, avoiding hangs when running sos. "ovs-vsctl -t 5 show", # Gather the database. "ovsdb-client dump" ]) # Gather additional output for each OVS bridge on the host. br_list_result = self.call_ext_prog("ovs-vsctl list-br") if br_list_result['status'] == 0: for br in br_list_result['output'].splitlines(): self.add_cmd_output([ "ovs-ofctl show %s" % br, "ovs-ofctl dump-flows %s" % br, "ovs-appctl fdb/show %s" % br ]) class RedHatOpenVSwitch(OpenVSwitch, RedHatPlugin): packages = ('openvswitch',) class DebianOpenVSwitch(OpenVSwitch, DebianPlugin, UbuntuPlugin): packages = ('openvswitch-switch',) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/teamd.py0000644000175000017500000000361312625313241021440 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Teamd(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Network interface teaming """ plugin_name = 'teamd' profiles = ('network', 'hardware', ) packages = ('teamd',) def _get_team_interfaces(self): teams = [] ip_result = self.get_command_output("ip -o link") if ip_result['status'] != 0: return teams for line in ip_result['output'].splitlines(): fields = line.split() if fields[1][0:4] == 'team': teams.append(fields[1][:-1]) return teams def setup(self): self.add_copy_spec([ "/etc/dbus-1/system.d/teamd.conf", "/usr/lib/systemd/system/teamd@.service" ]) teams = self._get_team_interfaces() for team in teams: self.add_cmd_output([ "teamdctl %s state" % team, "teamdctl %s state dump" % team, "teamdctl %s config dump" % team, "teamnl %s option" % team, "teamnl %s ports" % team ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/keepalived.py0000644000175000017500000000222112625313241022451 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class Keepalived(Plugin, RedHatPlugin): """Keepalived routing server """ plugin_name = 'keepalived' profiles = ('webserver', 'network', 'cluster') packages = ('keepalived',) def setup(self): self.add_copy_spec([ "/etc/keepalived/keepalived.conf", "/etc/sysconfig/keepalived" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/grub.py0000644000175000017500000000251712625313241021307 0ustar cariboucaribou# 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 Grub(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """GRUB bootloader """ plugin_name = 'grub' profiles = ('boot',) packages = ('grub',) def setup(self): self.add_copy_spec([ "/boot/efi/EFI/*/grub.conf", "/boot/grub/grub.conf", "/boot/grub/device.map", "/etc/grub.conf", "/etc/grub.d" ]) def postproc(self): self.do_path_regex_sub( r".*\/grub.conf", r"(password\s*)(--md5\s*|\s*)(.*)", r"\1\2********" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openswan.py0000644000175000017500000000306212625313241022176 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 Openswan(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Openswan IPsec """ plugin_name = 'openswan' profiles = ('network', 'security') option_list = [("ipsec-barf", "collect the output of the ipsec barf command", "slow", False)] files = ('/etc/ipsec.conf',) packages = ('openswan',) def setup(self): self.add_copy_spec([ "/etc/ipsec.conf", "/etc/ipsec.d" ]) # although this is 'verification' it's normally a very quick # operation so is not conditional on --verify self.add_cmd_output("ipsec verify") if self.get_option("ipsec-barf"): self.add_cmd_output("ipsec barf") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/i18n.py0000644000175000017500000000212412625313241021121 0ustar cariboucaribou# 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 I18n(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Internationalization """ plugin_name = 'i18n' profiles = ('system',) def setup(self): self.add_copy_spec([ "/etc/X11/xinit/xinput.d/*", "/etc/locale.conf" ]) self.add_cmd_output("locale") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ptp.py0000644000175000017500000000224412625313241021150 0ustar cariboucaribou# Copyright (C) 2015 Pavel Moravec # 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 Ptp(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Precision time protocol """ plugin_name = "ptp" profiles = ('system', 'services') packages = ('linuxptp',) def setup(self): self.add_copy_spec([ "/etc/ptp4l.conf", "/etc/timemaster.conf", "/sys/class/ptp" ]) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/corosync.py0000644000175000017500000000373012625313241022205 0ustar cariboucaribou# 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 Corosync(Plugin): """ Corosync cluster engine """ plugin_name = "corosync" profiles = ('cluster',) packages = ('corosync',) def setup(self): self.add_copy_spec([ "/etc/corosync", "/var/lib/corosync/fdata", "/var/log/cluster/corosync.log" ]) self.add_cmd_output([ "corosync-quorumtool -l", "corosync-quorumtool -s", "corosync-cpgtool", "corosync-objctl -a", "corosync-cfgtool -s", "corosync-fplay", "corosync-objctl -w runtime.blackbox.dump_state=$(date +\%s)", "corosync-objctl -w runtime.blackbox.dump_flight_data=$(date +\%s)" ]) self.call_ext_prog("killall -USR2 corosync") def postproc(self): self.do_cmd_output_sub( "corosync-objctl", r"(.*fence.*\.passwd=)(.*)", r"\1******" ) class RedHatCorosync(Corosync, RedHatPlugin): def setup(self): super(RedHatCorosync, self).setup() class DebianCorosync(Corosync, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianCorosync, self).setup() files = ('/usr/sbin/corosync',) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openssl.py0000644000175000017500000000352712625313241022035 0ustar cariboucaribou# Copyright (C) 2007 Sadique Puthen # 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 OpenSSL(Plugin): """OpenSSL configuration """ plugin_name = "openssl" profiles = ('network', 'security') packages = ('openssl',) def postproc(self): protect_keys = [ "input_password", "output_password", "challengePassword" ] regexp = r"(?m)^(\s*#?\s*(%s).*=)(.*)" % "|".join(protect_keys) self.do_file_sub( '/etc/ssl/openssl.cnf', regexp, r"\1 ******" ) class RedHatOpenSSL(OpenSSL, RedHatPlugin): """openssl related information """ files = ('/etc/pki/tls/openssl.cnf',) def setup(self): super(RedHatOpenSSL, self).setup() self.add_copy_spec("/etc/pki/tls/openssl.cnf") class DebianOpenSSL(OpenSSL, DebianPlugin, UbuntuPlugin): """openssl related information for Debian distributions """ files = ('/etc/ssl/openssl.cnf',) def setup(self): super(DebianOpenSSL, self).setup() self.add_copy_spec("/etc/ssl/openssl.cnf") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/foreman.py0000644000175000017500000000233412625313241021774 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Lukas Zapletal # 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 class Foreman(Plugin, RedHatPlugin): """Foreman/Satellite 6 systems management """ plugin_name = 'foreman' profiles = ('sysmgmt',) packages = ('foreman-debug') def setup(self): cmd = "foreman-debug" path = self.get_cmd_output_path(name="foreman-debug") self.add_cmd_output("%s -g -q -a -d %s" % (cmd, path), chroot=self.tmp_in_sysroot()) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/symcli.py0000644000175000017500000000737612625313241021660 0ustar cariboucaribou# Copyright (C) 2008 EMC Corporation. Keith Kearnan # Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # 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, os from sos.utilities import is_executable class Symcli(Plugin, RedHatPlugin): """ EMC Symcli """ plugin_name = 'symcli' profiles = ('storage', 'hardware') def get_symcli_files(self): """ EMC Solutions Enabler SYMCLI specific information - files """ self.add_copy_spec([ "/var/symapi/db/symapi_db.bin", "/var/symapi/config/[a-z]*", "/var/symapi/log/[a-z]*" ]) def get_symcli_config(self): """ EMC Solutions Enabler SYMCLI specific information - Symmetrix/DMX - commands """ self.add_cmd_output([ "/usr/symcli/bin/symcli -def", "/usr/symcli/bin/symdg list", "/usr/symcli/bin/symdg -v list", "/usr/symcli/bin/symcg list", "/usr/symcli/bin/symcg -v list", "/usr/symcli/bin/symcfg list", "/usr/symcli/bin/symcfg -v list", "/usr/symcli/bin/symcfg -db", "/usr/symcli/bin/symcfg -semaphores list", "/usr/symcli/bin/symcfg -dir all -v list", "/usr/symcli/bin/symcfg -connections list", "/usr/symcli/bin/symcfg -app -v list", "/usr/symcli/bin/symcfg -fa all -port list", "/usr/symcli/bin/symcfg -ra all -port list", "/usr/symcli/bin/symcfg -sa all -port list", "/usr/symcli/bin/symcfg list -lock", "/usr/symcli/bin/symcfg list -lockn all", "/usr/symcli/bin/syminq", "/usr/symcli/bin/syminq -v", "/usr/symcli/bin/syminq -symmids", "/usr/symcli/bin/syminq hba -fibre", "/usr/symcli/bin/syminq hba -scsi", "/usr/symcli/bin/symhost show -config", "/usr/symcli/bin/stordaemon list", "/usr/symcli/bin/stordaemon -v list", "/usr/symcli/bin/sympd list", "/usr/symcli/bin/sympd list -vcm", "/usr/symcli/bin/symdev list", "/usr/symcli/bin/symdev -v list", "/usr/symcli/bin/symdev -rdfa list", "/usr/symcli/bin/symdev -rdfa -v list", "/usr/symcli/bin/symbcv list", "/usr/symcli/bin/symbcv -v list", "/usr/symcli/bin/symrdf list", "/usr/symcli/bin/symrdf -v list", "/usr/symcli/bin/symrdf -rdfa list", "/usr/symcli/bin/symrdf -rdfa -v list", "/usr/symcli/bin/symsnap list", "/usr/symcli/bin/symsnap list -savedevs", "/usr/symcli/bin/symclone list", "/usr/symcli/bin/symevent list", "/usr/symcli/bin/symmask list hba", "/usr/symcli/bin/symmask list logins", "/usr/symcli/bin/symmaskdb list database", "/usr/symcli/bin/symmaskdb -v list database" ]) def check_enabled(self): return is_executable("/usr/symcli/bin/symcli") def setup(self): self.get_symcli_files() self.get_symcli_config() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/last.py0000644000175000017500000000217112625313241021307 0ustar cariboucaribou# 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 Last(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """login information """ plugin_name = 'last' profiles = ('system',) def setup(self): self.add_cmd_output("last", root_symlink="last") self.add_cmd_output([ "last reboot", "last shutdown", "lastlog" ]) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/vmware.py0000644000175000017500000000216612625313241021651 0ustar cariboucaribou# 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 class VMWare(Plugin, RedHatPlugin): """VMWare client information """ plugin_name = 'vmware' profiles = ('virt',) files = ('vmware', '/usr/init.d/vmware-tools') def setup(self): self.add_cmd_output("vmware -v") self.add_copy_spec([ "/etc/vmware/locations", "/etc/vmware/config", "/proc/vmmemctl" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_glance.py0000644000175000017500000000471212625313247023655 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Flavio Percoco # Copyright (C) 2012 Rackspace US, Inc., # Justin Shepherd # Copyright (C) 2009 Red Hat, Inc., Joey Boggs # 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 OpenStackGlance(Plugin): """OpenStack Glance""" plugin_name = "openstack_glance" profiles = ('openstack', 'openstack_controller') option_list = [] def setup(self): # Glance self.add_cmd_output( "glance-manage db_version", suggest_filename="glance_db_version" ) self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/glance/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/glance/*.log", sizelimit=self.limit) self.add_copy_spec("/etc/glance/") def postproc(self): protect_keys = [ "admin_password", "password", "qpid_password", "rabbit_password", "s3_store_secret_key", "ssl_key_password", "connection", "vmware_server_password" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/glance/*", regexp, r"\1*********") class DebianGlance(OpenStackGlance, DebianPlugin, UbuntuPlugin): packages = ( 'glance', 'glance-api', 'glance-client', 'glance-common', 'glance-registry', 'python-glance' ) class RedHatGlance(OpenStackGlance, RedHatPlugin): packages = ( 'openstack-glance', 'python-glanceclient' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/s390.py0000644000175000017500000000451512625313241021046 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Justin Payne # 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 class S390(Plugin, RedHatPlugin): """IBM S/390 """ plugin_name = 's390' profiles = ('system', 'hardware') # Check for s390 arch goes here def check_enabled(self): return (self.policy().get_arch() == "s390") # Gather s390 specific information def setup(self): self.add_copy_spec([ "/proc/cio_ignore", "/proc/crypto", "/proc/dasd/devices", "/proc/dasd/statistics", "/proc/qeth", "/proc/qeth_perf", "/proc/qeth_ipa_takeover", "/proc/sys/appldata/*", "/proc/sys/kernel/hz_timer", "/proc/sysinfo", "/sys/bus/ccwgroup/drivers/qeth/0.*/*", "/sys/bus/ccw/drivers/zfcp/0.*/*", "/sys/bus/ccw/drivers/zfcp/0.*/0x*/*", "/sys/bus/ccw/drivers/zfcp/0.*/0x*/0x*/*", "/etc/zipl.conf", "/etc/zfcp.conf", "/etc/sysconfig/dumpconf", "/etc/src_vipa.conf", "/etc/ccwgroup.conf", "/etc/chandev.conf"]) self.add_cmd_output([ "lscss", "lsdasd", "lstape", "find /proc/s390dbf -type f", "qethconf list_all", "lsqeth", "lszfcp" ]) r = self.call_ext_prog("ls /dev/dasd?") dasd_dev = r['output'] for x in dasd_dev.split('\n'): self.add_cmd_output([ "dasdview -x -i -j -l -f %s" % (x,), "fdasd -p %s" % (x,) ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_swift.py0000644000175000017500000000515512625313247023562 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Flavio Percoco # Copyright (C) 2012 Rackspace US, Inc., # Justin Shepherd # Copyright (C) 2009 Red Hat, Inc., Joey Boggs # 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 OpenStackSwift(Plugin): """OpenStack Swift""" plugin_name = "openstack_swift" profiles = ('openstack', 'openstack_controller') option_list = [] def setup(self): self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/swift/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/swift/*.log", sizelimit=self.limit) self.add_copy_spec("/etc/swift/") def postproc(self): protect_keys = [ "ldap_dns_password", "neutron_admin_password", "rabbit_password", "qpid_password", "powervm_mgr_passwd", "virtual_power_host_pass", "xenapi_connection_password", "password", "host_password", "vnc_password", "connection", "sql_connection", "admin_password" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/swift/.*\.conf.*", regexp, r"\1*********") class DebianSwift(OpenStackSwift, DebianPlugin, UbuntuPlugin): packages = ( 'swift', 'swift-account', 'swift-container', 'swift-object', 'swift-proxy', 'swauth', 'python-swift', 'python-swauth' ) class RedHatSwift(OpenStackSwift, RedHatPlugin): packages = ( 'openstack-swift', 'openstack-swift-account', 'openstack-swift-container', 'openstack-swift-object', 'openstack-swift-proxy', 'swift', 'python-swiftclient' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/satellite.py0000644000175000017500000000601112625313241022327 0ustar cariboucaribou# 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 class Satellite(Plugin, RedHatPlugin): """RHN Satellite and Spacewalk """ plugin_name = 'satellite' profiles = ('sysmgmt',) satellite = False proxy = False option_list = [("log", 'gathers all apache logs', 'slow', False)] def rhn_package_check(self): self.satellite = self.is_installed("rhns-satellite-tools") \ or self.is_installed("spacewalk-java") \ or self.is_installed("rhn-base") self.proxy = self.is_installed("rhns-proxy-tools") \ or self.is_installed("spacewalk-proxy-management") \ or self.is_installed("rhn-proxy-management") return self.satellite or self.proxy def check_enabled(self): # enable if any related package is installed return self.rhn_package_check() def setup(self): self.rhn_package_check() self.add_copy_spec([ "/etc/httpd/conf*", "/etc/rhn", "/var/log/rhn*" ]) if self.get_option("log"): self.add_copy_spec("/var/log/httpd") # all these used to go in $DIR/mon-logs/ self.add_copy_spec([ "/opt/notification/var/*.log*", "/var/tmp/ack_handler.log*", "/var/tmp/enqueue.log*" ]) # monitoring scout logs self.add_copy_spec([ "/home/nocpulse/var/*.log*", "/home/nocpulse/var/commands/*.log*", "/var/tmp/ack_handler.log*", "/var/tmp/enqueue.log*", "/var/log/nocpulse/*.log*", "/var/log/notification/*.log*", "/var/log/nocpulse/TSDBLocalQueue/TSDBLocalQueue.log" ]) self.add_copy_spec("/root/ssl-build") self.add_cmd_output("rhn-schema-version", root_symlink="database-schema-version") self.add_cmd_output("rhn-charsets", root_symlink="database-character-sets") if self.satellite: self.add_copy_spec([ "/etc/tnsnames.ora", "/etc/jabberd" ]) self.add_cmd_output( "spacewalk-debug --dir %s" % self.get_cmd_output_path(name="spacewalk-debug")) if self.proxy: self.add_copy_spec(["/etc/squid", "/var/log/squid"]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/dbus.py0000644000175000017500000000204112625313241021275 0ustar cariboucaribou# 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 Dbus(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """D-Bus message bus""" plugin_name = "dbus" profiles = ('system',) def setup(self): self.add_copy_spec([ "/etc/dbus-1", "/var/lib/dbus/machine-id" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/autofs.py0000644000175000017500000000440112625313241021643 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin class Autofs(Plugin): """Autofs on-demand automounter """ plugin_name = "autofs" profiles = ('storage', 'nfs') files = ('/etc/sysconfig/autofs', '/etc/default/autofs') packages = ('autofs',) def checkdebug(self): """ testing if autofs debug has been enabled anywhere """ # Global debugging opt = self.file_grep(r"^(DEFAULT_LOGGING|DAEMONOPTIONS)=(.*)", *self.files) for opt1 in opt: for opt2 in opt1.split(" "): if opt2 in ("--debug", "debug"): return True return False def getdaemondebug(self): """ capture daemon debug output """ debugout = self.file_grep(r"^(daemon.*)\s+(\/var\/log\/.*)", *self.files) for i in debugout: return i[1] def setup(self): self.add_copy_spec("/etc/auto*") self.add_cmd_output("/etc/init.d/autofs status") if self.checkdebug(): self.add_copy_spec(self.getdaemondebug()) class RedHatAutofs(Autofs, RedHatPlugin): def setup(self): super(RedHatAutofs, self).setup() if self.get_option("verify"): self.add_cmd_output("rpm -qV autofs") class DebianAutofs(Autofs, DebianPlugin, UbuntuPlugin): def setup(self): super(DebianAutofs, self).setup() self.add_cmd_output("dpkg-query -s autofs") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/chrony.py0000644000175000017500000000237112625313241021650 0ustar cariboucaribou# 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 class Chrony(Plugin, RedHatPlugin): """Chrony clock (for Network time protocol) """ plugin_name = "chrony" profiles = ('system', 'services') packages = ('chrony',) def setup(self): self.add_copy_spec([ "/etc/chrony.conf", "/var/lib/chrony/drift" ]) self.add_cmd_output([ "chronyc tracking", "chronyc sources", "chronyc sourcestats", "chronyc clients", "journalctl -u chronyd" ]) # vim: et ts=4 sw=4 sosreport-3.2+git276-g7da50d6/sos/plugins/cobbler.py0000644000175000017500000000271312625313241021756 0ustar cariboucaribou# 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 Cobbler(Plugin): plugin_name = "cobbler" class RedHatCobbler(Cobbler, RedHatPlugin): """Cobbler installation server """ packages = ('cobbler',) profiles = ('cluster', 'sysmgmt') def setup(self): self.add_copy_spec([ "/etc/cobbler", "/var/log/cobbler", "/var/lib/rhn/kickstarts", "/var/lib/cobbler" ]) class DebianCobbler(Cobbler, DebianPlugin, UbuntuPlugin): packages = ('cobbler',) def setup(self): self.add_copy_spec([ "/etc/cobbler", "/var/log/cobbler", "/var/lib/cobbler" ]) self.add_forbidden_path("/var/lib/cobbler/isos") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/dpkg.py0000644000175000017500000000307412625313241021274 0ustar cariboucaribou# Copyright (c) 2012 Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, DebianPlugin, UbuntuPlugin class Dpkg(Plugin, DebianPlugin, UbuntuPlugin): """Debian Package Management """ plugin_name = 'dpkg' profiles = ('sysmgmt', 'packagemanager') def setup(self): self.add_cmd_output("dpkg -l", root_symlink="installed-debs") if self.get_option("verify"): self.add_cmd_output("dpkg -V") self.add_cmd_output("dpkg -C") self.add_copy_spec([ "/var/cache/debconf/config.dat", "/etc/debconf.conf" ]) if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/dpkg.log", sizelimit=limit) else: self.add_copy_spec("/var/log/dpkg.log*") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/powerpc.py0000644000175000017500000000603712625313241022030 0ustar cariboucaribou# 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 systems """ plugin_name = 'powerpc' profiles = ('system', 'hardware') def check_enabled(self): return "ppc64" in self.policy().get_arch() 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/", "/proc/loadavg", "/proc/locks", "/proc/misc", "/proc/swaps", "/proc/version", "/dev/nvram", "/var/lib/lsvpd/" ]) self.add_cmd_output([ "ppc64_cpu --smt", "ppc64_cpu --cores-present", "ppc64_cpu --cores-on", "ppc64_cpu --run-mode", "ppc64_cpu --frequency", "ppc64_cpu --dscr", "lscfg -vp", "lsmcode -A", "lsvpd --debug" ]) if ispSeries: self.add_copy_spec([ "/proc/ppc64/lparcfg", "/proc/ppc64/eeh", "/proc/ppc64/systemcfg", "/var/log/platform" ]) self.add_cmd_output([ "lsvio -des", "servicelog --dump", "servicelog_notify --list", "usysattn", "usysident", "serv_config -l", "bootlist -m both -r", "lparstat -i" ]) if isPowerNV: self.add_copy_spec([ "/proc/ppc64/eeh", "/proc/ppc64/systemcfg" "/proc/ppc64/topology_updates" "/sys/firmware/opal/msglog", "/var/log/opal-elog/" ]) if os.path.isdir("/var/log/dump"): self.add_cmd_output("ls -l /var/log/dump") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/networking.py0000644000175000017500000003011212625313241022527 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin import os import re class Networking(Plugin): """network and device configuration """ plugin_name = "networking" profiles = ('network', 'hardware', 'system') trace_host = "www.example.com" option_list = [("traceroute", "collects a traceroute to %s" % trace_host, "slow", False)] def get_bridge_name(self, brctl_file): """Return a list for which items are bridge name according to the output of brctl show stored in brctl_file. """ out = [] try: brctl_out = open(brctl_file).read() except: return out for line in brctl_out.splitlines(): if line.startswith("bridge name") \ or line.isspace() \ or line[:1].isspace(): continue br_name, br_rest = line.split(None, 1) out.append(br_name) return out def get_eth_interfaces(self, ip_link_out): """Return a dictionary for which keys are ethernet interface names taken from the output of "ip -o link". """ out = {} for line in ip_link_out.splitlines(): match = re.match('.*link/ether', line) if match: iface = match.string.split(':')[1].lstrip() out[iface] = True return out def get_ip_netns(self, ip_netns_file): """Returns a list for which items are namespaces in the output of ip netns stored in the ip_netns_file. """ out = [] try: ip_netns_out = open(ip_netns_file).read() except: return out for line in ip_netns_out.splitlines(): # If there's no namespaces, no need to continue if line.startswith("Object \"netns\" is unknown") \ or line.isspace() \ or line[:1].isspace(): return out out.append(line) return out def get_netns_devs(self, namespace): """Returns a list for which items are devices that exist within the provided namespace. """ ip_link_result = self.call_ext_prog("ip netns exec " + namespace + " ip -o link") dev_list = [] if ip_link_result['status'] == 0: for eth in self.get_eth_interfaces(ip_link_result['output']): dev = eth.replace('@NONE', '') dev_list.append(dev) return dev_list def collect_iptable(self, tablename): """ When running the iptables command, it unfortunately auto-loads the modules before trying to get output. Some people explicitly don't want this, so check if the modules are loaded before running the command. If they aren't loaded, there can't possibly be any relevant rules in that table """ modname = "iptable_"+tablename if self.check_ext_prog("grep -q %s /proc/modules" % modname): cmd = "iptables -t "+tablename+" -nvL" self.add_cmd_output(cmd) def collect_ip6table(self, tablename): """ Same as function above, but for ipv6 """ modname = "ip6table_"+tablename if self.check_ext_prog("grep -q %s /proc/modules" % modname): cmd = "ip6tables -t "+tablename+" -nvL" self.add_cmd_output(cmd) def setup(self): super(Networking, self).setup() self.add_copy_spec([ "/proc/net/", "/etc/nsswitch.conf", "/etc/yp.conf", "/etc/inetd.conf", "/etc/xinetd.conf", "/etc/xinetd.d", "/etc/host*", "/etc/resolv.conf", "/etc/network*", "/etc/NetworkManager/NetworkManager.conf", "/etc/NetworkManager/system-connections", "/etc/dnsmasq*", "/sys/class/net/*/flags", "/etc/iproute2" ]) 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") self.add_cmd_output("ip -o addr", root_symlink="ip_addr") self.add_cmd_output("route -n", root_symlink="route") self.add_cmd_output("plotnetcfg") self.collect_iptable("filter") self.collect_iptable("nat") self.collect_iptable("mangle") self.collect_ip6table("filter") self.collect_ip6table("nat") self.collect_ip6table("mangle") self.add_cmd_output("netstat -neopa", root_symlink="netstat") self.add_cmd_output([ "netstat -s", "netstat -agn", "ip route show table all", "ip -6 route show table all", "ip -4 rule", "ip -6 rule", "ip link", "ip address", "ifenslave -a", "ip mroute show", "ip maddr show", "ip neigh show", "ip neigh show nud noarp", "biosdevname -d", "tc -s qdisc show", "iptables -vnxL", "ip6tables -vnxL" ]) # There are some incompatible changes in nmcli since # the release of NetworkManager >= 0.9.9. In addition, # NetworkManager >= 0.9.9 will use the long names of # "nmcli" objects. # All versions conform to the following templates with differnt # strings for the object being operated on. nmcli_con_details_template = "nmcli con %s id" nmcli_dev_details_template = "nmcli dev %s" # test NetworkManager status for the specified major version def test_nm_status(version=1): status_template = "nmcli --terse --fields RUNNING %s status" obj_table = [ "nm", # < 0.9.9 "general" # >= 0.9.9 ] status = self.call_ext_prog(status_template % obj_table[version]) return status['output'].lower().startswith("running") # NetworkManager >= 0.9.9 (Use short name of objects for nmcli) if test_nm_status(version=1): self.add_cmd_output([ "nmcli general status", "nmcli con", "nmcli con show --active", "nmcli dev"]) nmcli_con_details_cmd = nmcli_con_details_template % "show" nmcli_dev_details_cmd = nmcli_dev_details_template % "show" # NetworkManager < 0.9.9 (Use short name of objects for nmcli) elif test_nm_status(version=0): self.add_cmd_output([ "nmcli nm status", "nmcli con", "nmcli con status", "nmcli dev"]) nmcli_con_details_cmd = nmcli_con_details_template % "list id" nmcli_dev_details_cmd = nmcli_dev_details_template % "list iface" # No grokkable NetworkManager version present else: nmcli_con_details_cmd = "" nmcli_dev_details_cmd = "" if len(nmcli_con_details_cmd) > 0: nmcli_con_show_result = self.call_ext_prog( "nmcli --terse --fields NAME con") if nmcli_con_show_result['status'] == 0: for con in nmcli_con_show_result['output'].splitlines(): self.add_cmd_output("%s '%s'" % (nmcli_con_details_cmd, con)) nmcli_dev_status_result = self.call_ext_prog( "nmcli --terse --fields DEVICE dev") if nmcli_dev_status_result['status'] == 0: for dev in nmcli_dev_status_result['output'].splitlines(): self.add_cmd_output("%s '%s'" % (nmcli_dev_details_cmd, dev)) # Get ethtool output for every device that does not exist in a # namespace. ip_link_result = self.call_ext_prog("ip -o link") if ip_link_result['status'] == 0: for dev in self.get_eth_interfaces(ip_link_result['output']): eth = dev.replace('@NONE', '') self.add_cmd_output([ "ethtool "+eth, "ethtool -d "+eth, "ethtool -i "+eth, "ethtool -k "+eth, "ethtool -S "+eth, "ethtool -T "+eth, "ethtool -a "+eth, "ethtool -c "+eth, "ethtool -g "+eth ]) # brctl command will load bridge and related kernel modules # if those modules are not loaded at the time of brctl command running # This behaviour causes an unexpected configuration change for system. # sosreport should aovid such situation. if self.is_module_loaded("bridge"): brctl_file = self.get_cmd_output_now("brctl show") if brctl_file: for br_name in self.get_bridge_name(brctl_file): self.add_cmd_output([ "brctl showstp "+br_name, "brctl showmacs "+br_name ]) if self.get_option("traceroute"): self.add_cmd_output("/bin/traceroute -n %s" % self.trace_host) # Capture additional data from namespaces; each command is run # per-namespace. ip_netns_file = self.get_cmd_output_now("ip netns") cmd_prefix = "ip netns exec " if ip_netns_file: for namespace in self.get_ip_netns(ip_netns_file): self.add_cmd_output([ cmd_prefix + namespace + " ip address show", cmd_prefix + namespace + " ip route show table all", cmd_prefix + namespace + " iptables-save" ]) # Devices that exist in a namespace use less ethtool # parameters. Run this per namespace. for namespace in self.get_ip_netns(ip_netns_file): for eth in self.get_netns_devs(namespace): ns_cmd_prefix = cmd_prefix + namespace + " " self.add_cmd_output([ ns_cmd_prefix + "ethtool " + eth, ns_cmd_prefix + "ethtool -i " + eth, ns_cmd_prefix + "ethtool -k " + eth, ns_cmd_prefix + "ethtool -S " + eth ]) return def postproc(self): for root, dirs, files in os.walk( "/etc/NetworkManager/system-connections"): for net_conf in files: self.do_file_sub( "/etc/NetworkManager/system-connections/"+net_conf, r"psk=(.*)", r"psk=***") class RedHatNetworking(Networking, RedHatPlugin): trace_host = "rhn.redhat.com" def setup(self): super(RedHatNetworking, self).setup() class UbuntuNetworking(Networking, UbuntuPlugin, DebianPlugin): trace_host = "archive.ubuntu.com" def setup(self): super(UbuntuNetworking, self).setup() self.add_copy_spec([ "/etc/resolvconf", "/etc/network/interfaces", "/etc/network/interfaces.d", "/etc/ufw", "/var/log/ufw.Log", "/etc/resolv.conf" ]) self.add_cmd_output([ "/usr/sbin/ufw status", "/usr/sbin/ufw app list" ]) if self.get_option("traceroute"): self.add_cmd_output("/usr/sbin/traceroute -n %s" % self.trace_host) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/general.py0000644000175000017500000000377412625313241021773 0ustar cariboucaribou# 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 class General(Plugin): """general system information""" plugin_name = "general" profiles = ('system', 'sysmgmt') def setup(self): self.add_copy_spec([ "/etc/sos.conf", "/etc/sysconfig", "/proc/stat", "/var/log/pm/suspend.log", "/etc/hostid", "/etc/localtime", "/etc/os-release" ]) self.add_cmd_output("hostname -f") self.add_cmd_output("hostname", root_symlink='hostname') self.add_cmd_output("date", root_symlink="date") self.add_cmd_output("uptime", root_symlink="uptime") class RedHatGeneral(General, RedHatPlugin): def setup(self): super(RedHatGeneral, self).setup() self.add_copy_spec([ "/etc/redhat-release", "/etc/fedora-release", "/var/log/up2date" ]) def postproc(self): self.do_file_sub("/etc/sysconfig/rhn/up2date", r"(\s*proxyPassword\s*=\s*)\S+", r"\1***") class DebianGeneral(General, DebianPlugin): def setup(self): super(DebianGeneral, self).setup() self.add_copy_spec([ "/etc/default", "/etc/lsb-release", "/etc/debian_version" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/abrt.py0000644000175000017500000000336312625313241021300 0ustar cariboucaribou# Copyright (C) 2010 Red Hat, Inc., Tomas Smetana # 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 class Abrt(Plugin, RedHatPlugin): """Automatic Bug Reporting Tool """ plugin_name = "abrt" profiles = ('system', 'debug') packages = ('abrt-cli', 'abrt-gui', 'abrt') files = ('/var/spool/abrt',) option_list = [ ("backtraces", 'collect backtraces for every report', 'slow', False) ] def do_backtraces(self): result = self.call_ext_prog('sqlite3 ' '/var/spool/abrt/abrt-db \'select UUID ' 'from abrt_v4\'') try: for uuid in result['output'].split(): self.add_cmd_output("abrt-cli -ib %s" % uuid, suggest_filename=("backtrace_%s" % uuid)) except IndexError: pass def setup(self): self.add_cmd_output("abrt-cli -lf", suggest_filename="abrt-log") if self.get_option('backtraces'): self.do_backtraces() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/powerpath.py0000644000175000017500000000406112625313241022355 0ustar cariboucaribou# Copyright (C) 2008 EMC Corporation. Keith Kearnan # 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 # 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, os class PowerPath(Plugin, RedHatPlugin): """ EMC PowerPath """ plugin_name = 'powerpath' profiles = ('storage', 'hardware') packages = ('EMCpower',) def get_pp_files(self): """ EMC PowerPath specific information - files """ self.add_cmd_output("powermt version") self.add_copy_spec([ "/etc/init.d/PowerPath", "/etc/powermt.custom", "/etc/emcp_registration", "/etc/emc/mpaa.excluded", "/etc/emc/mpaa.lams", "/etc/emcp_devicesDB.dat", "/etc/emcp_devicesDB.idx", "/etc/emc/powerkmd.custom", "/etc/modprobe.conf.pp" ]) def get_pp_config(self): """ EMC PowerPath specific information - commands """ self.add_cmd_output([ "powermt display", "powermt display dev=all", "powermt check_registration", "powermt display options", "powermt display ports", "powermt display paths", "powermt dump" ]) def setup(self): self.get_pp_files() # If PowerPath is running collect additional PowerPath specific # information if os.path.isdir("/proc/emcp"): self.get_pp_config() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/gdm.py0000644000175000017500000000213412625313241021112 0ustar cariboucaribou# 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 Gdm(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """GNOME display manager """ plugin_name = 'gdm' profiles = ('desktop',) def setup(self): self.add_copy_spec("/etc/gdm/*") self.add_cmd_output([ "journalctl -u gdm", "systemctl status gdm.service" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/pci.py0000644000175000017500000000224512625313241021121 0ustar cariboucaribou# 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, UbuntuPlugin, DebianPlugin class Pci(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin): """PCI devices """ plugin_name = "pci" profiles = ('hardware', 'system') def setup(self): self.add_copy_spec([ "/proc/ioports", "/proc/iomem", "/proc/bus/pci" ]) self.add_cmd_output("lspci -nnvv", root_symlink="lspci") self.add_cmd_output("lspci -tv") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ubuntu.py0000644000175000017500000000234112433366740021676 0ustar cariboucaribou# 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, UbuntuPlugin class Ubuntu(Plugin, UbuntuPlugin): """ Ubuntu specific information """ plugin_name = 'ubuntu' profiles = ('system',) option_list = [ ('support-show-all', 'Show all packages with their status', '', False), ] def setup(self): cmd = ["ubuntu-support-status"] if self.get_option('support-show-all'): cmd.append("--show-all") self.add_cmd_output(" ".join(cmd), suggest_filename='ubuntu-support-status.txt') sosreport-3.2+git276-g7da50d6/sos/plugins/mrggrid.py0000644000175000017500000000176112625313241022003 0ustar cariboucaribou# 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 class MrgGrid(Plugin, RedHatPlugin): """MRG GRID engine """ plugin_name = 'mrggrid' profiles = ('mrg',) def setup(self): self.add_copy_spec([ "/etc/condor/condor_config", "condor_status" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/cups.py0000644000175000017500000000332612625313241021321 0ustar cariboucaribou# 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 Cups(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """CUPS IPP print service """ plugin_name = 'cups' profiles = ('hardware',) packages = ('cups',) def setup(self): if not self.get_option("all_logs"): limit = self.get_option("log_size") self.add_copy_spec_limit("/var/log/cups/access_log", sizelimit=limit) self.add_copy_spec_limit("/var/log/cups/error_log", sizelimit=limit) self.add_copy_spec_limit("/var/log/cups/page_log", sizelimit=limit) else: self.add_copy_spec("/var/log/cups") self.add_copy_spec([ "/etc/cups/*.conf", "/etc/cups/*.types", "/etc/cups/lpoptions", "/etc/cups/ppd/*.ppd" ]) self.add_cmd_output([ "lpstat -t", "lpstat -s", "lpstat -d" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/megacli.py0000644000175000017500000000275112625313241021751 0ustar cariboucaribou# megacli.py # Copyright (C) 2007-2014 Red Hat, Inc., Jon Magrini # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import os import os.path from sos.plugins import Plugin, RedHatPlugin class MegaCLI(Plugin, RedHatPlugin): """LSI MegaRAID devices """ plugin_name = 'megacli' profiles = ('system', 'storage', 'hardware') def setup(self): if os.path.isfile("/opt/MegaRAID/MegaCli/MegaCli64"): self.add_custom_text("LSI MegaCLI is installed.
") self.get_megacli_files() def get_megacli_files(self): """ MegaCLI specific output """ self.add_cmd_output([ "MegaCli64 LDPDInfo -aALL", "MegaCli64 -AdpAllInfo -aALL", "MegaCli64 -AdpBbuCmd -GetBbuStatus -aALL", "MegaCli64 -ShowSummary -a0" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openhpi.py0000644000175000017500000000226612625313241022013 0ustar cariboucaribou# 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 class OpenHPI(Plugin, RedHatPlugin): """Open Hardware Platform Interface """ plugin_name = 'openhpi' profiles = ('system', 'hardware') def setup(self): self.add_copy_spec([ "/etc/openhpi/openhpi.conf", "/etc/openhpi/openhpiclient.conf" ]) def postproc(self): self.do_file_sub("/etc/openhpi/openhpi.conf", r'(\s*[Pp]ass.*\s*=\s*).*', r'\1********') # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/filesys.py0000644000175000017500000000417212625313241022025 0ustar cariboucaribou# 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 Filesys(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Local file systems """ plugin_name = 'filesys' profiles = ('storage',) option_list = [("lsof", 'gathers information on all open files', 'slow', False), ("dumpe2fs", 'dump filesystem information', 'slow', False)] def setup(self): self.add_copy_spec([ "/proc/filesystems", "/etc/fstab", "/proc/self/mounts", "/proc/self/mountinfo", "/proc/self/mountstats", "/proc/mounts" ]) self.add_cmd_output("mount -l", root_symlink="mount") self.add_cmd_output("df -al", root_symlink="df") self.add_cmd_output([ "df -ali", "findmnt" ]) if self.get_option('lsof'): self.add_cmd_output("lsof -b +M -n -l -P", root_symlink="lsof") dumpe2fs_opts = '-h' if self.get_option('dumpe2fs'): dumpe2fs_opts = '' mounts = '/proc/mounts' ext_fs_regex = r"^(/dev/.+).+ext[234]\s+" for dev in self.do_regex_find_all(ext_fs_regex, mounts): self.add_cmd_output("dumpe2fs %s %s" % (dumpe2fs_opts, dev)) def postproc(self): self.do_file_sub( "/etc/fstab", r"(password=)[^\s]*", r"\1********" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/libraries.py0000644000175000017500000000234712625313241022325 0ustar cariboucaribou# 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, UbuntuPlugin class Libraries(Plugin, RedHatPlugin, UbuntuPlugin): """Dynamic shared libraries """ plugin_name = 'libraries' profiles = ('system',) option_list = [ ('ldconfigv', 'collect verbose ldconfig output', "slow", False) ] def setup(self): self.add_copy_spec(["/etc/ld.so.conf", "/etc/ld.so.conf.d"]) if self.get_option("ldconfigv"): self.add_cmd_output("ldconfig -v -N -X") self.add_cmd_output("ldconfig -p -N -X") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/activemq.py0000644000175000017500000000401212605172031022147 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class ActiveMq(Plugin, DebianPlugin): """ActiveMQ message broker """ plugin_name = 'activemq' profiles = ('openshift',) packages = ('activemq', 'activemq-core') files = ('/var/log/activemq',) def setup(self): if self.get_option("all_logs"): self.add_copy_spec(list(self.files)) else: self.add_copy_spec([ "/var/log/activemq/activemq.log", "/var/log/activemq/wrapper.log" ]) def postproc(self): # activemq.xml contains credentials in this form: # self.do_file_sub( '/etc/activemq/activemq.xml', r'(\s*password=")[^"]*(".*)', r"\1******\2" ) class RedHatActiveMq(ActiveMq, RedHatPlugin): def setup(self): super(RedHatActiveMq, self).setup() self.add_copy_spec([ '/etc/sysconfig/activemq', '/etc/activemq/activemq.xml' ]) class UbuntuActiveMq(ActiveMq, UbuntuPlugin): def setup(self): super(UbuntuActiveMq, self).setup() self.add_copy_spec([ '/etc/activemq', '/etc/default/activemq' ]) sosreport-3.2+git276-g7da50d6/sos/plugins/firewalld.py0000644000175000017500000000305412625313241022316 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Jamie Bainbridge # Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class FirewallD(Plugin, RedHatPlugin): """Firewall daemon """ plugin_name = 'firewalld' profiles = ('network',) packages = ('firewalld',) def setup(self): self.add_copy_spec([ "/etc/firewalld/firewalld.conf", "/etc/firewalld/icmptypes/*.xml", "/etc/firewalld/services/*.xml", "/etc/firewalld/zones/*.xml", "/etc/sysconfig/firewalld" ]) # use a 10s timeout to workaround dbus problems in # docker containers. self.add_cmd_output([ "firewall-cmd --list-all-zones", "firewall-cmd --permanent --list-all-zones" ], timeout=10) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/procenv.py0000644000175000017500000000201312625313241022013 0ustar cariboucaribou# Copyright (c) 2012 Adam Stokes # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, DebianPlugin, UbuntuPlugin class Procenv(Plugin, DebianPlugin, UbuntuPlugin): """Process environment """ plugin_name = 'procenv' profiles = ('system',) def setup(self): self.add_cmd_output('procenv') # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/systemd.py0000644000175000017500000000372412625313241022041 0ustar cariboucaribou# Copyright (C) 2012 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class Systemd(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """ System management daemon """ plugin_name = "systemd" profiles = ('system', 'services', 'boot') packages = ('systemd',) files = ('/usr/lib/systemd/systemd',) def setup(self): self.add_cmd_output([ "systemctl show --all", "systemctl list-units", "systemctl list-units --failed", "systemctl list-units --all", "systemctl list-unit-files", "systemctl show-environment", "systemd-delta", "journalctl --list-boots", "ls -l /lib/systemd", "ls -l /lib/systemd/system-shutdown", "ls -l /lib/systemd/system-generators", "ls -l /lib/systemd/user-generators", "timedatectl" ]) if self.get_option("verify"): self.add_cmd_output("journalctl --verify") self.add_copy_spec([ "/etc/systemd", "/lib/systemd/system", "/lib/systemd/user", "/etc/vconsole.conf", "/etc/yum/protected.d/systemd.conf" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/squid.py0000644000175000017500000000376212625313241021500 0ustar cariboucaribou# 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 Squid(Plugin): """Squid caching proxy """ plugin_name = 'squid' profiles = ('webserver', 'services', 'sysmgmt') class RedHatSquid(Squid, RedHatPlugin): files = ('/etc/squid/squid.conf',) packages = ('squid',) def setup(self): log_size = self.get_option('log_size') log_path = "/var/log/squid/" self.add_copy_spec("/etc/squid/squid.conf") self.add_copy_spec_limit(log_path + "access.log", sizelimit=log_size) self.add_copy_spec_limit(log_path + "cache.log", sizelimit=log_size) self.add_copy_spec_limit(log_path + "squid.out", sizelimit=log_size) class DebianSquid(Squid, DebianPlugin, UbuntuPlugin): plugin_name = 'squid' files = ('/etc/squid3/squid.conf',) packages = ('squid3',) def setup(self): self.add_copy_spec_limit("/etc/squid3/squid.conf", sizelimit=self.get_option('log_size')) self.add_copy_spec_limit("/var/log/squid3/*", sizelimit=self.get_option('log_size')) self.add_copy_spec(['/etc/squid-deb-proxy']) self.add_copy_spec_limit("/var/log/squid-deb-proxy/*", sizelimit=self.get_option('log_size')) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ldap.py0000644000175000017500000000652612625313241021274 0ustar cariboucaribou# 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 Ldap(Plugin): """LDAP configuration """ plugin_name = "ldap" profiles = ('identity', 'sysmgmt', 'system') ldap_conf = "/etc/openldap/ldap.conf" def setup(self): super(Ldap, self).setup() self.add_copy_spec("/etc/ldap.conf") def postproc(self): self.do_file_sub("/etc/ldap.conf", r"(\s*bindpw\s*)\S+", r"\1******") class RedHatLdap(Ldap, RedHatPlugin): packages = ('openldap', 'nss-pam-ldapd') files = ('/etc/ldap.conf', '/etc/pam_ldap.conf') def setup(self): super(RedHatLdap, self).setup() self.add_forbidden_path("/etc/openldap/certs/password") self.add_forbidden_path("/etc/openldap/certs/pwfile.txt") self.add_forbidden_path("/etc/openldap/certs/pin.txt") self.add_forbidden_path("/etc/openldap/certs/*passw*") self.add_forbidden_path("/etc/openldap/certs/key3.db") self.add_copy_spec([ self.ldap_conf, "/etc/openldap/certs/cert8.db", "/etc/openldap/certs/secmod.db", "/etc/nslcd.conf", "/etc/pam_ldap.conf" ]) self.add_cmd_output("certutil -L -d /etc/openldap") def postproc(self): super(RedHatLdap, self).postproc() self.do_file_sub( "/etc/nslcd.conf", r"(\s*bindpw\s*)\S+", r"\1********" ) self.do_file_sub( "/etc/pam_ldap.conf", r"(\s*bindpw\s*)\S+", r"\1********" ) class DebianLdap(Ldap, DebianPlugin, UbuntuPlugin): ldap_conf = "/etc/ldap/ldap.conf" packages = ('slapd', 'ldap-utils') def setup(self): super(DebianLdap, self).setup() ldap_search = "ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// " self.add_copy_spec([ self.ldap_conf, "/etc/slapd.conf", "/etc/ldap/slapd.d" ]) self.add_cmd_output("ldapsearch -x -b '' -s base 'objectclass=*'") self.add_cmd_output( ldap_search + "-b cn=config '(!(objectClass=olcSchemaConfig))'", suggest_filename="configuration_minus_schemas") self.add_cmd_output( ldap_search + "-b cn=schema,cn=config dn", suggest_filename="loaded_schemas") self.add_cmd_output( ldap_search + "-b cn=config '(olcAccess=*)' olcAccess olcSuffix", suggest_filename="access_control_lists") def postproc(self): super(DebianLdap, self).postproc() self.do_cmd_output_sub( "ldapsearch", r"(olcRootPW\: \s*)\S+", r"\1********" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/anaconda.py0000644000175000017500000000324512625313241022113 0ustar cariboucaribou# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin import os class Anaconda(Plugin, RedHatPlugin): """Anaconda installer """ plugin_name = 'anaconda' profiles = ('system',) files = ( '/var/log/anaconda.log', '/var/log/anaconda' ) def setup(self): paths = [ "/root/anaconda-ks.cfg" ] if os.path.isdir('/var/log/anaconda'): # new anaconda paths.append('/var/log/anaconda') else: paths = paths + [ "/var/log/anaconda.*" "/root/install.log", "/root/install.log.syslog" ] self.add_copy_spec(paths) def postproc(self): self.do_file_sub( "/root/anaconda-ks.cfg", r"(\s*rootpw\s*).*", r"\1********" ) self.do_file_sub( "/root/anaconda-ks.cfg", r"(user.*--password=*\s*)\s*(\S*)", r"\1********" ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/keyutils.py0000644000175000017500000000224312625313241022215 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class Keyutils(Plugin, RedHatPlugin): """Kernel key ring """ plugin_name = 'keyutils' profiles = ('system', 'kernel', 'security', 'storage') packages = ('keyutils',) def setup(self): self.add_copy_spec([ "/etc/request-key.conf", "/etc/request-key.d" ]) self.add_cmd_output("keyctl show") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/mongodb.py0000644000175000017500000000301012625313241021762 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc., Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin class MongoDb(Plugin, DebianPlugin, UbuntuPlugin): """MongoDB document database """ plugin_name = 'mongodb' profiles = ('services',) packages = ('mongodb-server',) files = ('/etc/mongodb.conf',) def setup(self): self.add_copy_spec([ "/etc/mongodb.conf", "/var/log/mongodb/mongodb.log" ]) def postproc(self): self.do_file_sub( "/etc/mongodb.conf", r"(mms-token\s*=\s*.*)", r"mms-token = ********" ) class RedHatMongoDb(MongoDb, RedHatPlugin): def setup(self): super(RedHatMongoDb, self).setup() self.add_copy_spec("/etc/sysconfig/mongodb") # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/memory.py0000644000175000017500000000262312625313241021656 0ustar cariboucaribou# 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 Memory(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """Memory configuration and use """ plugin_name = 'memory' profiles = ('system', 'hardware', 'memory') def setup(self): self.add_copy_spec([ "/proc/pci", "/proc/meminfo", "/proc/vmstat", "/proc/swaps", "/proc/slabinfo", "/proc/pagetypeinfo", "/proc/vmallocinfo", "/sys/kernel/mm/ksm" ]) self.add_cmd_output("free", root_symlink="free") self.add_cmd_output([ "free -m", "swapon --bytes --show" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/xinetd.py0000644000175000017500000000227012625313241021637 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Eugene Teo # 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 Xinetd(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin): """xinetd information """ plugin_name = 'xinetd' profiles = ('services', 'network', 'boot') files = ('/etc/xinetd.conf',) packages = ('xinetd',) def setup(self): self.add_copy_spec([ "/etc/xinetd.conf", "/etc/xinetd.d" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/openstack_keystone.py0000644000175000017500000000470112625313247024263 0ustar cariboucaribou# Copyright (C) 2013 Red Hat, Inc., Jeremy Agee # 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 OpenStackKeystone(Plugin): """OpenStack Keystone """ plugin_name = "openstack_keystone" profiles = ('openstack', 'openstack_controller') option_list = [("nopw", "dont gathers keystone passwords", "slow", True)] def setup(self): self.add_copy_spec([ "/etc/keystone/default_catalog.templates", "/etc/keystone/keystone.conf", "/etc/keystone/logging.conf", "/etc/keystone/policy.json" ]) self.limit = self.get_option("log_size") if self.get_option("all_logs"): self.add_copy_spec_limit("/var/log/keystone/", sizelimit=self.limit) else: self.add_copy_spec_limit("/var/log/keystone/*.log", sizelimit=self.limit) def postproc(self): protect_keys = [ "password", "qpid_password", "rabbit_password", "ssl_key_password", "ldap_dns_password", "neutron_admin_password", "host_password", "connection", "admin_password", "admin_token", "ca_password" ] regexp = r"((?m)^\s*(%s)\s*=\s*)(.*)" % "|".join(protect_keys) self.do_path_regex_sub("/etc/keystone/*", regexp, r"\1*********") class DebianKeystone(OpenStackKeystone, DebianPlugin, UbuntuPlugin): packages = ( 'keystone', 'python-keystone', 'python-keystoneclient' ) class RedHatKeystone(OpenStackKeystone, RedHatPlugin): packages = ( 'openstack-keystone', 'python-keystone', 'python-django-openstack-auth', 'python-keystoneclient' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ipa.py0000644000175000017500000000631012625313241021114 0ustar cariboucaribou# Copyright (C) 2007 Red Hat, Inc., Kent Lamb # 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 class Ipa(Plugin, RedHatPlugin): """ Identity, policy, audit """ plugin_name = 'ipa' profiles = ('identity',) ipa_server = False ipa_client = False files = ('/etc/ipa',) packages = ('ipa-server', 'ipa-client') def check_enabled(self): self.ipa_server = self.is_installed("ipa-server") self.ipa_client = self.is_installed("ipa-client") return Plugin.check_enabled(self) def setup(self): if self.ipa_server: self.add_copy_spec([ "/var/log/ipaserver-install.log", "/var/log/ipareplica-install.log" ]) if self.ipa_client: self.add_copy_spec("/var/log/ipaclient-install.log") self.add_copy_spec([ "/var/log/ipaupgrade.log", "/var/log/krb5kdc.log", "/var/log/pki-ca/debug", "/var/log/pki-ca/catalina.out", "/var/log/pki-ca/system", "/var/log/pki-ca/transactions", "/var/log/dirsrv/slapd-*/logs/access", "/var/log/dirsrv/slapd-*/logs/errors", "/etc/dirsrv/slapd-*/dse.ldif", "/etc/dirsrv/slapd-*/schema/99user.ldif", "/etc/hosts", "/etc/named.*" ]) self.add_forbidden_path("/etc/pki/nssdb/key*") self.add_forbidden_path("/etc/pki-ca/flatfile.txt") self.add_forbidden_path("/etc/pki-ca/password.conf") self.add_forbidden_path("/var/lib/pki-ca/alias/key*") self.add_forbidden_path("/etc/dirsrv/slapd-*/key*") self.add_forbidden_path("/etc/dirsrv/slapd-*/pin.txt") self.add_forbidden_path("/etc/dirsrv/slapd-*/pwdfile.txt") self.add_forbidden_path("/etc/named.keytab") self.add_cmd_output([ "ls -la /etc/dirsrv/slapd-*/schema/", "ipa-getcert list", "certutil -L -d /etc/httpd/alias/", "certutil -L -d /etc/dirsrv/slapd-*/", "klist -ket /etc/dirsrv/ds.keytab", "klist -ket /etc/httpd/conf/ipa.keytab" ]) hostname = self.call_ext_prog('hostname')['output'] self.add_cmd_output([ "ipa-replica-manage -v list", "ipa-replica-manage -v list %s" % hostname ], timeout=30) return def postproc(self): match = r"(\s*arg \"password )[^\"]*" subst = r"\1********" self.do_file_sub("/etc/named.conf", match, subst) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/kdump.py0000644000175000017500000000275212625313241021471 0ustar cariboucaribou# 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 KDump(Plugin): """Kdump crash dumps """ plugin_name = "kdump" profiles = ('system', 'debug') def setup(self): self.add_copy_spec([ "/proc/cmdline" ]) class RedHatKDump(KDump, RedHatPlugin): files = ('/etc/kdump.conf',) packages = ('kexec-tools',) def setup(self): self.add_copy_spec([ "/etc/kdump.conf", "/etc/udev/rules.d/*kexec.rules", "/var/crash/*/vmcore-dmesg.txt" ]) class DebianKDump(KDump, DebianPlugin, UbuntuPlugin): files = ('/etc/default/kdump-tools',) packages = ('kdump-tools',) def setup(self): self.add_copy_spec([ "/etc/default/kdump-tools" ]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/plugins/ssmtp.py0000644000175000017500000000243112625313241021511 0ustar cariboucaribou# Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from sos.plugins import Plugin, RedHatPlugin class Ssmtp(Plugin, RedHatPlugin): """sSMTP information """ plugin_name = 'ssmtp' profiles = ('mail', 'system') packages = ('ssmtp',) def setup(self): self.add_copy_spec([ "/etc/ssmtp/ssmtp.conf", "/etc/ssmtp/revaliases", "/etc/aliases" ]) def postproc(self): self.do_file_sub( '/etc/ssmtp/ssmtp.conf', r'AuthPass=(\S*)', r'AuthPass=********' ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos/sosreport.py0000644000175000017500000015335112625313241020732 0ustar cariboucaribou""" Gather information about a system and report it using plugins supplied for application-specific information """ # sosreport.py # gather information about a system and report it # Copyright (C) 2006 Steve Conklin # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. import sys import traceback import os import errno import logging from optparse import OptionParser, Option from sos.plugins import import_plugin from sos.utilities import ImporterHelper from stat import ST_UID, ST_GID, ST_MODE, ST_CTIME, ST_ATIME, ST_MTIME, S_IMODE from time import strftime, localtime from collections import deque import tempfile from sos import _sos as _ from sos import __version__ import sos.policies from sos.archive import TarFileArchive from sos.reporting import (Report, Section, Command, CopiedFile, CreatedFile, Alert, Note, PlainTextReport) # PYCOMPAT import six from six.moves import zip, input from six import print_ if six.PY3: from configparser import ConfigParser else: from ConfigParser import ConfigParser # file system errors that should terminate a run fatal_fs_errors = (errno.ENOSPC, errno.EROFS) def _format_list(first_line, items, indent=False): lines = [] line = first_line if indent: newline = len(first_line) * ' ' else: newline = "" for item in items: if len(line) + len(item) + 2 > 72: lines.append(line) line = newline line = line + item + ', ' if line[-2:] == ', ': line = line[:-2] lines.append(line) return lines class TempFileUtil(object): def __init__(self, tmp_dir): self.tmp_dir = tmp_dir self.files = [] def new(self): fd, fname = tempfile.mkstemp(dir=self.tmp_dir) fobj = open(fname, 'w') self.files.append((fname, fobj)) return fobj def clean(self): for fname, f in self.files: try: f.flush() f.close() except Exception: pass try: os.unlink(fname) except Exception: pass self.files = [] class OptionParserExtended(OptionParser): """ Show examples """ def print_help(self, out=sys.stdout): """ Prints help content including examples """ OptionParser.print_help(self, out) print_() print_("Some examples:") print_() print_(" enable cluster plugin only and collect dlm lockdumps:") print_(" # sosreport -o cluster -k cluster.lockdump") print_() print_(" disable memory and samba plugins, turn off rpm -Va " "collection:") print_(" # sosreport -n memory,samba -k rpm.rpmva=off") print_() class SosOption(Option): """Allow to specify comma delimited list of plugins""" ACTIONS = Option.ACTIONS + ("extend",) STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",) TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",) def take_action(self, action, dest, opt, value, values, parser): """ Performs list extension on plugins """ if action == "extend": try: lvalue = value.split(",") except: pass else: values.ensure_value(dest, deque()).extend(lvalue) else: Option.take_action(self, action, dest, opt, value, values, parser) class XmlReport(object): """ Report build class """ def __init__(self): try: import libxml2 except ImportError: self.enabled = False return else: self.enabled = False return self.doc = libxml2.newDoc("1.0") self.root = self.doc.newChild(None, "sos", None) self.commands = self.root.newChild(None, "commands", None) self.files = self.root.newChild(None, "files", None) def add_command(self, cmdline, exitcode, stdout=None, stderr=None, f_stdout=None, f_stderr=None, runtime=None): """ Appends command run into report """ if not self.enabled: return cmd = self.commands.newChild(None, "cmd", None) cmd.setNsProp(None, "cmdline", cmdline) cmdchild = cmd.newChild(None, "exitcode", str(exitcode)) if runtime: cmd.newChild(None, "runtime", str(runtime)) if stdout or f_stdout: cmdchild = cmd.newChild(None, "stdout", stdout) if f_stdout: cmdchild.setNsProp(None, "file", f_stdout) if stderr or f_stderr: cmdchild = cmd.newChild(None, "stderr", stderr) if f_stderr: cmdchild.setNsProp(None, "file", f_stderr) def add_file(self, fname, stats): """ Appends file(s) added to report """ if not self.enabled: return cfile = self.files.newChild(None, "file", None) cfile.setNsProp(None, "fname", fname) cchild = cfile.newChild(None, "uid", str(stats[ST_UID])) cchild = cfile.newChild(None, "gid", str(stats[ST_GID])) cfile.newChild(None, "mode", str(oct(S_IMODE(stats[ST_MODE])))) cchild = cfile.newChild(None, "ctime", strftime('%a %b %d %H:%M:%S %Y', localtime(stats[ST_CTIME]))) cchild.setNsProp(None, "tstamp", str(stats[ST_CTIME])) cchild = cfile.newChild(None, "atime", strftime('%a %b %d %H:%M:%S %Y', localtime(stats[ST_ATIME]))) cchild.setNsProp(None, "tstamp", str(stats[ST_ATIME])) cchild = cfile.newChild(None, "mtime", strftime('%a %b %d %H:%M:%S %Y', localtime(stats[ST_MTIME]))) cchild.setNsProp(None, "tstamp", str(stats[ST_MTIME])) def serialize(self): """ Serializes xml """ if not self.enabled: return self.ui_log.info(self.doc.serialize(None, 1)) def serialize_to_file(self, fname): """ Serializes to file """ if not self.enabled: return outf = tempfile.NamedTemporaryFile() outf.write(self.doc.serialize(None, 1)) outf.flush() self.archive.add_file(outf.name, dest=fname) outf.close() # valid modes for --chroot chroot_modes = ["auto", "always", "never"] class SoSOptions(object): _list_plugins = False _noplugins = [] _enableplugins = [] _onlyplugins = [] _plugopts = [] _usealloptions = False _all_logs = False _log_size = 10 _batch = False _build = False _verbosity = 0 _verify = False _quiet = False _debug = False _case_id = "" _customer_name = "" _profiles = deque() _list_profiles = False _config_file = "" _tmp_dir = "" _noreport = False _sysroot = None _chroot = 'auto' _compression_type = 'auto' _options = None def __init__(self, args=None): if args: self._options = self._parse_args(args) else: self._options = None def _check_options_initialized(self): if self._options is not None: raise ValueError("SoSOptions object already initialized " "from command line") @property def list_plugins(self): if self._options is not None: return self._options.list_plugins return self._list_plugins @list_plugins.setter def list_plugins(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.list_plugins expects a boolean") self._list_plugins = value @property def noplugins(self): if self._options is not None: return self._options.noplugins return self._noplugins @noplugins.setter def noplugins(self, value): self._check_options_initialized() self._noplugins = value @property def experimental(self): if self._options is not None: return self._options.experimental @experimental.setter def experimental(self, value): self._check_options_initialized() self._experimental = value @property def enableplugins(self): if self._options is not None: return self._options.enableplugins return self._enableplugins @enableplugins.setter def enableplugins(self, value): self._check_options_initialized() self._enableplugins = value @property def onlyplugins(self): if self._options is not None: return self._options.onlyplugins return self._onlyplugins @onlyplugins.setter def onlyplugins(self, value): self._check_options_initialized() self._onlyplugins = value @property def plugopts(self): if self._options is not None: return self._options.plugopts return self._plugopts @plugopts.setter def plugopts(self, value): # If we check for anything it should be itterability. # if not isinstance(value, list): # raise TypeError("SoSOptions.plugopts expects a list") self._plugopts = value @property def usealloptions(self): if self._options is not None: return self._options.usealloptions return self._usealloptions @usealloptions.setter def usealloptions(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.usealloptions expects a boolean") self._usealloptions = value @property def all_logs(self): if self._options is not None: return self._options.all_logs return self._all_logs @all_logs.setter def all_logs(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.all_logs expects a boolean") self._all_logs = value @property def log_size(self): if self._options is not None: return self._options.log_size return self._log_size @log_size.setter def log_size(self, value): self._check_options_initialized() if value < 0: raise ValueError("SoSOptions.log_size expects a value greater " "than zero") self._log_size = value @property def batch(self): if self._options is not None: return self._options.batch return self._batch @batch.setter def batch(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.batch expects a boolean") self._batch = value @property def build(self): if self._options is not None: return self._options.build return self._build @build.setter def build(self, value): 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 is not None: return self._options.verbosity return self._verbosity @verbosity.setter def verbosity(self, value): self._check_options_initialized() if value < 0 or value > 3: raise ValueError("SoSOptions.verbosity expects a value [0..3]") self._verbosity = value @property def verify(self): if self._options is not None: return self._options.verify return self._verify @verify.setter def verify(self, value): self._check_options_initialized() if value < 0 or value > 3: raise ValueError("SoSOptions.verify expects a value [0..3]") self._verify = value @property def quiet(self): if self._options is not None: return self._options.quiet return self._quiet @quiet.setter def quiet(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.quiet expects a boolean") self._quiet = value @property def debug(self): if self._options is not None: return self._options.debug return self._debug @debug.setter def debug(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.debug expects a boolean") self._debug = value @property def case_id(self): if self._options is not None: return self._options.case_id return self._case_id @case_id.setter def case_id(self, value): self._check_options_initialized() self._case_id = value @property def customer_name(self): if self._options is not None: return self._options.customer_name return self._customer_name @customer_name.setter def customer_name(self, value): self._check_options_initialized() self._customer_name = value @property def profiles(self): if self._options is not None: return self._options.profiles return self._profiles @profiles.setter def profiles(self, value): self._check_options_initialized() self._profiles = value @property def list_profiles(self): if self._options is not None: return self._options.list_profiles return self._list_profiles @list_profiles.setter def list_profiles(self, value): self._check_options_initialized() self._list_profiles = value @property def config_file(self): if self._options is not None: return self._options.config_file return self._config_file @config_file.setter def config_file(self, value): self._check_options_initialized() self._config_file = value @property def tmp_dir(self): if self._options is not None: return self._options.tmp_dir return self._tmp_dir @tmp_dir.setter def tmp_dir(self, value): self._check_options_initialized() self._tmp_dir = value @property def noreport(self): if self._options is not None: return self._options.noreport return self._noreport @noreport.setter def noreport(self, value): self._check_options_initialized() if not isinstance(value, bool): raise TypeError("SoSOptions.noreport expects a boolean") self._noreport = value @property def sysroot(self): if self._options is not None: return self._options.sysroot return self._sysroot @sysroot.setter def sysroot(self, value): self._check_options_initialized() self._sysroot = value @property def chroot(self): if self._options is not None: return self._options.chroot return self._chroot @chroot.setter def chroot(self, value): self._check_options_initialized() if value not in chroot_modes: msg = "SoSOptions.chroot '%s' is not a valid chroot mode: " msg += "('auto', 'always', 'never')" raise ValueError(msg % value) self._chroot = value @property def compression_type(self): if self._options is not None: return self._options.compression_type return self._compression_type @compression_type.setter def compression_type(self, value): self._check_options_initialized() self._compression_type = value def _parse_args(self, args): """ Parse command line options and arguments""" self.parser = parser = OptionParserExtended(option_class=SosOption) parser.add_option("-l", "--list-plugins", action="store_true", dest="list_plugins", default=False, help="list plugins and available plugin options") parser.add_option("-n", "--skip-plugins", action="extend", dest="noplugins", type="string", help="disable these plugins", default=deque()) parser.add_option("--experimental", action="store_true", dest="experimental", default=False, help="enable experimental plugins") parser.add_option("-e", "--enable-plugins", action="extend", dest="enableplugins", type="string", help="enable these plugins", default=deque()) parser.add_option("-o", "--only-plugins", action="extend", dest="onlyplugins", type="string", help="enable these plugins only", default=deque()) parser.add_option("-k", "--plugin-option", action="extend", dest="plugopts", type="string", help="plugin options in plugname.option=value " "format (see -l)", default=deque()) parser.add_option("--log-size", action="store", dest="log_size", default=10, type="int", help="set a limit on the size of collected logs") parser.add_option("-a", "--alloptions", action="store_true", dest="usealloptions", default=False, help="enable all options for loaded plugins") parser.add_option("--all-logs", action="store_true", dest="all_logs", default=False, help="collect all available logs regardless of size") 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="preserve the temporary directory and do not " "package results") parser.add_option("-v", "--verbose", action="count", dest="verbosity", help="increase verbosity") parser.add_option("", "--verify", action="store_true", dest="verify", default=False, help="perform data verification during collection") parser.add_option("", "--quiet", action="store_true", dest="quiet", default=False, help="only print fatal errors") parser.add_option("--debug", action="count", dest="debug", help="enable interactive debugging using the python " "debugger") parser.add_option("--ticket-number", action="store", dest="case_id", help="specify ticket number") parser.add_option("--case-id", action="store", dest="case_id", help="specify case identifier") parser.add_option("-p", "--profile", action="extend", dest="profiles", type="string", default=deque(), help="enable plugins selected by the given profiles") parser.add_option("--list-profiles", action="store_true", dest="list_profiles", default=False) parser.add_option("--name", action="store", dest="customer_name", help="specify report name") parser.add_option("--config-file", action="store", dest="config_file", help="specify alternate configuration file") parser.add_option("--tmp-dir", action="store", dest="tmp_dir", help="specify alternate temporary directory", default=None) parser.add_option("--no-report", action="store_true", dest="noreport", help="Disable HTML/XML reporting", default=False) parser.add_option("-s", "--sysroot", action="store", dest="sysroot", help="system root directory path (default='/')", default=None) parser.add_option("-c", "--chroot", action="store", dest="chroot", help="chroot executed commands to SYSROOT " "[auto, always, never] (default=auto)", default="auto") parser.add_option("-z", "--compression-type", dest="compression_type", help="compression technology to use [auto, " "gzip, bzip2, xz] (default=auto)", default="auto") return parser.parse_args(args)[0] class SoSReport(object): """The main sosreport class""" def __init__(self, args): self.loaded_plugins = deque() self.skipped_plugins = deque() self.all_options = deque() self.xml_report = XmlReport() self.global_plugin_options = {} self.archive = None self.tempfile_util = None self._args = args self.sysroot = "/" try: import signal signal.signal(signal.SIGTERM, self.get_exit_handler()) except Exception: pass # not available in java, but we don't care self.opts = SoSOptions(args) self._set_debug() self._read_config() try: self.policy = sos.policies.load(sysroot=self.opts.sysroot) except KeyboardInterrupt: self._exit(0) self._is_root = self.policy.is_root() 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): msg = "temporary directory %s " % self.tmpdir msg += "does not exist or is not writable\n" # write directly to stderr as logging is not initialised yet sys.stderr.write(msg) self._exit(1) self.tempfile_util = TempFileUtil(self.tmpdir) self._set_directories() self._setup_logging() msg = "default" host_sysroot = self.policy.host_sysroot() # set alternate system root directory if self.opts.sysroot: msg = "cmdline" self.sysroot = self.opts.sysroot elif self.policy.in_container() and host_sysroot != os.sep: msg = "policy" self.sysroot = host_sysroot self.soslog.debug("set sysroot to '%s' (%s)" % (self.sysroot, msg)) if self.opts.chroot not in chroot_modes: self.soslog.error("invalid chroot mode: %s" % self.opts.chroot) logging.shutdown() self.tempfile_util.clean() self._exit(1) def print_header(self): self.ui_log.info("\n%s\n" % _("sosreport (version %s)" % (__version__,))) def get_commons(self): return { 'cmddir': self.cmddir, 'logdir': self.logdir, 'rptdir': self.rptdir, 'tmpdir': self.tmpdir, 'soslog': self.soslog, 'policy': self.policy, 'sysroot': self.sysroot, 'verbosity': self.opts.verbosity, 'xmlreport': self.xml_report, 'cmdlineopts': self.opts, 'config': self.config, 'global_plugin_options': self.global_plugin_options, } def get_temp_file(self): return self.tempfile_util.new() def _set_archive(self): archive_name = os.path.join(self.tmpdir, self.policy.get_archive_name()) if self.opts.compression_type == 'auto': auto_archive = self.policy.get_preferred_archive() self.archive = auto_archive(archive_name, self.tmpdir) else: self.archive = TarFileArchive(archive_name, self.tmpdir) self.archive.set_debug(True if self.opts.debug else False) def _make_archive_paths(self): self.archive.makedirs(self.cmddir, 0o755) self.archive.makedirs(self.logdir, 0o755) self.archive.makedirs(self.rptdir, 0o755) def _set_directories(self): self.cmddir = 'sos_commands' self.logdir = 'sos_logs' self.rptdir = 'sos_reports' def _set_debug(self): if self.opts.debug: sys.excepthook = self._exception self.raise_plugins = True else: self.raise_plugins = False @staticmethod def _exception(etype, eval_, etrace): """ Wrap exception in debugger if not in tty """ if hasattr(sys, 'ps1') or not sys.stderr.isatty(): # we are in interactive mode or we don't have a tty-like # device, so we call the default hook sys.__excepthook__(etype, eval_, etrace) else: import pdb # we are NOT in interactive mode, print the exception... traceback.print_exception(etype, eval_, etrace, limit=2, file=sys.stdout) print_() # ...then start the debugger in post-mortem mode. pdb.pm() def _exit(self, error=0): raise SystemExit() # sys.exit(error) def get_exit_handler(self): def exit_handler(signum, frame): self._exit() return exit_handler def _read_config(self): self.config = ConfigParser() if self.opts.config_file: config_file = self.opts.config_file else: config_file = '/etc/sos.conf' try: self.config.readfp(open(config_file)) except IOError: pass def _setup_logging(self): # main soslog self.soslog = logging.getLogger('sos') self.soslog.setLevel(logging.DEBUG) self.sos_log_file = self.get_temp_file() self.sos_log_file.close() flog = logging.FileHandler(self.sos_log_file.name) flog.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s')) flog.setLevel(logging.INFO) self.soslog.addHandler(flog) if not self.opts.quiet: console = logging.StreamHandler(sys.stderr) console.setFormatter(logging.Formatter('%(message)s')) if self.opts.verbosity and self.opts.verbosity > 1: console.setLevel(logging.DEBUG) flog.setLevel(logging.DEBUG) elif self.opts.verbosity and self.opts.verbosity > 0: console.setLevel(logging.INFO) flog.setLevel(logging.DEBUG) else: console.setLevel(logging.WARNING) self.soslog.addHandler(console) # ui log self.ui_log = logging.getLogger('sos_ui') self.ui_log.setLevel(logging.INFO) self.sos_ui_log_file = self.get_temp_file() self.sos_ui_log_file.close() ui_fhandler = logging.FileHandler(self.sos_ui_log_file.name) ui_fhandler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s: %(message)s')) self.ui_log.addHandler(ui_fhandler) if not self.opts.quiet: ui_console = logging.StreamHandler(sys.stdout) ui_console.setFormatter(logging.Formatter('%(message)s')) ui_console.setLevel(logging.INFO) self.ui_log.addHandler(ui_console) def _finish_logging(self): logging.shutdown() # Make sure the log files are added before we remove the log # handlers. This prevents "No handlers could be found.." messages # from leaking to the console when running in --quiet mode when # Archive classes attempt to acess the log API. if getattr(self, "sos_log_file", None): self.archive.add_file(self.sos_log_file.name, dest=os.path.join('sos_logs', 'sos.log')) if getattr(self, "sos_ui_log_file", None): self.archive.add_file(self.sos_ui_log_file.name, dest=os.path.join('sos_logs', 'ui.log')) def _get_disabled_plugins(self): disabled = [] if self.config.has_option("plugins", "disable"): disabled = [plugin.strip() for plugin in self.config.get("plugins", "disable").split(',')] return disabled def _is_in_profile(self, plugin_class): onlyplugins = self.opts.onlyplugins if not len(self.opts.profiles): return True if not hasattr(plugin_class, "profiles"): return False if onlyplugins and not self._is_not_specified(plugin_class.name()): return True return any([p in self.opts.profiles for p in plugin_class.profiles]) def _is_skipped(self, plugin_name): return (plugin_name in self.opts.noplugins or plugin_name in self._get_disabled_plugins()) def _is_inactive(self, plugin_name, pluginClass): return (not pluginClass(self.get_commons()).check_enabled() and plugin_name not in self.opts.enableplugins and plugin_name not in self.opts.onlyplugins) def _is_not_default(self, plugin_name, pluginClass): return (not pluginClass(self.get_commons()).default_enabled() and plugin_name not in self.opts.enableplugins and plugin_name not in self.opts.onlyplugins) def _is_not_specified(self, plugin_name): return (self.opts.onlyplugins and plugin_name not in self.opts.onlyplugins) def _skip(self, plugin_class, reason="unknown"): self.skipped_plugins.append(( plugin_class.name(), plugin_class(self.get_commons()), reason )) def _load(self, plugin_class): self.loaded_plugins.append(( plugin_class.name(), plugin_class(self.get_commons()) )) def load_plugins(self): import sos.plugins helper = ImporterHelper(sos.plugins) plugins = helper.get_modules() self.plugin_names = deque() self.profiles = set() using_profiles = len(self.opts.profiles) policy_classes = self.policy.valid_subclasses extra_classes = [] if self.opts.experimental: extra_classes.append(sos.plugins.ExperimentalPlugin) valid_plugin_classes = tuple(policy_classes + extra_classes) validate_plugin = self.policy.validate_plugin remaining_profiles = list(self.opts.profiles) # validate and load plugins for plug in plugins: plugbase, ext = os.path.splitext(plug) try: plugin_classes = import_plugin(plugbase, valid_plugin_classes) if not len(plugin_classes): # no valid plugin classes for this policy continue plugin_class = self.policy.match_plugin(plugin_classes) if not validate_plugin(plugin_class, experimental=self.opts.experimental): self.soslog.warning( _("plugin %s does not validate, skipping") % plug) if self.opts.verbosity > 0: self._skip(plugin_class, _("does not validate")) continue if plugin_class.requires_root and not self._is_root: self.soslog.info(_("plugin %s requires root permissions" "to execute, skipping") % plug) self._skip(plugin_class, _("requires root")) continue # plug-in is valid, let's decide whether run it or not self.plugin_names.append(plugbase) if hasattr(plugin_class, "profiles"): self.profiles.update(plugin_class.profiles) in_profile = self._is_in_profile(plugin_class) if not in_profile: self._skip(plugin_class, _("excluded")) continue if self._is_skipped(plugbase): self._skip(plugin_class, _("skipped")) continue if self._is_inactive(plugbase, plugin_class): self._skip(plugin_class, _("inactive")) continue if self._is_not_default(plugbase, plugin_class): self._skip(plugin_class, _("optional")) continue # true when the null (empty) profile is active default_profile = not using_profiles and in_profile if self._is_not_specified(plugbase) and default_profile: self._skip(plugin_class, _("not specified")) continue for i in plugin_class.profiles: if i in remaining_profiles: remaining_profiles.remove(i) self._load(plugin_class) except Exception as e: self.soslog.warning(_("plugin %s does not install, " "skipping: %s") % (plug, e)) if self.raise_plugins: raise if len(remaining_profiles) > 0: self.soslog.error(_("Unknown or inactive profile(s) provided:" " %s") % ", ".join(remaining_profiles)) self.list_profiles() self._exit(1) def _set_all_options(self): if self.opts.usealloptions: for plugname, plug in self.loaded_plugins: for name, parms in zip(plug.opt_names, plug.opt_parms): if type(parms["enabled"]) == bool: parms["enabled"] = True def _set_tunables(self): if self.config.has_section("tunables"): if not self.opts.plugopts: self.opts.plugopts = deque() for opt, val in self.config.items("tunables"): if not opt.split('.')[0] in self._get_disabled_plugins(): self.opts.plugopts.append(opt + "=" + val) if self.opts.plugopts: opts = {} for opt in self.opts.plugopts: # split up "general.syslogsize=5" try: opt, val = opt.split("=") except: val = True else: if val.lower() in ["off", "disable", "disabled", "false"]: val = False else: # try to convert string "val" to int() try: val = int(val) except: pass # split up "general.syslogsize" try: plug, opt = opt.split(".") except: plug = opt opt = True try: opts[plug] except KeyError: opts[plug] = deque() opts[plug].append((opt, val)) for plugname, plug in self.loaded_plugins: if plugname in opts: for opt, val in opts[plugname]: if not plug.set_option(opt, val): self.soslog.error('no such option "%s" for plugin ' '(%s)' % (opt, plugname)) self._exit(1) del opts[plugname] for plugname in opts.keys(): self.soslog.error('unable to set option for disabled or ' 'non-existing plugin (%s)' % (plugname)) def _check_for_unknown_plugins(self): import itertools for plugin in itertools.chain(self.opts.onlyplugins, self.opts.noplugins, self.opts.enableplugins): plugin_name = plugin.split(".")[0] if plugin_name not in self.plugin_names: self.soslog.fatal('a non-existing plugin (%s) was specified ' 'in the command line' % (plugin_name)) self._exit(1) def _set_plugin_options(self): for plugin_name, plugin in self.loaded_plugins: names, parms = plugin.get_all_options() for optname, optparm in zip(names, parms): self.all_options.append((plugin, plugin_name, optname, optparm)) def list_plugins(self): if not self.loaded_plugins and not self.skipped_plugins: self.soslog.fatal(_("no valid plugins found")) return if self.loaded_plugins: self.ui_log.info(_("The following plugins are currently enabled:")) self.ui_log.info("") for (plugname, plug) in self.loaded_plugins: self.ui_log.info(" %-20s %s" % (plugname, plug.get_description())) else: self.ui_log.info(_("No plugin enabled.")) self.ui_log.info("") if self.skipped_plugins: self.ui_log.info(_("The following plugins are currently " "disabled:")) self.ui_log.info("") for (plugname, plugclass, reason) in self.skipped_plugins: self.ui_log.info(" %-20s %-14s %s" % ( plugname, reason, plugclass.get_description())) self.ui_log.info("") if self.all_options: self.ui_log.info(_("The following plugin options are available:")) self.ui_log.info("") for (plug, plugname, optname, optparm) in self.all_options: # format option value based on its type (int or bool) if type(optparm["enabled"]) == bool: if optparm["enabled"] is True: tmpopt = "on" else: tmpopt = "off" else: tmpopt = optparm["enabled"] self.ui_log.info(" %-25s %-15s %s" % ( plugname + "." + optname, tmpopt, optparm["desc"])) else: self.ui_log.info(_("No plugin options available.")) self.ui_log.info("") profiles = list(self.profiles) profiles.sort() lines = _format_list("Profiles: ", profiles, indent=True) for line in lines: self.ui_log.info(" %s" % line) self.ui_log.info("") self.ui_log.info(" %d profiles, %d plugins" % (len(self.profiles), len(self.loaded_plugins))) self.ui_log.info("") def list_profiles(self): if not self.profiles: self.soslog.fatal(_("no valid profiles found")) return self.ui_log.info(_("The following profiles are available:")) self.ui_log.info("") def _has_prof(c): return hasattr(c, "profiles") profiles = list(self.profiles) profiles.sort() for profile in profiles: plugins = [] for name, plugin in self.loaded_plugins: if _has_prof(plugin) and profile in plugin.profiles: plugins.append(name) lines = _format_list("%-15s " % profile, plugins, indent=True) for line in lines: self.ui_log.info(" %s" % line) self.ui_log.info("") self.ui_log.info(" %d profiles, %d plugins" % (len(profiles), len(self.loaded_plugins))) self.ui_log.info("") def batch(self): if self.opts.batch: self.ui_log.info(self.policy.get_msg()) else: msg = self.policy.get_msg() msg += _("Press ENTER to continue, or CTRL-C to quit.\n") try: input(msg) except: self.ui_log.info("") self._exit() def _log_plugin_exception(self, plugin, method): trace = traceback.format_exc() msg = "caught exception in plugin method" plugin_err_log = "%s-plugin-errors.txt" % plugin logpath = os.path.join(self.logdir, plugin_err_log) self.soslog.error('%s "%s.%s()"' % (msg, plugin, method)) self.soslog.error('writing traceback to %s' % logpath) self.archive.add_string("%s\n" % trace, logpath) def prework(self): self.policy.pre_work() try: self.ui_log.info(_(" Setting up archive ...")) compression_methods = ('auto', 'bzip2', 'gzip', 'xz') method = self.opts.compression_type if method not in compression_methods: compression_list = ', '.join(compression_methods) self.ui_log.error("") self.ui_log.error("Invalid compression specified: " + method) self.ui_log.error("Valid types are: " + compression_list) self.ui_log.error("") self._exit(1) self._set_archive() self._make_archive_paths() return except (OSError, IOError) as e: # we must not use the logging subsystem here as it is potentially # in an inconsistent or unreliable state (e.g. an EROFS for the # file system containing our temporary log files). if e.errno in fatal_fs_errors: print("") print(" %s while setting up archive" % e.strerror) print("") else: raise e except Exception as e: import traceback self.ui_log.error("") self.ui_log.error(" Unexpected exception setting up archive:") traceback.print_exc(e) self.ui_log.error(e) self._exit(1) def setup(self): msg = "[%s:%s] executing 'sosreport %s'" self.soslog.info(msg % (__name__, "setup", " ".join(self._args))) self.ui_log.info(_(" Setting up plugins ...")) for plugname, plug in self.loaded_plugins: try: plug.archive = self.archive plug.setup() except KeyboardInterrupt: raise except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while setting up plugins" % e.strerror) self.ui_log.error("") self._exit(1) if self.raise_plugins: raise self._log_plugin_exception(plugname, "setup") except: if self.raise_plugins: raise self._log_plugin_exception(plugname, "setup") def version(self): """Fetch version information from all plugins and store in the report version file""" versions = [] versions.append("sosreport: %s" % __version__) for plugname, plug in self.loaded_plugins: versions.append("%s: %s" % (plugname, plug.version)) self.archive.add_string(content="\n".join(versions), dest='version.txt') def collect(self): self.ui_log.info(_(" Running plugins. Please wait ...")) self.ui_log.info("") plugruncount = 0 for i in zip(self.loaded_plugins): plugruncount += 1 plugname, plug = i[0] status_line = (" Running %d/%d: %s... " % (plugruncount, len(self.loaded_plugins), plugname)) if self.opts.verbosity == 0: status_line = "\r%s" % status_line else: status_line = "%s\n" % status_line if not self.opts.quiet: sys.stdout.write(status_line) sys.stdout.flush() try: plug.collect() except KeyboardInterrupt: raise except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while collecting plugin data" % e.strerror) self.ui_log.error("") self._exit(1) if self.raise_plugins: raise self._log_plugin_exception(plugname, "collect") except: if self.raise_plugins: raise self._log_plugin_exception(plugname, "collect") self.ui_log.info("") def report(self): for plugname, plug in self.loaded_plugins: for oneFile in plug.copied_files: try: self.xml_report.add_file(oneFile["srcpath"], os.stat(oneFile["srcpath"])) except: pass try: self.xml_report.serialize_to_file(os.path.join(self.rptdir, "sosreport.xml")) except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while writing report data" % e.strerror) self.ui_log.error("") self._exit(1) def plain_report(self): report = Report() for plugname, plug in self.loaded_plugins: section = Section(name=plugname) for alert in plug.alerts: section.add(Alert(alert)) if plug.custom_text: section.add(Note(plug.custom_text)) for f in plug.copied_files: section.add(CopiedFile(name=f['srcpath'], href=".." + f['dstpath'])) for cmd in plug.executed_commands: section.add(Command(name=cmd['exe'], return_code=0, href="../" + cmd['file'])) for content, f in plug.copy_strings: section.add(CreatedFile(name=f)) report.add(section) try: fd = self.get_temp_file() fd.write(str(PlainTextReport(report))) fd.flush() self.archive.add_file(fd.name, dest=os.path.join('sos_reports', 'sos.txt')) except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while writing text report" % e.strerror) self.ui_log.error("") self._exit(1) def html_report(self): try: self._html_report() except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while writing HTML report" % e.strerror) self.ui_log.error("") self._exit(1) def _html_report(self): # Generate the header for the html output file rfd = self.get_temp_file() rfd.write(""" Sos System Report """) # Make a pass to gather Alerts and a list of module names allAlerts = deque() plugNames = deque() for plugname, plug in self.loaded_plugins: for alert in plug.alerts: allAlerts.append('%s: %s' % (plugname, plugname, alert)) plugNames.append(plugname) # Create a table of links to the module info rfd.write("

Loaded Plugins:

") rfd.write("\n") rr = 0 for i in range(len(plugNames)): rfd.write('\n' % (plugNames[i], plugNames[i])) rr = divmod(i, 4)[1] if (rr == 3): rfd.write('') if not (rr == 3): rfd.write('') rfd.write('
%s
\n') rfd.write('

Alerts:

') rfd.write('
    ') for alert in allAlerts: rfd.write('
  • %s
  • ' % alert) rfd.write('
') # Call the report method for each plugin for plugname, plug in self.loaded_plugins: try: html = plug.report() except: if self.raise_plugins: raise else: rfd.write(html) rfd.write("") rfd.flush() self.archive.add_file(rfd.name, dest=os.path.join('sos_reports', 'sos.html')) def postproc(self): for plugname, plug in self.loaded_plugins: try: plug.postproc() except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while post-processing plugin data" % e.strerror) self.ui_log.error("") self._exit(1) if self.raise_plugins: raise self._log_plugin_exception(plugname, "postproc") except: if self.raise_plugins: raise self._log_plugin_exception(plugname, "postproc") 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: old_umask = os.umask(0o077) if not self.opts.quiet: print(_("Creating compressed archive...")) # compression could fail for a number of reasons try: final_filename = self.archive.finalize( self.opts.compression_type) except (OSError, IOError) as e: if e.errno in fatal_fs_errors: self.ui_log.error("") self.ui_log.error(" %s while finalizing archive" % e.strerror) self.ui_log.error("") self._exit(1) except: if self.opts.debug: raise else: return False finally: os.umask(old_umask) else: final_filename = self.archive.get_archive_path() self.policy.display_results(final_filename, build=self.opts.build) self.tempfile_util.clean() return True def verify_plugins(self): if not self.loaded_plugins: self.soslog.error(_("no valid plugins were enabled")) return False return True def set_global_plugin_option(self, key, value): self.global_plugin_options[key] = value def execute(self): try: 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() if self.opts.list_plugins: self.list_plugins() return True if self.opts.list_profiles: self.list_profiles() return True # verify that at least one plug-in is enabled if not self.verify_plugins(): return False self.batch() self.prework() self.setup() self.collect() if not self.opts.noreport: self.report() self.html_report() self.plain_report() self.postproc() self.version() return self.final_work() except (OSError, SystemExit, KeyboardInterrupt): try: # archive and tempfile cleanup may fail due to a fatal # OSError exception (ENOSPC, EROFS etc.). if self.archive: self.archive.cleanup() if self.tempfile_util: self.tempfile_util.clean() except: pass return False def main(args): """The main entry point""" sos = SoSReport(args) sos.execute() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/AUTHORS0000644000175000017500000000307112625313241016555 0ustar cariboucaribouIndividuals ----------- Adam Stokes Ben Turner Bharani C.V. Brent Eagles Bryn M. Reeves Chris J Arges Coty Sutherland Eoghan Glynn Eric Williams Eugene Teo Flavio Percoco Gary Kotton Guy Streeter James Hunt Jeff Dutton Jeff Peeler Jeremy Agee Jesse Jaggars Joey Boggs John Berninger Jorge Niedbalski Justin Payne Keith Kearnan Kent Lamb Louis Bouchard Lukas Zapletal Marc Sauton Michael Kerrin Michele Baldessari Navid Sheikhol-Eslami Pierre Amadio Pierre Carrier Raphael Badin Ranjith Rajaram Sadique Puthen Shijoe George Steve Conklin Tomas Smetana Vasant Hegde Companies --------- Red Hat, Inc. Rackspace US, Inc. EMC Corporation Canonical, Ltd. IBM Corporation Hewlett-Packard Development Company, L.P. sosreport-3.2+git276-g7da50d6/__run__.py0000755000175000017500000000140312625313241017457 0ustar cariboucaribou# 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.sosreport import main import sys main(sys.argv[1:]) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/Makefile0000644000175000017500000000654412605172031017153 0ustar cariboucaribou# # Makefile for sos system support tools # NAME = sos VERSION := $(shell echo `awk '/^Version:/ {print $$2}' sos.spec`) MAJOR := $(shell echo $(VERSION) | cut -f 1 -d '.') MINOR := $(shell echo $(VERSION) | cut -f 2 -d '.') RELEASE := $(shell echo `awk '/^Release:/ {gsub(/\%.*/,""); print $2}' sos.spec`) REPO = https://github.com/sosreport/sos SUBDIRS = po sos sos/plugins sos/policies docs PYFILES = $(wildcard *.py) # OS X via brew # MSGCAT = /usr/local/Cellar/gettext/0.18.1.1/bin/msgcat MSGCAT = msgcat DIST_BUILD_DIR = dist-build RPM_DEFINES = --define "_topdir %(pwd)/$(DIST_BUILD_DIR)" \ --define "_builddir %{_topdir}" \ --define "_rpmdir %{_topdir}" \ --define "_srcrpmdir %{_topdir}" \ --define "_specdir %{_topdir}" \ --define "_sourcedir %{_topdir}" RPM = rpmbuild RPM_WITH_DIRS = $(RPM) $(RPM_DEFINES) ARCHIVE_DIR = $(DIST_BUILD_DIR)/$(NAME)-$(VERSION) DEB_ARCHIVE_DIR = $(DIST_BUILD_DIR)/$(NAME)report-$(VERSION) SRC_BUILD = $(DIST_BUILD_DIR)/sdist PO_DIR = $(SRC_BUILD)/sos/po .PHONY: docs docs: make -C docs html man build: for d in $(SUBDIRS); do make -C $$d; [ $$? = 0 ] || exit 1 ; done install: updateversion mkdir -p $(DESTDIR)/usr/sbin mkdir -p $(DESTDIR)/usr/share/man/man1 mkdir -p $(DESTDIR)/usr/share/man/man5 mkdir -p $(DESTDIR)/usr/share/$(NAME)/extras @gzip -c man/en/sosreport.1 > sosreport.1.gz @gzip -c man/en/sos.conf.5 > sos.conf.5.gz mkdir -p $(DESTDIR)/etc install -m755 sosreport $(DESTDIR)/usr/sbin/sosreport install -m644 sosreport.1.gz $(DESTDIR)/usr/share/man/man1/. install -m644 sos.conf.5.gz $(DESTDIR)/usr/share/man/man5/. install -m644 AUTHORS README.md $(DESTDIR)/usr/share/$(NAME)/. install -m644 $(NAME).conf $(DESTDIR)/etc/$(NAME).conf for d in $(SUBDIRS); do make DESTDIR=`cd $(DESTDIR); pwd` -C $$d install; [ $$? = 0 ] || exit 1; done updateversion: sed 's/@SOSVERSION@/$(VERSION)/g' sos/__init__.py.in > sos/__init__.py $(NAME)-$(VERSION).tar.gz: clean @mkdir -p $(ARCHIVE_DIR) @tar -cv sosreport sos docs man po sos.conf AUTHORS LICENSE README.md sos.spec Makefile | tar -x -C $(ARCHIVE_DIR) @tar Ccvzf $(DIST_BUILD_DIR) $(DIST_BUILD_DIR)/$(NAME)-$(VERSION).tar.gz $(NAME)-$(VERSION) --exclude-vcs $(NAME)report_$(VERSION).orig.tar.gz: clean @mkdir -p $(DEB_ARCHIVE_DIR) @tar --exclude-vcs \ --exclude=.travis.yml \ --exclude=debian \ --exclude=$(DIST_BUILD_DIR) -cv . | tar -x -C $(DEB_ARCHIVE_DIR) @tar Ccvzf $(DIST_BUILD_DIR) $(DIST_BUILD_DIR)/$(NAME)report_$(VERSION).orig.tar.gz $(NAME)report-$(VERSION) @mv $(DIST_BUILD_DIR)/$(NAME)report_$(VERSION).orig.tar.gz . @rm -Rf $(DIST_BUILD_DIR) clean: @rm -fv *~ .*~ changenew ChangeLog.old $(NAME)-$(VERSION).tar.gz sosreport.1.gz sos.conf.5.gz @rm -rf rpm-build @for i in `find . -iname *.pyc`; do \ rm $$i; \ done; \ for d in $(SUBDIRS); do make -C $$d clean ; done srpm: clean $(NAME)-$(VERSION).tar.gz $(RPM_WITH_DIRS) -ts $(DIST_BUILD_DIR)/$(NAME)-$(VERSION).tar.gz rpm: clean $(NAME)-$(VERSION).tar.gz $(RPM_WITH_DIRS) -tb $(DIST_BUILD_DIR)/$(NAME)-$(VERSION).tar.gz po: clean mkdir -p $(PO_DIR) for po in `ls po/*.po`; do \ $(MSGCAT) -p -o $(PO_DIR)/sos_$$(basename $$po | awk -F. '{print $$1}').properties $$po; \ done; \ cp $(PO_DIR)/sos_en.properties $(PO_DIR)/sos_en_US.properties cp $(PO_DIR)/sos_en.properties $(PO_DIR)/sos.properties test: nosetests -v --with-cover --cover-package=sos --cover-html sosreport-3.2+git276-g7da50d6/sosreport0000755000175000017500000000160212433366740017502 0ustar cariboucaribou#!/usr/bin/python # 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. """ sos entry point. """ import sys try: from sos.sosreport import main except KeyboardInterrupt: raise SystemExit() if __name__ == '__main__': main(sys.argv[1:]) # vim:ts=4 et sw=4 sosreport-3.2+git276-g7da50d6/pylintrc0000644000175000017500000002337312433342602017303 0ustar cariboucaribou# lint Python modules using external checkers. # # This is the main checker controling the other ones and the reports # generation. It is itself both a raw checker and an astng checker in order # to: # * handle message activation / deactivation at the module level # * handle some basic but necessary stats'data (number of classes, methods...) # # This checker also defines the following reports: # * R0001: Total errors / warnings # * R0002: % errors / warnings by module # * R0003: Messages # * R0004: Global evaluation [MASTER] # Profiled execution. profile=no # Add to the black list. It should be a base name, not a # path. You may set this option multiple times. ignore=CVS # Pickle collected data for later comparisons. persistent=yes # Set the cache size for astng objects. cache-size=500 # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= [REPORTS] # Tells wether to display a full report or only the messages reports=yes # Use HTML as output format instead of text html=no # Use a parseable text output format, so your favorite text editor will be able # to jump to the line corresponding to a message. parseable=yes # Colorizes text output using ansi escape codes color=no # Put messages in a separate file for each module / package specified on the # command line instead of printing them on stdout. Reports (if any) will be # written in a file name "pylint_global.[txt|html]". files-output=no # Python expression which should return a note less than 10 (10 is the highest # note).You have access to the variables errors warning, statement which # respectivly contain the number of errors / warnings messages and the total # number of statements analyzed. This is used by the global evaluation report # (R0004). evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) # Add a comment according to your evaluation note. This is used by the global # evaluation report (R0004). comment=no # Include message's id in output include-ids=yes # checks for # * unused variables / imports # * undefined variables # * redefinition of variable from builtins or from an outer scope # * use of variable before assigment # [VARIABLES] # Enable / disable this checker enable-variables=yes # Tells wether we should check for unused import in __init__ files. init-import=no # A regular expression matching names used for dummy variables (i.e. not used). dummy-variables-rgx=_|dummy # List of additional names supposed to be defined in builtins. Remember that # you should avoid to define new builtins when possible. additional-builtins=_ # try to find bugs in the code using type inference # [TYPECHECK] # Enable / disable this checker enable-typecheck=yes # Tells wether missing members accessed in mixin class should be ignored. A # mixin class is detected if its name ends with "mixin" (case insensitive). ignore-mixin-members=yes # When zope mode is activated, consider the acquired-members option to ignore # access to some undefined attributes. zope=no # List of members which are usually get through zope's acquisition mecanism and # so shouldn't trigger E0201 when accessed (need zope=yes to be considered. acquired-members=REQUEST,acl_users,aq_parent # checks for : # * doc strings # * modules / classes / functions / methods / arguments / variables name # * number of arguments, local variables, branchs, returns and statements in # functions, methods # * required module attributes # * dangerous default values as arguments # * redefinition of function / method / class # * uses of the global statement # # This checker also defines the following reports: # * R0101: Statistics by type [BASIC] # Enable / disable this checker enable-basic=yes #disable-msg=C0121 # Required attributes for module, separated by a comma required-attributes= # Regular expression which should only match functions or classes name which do # not require a docstring no-docstring-rgx=__.*__ # Regular expression which should only match correct module names module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ # Regular expression which should only match correct module level names const-rgx=(([A-Z_][A-Z1-9_]*)|(__.*__))$ # Regular expression which should only match correct class names class-rgx=[A-Z_][a-zA-Z0-9]+$ # Regular expression which should only match correct function names function-rgx=[a-z_][A-Za-z0-9_]{2,30}$ # Regular expression which should only match correct method names method-rgx=[a-z_][A-Za-z0-9_]{2,30}$ # Regular expression which should only match correct instance attribute names attr-rgx=[a-z_][A-Za-z0-9_]{2,30}$ # Regular expression which should only match correct argument names argument-rgx=[a-z_][A-Za-z0-9_]{2,30}$ # Regular expression which should only match correct variable names variable-rgx=[a-z_][A-Za-z0-9_]{0,30}$ # Regular expression which should only match correct list comprehension / # generator expression variable names inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ # Good variable names which should always be accepted, separated by a comma good-names=i,j,k,ex,Run,_ # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata # List of builtins function names that should not be used, separated by a comma bad-functions=map,filter,apply,input # checks for sign of poor/misdesign: # * number of methods, attributes, local variables... # * size, complexity of functions, methods # [DESIGN] # Enable / disable this checker enable-design=yes # Maximum number of arguments for function / method max-args=5 # Maximum number of locals for function / method body max-locals=15 # Maximum number of return / yield for function / method body max-returns=6 # Maximum number of branch for function / method body max-branchs=12 # Maximum number of statements in function / method body max-statements=50 # Maximum number of parents for a class (see R0901). max-parents=7 # Maximum number of attributes for a class (see R0902). max-attributes=7 # Minimum number of public methods for a class (see R0903). min-public-methods=2 # Maximum number of public methods for a class (see R0904). max-public-methods=20 # checks for : # * methods without self as first argument # * overriden methods signature # * access only to existant members via self # * attributes not defined in the __init__ method # * supported interfaces implementation # * unreachable code # [CLASSES] # Enable / disable this checker enable-classes=yes # List of interface methods to ignore, separated by a comma. This is used for # instance to not check methods defines in Zope's Interface base class. ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by # List of method names used to declare (i.e. assign) instance attributes. defining-attr-methods=__init__,__new__,setUp # checks for # * external modules dependencies # * relative / wildcard imports # * cyclic imports # * uses of deprecated modules # # This checker also defines the following reports: # * R0401: External dependencies # * R0402: Modules dependencies graph [IMPORTS] # Enable / disable this checker enable-imports=no # Deprecated modules which should not be used, separated by a comma deprecated-modules=regsub,string,TERMIOS,Bastion,rexec # Create a graph of every (i.e. internal and external) dependencies in the # given file (report R0402 must not be disabled) import-graph= # Create a graph of external dependencies in the given file (report R0402 must # not be disabled) ext-import-graph= # Create a graph of internal dependencies in the given file (report R0402 must # not be disabled) int-import-graph= # checks for usage of new style capabilities on old style classes and # other new/old styles conflicts problems # * use of property, __slots__, super # * "super" usage # * raising a new style class as exception # [NEWSTYLE] # Enable / disable this checker enable-newstyle=yes # checks for # * excepts without exception filter # * string exceptions # [EXCEPTIONS] # Enable / disable this checker enable-exceptions=yes # checks for : # * unauthorized constructions # * strict indentation # * line length # * use of <> instead of != # [FORMAT] # Enable / disable this checker enable-format=yes # Maximum number of characters on a single line. max-line-length=132 # Maximum number of lines in a module max-module-lines=1000 # String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' # checks for similarities and duplicated code. This computation may be # memory / CPU intensive, so you should disable it if you experiments some # problems. # # This checker also defines the following reports: # * R0801: Duplication [SIMILARITIES] # Enable / disable this checker enable-similarities=yes # Minimum lines number of a similarity. min-similarity-lines=4 # Ignore comments when computing similarities. ignore-comments=yes # Ignore docstrings when computing similarities. ignore-docstrings=yes # checks for: # * warning notes in the code like FIXME, XXX # * PEP 263: source code with non ascii character but no encoding declaration # [MISCELLANEOUS] # Enable / disable this checker enable-miscellaneous=yes # List of note tags to take in consideration, separated by a comma. Default to # FIXME, XXX, TODO notes=FIXME,XXX,TODO # does not check anything but gives some raw metrics : # * total number of lines # * total number of code lines # * total number of docstring lines # * total number of comments lines # * total number of empty lines # # This checker also defines the following reports: # * R0701: Raw metrics [METRICS] # Enable / disable this checker enable-metrics=no sosreport-3.2+git276-g7da50d6/LICENSE0000644000175000017500000004311412433342602016514 0ustar cariboucaribou GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. sosreport-3.2+git276-g7da50d6/man/0000755000175000017500000000000012433342602016257 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/man/en/0000755000175000017500000000000012625313241016661 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/man/en/sosreport.10000644000175000017500000001340712625313241021010 0ustar cariboucaribou.TH SOSREPORT 1 "Mon Mar 25 2013" .SH NAME sosreport \- Collect and package diagnostic and support data .SH SYNOPSIS .B sosreport [-l|--list-plugins]\fR [-n|--skip-plugins plugin-names]\fR [-e|--enable-plugins plugin-names]\fR [-o|--only-plugins plugin-names]\fR [-a|--alloptions] [-v|--verbose]\fR [-k plug.opt|--plugin-option plug.opt]\fR [--no-report] [--config-file conf]\fR [--batch] [--build] [--debug]\fR [--name name] [--case-id id] [--ticket-number nr] [-s|--sysroot SYSROOT]\fR [-c|--chroot {auto|always|never}\fR [--tmp-dir directory]\fR [-p|--profile profile-name]\fR [--list-profiles]\fR [--verify]\fR [--log-size]\fR [--all-logs]\fR [-z|--compression-type method]\fR [--experimental]\fR [-h|--help]\fR .SH DESCRIPTION \fBsosreport\fR generates an archive of configuration and diagnostic information from the running system. The archive may be stored locally or centrally for recording or tracking purposes or may be sent to technical support representatives, developers or system administrators to assist with technical fault-finding and debugging. .LP Sos is modular in design and is able to collect data from a wide range of subsystems and packages that may be installed. An XML or HTML report summarizing the collected information is optionally generated and stored within the archive. .SH OPTIONS .TP .B \-l, \--list-plugins List all available plugins and their options. Plug-ins that would not be enabled by the current configuration are listed separately. .TP .B \-n, --skip-plugins PLUGNAME[,PLUGNAME] Disable the specified plugin(s). Multiple plug-ins may be specified by repeating the option or as a comma-separated list. .TP .B \-e, --enable-plugins PLUGNAME[,PLUGNAME] Enable the specified plugin(s). Multiple plug-ins may be specified by repeating the option or as a comma-separated list. .TP .B \-o, --only-plugins PLUGNAME[,PLUGNAME] Enable the specified plugin(s) only (all other plugins should be disabled). Multiple plugins may be specified by repeating the option or as a comma-separated list. .TP .B \-k PLUGNAME.PLUGOPT[=VALUE], \--plugin-option=PLUGNAME.PLUGOPT[=VALUE] Specify plug-in options. The option PLUGOPT is enabled, or set to the specified value in the plug-in PLUGNAME. .TP .B \-a, \--alloptions Set all boolean options to True for all enabled plug-ins. .TP .B \-v, \--verbose Increase logging verbosity. May be specified multiple times to enable additional debugging messages. .TP .B \-q, \--quiet Only log fatal errors to stderr. .TP .B \--no-report Disable HTML/XML report writing. .TP .B \--config-file CONFIG Specify alternate configuration file. .TP .B \-s, \--sysroot SYSROOT Specify an alternate root file system path. Useful for collecting reports from containers and images. .TP .B \-c, \--chroot {auto|always|never} Set the chroot mode. When \--sysroot is used commands default to executing with SYSROOT as the root directory (unless disabled by a specific plugin). This can be overriden by setting \--chroot to "always" (alwyas chroot) or "never" (always run in the host namespace). .TP .B \--tmp-dir DIRECTORY Specify alternate temporary directory to copy data as well as the compressed report. .TP .B \--list-profiles Display a list of available profiles and the plugins that they enable. .TP .B \-p, \--profile NAME Only run plugins that correspond to the given profile. Multple profiles may be specified as a comma-separated list; the set of plugins executed is the union of each of the profile's plugin sets. Currently defined profiles include: boot, cluster, desktop, debug, hardware, identity, network, openstack, packagemanager, security, services, storage, sysmgmt, system, performance, virt, and webserver. .TP .B \--verify Instructs plugins to perform plugin-specific verification during data collection. This may include package manager verification, log integrity testing or other plugin defined behaviour. Use of \--verify may cause the time taken to generate a report to be considerably longer. .TP .B \--log-size Places a global limit on the size of any collected set of logs. The limit is applied separately for each set of logs collected by any plugin. .TP .B \--all-logs Tell plugins to collect all possible log data ignoring any size limits and including logs in non-default locations. This option may significantly increase the size of reports. .TP .B \-z, \--compression-type METHOD Override the default compression type specified by the active policy. .TP .TP .B \--batch Generate archive without prompting for interactive input. .TP .B \--name NAME Specify a name to be used for the archive. .TP .B \--case-id NUMBER Specify a case identifier to associate with the archive. Identifiers may include alphanumeric characters, commas and periods ('.'). Synonymous with \--ticket-number. .TP .B \--ticket-number NUMBER Specify a ticket number or other identifier to associate with the archive. Identifiers may include alphanumeric characters, commas and periods ('.'). Synonymous with \--case-id. .TP .B \--build Do not archive copied data. Causes sosreport to leave an uncompressed archive as a temporary file or directory tree. .TP .B \--debug Enable interactive debugging using the python debugger. Exceptions in sos or plug-in code will cause a trap to the pdb shell. .TP .B \--experimental Enable plugins marked as experimental. Experimental plugins may not have been tested for this port or may still be under active development. .TP .B \--help Display usage message. .SH MAINTAINER .nf Bryn M. Reeves .fi .SH AUTHORS & CONTRIBUTORS See \fBAUTHORS\fR file in /usr/share/doc/sosreport. .nf .SH TRANSLATIONS .nf Translations are handled by transifex (https://fedorahosted.org/transifex/) .fi .fi sosreport-3.2+git276-g7da50d6/man/en/sos.conf.50000644000175000017500000000145412433342602020503 0ustar cariboucaribou.TH "sos.conf" "5" "SOSREPORT" "sosreport configuration file" .SH NAME sos.conf \- sosreport configuration .SH DESCRIPTION .sp sosreport uses a configuration file at /etc/sos.conf. .SH PARAMETERS .sp There are two sections in the sosreport configuration file: plugins, and tunables. Options are set using 'ini'-style \fBname = value\fP pairs. Some options accept a comma separated list of values. .TP \fB[plugins]\fP disable Comma separated list of plugins to disable. .TP \fB[tunables]\fP plugin.option Alter available options for defined plugin. .SH EXAMPLES To disable the 'general' and 'filesys' plugins: .LP [plugins] .br disable = general, filesys .sp To disable rpm package verification in the RPM plugin: .LP [tunables] .br rpm.rpmva = off .br .SH FILES .sp /etc/sos.conf .SH SEE ALSO .sp sosreport(1) sosreport-3.2+git276-g7da50d6/setup.py0000644000175000017500000000426712625313241017227 0ustar cariboucaribou#!/usr/bin/env python from distutils.core import setup from distutils.command.build import build from distutils.command.install_data import install_data from distutils.dep_util import newer from distutils.log import warn, info, error import glob import os import subprocess import sys from sos import __version__ as VERSION PO_DIR = 'po' MO_DIR = os.path.join('build', 'mo') class BuildData(build): def run(self): build.run(self) for po in glob.glob(os.path.join(PO_DIR, '*.po')): lang = os.path.basename(po[:-3]) mo = os.path.join(MO_DIR, lang, 'sos.mo') directory = os.path.dirname(mo) if not os.path.exists(directory): os.makedirs(directory) if newer(po, mo): try: rc = subprocess.call(['msgfmt', '-o', mo, po]) if rc != 0: raise Warning("msgfmt returned %d" % (rc,)) except Exception as e: error("Failed gettext.") sys.exit(1) class InstallData(install_data): def run(self): self.data_files.extend(self._find_mo_files()) install_data.run(self) def _find_mo_files(self): data_files = [] for mo in glob.glob(os.path.join(MO_DIR, '*', 'sos.mo')): lang = os.path.basename(os.path.dirname(mo)) dest = os.path.join('share', 'locale', lang, 'LC_MESSAGES') data_files.append((dest, [mo])) return data_files setup(name='sosreport', version=VERSION, description="""Set of tools to gather troubleshooting data from a system 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.""", author='Bryn M. Reeves', author_email='bmr@redhat.com', url='https://github.com/sosreport/sos', license="GPLv2+", scripts=['sosreport'], data_files=[ ('share/man/man1', ['man/en/sosreport.1']), ('share/man/man5', ['man/en/sos.conf.5']), ], packages=['sos', 'sos.plugins', 'sos.policies'], cmdclass={'build': BuildData, 'install_data': InstallData}, requires=['six'], ) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos.spec0000644000175000017500000006072112433366740017203 0ustar cariboucaribou%{!?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.2 Release: 1%{?dist} Group: Applications/System Source0: http://people.redhat.com/breeves/sos/releases/sos-%{version}.tar.gz License: GPLv2+ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot BuildArch: noarch Url: http://fedorahosted.org/sos BuildRequires: python-devel BuildRequires: gettext BuildRequires: python-six Requires: libxml2-python Requires: rpm-python Requires: tar Requires: bzip2 Requires: xz Requires: python-six %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 %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 * Tue Sep 30 2014 Bryn M. Reeves = 3.2 - New upstream release * Wed Sep 17 2014 Bryn M. Reeves = 3.2-beta1 - New upstream beta release * Thu Jun 12 2014 Bryn M. Reeves = 3.2-alpha1 - New upstream alpha release * Mon Jan 27 2014 Bryn M. Reeves = 3.1-1 - New upstream release * Mon Jun 10 2013 Bryn M. Reeves = 3.0-1 - New upstream release * Thu May 23 2013 Bryn M. Reeves = 2.2-39 - Always invoke tar with '-f-' option Resolves: bz966602 * Mon Jan 21 2013 Bryn M. Reeves = 2.2-38 - Fix interactive mode regression when --ticket unspecified Resolves: bz822113 * Fri Jan 18 2013 Bryn M. Reeves = 2.2-37 - Fix propagation of --ticket parameter in interactive mode Resolves: bz822113 * Thu Jan 17 2013 Bryn M. Reeves = 2.2-36 - Revert OpenStack patch Resolves: bz840057 * Wed Jan 9 2013 Bryn M. Reeves = 2.2-35 - Report --name and --ticket values as defaults Resolves: bz822113 - Fix device-mapper command execution logging Resolves: bz824378 - Fix data collection and rename PostreSQL module to pgsql Resolves: bz852049 * Fri Oct 19 2012 Bryn M. Reeves = 2.2-34 - Add support for content delivery hosts to RHUI module Resolves: bz821323 * Thu Oct 18 2012 Bryn M. Reeves = 2.2-33 - Add Red Hat Update Infrastructure module Resolves: bz821323 - Collect /proc/iomem in hardware module Resolves: bz840975 - Collect subscription-manager output in general module Resolves: bz825968 - Collect rhsm log files in general module Resolves: bz826312 - Fix exception in gluster module on non-gluster systems Resolves: bz849546 - Fix exception in psql module when dbname is not given Resolves: bz852049 * Wed Oct 17 2012 Bryn M. Reeves = 2.2-32 - Collect /proc/pagetypeinfo in memory module Resolves: bz809727 - Strip trailing newline from command output Resolves: bz850433 - Add sanlock module Resolves: bz850779 - Do not collect archived accounting files in psacct module Resolves: bz850542 - Call spacewalk-debug from rhn module to collect satellite data Resolves: bz859142 * Mon Oct 15 2012 Bryn M. Reeves = 2.2-31 - Avoid calling volume status when collecting gluster statedumps Resolves: bz849546 - Use a default report name if --name is empty Resolves: bz822113 - Quote tilde characters passed to shell in RPM module Resolves: bz821005 - Collect KDC and named configuration in ipa module Resolves: bz825149 - Sanitize hostname characters before using as report path Resolves: bz822174 - Collect /etc/multipath in device-mapper module Resolves: bz817093 - New plug-in for PostgreSQL Resolves: bz852049 - Add OpenStack module Resolves: bz840057 - Avoid deprecated sysctls in /proc/sys/net Resolves: bz834594 - Fix error logging when calling external programs Resolves: bz824378 - Use ip instead of ifconfig to generate network interface lists Resolves: bz833170 * Wed May 23 2012 Bryn M. Reeves = 2.2-29 - Collect the swift configuration directory in gluster module Resolves: bz822442 - Update IPA module and related plug-ins Resolves: bz812395 * Fri May 18 2012 Bryn M. Reeves = 2.2-28 - Collect mcelog files in the hardware module Resolves: bz810702 * Wed May 02 2012 Bryn M. Reeves = 2.2-27 - Add nfs statedump collection to gluster module Resolves: bz752549 * Tue May 01 2012 Bryn M. Reeves = 2.2-26 - Use wildcard to match possible libvirt log paths Resolves: bz814474 * Mon Apr 23 2012 Bryn M. Reeves = 2.2-25 - Add forbidden paths for new location of gluster private keys Resolves: bz752549 * Fri Mar 9 2012 Bryn M. Reeves = 2.2-24 - Fix katello and aeolus command string syntax Resolves: bz752666 - Remove stray hunk from gluster module patch Resolves: bz784061 * Thu Mar 8 2012 Bryn M. Reeves = 2.2-22 - Correct aeolus debug invocation in CloudForms module Resolves: bz752666 - Update gluster module for gluster-3.3 Resolves: bz784061 - Add additional command output to gluster module Resolves: bz768641 - Add support for collecting gluster configuration and logs Resolves: bz752549 * Wed Mar 7 2012 Bryn M. Reeves = 2.2-19 - Collect additional diagnostic information for realtime systems Resolves: bz789096 - Improve sanitization of RHN user and case number in report name Resolves: bz771393 - Fix verbose output and debug logging Resolves: bz782339 - Add basic support for CloudForms data collection Resolves: bz752666 - Add support for Subscription Asset Manager diagnostics Resolves: bz752670 * Tue Mar 6 2012 Bryn M. Reeves = 2.2-18 - Collect fence_virt.conf in cluster module Resolves: bz760995 - Fix collection of /proc/net directory tree Resolves: bz730641 - Gather output of cpufreq-info when present Resolves: bz760424 - Fix brctl showstp output when bridges contain multiple interfaces Resolves: bz751273 - Add /etc/modprobe.d to kernel module Resolves: bz749919 - Ensure relative symlink targets are correctly handled when copying Resolves: bz782589 - Fix satellite and proxy package detection in rhn plugin Resolves: bz749262 - Collect stderr output from external commands Resolves: bz739080 - Collect /proc/cgroups in the cgroups module Resolve: bz784874 - Collect /proc/irq in the kernel module Resolves: bz784862 - Fix installed-rpms formatting for long package names Resolves: bz767827 - Add symbolic links for truncated log files Resolves: bz766583 - Collect non-standard syslog and rsyslog log files Resolves: bz771501 - Use correct paths for tomcat6 in RHN module Resolves: bz749279 - Obscure root password if present in anacond-ks.cfg Resolves: bz790402 - Do not accept embedded forward slashes in RHN usernames Resolves: bz771393 - Add new sunrpc module to collect rpcinfo for gluster systems Resolves: bz784061 * Tue Nov 1 2011 Bryn M. Reeves = 2.2-17 - Do not collect subscription manager keys in general plugin Resolves: bz750607 * Fri Sep 23 2011 Bryn M. Reeves = 2.2-16 - Fix execution of RHN hardware.py from hardware plugin Resolves: bz736718 - Fix hardware plugin to support new lsusb path Resolves: bz691477 * Fri Sep 09 2011 Bryn M. Reeves = 2.2-15 - Fix brctl collection when a bridge contains no interfaces Resolves: bz697899 - Fix up2dateclient path in hardware plugin Resolves: bz736718 * Mon Aug 15 2011 Bryn M. Reeves = 2.2-14 - Collect brctl show and showstp output Resolves: bz697899 - Collect nslcd.conf in ldap plugin Resolves: bz682124 * Sun Aug 14 2011 Bryn M. Reeves = 2.2-11 - Truncate files that exceed specified size limit Resolves: bz683219 - Add support for collecting Red Hat Subscrition Manager configuration Resolves: bz714293 - Collect /etc/init on systems using upstart Resolves: bz694813 - Don't strip whitespace from output of external programs Resolves: bz713449 - Collect ipv6 neighbour table in network module Resolves: bz721163 - Collect basic cgroups configuration data Resolves: bz729455 * Sat Aug 13 2011 Bryn M. Reeves = 2.2-10 - Fix collection of data from LVM2 reporting tools in devicemapper plugin Resolves: bz704383 - Add /proc/vmmemctl collection to vmware plugin Resolves: bz709491 * Fri Aug 12 2011 Bryn M. Reeves = 2.2-9 - Collect yum repository list by default Resolves: bz600813 - Add basic Infiniband plugin Resolves: bz673244 - Add plugin for scsi-target-utils iSCSI target Resolves: bz677124 - Fix autofs plugin LC_ALL usage Resolves: bz683404 - Fix collection of lsusb and add collection of -t and -v outputs Resolves: bz691477 - Extend data collection by qpidd plugin Resolves: bz726360 - Add ethtool pause, coalesce and ring (-a, -c, -g) options to network plugin Resolves: bz726427 * Thu Apr 07 2011 Bryn M. Reeves = 2.2-8 - Use sha256 for report digest when operating in FIPS mode Resolves: bz689387 * Tue Apr 05 2011 Bryn M. Reeves = 2.2-7 - Fix parted and dumpe2fs output on s390 Resolves: bz622784 * Fri Feb 25 2011 Bryn M. Reeves = 2.2-6 - Fix collection of chkconfig output in startup.py Resolves: bz659467 - Collect /etc/dhcp in dhcp.py plugin Resolves: bz676522 - Collect dmsetup ls --tree output in devicemapper.py Resolves: bz675559 - Collect lsblk output in filesys.py Resolves: bz679433 * Thu Feb 24 2011 Bryn M. Reeves = 2.2-4 - Fix collection of logs and config files in sssd.py Resolves: bz624162 - Add support for collecting entitlement certificates in rhn.py Resolves: bz678665 * Thu Feb 03 2011 Bryn M. Reeves = 2.2-3 - Fix cluster plugin dlm lockdump for el6 Resolves: bz622407 - Add sssd plugin to collect configuration and logs Resolves: bz624162 - Collect /etc/anacrontab in system plugin Resolves: bz622527 - Correct handling of redhat-release for el6 Resolves: bz622528 * Thu Jul 29 2010 Adam Stokes = 2.2-2 - Resolves: bz582259 - Resolves: bz585942 - Resolves: bz584253 - Resolves: bz581817 * Thu Jun 10 2010 Adam Stokes = 2.2-0 - Resolves: bz581921 - Resolves: bz584253 - Resolves: bz562651 - Resolves: bz566170 - Resolves: bz586450 - Resolves: bz588223 - Resolves: bz559737 - Resolves: bz586405 - Resolves: bz598978 - Resolves: bz584763 * Wed Apr 28 2010 Adam Stokes = 2.1-0 - Resolves: bz585923 - Resolves: bz585942 - Resolves: bz586409 - Resolves: bz586389 - Resolves: bz548096 - Resolves: bz557828 - Resolves: bz563637 - Resolves: bz584253 - Resolves: bz462823 - Resolves: bz528881 - Resolves: bz566170 - Resolves: bz578787 - Resolves: bz581817 - Resolves: bz581826 - Resolves: bz584695 - Resolves: bz568637 - Resolves: bz584767 - Resolves: bz586370 * Mon Apr 12 2010 Adam Stokes = 2.0-0 - Resolves: bz580015 * Tue Mar 30 2010 Adam Stokes = 1.9-3 - fix setup.py to autocompile translations and man pages - rebase 1.9 * Fri Mar 19 2010 Adam Stokes = 1.9-2 - updated translations * Thu Mar 04 2010 Adam Stokes = 1.9-1 - version bump 1.9 - replaced compression utility with xz - strip threading/multiprocessing - simplified progress indicator - pylint update - put global vars in class container - unittests - simple profiling - make use of xgettext as pygettext is deprecated * Mon Jan 18 2010 Adam Stokes = 1.8-21 - more sanitizing options for log files - rhbz fixes from RHEL version merged into trunk - progressbar update * Tue Nov 19 2009 Adam Stokes = 1.8-20 - dont copy unwanted files due to symlinks - More plugin enhancements * Tue Nov 5 2009 Adam Stokes = 1.8-18 - Option to enable selinux fixfiles check - Start of replacing Thread module with multiprocessing - Update translations - More checks against conf file versus command line opts * Tue Sep 9 2009 Adam Stokes = 1.8-16 - Update rh-upload-core to rh-upload and allows general files - Fix cluster plugin with pwd mangling invalidating xml - Cluster support detecting invalid fence_id and fence states - Read variables from conf file * Thu Jul 23 2009 Adam Stokes = 1.8-14 - resolves: rhbz512536 wrong group in spec file - resolves: rhbz498398 A series of refactoring patches to sos - resolves: rhbz501149 A series of refactoring patches to sos (2) - resolves: rhbz503804 remove obsolete translation - resolves: rhbz502455 tricking sosreport into rm -rf / - resolves: rhbz501146 branding in fedora * Mon Jul 20 2009 Adam Stokes = 1.8-13 - Add requirements for tar,bzip2 during minimal installs - More merges from reports against RHEL version of plugins - Remove unecessary definition of localdir in spec * Wed May 05 2009 Adam Stokes - 1.8-11 - Remove all instances of sysrq - Consistent macro usage in spec * Wed Feb 25 2009 Fedora Release Engineering - 1.8-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild * Mon Dec 29 2008 Adam Stokes - 1.8-5 - removed source defines as python manifest handles this * Fri Dec 19 2008 Adam Stokes - 1.8-4 - spec cleanup, fixed license, source - reworked Makefile to build properly * Thu Oct 23 2008 Adam Stokes - 1.8-1 - Resolves: bz459845 collect krb5.conf - Resolves: bz457880 include output of xm list and xm list --long - Resolves: bz457919 add support for openswan and ipsec-tools - Resolves: bz456378 capture elilo configuration - Resolves: bz445007 s390 support - Resolves: bz371251 hangs when running with a xen kernel where xend has not been started - Resolves: bz452705 Add /root/anaconda-ks-cfg to sosreport archive - Resolves: bz445510 Do not rely on env to execute python - Resolves: bz446868 add support for emc devices - Resolves: bz453797 fails to generate fdisk -l - Resolves: bz433183 does not collect ext3 information - Resolves: bz444838 systool is passed deprecated arguments - Resolves: bz455096 add %{INSTALLTIME:date} to rpm --qf collection - Resolves: bz332211 avoid hazardous filenames * Wed Nov 21 2007 Navid Sheikhol-Eslami - 1.8-0 - Resolves: bz368261 sosGetCommandOutput() does not block on hung processes - Resolves: bz361861 work-around missing traceback.format_exc() in RHEL4 - Resolves: bz394781 device-mapper: use /sbin/lvm_dump to collect dm related info - Resolves: bz386691 unattended --batch option - Resolves: bz371251 sos could hang when accessing /sys/hypervisor/uuid - 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 - Resolves: bz238778 added lspci -t - 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 - Resolves: bz332151 apply regex to case number in sysreport for RHEL4 - Resolves: bz332211 apply regex to case number in sysreport for RHEL5 - Resolves: bz400111 sos incorrectly reports cluster data in SMP machine * Wed Aug 13 2007 Navid Sheikhol-Eslami - 1.7-8 - added README.rh-upload-core * Mon Aug 13 2007 Navid Sheikhol-Eslami - 1.7-7 - Resolves: bz251927 SOS errata needs to be respin to match 4.6 code base - added extras/rh-upload-core script from David Mair * Mon Aug 9 2007 Navid Sheikhol-Eslami - 1.7-6 - more language fixes - added arabic, italian and french - package prepared for release - included sysreport as sysreport.legacy * Mon Aug 9 2007 Navid Sheikhol-Eslami - 1.7-5 - package obsoletes sysreport and creates a link pointing to sosreport - added some commands in cluster and process plugins - fixed html output (wrong links to cmds, thanks streeter) - process: back down sleep if D state doesn't change - Resolves: bz241277 Yum Plugin for sos - Resolves: bz247520 Spelling mistake in sosreport output - Resolves: bz247531 Feature: plugin to gather initial ramdisk scripts - Resolves: bz248252 sos to support language localization - Resolves: bz241282 Make SOS for RHEL 4 * Mon Aug 1 2007 Navid Sheikhol-Eslami - 1.7-4 - catch KeyboardInterrupt when entering sosreport name - added color output for increased readability - list was sorted twice, removing latter .sort() * Mon Jul 31 2007 Navid Sheikhol-Eslami - 1.7-3 - added preliminary problem diagnosis support - better i18n initialization - better user messages - more progressbar fixes - catch and log python exceptions in report - use python native commands to create symlinks - limit concurrent running threads * Mon Jul 28 2007 Navid Sheikhol-Eslami - 1.7-2 - initial language localization support - added italian translation * Mon Jul 16 2007 Navid Sheikhol-Eslami - 1.7-1 - split up command outputs in sub-directories (sos_command/plugin/command instead of sos_command/plugin.command) - fixed doExitCode() calling thread.wait() instead of join() - curses menu is disabled by default - multithreading is enabled by default - major progressbar changes (now has ETA) - multithreading fixes - plugins class descriptions shortened to fix better in --list-plugins - rpm -Va in plugins/rpm.py sets eta_weight to 200 (plugin 200 longer than other plugins, for ETA calculation) - beautified command output filenames in makeCommandFilename() * Mon Jul 12 2007 Navid Sheikhol-Eslami - 1.7-0 - curses menu disabled by default (enable with -c) - sosreport output friendlier to the user (and similar to sysreport) - smarter plugin listing which also shows options and disable/enabled plugins - require root permissions only for actual sosreport generation - fix in -k where option value was treated as string instead of int - made progressbar wider (60 chars) - selinux plugin is enabled only if selinux is also enabled on the system - made some errors less verbose to the user - made sosreport not copy files pointed by symbolic links (same as sysreport, we don't need /usr/bin/X or /sbin/ifup) - copy links as links (cp -P) - added plugin get_description() that returns a short decription for the plugin - guess sosreport name from system's name * Mon Jul 5 2007 Navid Sheikhol-Eslami - 1.6-5 - Yet more fixes to make package Fedora compliant. * Mon Jul 5 2007 Navid Sheikhol-Eslami - 1.6-4 - More fixes to make package Fedora compliant. * Mon Jul 2 2007 Navid Sheikhol-Eslami - 1.6-3 - Other fixes to make package Fedora compliant. * Mon Jul 2 2007 Navid Sheikhol-Eslami - 1.6-2 - Minor fixes. * Mon Jul 2 2007 Navid Sheikhol-Eslami - 1.6-1 - Beautified output of --list-plugins. - GPL licence is now included in the package. - added python-devel requirement for building package - Resolves: bz241282 fixed incompatibility with python from RHEL4 * Fri May 25 2007 Steve Conklin - 1.5-1 - Bumped version * Fri May 25 2007 Steve Conklin - 1.4-2 - Fixed a backtrace on nonexistent file in kernel plugin (thanks, David Robinson) * Mon Apr 30 2007 Steve Conklin - 1.4-1 - Fixed an error in option handling - Forced the file generated by traceroute to not end in .com - Fixed a problem with manpage - Added optional traceroute collection to networking plugin - Added clalance's patch to gather iptables info. - Fixes to the device-mapper plugin - Fixed a problem with installation of man page * Mon Apr 16 2007 Steve Conklin - 1.3-3 - including patches to fix the following: - Resolves: bz219745 sosreport needs a man page - Resolves: bz219667 sosreport does not terminate cleanly on ^C - Resolves: bz233375 Make SOS flag the situation when running on a fully virtu... - Resolves: bz234873 rhel5 sos needs to include rpm-va by default - Resolves: bz219669 sosreport multi-threaded option sometimes fails - Resolves: bz219671 RFE for sosreport - allow specification of plugins to be run - Resolves: bz219672 RFE - show progress while sosreport is running - Resolves: bz219673 Add xen information gathering to sosreport - Resolves: bz219675 Collect information related to the new driver update model - Resolves: bz219877 'Cancel' button during option selection only cancels sele... * Tue Feb 20 2007 John Berninger - 1.3-2 - Add man page * Fri Dec 15 2006 Steve Conklin - 1.3-1 - really fixed bz_219654 * Fri Dec 15 2006 Steve Conklin - 1.2-1 - fixed a build problem * Fri Dec 15 2006 Steve Conklin - 1.1-1 - Tighten permissions of tmp directory so only readable by creator bz_219657 - Don't print message 'Problem at path ...' bz_219654 - Removed useless message bz_219670 - Preserve file modification times bz_219674 - Removed unneeded message about files on copyProhibitedList bz_219712 * Wed Aug 30 2006 Steve Conklin - 1.0-1 - Seperated upstream and RPM versioning * Mon Aug 21 2006 Steve Conklin - 0.1-11 - Code cleanup, fixed a regression in threading * Mon Aug 14 2006 Steve Conklin - 0.1-10 - minor bugfixes, added miltithreading option, setup now quiet * Mon Jul 17 2006 Steve Conklin - 0.1-9 - migrated to svn on 108.redhat.com, fixed a problem with command output linking in report * Mon Jun 19 2006 Steve Conklin - 0.1-6 - Added LICENSE file containing GPL * Wed May 31 2006 Steve Conklin - 0.1-5 - Added fixes to network plugin and prepped for Fedora submission * Wed May 31 2006 John Berninger - 0.1-4 - Reconsolidated subpackages into one package per discussion with sconklin * Mon May 22 2006 John Berninger - 0.1-3 - Added ftp, ldap, mail, named, samba, squid SOS plugins - Fixed various errors in kernel and hardware plugins * Mon May 22 2006 John Benringer - 0.1-2 - split off cluster plugin into subpackage - correct file payload lists * Mon May 22 2006 John Berninger - 0.1-1 - initial package build sosreport-3.2+git276-g7da50d6/docs/0000755000175000017500000000000012625313241016434 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/docs/conf.py0000644000175000017500000002006512605172031017734 0ustar cariboucaribou#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # SoS documentation build configuration file, created by # sphinx-quickstart on Fri Aug 1 11:43:30 2014. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys import os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) sys.path.insert(0, os.path.abspath('..')) import sos # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = 'SoS' copyright = '2014, Bryn Reeves' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '3.2' # The full version, including alpha/beta/rc tags. release = '3.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'SoSdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('index', 'SoS.tex', 'SoS Documentation', 'Bryn Reeves', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'sos', 'SoS Documentation', ['Bryn Reeves'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'SoS', 'SoS Documentation', 'Bryn Reeves', 'SoS', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False sosreport-3.2+git276-g7da50d6/docs/reporting.rst0000644000175000017500000000027212433366740021211 0ustar cariboucaribou``sos.reporting`` --- Reporting Interface ========================================= .. automodule:: sos.reporting :noindex: :members: :undoc-members: :show-inheritance: sosreport-3.2+git276-g7da50d6/docs/index.rst0000644000175000017500000000507112435106707020306 0ustar cariboucaribouSoS === Sos is an extensible, portable, support data collection tool primarily aimed at Linux distributions and other UNIX-like operating systems. This is the SoS developer documentation, for user documentation refer to: https://github.com/sosreport/sos/wiki This project is hosted at: http://github.com/sosreport/sos For the latest version, to contribute, and for more information, please visit the project pages or join the mailing list. To clone the current master (development) branch run: .. code:: git clone git://github.com/sosreport/sos.git Reporting bugs ^^^^^^^^^^^^^^ Please report bugs via the mailing list or by opening an issue in the GitHub Issue Tracker Mailing list ^^^^^^^^^^^^^ `sos-devel `_ is the mailing list for any sos-related questions and discussion. Patch submissions and reviews are welcome too. Patches and pull requests ^^^^^^^^^^^^^^^^^^^^^^^^^ Patches can be submitted via the mailing list or as GitHub pull requests. If using GitHub please make sure your branch applies to the current master as a 'fast forward' merge (i.e. without creating a merge commit). Use the git rebase command to update your branch to the current master if necessary. Documentation ============= User and API `documentation `_ is automatically generated using `Sphinx `_ and `Read the Docs `_. Wiki ^^^^ `How to write a plugin `_ `How to write a policy `_ `Plugin options `_ To help get your changes merged quickly with as few revisions as possible please refer to the `Contributor Guidelines `_ when submitting patches or pull requests. Installation ============ Manual Installation ^^^^^^^^^^^^^^^^^^^ .. code:: to install locally (as root) ==> make install to build an rpm ==> make rpm to build a deb ==> make deb Pre-built Packaging ^^^^^^^^^^^^^^^^^^^ Fedora/RHEL users install via yum: ``yum install sos`` Debian(Sid) users install via apt: ``apt-get install sosreport`` Ubuntu(Saucy 13.10 and above) users install via apt: ``sudo apt-get install sosreport`` API === Plugin Reference ^^^^^^^^^^^^^^^^ .. toctree:: :maxdepth: 2 plugins Core Reference ^^^^^^^^^^^^^^ .. toctree:: :maxdepth: 2 archive policies reporting utilities sosreport-3.2+git276-g7da50d6/docs/Makefile0000644000175000017500000002344312625313241020102 0ustar cariboucaribou# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build DOCDESTDIR = ${DESTDIR}/usr/share/doc/sos # User-friendly check for sphinx-build ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) endif # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext install-dir install-html install-dirhtml install-singlehtml install-pickle install-json install-htmlhelp install-qthelp install-epub install-latex install-text install-man install-texinfo install-info install-gettext install-changes install-linkcheck install-doctest install-xml install-pseudoxml install help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " xml to make Docutils-native XML files" @echo " pseudoxml to make pseudoxml-XML files for display purposes" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: rm -rf $(BUILDDIR)/* install-dir: install -d -m 0755 ${DOCDESTDIR} html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." install-html: install-dir if test -d ${BUILDDIR}/html; then \ cp -r ${BUILDDIR}/html ${DOCDESTDIR}; \ else \ exit 0; \ fi dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." install-dirhtml: install-dir if test -d ${BUILDDIR}/dirhtml; then \ cp -r ${BUILDDIR}/dirhtml ${DOCDESTDIR}; \ else \ exit 0; \ fi singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." install-singlehtml: install-dir if test -d ${BUILDDIR}/singlehtml; then \ cp -r ${BUILDDIR}/singlehtml ${DOCDESTDIR}; \ else \ exit 0; \ fi pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." install-pickle: install-dir if test -d ${BUILDDIR}/pickle; then \ cp -r ${BUILDDIR}/pickle ${DOCDESTDIR}; \ else \ exit 0; \ fi json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." install-json: install-dir if test -d ${BUILDDIR}/json; then \ cp -r ${BUILDDIR}/json ${DOCDESTDIR}; \ else \ exit 0; \ fi htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." install-htmlhelp: install-dir if test -d ${BUILDDIR}/htmlhelp; then \ cp -r ${BUILDDIR}/htmlhelp ${DOCDESTDIR}; \ else \ exit 0; \ fi qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SoS.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SoS.qhc" install-qthelp: install-dir if test -d ${BUILDDIR}/qthelp; then \ cp -r ${BUILDDIR}/qthelp ${DOCDESTDIR}; \ else \ exit 0; \ fi devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/SoS" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SoS" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." install-epub: install-dir if test -d ${BUILDDIR}/epub; then \ cp -r ${BUILDDIR}/epub ${DOCDESTDIR}; \ else \ exit 0; \ fi latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." install-latex: install-dir if test -d ${BUILDDIR}/latex; then \ cp -r ${BUILDDIR}/latex ${DOCDESTDIR}; \ else \ exit 0; \ fi latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." latexpdfja: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through platex and dvipdfmx..." $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." install-text: install-dir if test -d ${BUILDDIR}/text; then \ cp -r ${BUILDDIR}/text ${DOCDESTDIR}; \ else \ exit 0; \ fi man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." install-man: if test -d ${BUILDDIR}/man; then \ gzip -c ${BUILDDIR}/man/sos.1 > ${BUILDDIR}/man/sos.1.gz; \ install -m644 ${BUILDDIR}/man/sos.1.gz $(DESTDIR)/usr/share/man/man1; \ else \ exit 0; \ fi texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." install-texinfo: install-dir if test -d ${BUILDDIR}/texinfo; then \ cp -r ${BUILDDIR}/texinfo ${DOCDESTDIR}; \ else \ exit 0; \ fi info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." install-info: install-dir install-texinfo gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." install-gettext: install-dir if test -d ${BUILDDIR}/locale; then \ cp -r ${BUILDDIR}/locale ${DOCDESTDIR}; \ else \ exit 0; \ fi changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." install-changes: install-dir if test -d ${BUILDDIR}/changes; then \ cp -r ${BUILDDIR}/changes ${DOCDESTDIR}; \ else \ exit 0; \ fi linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." install-linkcheck: install-dir if test -d ${BUILDDIR}/linkcheck; then \ cp -r ${BUILDDIR}/linkcheck ${DOCDESTDIR}; \ else \ exit 0; \ fi doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." install-doctest: install-dir if test -d ${BUILDDIR}/doctest; then \ cp -r ${BUILDDIR}/doctest ${DOCDESTDIR}; \ else \ exit 0; \ fi xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The XML files are in $(BUILDDIR)/xml." install-xml: install-dir if test -d ${BUILDDIR}/xml; then \ cp -r ${BUILDDIR}/xml ${DOCDESTDIR}; \ else \ exit 0; \ fi pseudoxml: $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml @echo @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." install-pseudoxml: install-dir if test -d ${BUILDDIR}/pseudoxml; then \ cp -r ${BUILDDIR}/pseudoxml ${DOCDESTDIR}; \ else \ exit 0; \ fi install: install-html install-dirhtml install-singlehtml install-pickle install-json install-htmlhelp install-qthelp install-epub install-latex install-text install-man install-texinfo install-info install-gettext install-changes install-linkcheck install-doctest install-xml install-pseudoxml sosreport-3.2+git276-g7da50d6/docs/utilities.rst0000644000175000017500000000027012433366740021211 0ustar cariboucaribou``sos.utilities`` --- Utilites Interface ======================================== .. automodule:: sos.utilities :noindex: :members: :undoc-members: :show-inheritance: sosreport-3.2+git276-g7da50d6/docs/archive.rst0000644000175000017500000000026012433366740020616 0ustar cariboucaribou``sos.archive`` --- Archive Interface ===================================== .. automodule:: sos.archive :noindex: :members: :undoc-members: :show-inheritance: sosreport-3.2+git276-g7da50d6/docs/plugins.rst0000644000175000017500000000025612433366740020663 0ustar cariboucaribou``sos.plugins`` --- Plugin Interface ==================================== .. automodule:: sos.plugins :noindex: :members: :undoc-members: :show-inheritance: sosreport-3.2+git276-g7da50d6/docs/policies.rst0000644000175000017500000000025712433366740021012 0ustar cariboucaribou``sos.policies`` --- Policy Interface =================================== .. automodule:: sos.policies :noindex: :members: :undoc-members: :show-inheritance: sosreport-3.2+git276-g7da50d6/README.md0000644000175000017500000000502012625313241016760 0ustar cariboucaribou[![Build Status](https://travis-ci.org/sosreport/sos.svg?branch=master)](https://travis-ci.org/sosreport/sos) # SoS Sos is an extensible, portable, support data collection tool primarily aimed at Linux distributions and other UNIX-like operating systems. This project is hosted at: * http://github.com/sosreport/sos For the latest version, to contribute, and for more information, please visit the project pages or join the mailing list. To clone the current master (development) branch run: ``` git clone git://github.com/sosreport/sos.git ``` ## Reporting bugs Please report bugs via the mailing list or by opening an issue in the [GitHub Issue Tracker][5] ## Mailing list The [sos-devel][4] is the mailing list for any sos-related questions and discussion. Patch submissions and reviews are welcome too. ## Patches and pull requests Patches can be submitted via the mailing list or as GitHub pull requests. If using GitHub please make sure your branch applies to the current master as a 'fast forward' merge (i.e. without creating a merge commit). Use the `git rebase` command to update your branch to the current master if necessary. Please refer to the [contributor guidelines][0] for guidance on formatting patches and commit messages. ## Documentation User and API [documentation][6] is automatically generated using [Sphinx][7] and [Read the Docs][8]. ### Wiki * [How to write a plugin][1] * [How to write a policy][2] * [Plugin options][3] To help get your changes merged quickly with as few revisions as possible please refer to the [Contributor Guidelines][0] when submitting patches or pull requests. ## Installation ### Manual Installation ``` You can simply run from the git checkout now ==> Ex: sudo ./sosreport -a to install locally (as root) ==> make install to build an rpm ==> make rpm ``` ### Pre-built Packaging Fedora/RHEL users install via yum: ``` yum install sos ``` Debian(Sid) users install via apt: ``` apt-get install sosreport ``` Ubuntu(Saucy 13.10 and above) users install via apt: ``` sudo apt-get install sosreport ``` [0]: https://github.com/sosreport/sos/wiki/Contribution-Guidelines [1]: https://github.com/sosreport/sos/wiki/How-to-Write-a-Plugin [2]: https://github.com/sosreport/sos/wiki/How-to-Write-a-Policy [3]: https://github.com/sosreport/sos/wiki/Plugin-options [4]: https://www.redhat.com/mailman/listinfo/sos-devel [5]: https://github.com/sosreport/sos/issues?state=open [6]: http://sos.readthedocs.org/en/latest/index.html# [7]: http://sphinx-doc.org/ [8]: https://www.readthedocs.org/ sosreport-3.2+git276-g7da50d6/po/0000755000175000017500000000000012433342602016122 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/po/sr.po0000644000175000017500000001713312433342602017113 0ustar cariboucaribou# Serbian translations for sos # Copyright (C) 2007 Red Hat, Inc. # This file is distributed under the same license as the sos package. # Miloš Komarčević , 2009. # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-28 23:56+0100\n" "Last-Translator: Miloš Komarčević \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Не могу да направим привремени директоријум." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (верзија %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "додатак %s се није оверио, прескачем" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "додатак %s се није инсталирао, прескачем" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "нису пронађени ваљани додаци" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Следећи додаци су тренутно укључени:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Нема укључених додатака." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Следећи додаци су тренутно искључени:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Доступне су следеће опције додатка:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Нема доступних опција додатка." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport захтева root дозволе за извршавање." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "нису укључени ваљани додаци" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Ова алатка ће сакупити неке детаљне информације о\n" "хардверу и поставци вашег %(distroa)s система.\n" "Информације се сакупљају и пакује се архива под\n" "/tmp, коју можете послати представнику за подршку.\n" "%(distrob)s ће употребити ове информације САМО у дијагностичке\n" "сврхе и биће сматране поверљивим информацијама.\n" "\n" "Овај процес може да потраје дуже док се не заврши.\n" "Никакве промене неће бите начињене на систему.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Притисните ENTER за наставак, или CTRL-C за излаз.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Један или више додатака су открили проблем са вашим подешавањима." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Прегледајте следеће поруке:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Да ли сигурно желите да наставите (d/n) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "d" #: ../sos/sosreport.py:685 msgid "Y" msgstr "D" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Покрећем додатке. Молимо сачекајте ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " стабло sosreport изградње се налази на : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Унесите ваш први иницијал и презиме [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Унесите број случаја за који правите овај извештај:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Правим компримовану архиву..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Шифрирам архиву..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Дошло је до грешке при шифровању вашег извештаја." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Ваш sos извештај је направљен и сачуван у:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum је: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Пошаљите ову датотеку вашем представнику подршке." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Нема дефинисане УРЛ адресе у датотеци подешавања." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Не могу да пошаљем на наведени УРЛ." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Појавио се проблем при слању вашег извештаја Red Hat подршци." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Ваш извештај је успешно послат на %s са именом:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Пренесите ово име вашем представнику подршке." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "додатак %s је прескочен (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "додатак %s није активан (употребите -e или -o да га укључите)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "додатак %s није наведен у списку --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "обрађујем опције од додатка: %s" sosreport-3.2+git276-g7da50d6/po/ml.po0000644000175000017500000002343012433342602017074 0ustar cariboucaribou# translation of sos.trunk.ml.po to # Malayalam translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Ani Peter , 2007. msgid "" msgstr "" "Project-Id-Version: sos.trunk.ml\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-05 21:23+0530\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: \n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "താല്‍ക്കാലിക ഡയറക്ടറി ഉണ്ടാക്കുവാന്‍ സാധ്യമായില്ല." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (%s ലക്കം)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "%s എന്നത് ശരിയായ പ്ളഗ്ഗിന്‍ അല്ല, വേണ്ടെന്ന് വയ്ക്കുന്നു" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "%s എന്ന പ്ളഗ്ഗിന്‍ ഇന്‍സ്റ്റോള്‍ ചെയ്യുവാന്‍ സാധ്യമല്ല, ഉപേക്ഷിക്കുന്നു" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ശരിയായ പ്ളഗ്ഗിനുകള്‍ ലഭ്യമല്ല" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "താഴെ പറഞ്ഞിരിക്കുന്ന പ്ളഗ്ഗിനുകള്‍ നിലവില്‍ സജീവമാണ്:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "ഒരു പ്ളഗ്ഗിനും സജ്ജമല്ല." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "താഴെ പറഞ്ഞിരിക്കുന്ന പ്ളഗ്ഗിനുകള്‍ നിലവില്‍ നിറ്‍ജ്ജീവമാണ്:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "താഴെ പറഞ്ഞിരിക്കുന്ന പ്ളഗ്ഗിന്‍ ഉപാധികള്‍ ലഭ്യമാണ്:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "പ്ളഗ്ഗിന്‍ ഉപാധികള്‍ ലഭ്യമല്ല." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport പ്റവറ്‍ത്തിപ്പിക്കുന്നതിനായി റൂട്ട് ആയിരിക്കണം." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "ശരിയായ പ്ളഗ്ഗിനുകള്‍ സജ്ജമല്ല" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "ഈ പ്രയോഗം നിങ്ങളുടെ %(distroa)s സിസ്റ്റവും ഹാര്‍ഡ്‌വെയറും\n" "സംബന്ധിച്ചുള്ള വിശദ വിവരങ്ങള്‍ ശേഖരിക്കുന്നു.ശേഖരിച്ച വിവരങ്ങള്‍\n" "ഒരു ആര്‍ക്കൈവായി /tmp എന്ന ഫോള്‍ഡറില്‍ സൂക്ഷിക്കുന്നു. നിങ്ങള്‍ക്കിതു്\n" "പിന്തുണ ലഭ്യമാക്കുന്നവര്‍ക്കു് അയയ്ക്കുവാന്‍ സാധിക്കുന്നു. പ്രശ്നങ്ങള്‍ അറിയുന്നതിനും\n" "പരിഹരിക്കുന്നതിനും മാത്രം %(distrob)s ഈ വിവരങ്ങള്‍ ഉപയോഗിക്കുന്നതാകുന്നു.\n" "ഇവ അതീവ രഹസ്യമായി സൂക്ഷിക്കപ്പെടുന്നു.\n" "\n" "ഈ പ്രക്രിയയ്ക്കായി കുറച്ച് സമയമെടുക്കുന്നു.\n" "നിങ്ങളുടെ സിസ്റ്റത്തില്‍ മാറ്റങ്ങള്‍ വരുത്തുന്നതല്ല.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "മുമ്പോട്ട് തുടരുന്നതിനായി ENTER അല്ലെങ്കില്‍ പുറത്ത് കടക്കുന്നതിനായി CTRL-C അമറ്‍ത്തുക.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "ഒന്നോ അതിലധികമോ പ്ളഗ്ഗിനുകള്‍ക്ക് നിങ്ങളുടെ ക്റമികരണത്തില്‍ തകരാറുണ്ട്." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "താഴെ പറഞ്ഞിരിക്കുന്ന സന്ദേശങ്ങള്‍ ദയവായി വായിക്കുക: " #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "നിങ്ങള്‍ക്ക് തുടരണമെന്ന് ഉറപ്പാണോ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " പ്ലഗിനുകള്‍ പ്രവര്‍ത്തിയ്ക്കുന്നു. ദയവായി കാത്തിരിയ്ക്കുക ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport ബിള്‍ഡ് ട്രീ സ്ഥിതി ചെയ്യുന്നതു് : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "ദയവായി നിങ്ങളുടെ ആദ്യത്തെ ഇനീഷ്യലും അവസാനത്തെ പേരും നല്‍കുക [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "ദയവായി ഈ റിപ്പോറ്‍ട്ടിനുള്ള കേസ് നംബറ്‍ ഇവിടെ നല്‍കുക: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "കംപ്രസ്സ്ഡ് ആറ്‍ക്കൈവ് ഉണ്ടാക്കുന്നു..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "ആറ്‍ക്കൈവ് എന്‍ക്രിപ്റ്റ് ചെയ്യുന്നു..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "നിങ്ങളുടെ റിപ്പോറ്‍ട്ട് എന്‍ക്രിപ്റ്റ് ചെയ്യുന്നതില്‍ ഒരു പ്രശ്നം നേരിട്ടു." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "നിങ്ങളുടെ sosreport ഉണ്ടാക്കി സൂക്ഷിച്ചിരിക്കുന്നത് ഇവിടെയാണ്:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum താഴെ പറഞ്ഞിരിക്കുന്നു: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "നിങ്ങള്‍ക്ക് പിന്തുണ നല്‍കുന്നവറ്‍ക്ക് ഈ ഫയല്‍ അയയ്ക്കുക." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "ക്രമീകരണ ഫയലില്‍ യുആര്‍എല്‍ നിഷ്കര്‍ഷിച്ചിട്ടില്ല." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "നല്‍കിയിരിക്കുന്ന URL-ലേക്ക് ഫയല്‍ അപ്ലോഡ് ചെയ്യുവാന്‍ സാധ്യമായില്ല " #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Red Hat-ലേക്ക് നിങ്ങളുടെ റിപ്പോറ്‍ട്ട് അയയ്ക്കുന്നതില്‍ ഏതോ പ്റശ്നം ഉണ്ടായിരിക്കുന്നു." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "നിങ്ങളുടെ രേഖ വിജയകരമായി ഈ പേരില്‍ %s-ലേക്കു് അപ്‌ലോഡ് ചെയ്തിരിയ്ക്കുന്നു:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "നിങ്ങള്‍ക്ക് പിന്തുണ ലഭ്യമാക്കുന്നവറ്‍ക്ക് ഈ പേര് അയയ്ക്കുക." sosreport-3.2+git276-g7da50d6/po/cs.po0000644000175000017500000001366512433342602017102 0ustar cariboucaribou# Czech translations for sos package. # Copyright (C) 2007 Free Software Foundation. # # Milan Keršláger , 2010. # msgid "" msgstr "" "Project-Id-Version: 1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-08-22 10:38+0100\n" "Last-Translator: Milan Keršláger \n" "Language-Team: Czech >\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Nelze vytvořit dočasný adresář." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (verze %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "plugin %s není validní, přeskakuji" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "plugin %s nejde nainstalovat, přeskakuji" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "žádné validní pluginy" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Právě jsou povoleny tyto pluginy:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Žádné pluginy nejsou povoleny." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Následující pluginy jsou právě zakázány:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "K dispozici jsou tato nastavení pluginů:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Žádné nastavení pro pluginy." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport vyžaduje pro poškození práva roota." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "Žádné validní pluginy nejsou povoleny." #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Nástroj sosreport sbírá některé podrobné informace o\n" "hardware počítače a nastavení systému %(distroa)s.\n" "Informace jsou uloženy do archivu v adresáři /tmp,\n" "abyste je mohli odeslat svému oddělení podpory.\n" "%(distrob)s použije tyto informace POUZE pro\n" "diagnostické potřeby a budou považovány za\n" "privátní.\n" "\n" "Celý proces bude chvíli trvat.\n" "V systému nebudou provedeny žádné změny.\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Pro pokračování stiskněte ENTER, pro přerušení CTRL+c.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Jeden nebo více pluginů detekovalo problém ve vaší konfiguraci." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Prohlédněte si následující hlášení:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Jste si jisti, že chcete pokračovat?" #: ../sos/sosreport.py:685 msgid "y" msgstr "a" #: ../sos/sosreport.py:685 msgid "Y" msgstr "A" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Spouštění pluginů. Čekejte prosím..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " strom pro vytvoření sosreportu je umístěn v: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Vložte své jméno a příjmení [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Vložte číslo hlášení, pro které vytváříte zprávu." #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Vytváření komprimovaného archivu..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Šifrování archivu..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Při šifrování zprávy se vyskytla chyba." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Váš sosreport byl vygenerován a uložen v:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum je:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Odešlete tento soubor svému oddělení podpory." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "V konfiguračním souboru není definováno URL." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Nelze uložit na uvedené URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Při odesílání zprávy do firmy Red Hat vznikla chyba." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Vaše zpráva byla úspěšně odeslána na %s pod jménem:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Komunikujte prosím s vaší podporou tohoto jména." sosreport-3.2+git276-g7da50d6/po/sk.po0000644000175000017500000001470712433342602017110 0ustar cariboucaribou# Slovak translations for sos package. # Copyright (C) 2007 ORGANIZATION # # Ondrej Šulek , 2009, 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-04-15 17:38+0200\n" "Last-Translator: Ondrej Šulek \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Lokalize 1.0\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Nepodarilo sa vytvoriť dočasný adresár." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (verzia %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "nie je možné overiť modul %s, preskakujem" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "nie je možné nainštalovať modul %s, preskakujem" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "nenájdené žiadne platné moduly" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Nasledujúce moduly sú aktuálne povolené:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Žiadny modul nie je povolený." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Nasledujúce moduly sú aktuálne zakázané:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Nasledujúce možnosti modulov sú dostupné:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nie sú dostupné žiadne možnosti modulov." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport vyžaduje root-ovský prístup" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "neboli povolené žiadne platné moduly" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Tento nástroj zhromažďuje podrobné informácie o\n" "hardvéry a nastavení systému %(distroa)s.\n" "Informácie sa zhromažďujú a archivujú v podobe balíčka \n" "v /tmp, odkiaľ ich môžete poslať zástupcovi technickej podpory.\n" "%(distrob)s bude používať tieto informácie LEN pre diagnostické\n" " účely a budú považované za dôverné.\n" "\n" "Tento proces môže chvíľu trvať.\n" "V systéme nebudú vykonané žiadne zmeny.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Stlačte ENTER na pokračovanie, alebo CTRL-C na ukončenie.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Jeden alebo viacero modulov má problémy s konfiguráciou." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Prosím skontrolujte nasledujúce správy:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Naozaj chcete pokračovať (a/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "a" #: ../sos/sosreport.py:685 msgid "Y" msgstr "A" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Moduly bežia. Prosím čakajte ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " strom pre vytvorenie sosreportu je umiestnený v : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Prosím zadajte svoje meno a priezvisko [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Prosím zadajte číslo, pod ktorým vygenerovať túto správu: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Vytváranie komprimovaného archívu..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Šifrovanie archívu..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Nastal problém pri šifrovaní vašej správy." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Váš sosreport bol vygenerovaný a uložený v :\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Kontrolný súčet MD5: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Prosím pošlite tento súbor zástupcovi technickej podpory." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nezadaná žiadna URL adresa v konfiguračnom súbore." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Nie je možné odoslať na zadanú adresu URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Nastal problém pri odosielaní vašej správy na podporu Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Vaša správa bola úspešne odoslaná na %s s názvom:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Prosím kontaktujte zástupcu technickej podpory s týmto názvom." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "modul %s preskočený (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "modul %s je neaktívny (použite -e alebo -o na jeho povolenie)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "modul %s nie je špecifikovaný v zozname --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "spracovávanie možností modulu: %s" sosreport-3.2+git276-g7da50d6/po/bn_IN.po0000644000175000017500000002165312433342602017456 0ustar cariboucaribou# translation of sos.trunk.po to Bengali INDIA # Bengali translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Runa Bhattacharjee , 2007, 2010. msgid "" msgstr "" "Project-Id-Version: sos.trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-08-05 13:46+0530\n" "Last-Translator: Runa Bhattacharjee \n" "Language-Team: Bengali INDIA \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "অস্থায়ী ডিরেক্টরি নির্মাণ করতে ব্যর্থ।" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (সংস্করণ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "প্লাগ-ইন %s অনুমোদন করা যায়নি, উপেক্ষা করা হচ্ছে" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "প্লাগ-ইন %s ইনস্টল করা যায়নি, উপেক্ষা করা হচ্ছে " #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "কোনো বৈধ প্লাগ-ইন পাওয়া যায়নি" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "নিম্নলিখিত প্লাগ-ইনগুলি বর্তমানে সক্রিয় করা হয়েছে:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "কোনো প্লাগ-ইন সক্রিয় নেই।" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "নিম্নলিখিত প্লাগ-ইনগুলি বর্তমানে নিষ্ক্রিয় অবস্থায় রয়েছে:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "প্লাগ-ইন সংক্রান্ত নিম্নলিখিত বিকল্পগুলি উপলব্ধ রয়েছে:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "প্লাগ-ইন সংক্রান্ত কোনো বিকল্প উপলব্ধ নয়।" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport সঞ্চালনের জন্য root ব্যবহারকারীর অনুমতি আবশ্যক।" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "কোনো বৈধ প্লাগ-ইন সক্রিয় করা হয়নি" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "এই সামগ্রীর সাহায্যে হার্ডওয়্যার ও %(distroa)s\n" "সিস্টেমের পরিকাঠামো সম্পর্কে বিশদ তথ্য সংগ্রহ করা হবে।\n" "তথ্য সংগ্রহের পরে /tmp ডিরেক্টরির অধীন একটি আর্কাইভ নির্মিত হয়।\n" "এই আর্কাইভটি আপনি সহায়তা প্রতিনিধির কাছে পাঠিয়ে দিতে পারবেন।\n" "%(distrob)s দ্বারা এই তথ্য শুধমাত্র সমস্যার কারণ নির্ণয় করার জন্য ব্যবহার করা হবে\n" "এবং এর গোপনীয়তা বজায় রাখা হবে।\n" "\n" "এই কর্ম সম্পন্ন হতে কিছু সময় ব্যয় হতে পারে।\n" "এর ফলে সিস্টেমে কোনো ধরনের পরিবর্তন করা হবে না।\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "এগিয়ে চলার জন্য ENTER টিপুন অথবা প্রস্থান করতে CTRL-C টিপুন।\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "এক অথবা অধিক প্লাগ-ইন দ্বারা আপনার কনফিগারেশনে সমস্যা সনাক্ত করা হয়েছে।" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "অনুগ্রহ করে নিম্নলিখিত বার্তাগুলি পরিদর্শন করুন:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "আপনি কি নিয়্চিতরূপে এগিয়ে যেতে ইচ্ছুক (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " প্লাগ-ইন সঞ্চালিত হচ্ছে। অনুগ্রহ করে অপেক্ষা করুন ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport বিল্ড-ট্রির অবস্থান : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "অনুগ্রহ করে নামের অদ্যাক্ষর ও পদবি লিখুন [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "বর্তমান রিপোর্ট নির্মাণের জন্য অনুগ্রহ করে প্রযোজ্য কেস সংখ্যা উল্লেখ করুন: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "কমপ্রেস করা আর্কাইভ নির্মাণ করুন..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "আর্কাইভ এনক্রিপ্ট করা হচ্ছে..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "রিপোর্ট এনক্রিপ্ট করতে সমস্যা।" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "আপনার sosreport নির্মাণ করে নিম্নলিখিত স্থানে সংরক্ষিত হয়েছে:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum হল: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "অনুগ্রহ করে সহায়তা প্রতিনিধিকে এই ফাইলটি পাঠিয়ে দিন।" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "কনফিগ ফাইলের মধ্যে কোনো URL নির্ধারিত হয়নি।" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "উল্লিখিত URL-এ আপলোড করতে ব্যর্থ।" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "আপনার রিপোর্টটি Red Hat সহায়তা ব্যবস্থায় আপলোড করতে সমস্যা।" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "আপনার প্রদত্ত রিপোর্টটি সাফল্যের সাথে %s-এ নিম্নলিখিত নামে আপলোড করা হয়েছে:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "অনুগ্রহ করে সহায়তা প্রতিনিধিকে এই নামটি জানিয়ে দিন।" sosreport-3.2+git276-g7da50d6/po/pt_BR.po0000644000175000017500000001515412433342602017476 0ustar cariboucaribou# Brazilian Portuguese translations for sos package. # Igor Pires Soares , 2007. # Taylon Silmer , 2010. msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-12 15:19-0300\n" "Last-Translator: Taylon Silmer \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Não foi possível criar o diretório temporário." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versão %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "o plugin %s não validou, ignorando" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "o plugin %s não instala, ignorando" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "nenhum plugin válido encontrado" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Os seguintes plugins estão habilitados no momento:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Nenhum plugin está habilitado." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Os seguintes plugins estão desabilitados no momento:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "As seguintes opções de plugins estão disponíveis:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nenhuma opção de plugins está disponível." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "o sosreport precisa de permissões de root para ser executado." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "nenhum plugin válido estava habilitado" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Este utilitário irá coletar algumas informações detalhadas sobre o\n" "hardware e a configuração do seu sistema %(distroa)s.\n" "A informação é coletada e um arquivo é empacotado no /tmp,\n" "o qual você pode enviar para um representante de suporte.\n" "A %(distrob)s irá utilizar estas informações SOMENTE para o propósito\n" "de diagnósticos e serão consideradas como informação confidencial.\n" "\n" "Este processo pode levar algum tempo para ser concluído.\n" "Nenhum alteração será feita no seu sistema.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Pressione ENTER para continuar ou CTRL-C para encerrar.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Um ou mais plugins detectaram problemas na sua configuração." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Por favor, revise as seguintes mensagens:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Você tem certeza de que gostaria de continuar ? (s/n)" #: ../sos/sosreport.py:685 msgid "y" msgstr "s" #: ../sos/sosreport.py:685 msgid "Y" msgstr "S" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Executando os plugins. Por favor aguarde..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "a árvore de construção do sosreport está localizada em : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Por favor, insira a sua primeira inicial e o seu último nome [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Por favor, insira o número do caso para o qual você está gerando este " "relatório: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Criando pacote compactado..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Criptografando o pacote..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Houve um problema ao criptografar o seu relatório." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "O seu sosreport foi gerado e salvo em:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "O md5sum é: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Por favor, envie este arquivo para o seu representante de suporte." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nenhuma URL definida no arquivo de configuração." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Não foi possível enviar para a URL especificada." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Houve um problema ao enviar o seu relatório para o suporte da Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "O seu relatório foi enviado com sucesso para %s com o nome:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Por favor, comunique este nome para o seu representante de suporte." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s ignorado (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "o plugin %s está inativo (use -e ou -o para habilitar)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "o plugin %s não está especificado na lista --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "processando opções do plugin: %s" sosreport-3.2+git276-g7da50d6/po/sos.pot0000644000175000017500000001012212433342602017446 0ustar cariboucaribou# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/nb.po0000644000175000017500000001077212433342602017070 0ustar cariboucaribou# Norwegian bokmål translations for the sos package. # Copyright (C) 2007 Red Hat, Inc. # Kjartan Maraas , 2010. # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-10-31 19:50+0100\n" "Last-Translator: Kjartan Maraas \n" "Language-Team: Norwegian bokmål \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Kunne ikke lage midlertidig katalog." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versjon %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ingen gyldige tillegg funnet" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Ingen tillegg slått på." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Trykk LINJESKIFT for å fortsette, eller CTRL-C for å avslutte.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Er du sikker på at du vil fortsette (j/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "j" #: ../sos/sosreport.py:685 msgid "Y" msgstr "J" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Lager komprimert arkiv..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Krypterer arkiv..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum er: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Ingen URL definert i konfigurasjonsfilen." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Kan ikke laste opp til oppgitt URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/hy.po0000644000175000017500000001000512433342602017076 0ustar cariboucaribou# Armenian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/or.po0000644000175000017500000002360612433342602017111 0ustar cariboucaribou# translation of sos.trunk.or.po to Oriya # Oriya translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Manoj Kumar Giri , 2009, 2011. msgid "" msgstr "" "Project-Id-Version: sos.trunk.or\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-04 18:25+0530\n" "Last-Translator: Manoj Kumar Giri \n" "Language-Team: Oriya \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: or\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Lokalize 1.1\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "\n" "\n" "\n" "\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "ଅସ୍ଥାୟୀ ଡିରେକ୍ଟୋରୀ ନିର୍ମାଣ କରିହେଲା ନାହିଁ।" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (ସସ୍କରଣ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "ପ୍ଲଗଇନ %s କୁ ବୈଧିକୃତ କରେ ନାହିଁ, ଏଡ଼ାଇଦେଉଅଛି" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "ପ୍ଲଗଇନ %s ସ୍ଥାପନ କରେନାହିଁ, ଏଡ଼ାଇ ଦେଉଛି" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "କୌଣସି ବୈଧ ପ୍ଲଗଇନ ମିଳୁନାହିଁ" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "ନିମ୍ନଲିଖିତ ପ୍ଲଗଇନଗୁଡ଼ିକ ବର୍ତ୍ତମାନ ସକ୍ରିୟ ହୋଇଛି:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "କୌଣସି ପ୍ଲଗଇନ ସକ୍ରିୟ ହୋଇନାହିଁ।" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "ନିମ୍ନଲିଖିତ ପ୍ଲଗଇନଗୁଡ଼ିକ ବର୍ତ୍ତମାନ ନିଷ୍କ୍ରିୟ ହୋଇଛି:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "ନିମ୍ନଲିଖିତ ପ୍ଲଗଇନ ବିକଳ୍ପଗୁଡ଼ିକ ଉପଲବ୍ଧ ଅଛି:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "କୌଣସି ପ୍ଲଗଇନ ବିକଳ୍ପ ଉପଲବ୍ଧ ନାହିଁ।" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ଚାଲିବା ପାଇଁ ମୂଖ୍ୟଚାଳକ ଅନୁମତି ଆବଶ୍ୟକ କରିଥାଏ।" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "କୌଣସି ବୈଧ ପ୍ଲଗଇନକୁ ସକ୍ରିୟ କରାହୋଇନାହିଁ" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "ଏହି ଉପଯୋଗିତାଟି ହାର୍ଡୱେର ବିଷୟରେ କିଛି ବିସ୍ତୃତ ସୂଚନା ସଂଗ୍ରହ ସଂଗ୍ରହ କରିବ\n" "ଏବଂ ଆପଣଙ୍କର %(distroa)s ତନ୍ତ୍ରକୁ ବିନ୍ୟାସ କରିବ।\n" "ସୂଚନା ସଂଗ୍ରହ କରାଯାଇଥାଏ ଏବଂ ଅଭିଲେଖକୁ /tmp ଅନ୍ତର୍ଗତରେ ପ୍ୟାକେଜ ହୋଇଥାଏ\n" ", ଯାହାକୁକି ଆପଣ ଜଣେ ସହାୟକ ପ୍ରତିନିଧିଙ୍କ ପାଖକୁ ପଠାଇପାରିବେ।\n" "%(distrob)s ଏହି ସୂଚନାକୁ କେବଳ ନିରୂପଣ କରିବା ଉଦ୍ଦେଶ୍ୟରେ ବ୍ୟବହାର କରିଥାଏ\n" "ଏବଂ ଏହାକୁ ଗୁପ୍ତ ସୂଚନା ଭାବରେ ଗ୍ରହଣ କରାଯାଇଥାଏ।\n" "\n" "ଏହି ପଦ୍ଧତି ସମ୍ପୂର୍ଣ୍ଣ ହେବା ପାଇଁ କିଛି ସମୟ ନେଇପାରେ।\n" "ଆପଣଙ୍କର ତନ୍ତ୍ରରେ କୌଣସି ପରିବର୍ତ୍ତନ କରାଯିବ ନାହିଁ।\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ଅଗ୍ରସର ହେବା ପାଇଁ ENTER ଦବାନ୍ତୁ, ଅଥବା ବିଦାୟ ନେବା ପାଇଁ CTRL-C ଦବାନ୍ତୁ।\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "ଆପଣଙ୍କର ସଂରଚନାରେ ଗୋଟିଏ କିମ୍ବା ଅଧିକ ପ୍ଲଗଇନରେ ସମସ୍ୟା ଦେଖାଦେଇଛି।" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "ଦୟାକରି ନିମ୍ନଲିଖିତ ସନ୍ଦେଶଗୁଡ଼ିକୁ ପ୍ରାକଦର୍ଶନ କରନ୍ତୁ:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "ଆପଣ ଅଗ୍ରସର ହେବା ପାଇଁ ଚାହୁଁଛନ୍ତି ବୋଲି ନିଶ୍ଚିତ କି (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "ହଁ" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "ନାଁ" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " ପ୍ଲଗଇନଗୁଡ଼ିକ ଚାଲୁଅଛି। ଦୟାକରି ଅପେକ୍ଷାକରନ୍ତୁ ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sos ବିବରଣୀ ନିର୍ମାଣ ବୃକ୍ଷଟି ଏଠାରେ ଅବସ୍ଥିତ : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "ଦୟାକରି ଆପଣଙ୍କର ନାମର ପ୍ରଥମ ଏବଂ ଅନ୍ତିମ ଭାଗ ଭରଣ କରନ୍ତୁ [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "ଦୟାକରି ଅଭିଯୋଗ କ୍ରମ ସଂଖ୍ୟା ଭରଣ କରନ୍ତୁ ଯାହା ପାଇଁ ଆପଣ ଏହି ଖବରକୁ ସୃଷ୍ଟି କରିଛନ୍ତି: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "ସଙ୍କୁଚିତ ଅଭିଲେଖ ନିର୍ମାଣ କରୁଅଛି..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "ଅଭିଲେଖକୁ ସଂଗୁପ୍ତ ରଖୁଅଛି..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "ଆପଣଙ୍କର ଖବରକୁ ସଂଗୁପ୍ତ କରିବା ସମୟରେ ଗୋଟିଏ ସମସ୍ୟା ଦେଖାଦେଇଥିଲା।" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "ଆପଣଙ୍କର sosreport ସୃଷ୍ଟିହୋଇଛି ଏବଂ ଏଥିରେ ସଂରକ୍ଷିତ ହୋଇଛି:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "ଏହି md5sum ଟି ହେଉଛି: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "ଦୟାକରି ଏହି ଫାଇଲକୁ ଆପଣଙ୍କର ସହାୟତା ପ୍ରତିନିଧିଙ୍କ ପାଖକୁ ପଠାନ୍ତୁ।" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "ବିନ୍ୟାସ ଫାଇଲରେ କୌଣସି URL କୁ ବ୍ୟାଖ୍ଯା କରାଯାଇନାହିଁ।" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "ଉଲ୍ଲିଖିତ URL କୁ ଧାରଣ କରିପାରିବେ ନାହିଁ।" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Red Hat ସହାୟତାରେ ଆପଣଙ୍କର ବିବରଣୀକୁ ଧାରଣ କରିବାରେ ସମସ୍ୟା ଦୋଇଥିଲା।" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "ଆପଣଙ୍କର ବିବରଣୀକୁ %s ରେ ନିମ୍ନଲିଖିତ ନାମରେ ସଫଳତାର ସହିତ ଧାରଣ ହୋଇଛି:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "ଦୟାକରି ଏହି ନାମକୁ ଆପଣଙ୍କର ସହାୟତା ପ୍ରତିନିଧିଙ୍କ ପାଖକୁ ପଠାନ୍ତୁ।" #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "ପ୍ଲଗଇନ %s ଏଡ଼ାଇଦେଇଛି (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "ପ୍ଲଗଇନ %s ଟି ନିଷ୍କ୍ରିୟ ଅଛି (ସକ୍ରିୟ କରିବା ପାଇଁ -e ଅଥବା -o କୁ ବ୍ୟବହାର କରନ୍ତୁ)।" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "ପ୍ଲଗଇନ %s କୁ --only-plugins ତାଲିକାରେ ଉଲ୍ଲେଖ କରାଯାଇନାହିଁ" #~ msgid "processing options from plugin: %s" #~ msgstr "ପ୍ଲଗଇନରୁ ବିକଳ୍ପଗୁଡ଼ିକୁ କାର୍ଯ୍ୟକାରୀ କରୁଅଛି: %s" sosreport-3.2+git276-g7da50d6/po/ka.po0000644000175000017500000001000512433342602017051 0ustar cariboucaribou# Georgian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/sq.po0000644000175000017500000001000512433342602017101 0ustar cariboucaribou# Albanian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/ku.po0000644000175000017500000001000412433342602017074 0ustar cariboucaribou# Kurdish translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/ko.po0000644000175000017500000001570612433342602017104 0ustar cariboucaribou# translation of ko.po to # Korean translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: ko\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-11-07 09:56+1000\n" "Last-Translator: \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "임시 디렉토리를 생성할 수 없습니다." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sos 리포트 (버전 %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "%s 플러그인이 유효하지 않아 생략합니다." #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "%s 플러그인이 설치되지 않아 생략합니다." #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "사용 가능한 플러그인이 없습니다." #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "현재 다음과 같은 플러그인이 활성화되어 있습니다:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "활성화된 플러그인이 없습니다:" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "현재 다음과 같은 플러그인이 비활성화되어 있습니다:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "다음과 같은 플러그인 옵션을 사용할 수 있습니다:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "사용 가능한 플러그인 옵션이 없습니다:" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sos 리포트를 실행하려면 루트 권한이 필요합니다." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "활성화된 사용 가능한 플러그인이 없습니다." #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "이 유틸리티는 Red Hat Enterprise Linux 시스템의 하드웨어와 \n" "시스템 설정 사항에 대한 상세 정보를 수집하게 됩니다. 수집된 \n" "정보는 지원 담당자에게 보낼 수 있도록 /tmp 디렉토리 안에 \n" "아카이브로 저장됩니다. Red Hat은 이 정보를 문제 해결 목적으로만 사용하며 기" "밀 정보로 \n" "취급할 것입니다. \n" "\n" "이 과정을 모두 완료하는 데 약간의 시간이 소요될 수 있으며, \n" "시스템에 아무런 영향을 주지 않습니다. \n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "계속하려면 ENTER를 입력하고, 종료하려면 CTRL-C를 입력하십시오.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "하나 이상의 플러그인이 사용자 설정에서 문제를 발견했습니다." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "다음 메시지를 다시 살펴보시기 바랍니다:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "계속 진행하시겠습니까? (y/n)" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "플러그인을 실행중입니다. 잠시만 기다려주십시오..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "sosreport 빌드 트리가 %s에 위치돼있습니다." #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "영문 이름의 첫 글자와 성을 입력하십시오[%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "이 리포트에 해당하는 문제 번호를 입력하십시오:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "압축 아카이브를 생성 중입니다..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "아카이브를 암호화하고 있습니다..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "리포트를 암호화하는 데 문제가 발생했습니다." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "sos 리포트가 생성되었으며 아래에 저장되었습니다:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "이 파일을 지원 담당자에게 보내주시기 바랍니다." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "설정 파일에 URL이 정의돼있지 않습니다." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "지정된 URL에서 업로드할 수 없습니다." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "리포트를 Red Hat 지원 센터로 업로드하는 데 문제가 발생했습니다." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "%s(을)를 성공적으로 보고하였습니다." #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "지원 담당자와 연락할 때 이 이름을 사용하시기 바랍니다." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "%s 플러그인을 생략합니다. (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "" #~ "%s 플러그인이 비활성화되어 있습니다. (-e 또는 -o 옵션으로 활성화할 수 있습" #~ "니다.)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "%s 플러그인은 --only-plugins 목록에 지정되어 있지 않습니다." #~ msgid "processing options from plugin: %s" #~ msgstr "%s 플러그인 옵션을 처리 중입니다." sosreport-3.2+git276-g7da50d6/po/as.po0000644000175000017500000002236112433342602017071 0ustar cariboucaribou# translation of sos.trunk.as.po to Assamese # Assamese translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Amitakhya Phukan , 2009. msgid "" msgstr "" "Project-Id-Version: sos.trunk.as\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2009-09-08 19:15+0530\n" "Last-Translator: Amitakhya Phukan \n" "Language-Team: Assamese\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "অস্থাতী পঞ্জিকা নিৰ্মাণ কৰিবলৈ ব্যৰ্থ ।" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (সংস্কৰণ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "প্লাগ-ইন %s অনুমোদন কৰা নাযায়, উপেক্ষা কৰা হৈছে" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "প্লাগ-ইন %s ইনস্টল কৰা নাযায়, উপেক্ষা কৰা হৈছে " #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "কোনো বৈধ প্লাগ-ইন পোৱা নাযায়" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "নিম্নলিখিত প্লাগ-ইনসমূহ বৰ্তমানে সক্ৰিয় কৰা হৈছে:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "কোনো প্লাগ-ইন সক্ৰিয় নাই ।" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "নিম্নলিখিত প্লাগ-ইনসমূহ বৰ্তমানে নিষ্ক্ৰিয় অৱস্থাত আছে:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "প্লাগ-ইন সংক্ৰান্ত নিম্নলিখিত বিকল্পসমূহ উপলব্ধ আছে:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "প্লাগ-ইন সংক্ৰান্ত কোনো বিকল্প উপলব্ধ নহয় ।" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport সঞ্চালনৰ বাবে root ব্যৱহাৰকাৰীৰ অনুমতি আৱশ্যক ।" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "কোনো বৈধ প্লাগ-ইন সক্ৰিয় কৰা নহয়" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "এই সামগ্ৰীৰ সহায়ত যান্ত্ৰিক সামগ্ৰী আৰু Red Hat Enterprise Linux\n" "প্ৰণালীৰ প্ৰতিষ্ঠা সম্পৰ্কে বিশদ তথ্য সংগ্ৰহ কৰা হ'ব ।\n" "তথ্য সংগ্ৰহৰ পিছত /tmp পঞ্জিকাৰ অধীন এটা আৰ্কাইভ নিৰ্মিত হয় ।\n" "এই আৰ্কাইভ আপুনি সহায়তা প্ৰতিনিধিৰ কাশত পঠায় দিব পাৰে ।\n" "Red Hat দ্বাৰা এই তথ্য অকল সমস্যাৰ কাৰণ নিৰ্ণয় কৰাৰ বাবে ব্যৱহাৰ কৰা হ'ব\n" "আৰু ইয়াৰ গোপনীয়তা বজায় ৰাখা হ'ব ।\n" "\n" "এই কাম সম্পন্ন হ'বলৈ কিছু সময় ব্যয় হ'ব পাৰে ।\n" "ইয়াৰ ফলত প্ৰণালীত কোনো ধৰনৰ পৰিবৰ্তন কৰা ন'হ'ব ।\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "আগবঢ়াৰ বাবে ENTER টিপক বা প্ৰস্থান কৰিবলৈ CTRL-C টিপক ।\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "একাধিক প্লাগ-ইন দ্বাৰা আপোনাৰ বিন্যাসত সমস্যা চিনাক্ত কৰা হৈছে ।" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "অনুগ্ৰহ কৰি নিম্নলিখিত বাৰ্তাসমূহ পৰিদৰ্শন কৰক:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "আপুনি নিশ্চিতৰূপে আগবাঢ়িবলৈ ইচ্ছুক নে (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "অনুগ্ৰহ কৰি নামৰ অদ্যাক্ষৰ আৰু পদবি লিখক [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "বৰ্তমান ৰিপোৰ্ট নিৰ্মাণৰ বাবে অনুগ্ৰহ কৰি প্ৰযোজ্য কেছ সংখ্যা উল্লেখ কৰক: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "কমপ্ৰেছ কৰা আৰ্কাইভ নিৰ্মাণ কৰক..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "আৰ্কাইভ এনক্ৰিপ্ট কৰা হৈছে..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "ৰিপোৰ্ট এনক্ৰিপ্ট কৰিবলৈ সমস্যা ।" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "আপোনাৰ sosreport নিৰ্মাণ কৰি নিম্নলিখিত স্থানত সংৰক্ষিত হৈছে:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum হ'ল: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "অনুগ্ৰহ কৰি সহায়তা প্ৰতিনিধিক এই নথিপত্ৰটি পঠায় দিয়ক ।" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "উল্লিখিত URL-এ আপলোড কৰিবলৈ ব্যৰ্থ ।" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "আপোনাৰ ৰিপোৰ্টটি Red Hat সহায়তা ব্যৱস্থাত আপলোড কৰিবলৈ সমস্যা ।" #: ../sos/policyredhat.py:401 #, fuzzy, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" "আপোনাৰ প্ৰদত্ত ৰিপোৰ্ট সফলতাৰে সৈতে Red Hat-ৰ ftp সেৱকত নিম্নলিখিত নামত আপলোড " "কৰা হৈছে:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "অনুগ্ৰহ কৰি সহায়তা প্ৰতিনিধিক এই নাম জনায় দিয়ক ।" #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "প্লাগ-ইন %s উপেক্ষা কৰা হৈছে (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "প্লাগ-ইন %s সক্ৰিয় নহয় (সক্ৰিয় কৰাৰ বাবে -e বা -o ব্যৱহাৰ কৰক) ।" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "--only-plugins তালিকাত প্লাগ-ইন %s উল্লিখিত নহয়" #~ msgid "processing options from plugin: %s" #~ msgstr "প্লাগ-ইনৰ পৰা বিকল্প প্ৰক্ৰিয়াকৰণ হৈছে: %s" sosreport-3.2+git276-g7da50d6/po/fr.po0000644000175000017500000001547312433342602017103 0ustar cariboucaribou# translation of fr.po to French # French translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Decroux Fabien , 2007. # Thomas Canniot , 2010. msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-20 21:28+0100\n" "Last-Translator: Thomas Canniot \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Lokalize 1.0\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Impossible de créer un répertoire temporaire." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "le plugin %s n'a pas été validé, ignoré" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "le plugin %s ne s'installe pas, ignoré" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "aucun plugin valide n'a été trouvé" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Les plugins suivants sont activés :" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Aucun plugin n'est activé." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Les plugins suivants sont désactivés :" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Les options du plugin suivant sont disponibles :" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Aucune option n'est disponible pour ce plugin." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport requiert des permissions root pour démarrer." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "aucun plugin valide n'a été activé" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Cet utilitaire collectera des informations détaillées à propos du\n" "matériel et de l'installation de votre système %(distroa)s.\n" "Les informations sont collectées et une archive est créée sous /tmp.\n" "Vous pouvez l'envoyer à un représentant de support.\n" "%(distrob)s utilisera ces informations à des fins de diagnostique SEULEMENT\n" "et elles seront considérées comme des informations confidentielles.\n" "\n" "Ce processus peut prendre un certain temps avant d'être terminé.\n" "Aucun changement ne sera effectué sur votre système.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Appuyez sur Entrée pour continuer ou CTRL-C pour quitter.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Un ou plusieurs plugins ont détecté un problème dans votre configuration." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Veuillez revoir les messages suivants :" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Êtes-vous sûr de vouloir continuer (y/n) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Lancement des extensions. Veuillez patienter..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "L'arborescence construite par sosreport est située dans : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" "Veuillez saisir votre premier prénom (si vous en avez plusieurs) et votre " "nom [%s] :" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Veuillez saisir le numéro de cas pour lequel vous générez ce rapport :" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Création d'une archive compressée..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Cryptage de l'archive..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Une erreur s'est produire lors du cryptage de votre rapport." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Votre rapport sos a été généré et enregistré dans :\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Le md5sum est :" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Veuillez envoyer ce fichier à votre représentant de support." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Pas d'URL définie dans le fichier de configuration." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Impossible de le télécharger vers l'URL spécifié." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Une erreur s'est produite lors du téléchargement de votre rapport vers le " "support Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Votre rapport a été téléchargé avec succès vers %s avec le nom :" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Veuillez communiquer ce nom à votre représentant de support." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "le plugin %s a été ignoré (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "le plugin %s est inactif (utilisez -e ou -o pour l'activer)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "le plugin %s n'a pas été spécifié dans la liste --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "traitement des options du plugin : %s" sosreport-3.2+git276-g7da50d6/po/de_CH.po0000644000175000017500000001515112433342602017427 0ustar cariboucaribou# German translation of sos # This file is distributed under the same license as the sos package. # Copyright (C) 2007 Red hat, Inc. # # Fabian Affolter , 2009. # msgid "" msgstr "" "Project-Id-Version: SOS\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2009-04-18 01:15+0100\n" "Last-Translator: Fabian Affolter \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: KBabel 1.11.4\n" "X-Poedit-Language: Swiss German\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Temporäres Verzeichnis konnte nicht erstellt werden." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "Plugin %s validiert nicht, wird ausgelassen" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "Plugin %s installiert sich nicht, wird ausgelassen" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "keine gültigen Plugins gefunden" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Die folgenden Plugins sind derzeit aktiviert:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Kein Plugin aktiviert." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Die folgenden Plugins sind derzeit deaktiviert:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Die folgenden Plugin-Optionen stehen zur Verfügung:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Keine Plugin-Optionen verfügbar." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport benötigt zur Ausführung root-Rechte." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "keine gültigen Plugins wurden aktiviert" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Dieses Dienstprogramm sammelt einige detaillierte Informationen\n" "zur Hardware und Einrichtung Ihres Red Hat Enterprise Linux Systems.\n" "Die Informationen werden gesammelt und in einem Archiv unter /tmp\n" "zusammengefasst, welches Sie an einen Support-Vertreter schicken\n" "können. Red Hat verwendet diese Informationen AUSSCHLIESSLICH zu\n" "Diagnosezwecken und behandelt sie als vertrauliche Informationen.\n" "\n" "Die Fertigstellung dieses Prozesses kann eine Weile dauern.\n" "Es werden keinerlei Änderungen an Ihrem System vorgenommen.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" "Drücken Sie die EINGABETASTE, um fortzufahren, oder Ctrl-C, um abzubrechen.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Ein oder mehrere Plugins haben ein Problem in Ihrer Konfiguration entdeckt." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Bitte überprüfen Sie die folgenden Meldungen erneut:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Möchten Sie wirklich fortfahren (j/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "j" #: ../sos/sosreport.py:685 msgid "Y" msgstr "J" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Bitte geben Sie Ihren Vor- und Nachnamen ein [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Bitte geben Sie die Fallnummer an, für die Sie diesen Bericht generieren: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Erstelle komprimiertes Archiv ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Verschlüssele Archiv ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Beim Verschlüsseln Ihres Berichts trat ein Fehler auf." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Ihr \"sosreport\" wurde erstellt und gespeichert unter:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Die md5sum lautet: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Bitte senden Sie diese Datei an Ihren Support-Vertreter." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Hochladen zu speziellem URL scheiterte." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Beim Hochladen Ihres Berichts zum Red Hat Support trat ein Fehler auf." #: ../sos/policyredhat.py:401 #, fuzzy, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" "Ihr Bericht wurde erfolgreich auf den Red Hat FTP-Server hochgeladen, mit " "dem Namen:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Bitte teilen Sie diesen Namen Ihrem Support-Vertreter mit." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "Plugin %s ausgelassen (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "" #~ "Plugin %s ist inaktiv (verwenden Sie -e oder -o, um es zu aktivieren)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "Plugin %s nicht in der --only-plugins-Liste angegeben" #~ msgid "processing options from plugin: %s" #~ msgstr "Verarbeitung von Optionen des Plugins: %s" sosreport-3.2+git276-g7da50d6/po/kn.po0000644000175000017500000002421112433342602017072 0ustar cariboucaribou# translation of sos.trunk.kn.po to Kannada # Kannada translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Shankar Prasad , 2009, 2011. msgid "" msgstr "" "Project-Id-Version: sos.trunk.kn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-05 11:56+0530\n" "Last-Translator: Shankar Prasad \n" "Language-Team: Kannada \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: kn\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Lokalize 1.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "ತಾತ್ಕಾಲಿಕ ಕೋಶವನ್ನು ನಿರ್ಮಿಸಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (ಆವೃತ್ತಿ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "ಪ್ಲಗ್‌ಇನ್ %s ಮಾನ್ಯಗೊಂಡಿಲ್ಲ, ಉಪೇಕ್ಷಿಸಲಾಗುತ್ತಿದೆ" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "ಪ್ಲಗ್‌ಇನ್ %s ಅನುಸ್ಥಾಪನೆಗೊಂಡಿಲ್ಲ, ಉಪೇಕ್ಷಿಸಲಾಗುತ್ತಿದೆ" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ಮಾನ್ಯವಾದ ಯಾವುದೆ ಪ್ಲಗ್‌ಇನ್‌ಗಳಿಲ್ಲ" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "ಈ ಕೆಳಗಿನ ಪ್ಲಗ್‌ಇನ್‌ಗಳನ್ನು ಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "ಯಾವುದೆ ಪ್ಲಗ್‌ಇನ್ ಅನ್ನು ಶಕ್ತಗೊಳಿಸಲಾಗಿಲ್ಲ." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "ಈ ಕೆಳಗಿನ ಪ್ಲಗ್‌ಇನ್‌ಗಳನ್ನು ಅಶಕ್ತಗೊಳಿಸಲಾಗಿದೆ:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "ಈ ಕೆಳಗಿನ ಪ್ಲಗ್‌ಇನ್‌ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿವೆ:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "ಯಾವುದೆ ಪ್ಲಗ್‌ಇನ್‌ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿಲ್ಲ." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ಅನ್ನು ಚಲಾಯಿಸಲು ನಿರ್ವಾಹಕನ (ರೂಟ್) ಅನುಮತಿಯ ಅಗತ್ಯವಿರುತ್ತದೆ." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "ಮಾನ್ಯವಾದ ಯಾವುದೆ ಪ್ಲಗ್‌ಇನ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "ಈ ಸವಲತ್ತು ನಿಮ್ಮಲ್ಲಿರುವ ಗಣಕದ ಯಂತ್ರಾಂಶದ ಬಗೆಗಿನ ವಿಸ್ತಾರವಾದ ಕೆಲವು ಮಾಹಿತಿಯನ್ನು\n" "ಸಂಗ್ರಹಿಸಿ ನಂತರ ನಿಮ್ಮ %(distroa)s ವ್ಯವಸ್ಥೆಯನ್ನು ಸಿದ್ಧಪಡಿಸುತ್ತದೆ.\n" "ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಿದ ನಂತರ ಅದನ್ನು ಆರ್ಕೈವ್ ಮಾಡಿ \n" "/tmp ಯಲ್ಲಿ ಉಳಿಸಲಾಗುತ್ತದೆ, ಹಾಗು ಇದನ್ನು ಬೆಂಬಲ ಪ್ರತಿನಿಧಿಗೆ ಕಳುಹಿಸಬಹುದು.\n" "%(distrob)s ಇದನ್ನು ಕೇವಲ ದೋಷ ಪತ್ತೆ ಹಚ್ಚಲು \"ಮಾತ್ರ\" ಬಳಸಲಾಗುತ್ತದೆ\n" "ಹಾಗು ಇದನ್ನು ಗೌಪ್ಯವಾದ ಮಾಹಿತಿ ಎಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ.\n" "\n" "ಈ ಪ್ರಕ್ರಿಯೆಯು ಮುಗಿಯಲು ಒಂದಿಷ್ಟು ಸಮಯ ತೆಗೆದು ಕೊಳ್ಳುತ್ತದೆ.\n" "ನಿಮ್ಮ ಗಣಕಕ್ಕೆ ಯಾವುದೆ ಬದಲಾವಣೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ಮುಂದುವರೆಯಲು ENTER ಅನ್ನು ಒತ್ತಿ, ಅಥವ ನಿರ್ಗಮಿಸಲು CTRL-C ಅನ್ನು ಒತ್ತಿ.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "ನಿಮ್ಮ ಸಂರಚನೆಯಲ್ಲಿ ಒಂದು ದೋಷವಿದೆಯೆಂದು ಒಂದು ಅಥವ ಹೆಚ್ಚಿನ ಪ್ಲಗ್‌ಇನ್‌ಗಳು ಕಂಡುಹಿಡಿದಿವೆ." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "ದಯವಿಟ್ಟು ಈ ಕೆಳಗಿನ ಸಂದೇಶಗಳನ್ನು ಅವಲೋಕಿಸಿ:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "ನೀವು ಖಚಿತವಾಗಿಯೂ ಮುಂದುವರೆಯಲು ಬಯಸುತ್ತೀರೆ (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " ಪ್ಲಗ್‌ಇನ್‌ಗಳನ್ನು ಚಲಾಯಿಸಲಾಗುತ್ತಿದೆ. ದಯವಿಟ್ಟು ಕಾಯಿರಿ ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport ನಿರ್ಮಾಣ ವೃಕ್ಷವು ಇಲ್ಲಿದೆ : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "ದಯವಿಟ್ಟು ನಿಮ್ಮ ಆರಂಭದ ಇನಿಶಿಯಲ್ ಹಾಗು ಕೊನೆಯ ಹೆಸರನ್ನು ನಮೂದಿಸಿ [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "ನೀವು ಯಾವ ಸನ್ನಿವೇಶಕ್ಕಾಗಿ ವರದಿಯನ್ನು ಸಿದ್ಧಪಡಿಸಲು ಅದರ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "ಸಂಕುಚನಗೊಳಿಸಲಾದ ಆರ್ಕೈವನ್ನು ನಿರ್ಮಿಸಲಾಗುತ್ತಿದೆ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "ಆರ್ಕೈವ್ ಅನ್ನು ಗೂಢಲಿಪೀಕರಿಸಲಾಗುತ್ತಿದೆ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "ನಿಮ್ಮ ವರದಿಯನ್ನು ಗೂಢಲಿಪೀಕರಿಸುವಲ್ಲಿ ಒಂದು ದೋಷ ಕಂಡುಬಂದಿದೆ." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "sosreport ಅನ್ನು ಸಿದ್ಧಪಡಿಸಿದೆ ಹಾಗು ಅದನ್ನು ಇಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum ಇದಾಗಿದೆ: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "ದಯವಿಟ್ಟು ಈ ಕಡತವನ್ನು ಬೆಂಬಲ ನೀಡುವ ನಿಮ್ಮ ಪ್ರತಿನಿಧಿಗೆ ಕಳುಹಿಸಿ." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "ಸಂರಚನಾ ಕಡತದಲ್ಲಿ ಯಾವುದೆ URL ಅನ್ನು ಸೂಚಿಸಲಾಗಿಲ್ಲ." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "ಸೂಚಿಸಲಾದ URL ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "ನಿಮ್ಮ ವರದಿಯನ್ನು Red Hat ಬೆಂಬಲದ ಸ್ಥಳಕ್ಕೆ ಅಪ್‌ಲೋಡ್ ಮಾಡುವಲ್ಲಿ ಒಂದು ತೊಂದರೆ ಉಂಟಾಗಿದೆ." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "ನಿಮ್ಮ ವರದಿಯನ್ನು ಈ ಹೆಸರಿನೊಂದಿಗೆ %s ಗೆ ಯಶಸ್ವಿಯಾಗಿ ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗಿದೆ:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "ದಯವಿಟ್ಟು ಈ ಹೆಸರನ್ನು ನಿಮ್ಮ ಬೆಂಬಲ ನೀಡುವ ಪ್ರತಿನಿಧಿಗೆ ತಿಳಿಸಿ." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "ಪ್ಲಗ್‌ಇನ್ %s ಅನ್ನು ಉಪೇಕ್ಷಿಸಲಾಗಿದೆ (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "ಪ್ಲಗ್‌ಇನ್ %s ನಿಷ್ಕ್ರಿಯವಾಗಿದೆ (ಶಕ್ತಗೊಳಿಸಲು -e ಅಥವ -o ಅನ್ನು ಬಳಸಿ)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "ಪ್ಲಗ್‌ಇನ್ %s ಅನ್ನು --only-plugins ಪಟ್ಟಿಯಲ್ಲಿ ಸೂಚಿಸಲಾಗಿಲ್ಲ" #~ msgid "processing options from plugin: %s" #~ msgstr "ಪ್ಲಗ್‌ಇನ್‌ನಿಂದ ಸಂಸ್ಕರಿಸುವ ಆಯ್ಕೆ: %s" sosreport-3.2+git276-g7da50d6/po/hi.po0000644000175000017500000002033612433342602017066 0ustar cariboucaribou# translation of sos.trunk.hi.po to Maithili # Hindi translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Rajesh Ranjan , 2007. # Rajesh Ranjan , 2011. msgid "" msgstr "" "Project-Id-Version: sos.trunk.hi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-17 15:06+0530\n" "Last-Translator: Rajesh Ranjan \n" "Language-Team: Maithili \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hi\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n\n" "\n" "\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "अस्थायी निर्देशिका नहीं बना सका." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (संस्करण %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "प्लगिन %s वैध नहीं कर सकता है, छोड़ रहा है" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "प्लगिन %s अधिष्ठापित नहीं कर रहा है, छोड़ रहा है" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "कोई वैध प्लगिन नहीं मिला" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "निम्नलिखित प्लगिन अभी सक्रिय है:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "कोई प्लगिन सक्रिय नहीं है." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "निम्न प्लगिन अभी निष्क्रिय है:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "निम्नलिखित प्लगिन विकल्प उपलब्ध है:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "कोई प्लगिन विकल्प उपलब्ध नहीं." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport के लिए रूट अनुमति को चलाने की जरूरत है." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "कोई वैध प्लगिन सक्रिय नहीं था" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "यह उपयोगिता कुछ विस्तृत सूचना को जमा करेगा\n" "हार्डवेयर और आपके %(distroa)s सिस्टम के बारे में.\n" "सूचना जमा की जाती है और एक अभिलेख को पैकेज किया जाता है\n" "/tmp के अंदर, जिसे आप समर्थन प्रतिनिधि के पास भेज सकते हैं.\n" "%(distrob)s इस सूचना को निदानार्थ सिर्फ प्रयोग करेगा\n" "और इसे गोपनीय सूचना माना जायेगा.\n" "\n" "यह प्रक्रिया पूरा करने के लिए कुछ समय लेगा.\n" "कोई बदलाव आपके सिस्टम में नहीं बनाया जायेगा.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ENTER को जारी रखने के लिए दबाएं, या CTRL-C छोड़ने के लिए.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "एक या अधिक प्लगिन ने आपके विन्यास में समस्या पाया है." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "कृपया निम्नलिखित संदेश की समीक्षा करें:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "क्या आप निश्चित हैं कि आप जारी रखना चाहते हैं (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " प्लगिन चला रहा है. कृपया प्रतीक्षा करें ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport बिल्ड तरू यहाँ अवस्थित है : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "कृपया अपना आरंभिक व अंतिम नाम [%s] दें: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "कृपया केस संख्या दें जो आप इस रिपोर्ट के लिए बना रहे हैं: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "संकुचित अभिलेख बना रहा है..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "अभिलेख गोपित कर रहा है..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "आपके रिपोर्ट के गोपन में समस्या थी." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "आपका sosreport को यहां उत्पन्न व सहेजा गया है:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum है: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "कृपया इस फाइल को अपने समर्थन प्रतिनिधि को भेजें." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "कोई URL विन्यास फ़ाइल में नहीं परिभाषित हुआ." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "निर्दिष्ट URL अपलोड नहीं कर सकता है." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "आपके रिपोर्ट को Red Hat समर्थन में अपलोड करने में समस्या थी." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "आपका रिपोर्ट %s में इस नाम के साथ सफलतापूर्वक अपलोड किया गया:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "कृपया इस नाम का अपने समर्थन प्रतिनिधि से संचार करें." sosreport-3.2+git276-g7da50d6/po/th.po0000644000175000017500000002014212433342602017074 0ustar cariboucaribou# Thai translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007, 2009. msgid "" msgstr "" "Project-Id-Version: sos.th\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2009-05-13 12:12+0000\n" "Last-Translator: \n" "Language-Team: Thai \n" "Language: th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "ไม่สามารถสร้างไดเรคทอรีชั่วคราว" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (รุ่น %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "ส่วนขยาย %s ไม่ถูกต้อง จะข้ามไป" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "ส่วนขยาย %s ติดตั้งไม่ได้ จะข้ามไป" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ไม่พบส่วนขยายที่ถูกต้อง" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "ส่วนขยายต่อไปนี้เปิดใช้งานอยู่" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "ไม่มีส่วนขยายเปิดใช้งาน" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "ส่วนขยายต่อไปนี้ปิดการใช้งานอยู่:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "มีตัวเลือกเหล่านี้จากส่วนขยาย:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "ไม่มีตัวเลือกจากส่วนขยาย" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ต้องใช้สิทธิ root ในการทำงาน" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "ไม่มีส่วนขยายที่ถูกต้องเปิดใช้งาน" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "เครื่องมือนี้จะเก็บข้อมูลโดยละเอียดเกี่ยวกับฮาร์ดแวร์และการตั้งค่า\n" "ระบบ Red Hat Enterprise Linux ของคุณ ข้อมูลจะถูกเก็บและ\n" "สร้างเป็นไฟล์ที่ /tmp ซึ่งคุณสามารถส่งไปยังผู้สนับสนุนได้\n" "Red Hat จะใช้ข้อมูลนี้ในการแก้ไขปัญหาเท่านั้น และจะถือว่าเป็น\n" "ความลับ\n" "\n" "กระบวนการนี้อาจจะใช้เวลาสักครู่ในการทำงาน จะไม่มีการแก้ไข\n" "ดัดแปลงระบบของคุณ\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "กด ENTER เพื่อทำงานต่อ หรือ CTRL+C เพื่อออก\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "มีส่วนขยายตัวใดตัวหนึ่งตรวจพบปัญหาในการตั้งค่าของคุณ" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "กรุณาอ่านข้อความเหล่านี้:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "คุณต้องการทำต่อไปหรือไม่ (y/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "กรุณากรอกชื่อสกุล [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "กรุณากรอกหมายเลขปัญหาที่จะสร้างรายงาน:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "กำลังสร้างไฟล์บีบอัด..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "กำลังเข้ารหัสไฟล์..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "มีปัญหาระหว่างการเข้ารหัสรายงาน" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "รายงาน sos ของคุณได้ถูกสร้างและบันทึกใน:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum คือ:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "กรุณาส่งไฟล์นี้ไปยังตัวแทนผู้สนับสนุนของคุณ" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "ไม่สามารถอัพโหลดไปยัง URL ที่ระบุ" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "มีปัญหาในการอัพโหลดรายงานของคุณไปยังฝ่ายสนับสนุน Red Hat" #: ../sos/policyredhat.py:401 #, fuzzy, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "รายงานของคุณได้ถูกส่งไปยังเซิร์ฟเวอร์ ftp ของ Red Hat ในชื่อ:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "กรุณาบอกชื่อนี้กับตัวแทนผู้สนับสนุนของคุณ" #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "ส่วนขยาย %s ถูกข้าม (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "ส่วนขยาย %s ไม่ทำงาน (ใช้ -e หรือ -o เพื่อเปิดใช้)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "ส่วนขยาย %s ไม่ได้ระบุในรายการ --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "กำลังประมวลผลตัวเลือกจากส่วนขยาย %s" sosreport-3.2+git276-g7da50d6/po/en_GB.po0000644000175000017500000001414412433342602017440 0ustar cariboucaribou# English translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Could not create temporary directory." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "plugin %s does not validate, skipping" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "plugin %s does not install, skipping" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "no valid plugins found" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "The following plugins are currently enabled:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "No plugin enabled." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "The following plugins are currently disabled:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "The following plugin options are available:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "No plugin options available." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport requires root permissions to run." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "no valid plugins were enabled" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "This utility will collect some detailed information about the\n" "hardware and setup of your Red Hat Enterprise Linux system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "Red Hat will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Press ENTER to continue, or CTRL-C to quit.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "One or more plugins have detected a problem in your configuration." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Please review the following messages:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Are you sure you would like to continue (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Please enter your first initial and last name [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Please enter the case number that you are generating this report for: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Creating compressed archive..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Encrypting archive..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "There was a problem encrypting your report." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Your sosreport has been generated and saved in:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "The md5sum is: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Please send this file to your support representative." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Cannot upload to specified URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "There was a problem uploading your report to Red Hat support." #: ../sos/policyredhat.py:401 #, fuzzy, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" "Your report was successfully uploaded to Red Hat's ftp server with name:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Please communicate this name to your support representative." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s skipped (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "plugin %s is inactive (use -e or -o to enable)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "plugin %s not specified in --only-plugins list" #~ msgid "processing options from plugin: %s" #~ msgstr "processing options from plugin: %s" sosreport-3.2+git276-g7da50d6/po/si.po0000644000175000017500000002137212433342602017102 0ustar cariboucaribou# translation of si.po to Sinhala # Sinhalese translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Danishka Navin , 2007. msgid "" msgstr "" "Project-Id-Version: si\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-11-07 19:03+0530\n" "Last-Translator: Danishka Navin \n" "Language-Team: Sinhala \n" "Language: si\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "තාවකාලීක බහලුම නිර්මාණය කළ නොහැකි විය." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (%s වෙළුම)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "%s ප්ලගීනය සත්‍යාපනය වන්නේ නැත, මගහරිමින්" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "%s ප්ලගීනය ස්ථාපනය වන්නේ නැත, මගහරි" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "නිරවද්‍ය පල්ගීන හමුවුයේ නැත" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "පහත දැක්වෙන ප්ලගීන දැනට සක්‍රීයව ඇත:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "ප්ලගීන කිසිවක් සක්‍රීය නැත." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "පහත පල්ගීන විකල්ප දැනට අක්‍රීයව ඇත:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "පහත පල්ගීන විකල්ප භාවිතයට ඇත:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "කිසිදු පල්ගීන විකල්පයක් භාවිතයට නැත." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ක්‍රියාත්මක වීම සඳහා root අවසර අවශ්‍යව ඇත." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "කිසිදු නිරවද්‍ය පල්ගිනයක් සක්‍රිය කර නැත" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "මෙම උපයෝගි තාවය දෘඩාංග පිළිබදව සවිස්තරාත්මක තොරතුරු රැස්කරණ අතර ඔබගේ Red Hat " "Enterprise Linux පද්ධතිය පිහිටවනු ලැබේ.\n" "රැස් කළ තොරතුරු සහ සංරක්‍ෂකය /tmp යටතේ ඇසුරුම් ගත කර ඇති අතර ඔබට එය සහායක නියෝජිත වෙත " "යැවිය හැක.\n" "Red Hat මෙම තොරතුරු භාවිතා කරන්නේ දෝෂ විනිශ්චය පමණක් වන අතර එම තොරතුරු රහසිගත තොරතුරු " "ලෙස සළකණු ලබයි.\n" "\n" "මෙම ක්‍රියාව නිම වීමට වේලාවක් ගතවනු ඇත.\n" "ඔබගේ පද්ධතියට කිසිදු වෙනසක් සිදු නොවනු ඇත.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "දිගටම කරගෙන යාමට ENTER හෝ පිට වීමට CTRL-C ඔබන්න.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "ප්ලගීන එකක හෝ කිහිපයක් ඔබගේ ප්ධතිය තුළ වූ දෝෂයක් අනාවරණය කරගෙන ඇත." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "කරුණාකර පහත පණිවිඩ නැවත සළකා බලන්න:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "ඔබට විශ්වාසද? ඔබට දිගටම කරගෙන යාමට අවශ්‍යද (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "කරුණාකර ඔබගේ පළමු මුළකුර සහ අවසාන නම ඇතුළත් කරන්න [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "කරුණාකර මෙම වාර්තාව ගොඩනැන්වීමට අදාල අවස්ථා අංකය ඇතුළත් කරන්න: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "හැකිලු සංරක්‍ෂක නිර්මාණය කරමින්..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "සංරක්‍ෂණ සංකේතාංකනය කරමින්..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "ඔබගේ වාර්තාව සංකේතාංනය කිරීමේදි දෝෂයක් ඇතිවිය." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "ඔබගේ sosreport නිර්මාණය වූ අතර සුරකිනු ලැබු යේ:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum වනුයේ: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "කරුණාකර මෙම ගොනුව ඔබගේ සහායක නියෝජිත වෙත යවන්න." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "දක්වන ලඳ URL වෙත ලබා දිය නොහැක." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "ඔබගේ වාර්තාව Red Hat සහය වෙතට ලබා දිමේදි දෝෂයල් ඇති විය." #: ../sos/policyredhat.py:401 #, fuzzy, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "ඔබගේ වාර්තාව සාර්තකව Red Hat's ftp සේවාදායකයට ලබාදුන් අතර නම වූයේ:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "ඔබගේ සහායක නියෝජිත වෙතට සංනිවේදනයට මෙම නම භාවිතා කරන්න." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "%s ප්ලගීනය මගහරින ලදි (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "%sප්ලගීනය අක්‍රීයව ඇත ( සක්‍රීය කිරීමට -e හෝ -o භාවිතා කරන්න)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "--only-plugins ලැයිස්තුව තුළ %s ප්ලගීනය විශේෂිතව දක්වා නැත" #~ msgid "processing options from plugin: %s" #~ msgstr "ප්ලගීන වෙතින් විකල්ප සකසමින්: %s" sosreport-3.2+git276-g7da50d6/po/uk.po0000644000175000017500000001570212433342602017106 0ustar cariboucaribou# Ukrainian translations for sos package. # Copyright (C) Free Software Foundation # This file is distributed under the same license as the system-config-display package. # Maxim Dzіumanenko , 2009 # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-04-11 08:45\n" "Last-Translator: Maxim Dzіumanenko \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Не вдається створити тимчасовий каталог." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (версія %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "модуль %s не пройшов перевірку автентичності. Пропускається." #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "модуль %s не встановлюється. Пропускається." #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "не знайдено модулі" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Наразі увімкнені модулі:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Немає активних модулів." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Наразі вимкнені модулі:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Доступні наступні параметри модулів:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Немає параметрів." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "Для виконання sosreport потрібні права root." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "відповідні модулі не увімкнені" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Ця програма виконає збір докладної інформації про обладнання\n" "та параметри вашої системи %(distroa)s.\n" "Отримані відомості будуть упаковані у архів, який буде розміщено у каталозі /" "tmp.\n" "Цей архів можна надсилати до служби підтримки для аналізу.\n" "%(distrob)s розглядає цю інформацію як конфіденційну та використовує\n" "виключно з метою діагностики.\n" "\n" "Цей процес може тривати деякий час.\n" "Систему при цьому змінено не буде.\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Натисніть ENTER для продовження або CTRL-C для виходу.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Модулі виявили помилки конфігурації." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Будь ласка, перегляньте повідомлення:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Ви дійсно бажаєте продовжити? (y/n)" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Виконуються модулі. Зачекайте, будь ласка..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " розташування дерева sosreport: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Вкажіть ім'я та прізвище [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Введіть номер перевірки для звіту, що створюється:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Створюється архів..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Виконується кодування архіву..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Виникла помилка при кодуванні вашого звіту." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Створений звіт збережено у: \n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Відправте цей файл представнику служби підтримки." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Файл конфігурації не містить URL." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Не вдається надіслати файл." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Виникла помилка при спробі надіслати звіт до служби підтримки Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Ваш звіт успішно надіслано до %s під назвою:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Повідомте цю назву представнику служби підтримки." sosreport-3.2+git276-g7da50d6/po/ar.po0000644000175000017500000001542412433342602017072 0ustar cariboucaribou# sos Arabic translation file # Copyright (C) 2007, Red Hat UK, Ltd. # Imed Chihi , 2007. # Abdalrahim Fakhouri , 2010. msgid "" msgstr "" "Project-Id-Version: sos 1.7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-06-08 23:36+0300\n" "Last-Translator: Abdalrahim Fakhouri \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "تعذّر إنشاء دليل مؤقـَّت" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (الإصدار %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "الملحق %s غير سليم، تم تعطيله" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "لا يمكن تثبيت الملحق %s، تم تعطيله." #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "لا توجد ملحقات صالحة" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "تم تفعيل الملحقات التالية" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "لم يتم تفعيل أي ملحق." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "تم تعطيل الملحقات الملحقات التالية" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "يمكن تحديد خيارات الملحقات التالية" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "لا توجد خيارات للملحقات" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "هذا البرنامج يستوجب صلاحيات root" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "لم يتم تفعيل أي ملحقات" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "ستقوم هذه الأداة بجمع معلومات عن\n" "عتاد وإعدادات نظام %(distroa)s لديك.\n" "ستُجمع المعلومات وتوضّب في أرشيف يوضع\n" "في /tmp، وبإمكانك إرسالها إلى مندوب دعم.\n" "ستستخدم %(distrob)s هذه المعلومات\n" "لأغراض بحثيّة فقط، وستعتبر معلوماتٍ سرّية.\n" "\n" "قد تستغرق هذه العمليّة بعض الوقت.\n" "لن يتم عمل أيّ تغييرات لنظامك.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "اضعط زر الإدخال للمتابعة، أو زر التحكّم مع C للخروج.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "أحد الملحقات إكتشف خطأ في إعدادات النظام" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "الرجاء مراجعة الإعلانات التالية" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "هل أنت متأكد؟ ن/ل" #: ../sos/sosreport.py:685 msgid "y" msgstr "ن" #: ../sos/sosreport.py:685 msgid "Y" msgstr "ل" #: ../sos/sosreport.py:688 msgid "n" msgstr "ن" #: ../sos/sosreport.py:688 msgid "N" msgstr "لا" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " جاري تشغيل الإضافات. يرجى الانتظار ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "شجرة بناء التقارير موجودة في: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "الرجاء إدخال الاسم [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "الرجاء إدخال رقم المعاملة المعنية بهذا التقرير: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "جاري إنشاء الأرشيف المضغوط ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "جاري تشفير الأرشيف ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "صودفت مشكلة بتشفير تقريرك." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "تم حفض الحزمة في: \n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "ناتج التدقيق md5sum هو: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "الرجاء إرسال هذه الحزمة إلى عملاء الدعم الفني." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "لم يتم تحديد عنوان URL في ملف الإعداد." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "لا يمكن الرفع للعنوان المحدّد" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "صودفت مشكلة برفع تقريرك إلى دعم Red Hat. " #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "تم رفع تقريرك إلى %s بنجاح بالاسم:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "الرجاء إرسال هذا الاسم إلى عملاء الدعم الفني." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "تم تعطيل الملحق %s عبر --skip-plugins" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "الملحق %s معطل، إستعمل -e أو -o لإعادة تفعيله." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "الملحق %s لم يرد في قائمة --only-plugins." #~ msgid "processing options from plugin: %s" #~ msgstr "معالجة خيارات الملحق %s" sosreport-3.2+git276-g7da50d6/po/bn.po0000644000175000017500000001000412433342602017054 0ustar cariboucaribou# Bengali translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/Makefile0000644000175000017500000000270712433342602017570 0ustar cariboucaribou# What is this package? NLSPACKAGE = sos POTFILE = $(NLSPACKAGE).pot INSTALL = /usr/bin/install -c INSTALL_DATA = $(INSTALL) -m 644 INSTALL_DIR = /usr/bin/install -d # destination directory INSTALL_NLS_DIR = $(DESTDIR)/usr/share/locale # PO catalog handling MSGMERGE = msgmerge -v XGETTEXT = xgettext --default-domain=$(NLSPACKAGE) \ --add-comments --language=python MSGFMT = msgfmt --statistics --verbose # What do we need to do POFILES = $(wildcard *.po) MOFILES = $(patsubst %.po,%.mo,$(POFILES)) PYSRC = $(wildcard ../sos/*.py) SRCFILES = $(PYSRC) all:: update-po $(MOFILES) $(POTFILE): $(XGETTEXT) --keyword=_ --keyword=N_ $(SRCFILES) @if cmp -s $(NLSPACKAGE).po $(POTFILE); then \ rm -f $(NLSPACKAGE).po; \ else \ mv -f $(NLSPACKAGE).po $(POTFILE); \ fi; \ update-po: Makefile $(POTFILE) refresh-po refresh-po: Makefile for cat in $(POFILES); do \ lang=`basename $$cat .po`; \ if $(MSGMERGE) $$lang.po $(POTFILE) > $$lang.pot ; then \ mv -f $$lang.pot $$lang.po ; \ echo "$(MSGMERGE) of $$lang succeeded" ; \ else \ echo "$(MSGMERGE) of $$lang failed" ; \ rm -f $$lang.pot ; \ fi \ done clean: @rm -fv *mo *~ .depend install: $(MOFILES) @for n in $(MOFILES); do \ l=`basename $$n .mo`; \ $(INSTALL_DIR) $(INSTALL_NLS_DIR)/$$l/LC_MESSAGES; \ $(INSTALL_DATA) --verbose $$n $(INSTALL_NLS_DIR)/$$l/LC_MESSAGES/$(NLSPACKAGE).mo; \ done %.mo: %.po $(MSGFMT) -o $@ $< .PHONY: missing depend $(POTFILE) sosreport-3.2+git276-g7da50d6/po/pt.po0000644000175000017500000001513112433342602017106 0ustar cariboucaribou# Portuguese translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2009-09-05 04:14+0100\n" "Last-Translator: Rui Gouveia \n" "Language-Team: PT \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Portuguese\n" "Generated-By: pygettext.py 1.5\n" "X-Poedit-Country: PORTUGAL\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Não foi possível criar directório temporário." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versão %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "plugin %s não valida. A passar ao seguinte" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "plugin %s não instala. A passar ao seguinte" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "Não foram encontrados plugins válidos" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Os seguintes plugins estão actualmente activos:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Nenhum plugin activo." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Os seguintes plugins estão actualmente desactivados:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "As seguintes opções de plugins estão disponíveis:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nenhumas opções do plugin disponíveis." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "o sosreport necessita de permissões de root para executar." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "Não foram activados plugins válidos" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Este utilitário vai recolher informações detalhadas acerca do\n" "hardware e configuração do seu sistema %(distroa)s.\n" "Esta informação é recolhida e compilada num ficheiro em /tmp,\n" "o qual poderá ser enviado para um representante de suporte.\n" "A %(distrob)s irá utilizar esta informação UNICAMENTE para efeitos\n" "de diagnóstico e será considerada informação confidencial.\n" "\n" "Este processo pode demorar um pouco a completar.\n" "Nenhuma alteração será efectuada ao seu sistema.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Carregue em ENTER para continuar, ou CTRL-C para sair.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Um ou mais plugins detectaram um problema na sua configuração." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Por favor, reveja as seguintes mensagens:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Tem a certeza que deseja continuar (y para sim/n para não) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "s" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "A executar plugins. Por favor, aguarde ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "a árvore de construção do sosreport está localizada em : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Por favor, insira a sua primeira inicial e último nome [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Por favor, insira o número do processo para o qual está a gerar este " "relatório: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "A criar arquivo comprimido..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "A cifrar arquivo..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Ocorreu um erro ao cifrar o seu relatório." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "O seu relatório sosreport foi gerado e guardado em:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "O md5sum é: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Por favor, envie este ficheiro para o seu representante do suporte." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nenhum URL definido no ficheiro de configuração." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Não foi possível submeter para o URL especificado." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Ocorreu um erro ao submeter o seu relatório para o suporte Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "O seu relatório foi submetido com sucesso para %s com o nome:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Por favor, comunique este nome para o seu representante do suporte." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s ignorado (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "plugin %s está desactivado (utilize -e ou -o para activar)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "plugin %s não é especificado na lista --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "A processar opções do plugin: %s" sosreport-3.2+git276-g7da50d6/po/eu_ES.po0000644000175000017500000001000312433342602017454 0ustar cariboucaribou# Basque translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/ast.po0000644000175000017500000001456612433342602017265 0ustar cariboucaribou# translation of ast.po to Asturian # Asturian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Astur , 2007. msgid "" msgstr "" "Project-Id-Version: ast\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2009-10-24 20:58+0100\n" "Last-Translator: Xandru Martino Ruz \n" "Language-Team: Asturian \n" "Language: ast\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Nun se pudo criar un direutoriu temporal." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versión %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "nun se validó'l plugin %s, inorándolu" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "nun s'instaló'l plugin %s, inorándolu" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "nun s'atopó un plugin válidu" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Los siguientes plugins tán activaos anguaño:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Dengún plugin ta activáu." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Los siguientes plugins nun tán activaos:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Les siguientes opciones del plugin tán disponibles:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nun hai opciones de plugin disponibles." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport requier privilexos de root pa executalu." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "nun s'activó dengún plugin válidu" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Esta utilidá recueyerá dalguna información detallada sobro'l\n" "hardware y la configuración del to sistema Red Hat Enterprise Linux.\n" "La información recuéyese y críase un ficheru baxo /tmp.\n" "Ésti puede mandase al to representante de sofitu.\n" "Red Hat usará esta información pa diagnosticar el sistema\n" "únicamente y considerará esta información como confidencial.\n" "\n" "Esti procesu va llevar un tiempu pa completase.\n" "Nun se fadrá dengún cambéu nel sistema.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Calca INTRO pa siguir o CTRL-C pa colar.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Ún o más plugins deteutaron un problema na to configuración." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Por favor revisa los siguientes mensaxes:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "¿Daveres quies siguir (s/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "s" #: ../sos/sosreport.py:685 msgid "Y" msgstr "S" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Por favor pon la inicial del to nome nome y del to apellíu [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Por favor pon el númberu de casu pal que tas xenerando esti informe:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Criando un ficheru comprimíu..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Encriptando'l ficheru..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Hebo un problema mientres s'encriptaba l'informe." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "El to informe sos xeneróse y guardóse en:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "El md5sum ye:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Por favor manda esti ficheru al to representante de sofitu." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Nun se puede cargar a la URL especificada." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Hebo un problema al cargar el to informe al equipu d'asistencia de Red Hat" #: ../sos/policyredhat.py:401 #, fuzzy, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "El to informe cargóse bien a los sirvidores ftp e Red Hat col nome:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Por favor comunica esti nome al to representante de sofitu." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s inoráu (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "plugin %s nun ta activu (usa -e o -o p'activalu)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "el plugin %s nun s'especifica na llista --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "procesando les opciones del plugin: %s" sosreport-3.2+git276-g7da50d6/po/am.po0000644000175000017500000001000412433342602017052 0ustar cariboucaribou# Amharic translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/tr.po0000644000175000017500000001406412433342602017114 0ustar cariboucaribou# Turkish translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Hasan Alp iNAN , 2010. # Hasan Alp İNAN , 2010. msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-10-19 21:49+0300\n" "Last-Translator: Hasan Alp İNAN \n" "Language-Team: Turkish \n" "Language: tr_TR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Lokalize 1.0\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Geçici dizin oluşturulamadı." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (sürüm %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "%s eklentisi doğrulanamadı, atlanıyor" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "%s eklentisi kurulamıyor, atlanıyor" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "hiç geçerli eklenti bulunamadı" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Aşağıdaki eklentiler şu an etkin:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Hiçbir eklenti etkin değil." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Aşağıdaki eklentiler şu an devre dışı:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Aşağıdaki eklenti seçenekleri kullanılabilir:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Hiç eklenti seçeneği mevcut değil." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport çalışmak için root yetkisi gerektirir." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "hiç geçerli eklenti etkinleştirilmedi" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Bu uygulama donanım ve %(distroa)s sistem yapılandırmanız\n" "hakkında ayrıntılı bazı bilgiler toplayacaktır.\n" "Bu bilgiler toplanır ve bir arşiv olarak /tmp altında paketlenir\n" "ki bu bilgileri bir destek temsilcisine gönderebilirsiniz.\n" "%(distrob)s SADECE tanı amacıyla bu bilgileri kullanacak\n" "ve gizli bilgi olarak kabul edilecektir.\n" "\n" "Bu işlemin tamamlanması biraz zaman alabilir.\n" "Sisteminizde hiç bir değişiklik yapılmayacaktır.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" "Devam etmek için ENTER'a basınız veya çıkmak için CTRL-C 'ye basınız.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Bir veya daha fazla eklenti yapılandırmanızda bir sorun tespit etti." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Lütfen aşağıdaki mesajları yeniden inceleyin:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Devam etmek istediğinizden emin misiniz (e/h) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "e" #: ../sos/sosreport.py:685 msgid "Y" msgstr "E" #: ../sos/sosreport.py:688 msgid "n" msgstr "h" #: ../sos/sosreport.py:688 msgid "N" msgstr "H" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Eklentiler çalışıyor. Lütfen bekleyiniz ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport inşaa ağacı burada bulunmaktadır : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Lütfen ilk adınızı ve soyadınızı giriniz [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Lütfen bu rapor için üretiğiniz durum numarasını girin: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Sıkıştırılmış arşiv oluşturuluyor..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Arşiv şifreleniyor..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Raporunuz şifrelenirken bir sorunla karşılaşıldı." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "sosreport'unuz oluşturuldu ve kaydedildi:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Lütfen bu dosyayı destek temsilcinize gönderiniz." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Yapılandırma dosyasında hiç URL tanımlanmadı." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Belirtilen URL 'ye yükleme yapılamadı." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Raporunuz Red Hat desteğe yüklenirken bir sorunla karşılaşıldı." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Raporunuz %s adıyla başarıyla yüklendi:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Lütfen bu ismi destek temsilcinize bildiriniz." sosreport-3.2+git276-g7da50d6/po/ms.po0000644000175000017500000001000212433342602017072 0ustar cariboucaribou# Malay translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/fa.po0000644000175000017500000001000412433342602017043 0ustar cariboucaribou# Persian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/ilo.po0000644000175000017500000001001112433342602017236 0ustar cariboucaribou# Language ilo translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/vi.po0000644000175000017500000001005712433342602017103 0ustar cariboucaribou# Vietnamese translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/te.po0000644000175000017500000002347112433342602017101 0ustar cariboucaribou# translation of sos.trunk.te.po to Telugu # Telugu translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Krishna Babu K , 2009. # Krishnababu Krothapalli , 2011. msgid "" msgstr "" "Project-Id-Version: sos.trunk.te\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-07 17:21+0530\n" "Last-Translator: Krishnababu Krothapalli \n" "Language-Team: Telugu \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: te\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Lokalize 1.1\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "తాత్కాలిక డైరెక్టరీను సృష్టించలేక పోయింది." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (వర్షన్ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "ప్లగ్‌యిన్ %s నిర్ధారించబడలేదు, వదిలివేయుచున్నది" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "ప్లగిన్ %s సంస్థాపించబడలేదు, వదిలివేయుచున్నది" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "చెల్లునటువంటి ప్లగిన్సు కనబడలేదు" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "ఈ క్రింది ప్లగిన్సు ప్రస్తుతం చేతనం చేయబడివున్నాయి:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "ఏ ప్లగిన్ చేతనం చేయబడిలేదు." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "క్రింది ప్లగిన్సు ప్రస్తుతం అచేతనం చేయబడివున్నాయి:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "ఈ క్రింది ప్లగిన్ ఐచ్చికాలు అందుబాటులో వున్నాయి:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "ఎటువంటి ప్లగిన్ ఐచ్చికాలు అందుబాటులో లేవు." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "నడుపుటకు sosreportకు root అనుమతులు కావలెను." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "చెల్లునటువంటి ప్లగిన్సు చేతనము చేయబడిలేవు" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "మీ %(distroa)s సిస్టమ్ యొక్క హార్డువేరు మరియు అమర్పు గురించిన\n" "కొంత విశదీకృత సమాచారమును ఈ సౌలభ్యము సేకరిస్తుంది. సమాచారము సేకరించబడుతుంది\n" "మరియు ఆర్చివ్ /tmp క్రింద ప్యాకేజీ చేయబడుతుంది, దీనిని మీరు మద్దతు ప్రతినిధికి పంపవచ్చు.\n" "%(distrob)s ఈ సమాచారమును విశ్లేషణ ప్రయోజనముల కొరకు మాత్రమే వుపయోగిస్తుంది\n" "మరియు అది గోప్యంగా వుంచబడుతుంది.\n" "\n" "పూర్తగుటకు ఈ కార్యక్రమము కొంత సమయాన్ని తీసుకొంటుంది.\n" "మీ సిస్టమ్‌నకు యెటువంటి మార్పులు చేయబడవు.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "కొనసాగించుటకు దయచేసి ENTER వత్తండి, లేదా నిష్క్రమించుటకు CTRL-C వత్తండి.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "ఒకటి లేదా యెక్కువ ప్లగిన్సు మీ ఆకృతీకరణనందు సమస్యను గుర్తించినవి." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "దయచేసి క్రింది సందేశములను పునఃపరిశీలించండి:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "మీరు ఖచ్చితంగా కొనసాగించుటకు యిష్టపడుతున్నారా (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " ప్లగిన్స్ నడుపుచున్నది. దయచేసి వేచివుండండి ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " సాస్‌రిపోర్ట్ బుల్డ్ ట్రీ దీని వద్ద వుంది : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "దయచేసి మీ పేరు మొదటి అక్షరం మరియు మీ యింటిపేరును ప్రవేశపెట్టండి [%s]" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "ఈ నివేదికను దేనికొరకు తయారు చేస్తున్నారో దాని కేస్ సంఖ్యను ప్రవేశపెట్టండి: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "కుదించిన ఆర్చీవ్‌ను సృష్టిస్తోంది..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "ఆర్చివ్‌ను ఎన్క్రిప్టు చేయుచున్నది..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "మీ నివేదికను ఎన్క్రిప్టు చేయుటలో అక్కడ వొక దోషమువుంది." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "మీ sosreport తయారుచేయబడింది మరియు దీనినందు దాయబడింది:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum : " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "దయచేసి ఈ దస్త్రమును మీ మద్దతు ప్రతినిధికి పంపండి." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "ఆకృతీకరణ ఫైల్ నందు యే URL నిర్వచించబడలేదు." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "తెలుపబడిన URLకు అప్‌లోడ్ చేయలేదు." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "మీ సమస్యను Red Hat మద్దతునకు అప్‌లోడు చేయుటలో వొక సమస్యవుంది." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "మీ ఫిర్యాదు %s నకు విజయవంతంగా అప్‌లోడ్ చేయబడింది యీ నామంతో:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "దయచేసి ఈ నామము మీ మద్దతు ప్రతినిధికి తెలియపరచండి." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "%s వదిలివేయబడింది (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "%s క్రియాహీనమైంది (చేతనం చేయుటకు -e లేదా -o వుపయోగించండి)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "ప్లగ్‌యిన్ %s తెలుపబడలేదు --only-plugins జాబితా" #~ msgid "processing options from plugin: %s" #~ msgstr "ప్లగిన్ నుండి ఐచ్చికాలను నిర్వర్తించుచున్నది: %s" sosreport-3.2+git276-g7da50d6/po/hu.po0000644000175000017500000001430712433342602017103 0ustar cariboucaribou# Hungarian translations for sos package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: sos trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-16 17:23+0100\n" "Last-Translator: Peter Bojtos \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Nem sikerült ideiglenes mappát teremteni." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport·(%s változat)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "%s dugasz érvénytelen, kihagyás" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "%s dugasz nem települ, kihagyás" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "nincs érvényes dugasz" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "A következő dugaszokat engedélyezték:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Nincs engedélyezett dugasz." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "A következő dugaszokat tiltották le:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "A következő dugasz opciók érhetők el:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nincs elérhető dugasz opció." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreportnak root jogsi kell a futáshoz." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "nem engedélyeztek érvényes dugaszt" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "E segédprogram részletes adatokat gyűjt a hardverről és a \n" "%(distroa)s rendszer beállításáról.\n" "Az adatokat a /tmp mappába gyűjtik és az archíválják, amit \n" "elküldhet a támogatás képviselőjének.\n" "%(distrob)s CSAK diagnosztikai célból használja ezen adatokat, \n" "és bizalmasnak tekinti azokat.\n" "\n" "E folyamat befejezése eltarthat egy ideig.\n" "A rendszert nem változtatja meg.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Nyomjon ENTER-t a folytatáshoz, vagy CTRL-C-t a kilépéshez.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Egy vagy több dugasz bajt érzékelt a konfigurációban." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Kérem nézze át a következő üzeneteket:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Biztosan folytatni akarja? (i/n) " #: ../sos/sosreport.py:685 msgid "y" msgstr "i" #: ../sos/sosreport.py:685 msgid "Y" msgstr "I" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Plugin-ek futtatása, kérem várjon…" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "Sosreport építési fája itt található: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Kérem adja meg utónevét és vezetéknevét [%s]:·" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Kérem adja meg az eset számát, amire e jelentést készíti: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Tömörített archívum teremtése…" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Archívum titkosítása…" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "A jelentést titkosítván hiba történt." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "A sos jelentés elkészült ide mentve:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Az md5sum: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Kérem küldje e fájlt a támogatás képviselőjének." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nincs URL meghatározva a config fájlban." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Nem lehet az URL-re feltölteni." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "A jelentést a Red Hat támogatáshoz feltöltvén baj történt." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "A jelentést sikerült a %s kiszolgálóra feltölteni a következő néven:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Kérem e nevet adja meg a támogatás képviselőjének." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "%s dugasz kihagyva (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "%s dugasz kikapcsolva (-e vagy -o kapcsolóval engedélyezheti)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "%s dugasz nincs megadva --only-plugins listában" #~ msgid "processing options from plugin: %s" #~ msgstr "%s dugasz opcióinak feldolgozása" sosreport-3.2+git276-g7da50d6/po/nso.po0000644000175000017500000001001112433342602017252 0ustar cariboucaribou# Language nso translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/cy.po0000644000175000017500000001000212433342602017066 0ustar cariboucaribou# Welsh translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/mk.po0000644000175000017500000001000712433342602017067 0ustar cariboucaribou# Macedonian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/en.po0000644000175000017500000001001712433342602017063 0ustar cariboucaribou# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: utf-8\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/gl.po0000644000175000017500000001000512433342602017060 0ustar cariboucaribou# Galician translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/mr.po0000644000175000017500000002035612433342602017106 0ustar cariboucaribou# translation of sos.trunk.po to Marathi # Marathi translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Sandeep Shedmake , 2009, 2011. msgid "" msgstr "" "Project-Id-Version: sos.trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-11 14:15+0530\n" "Last-Translator: Sandeep Shedmake \n" "Language-Team: Marathi \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: mr\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "तात्पुर्ती डिरेक्ट्री निर्माण करण्यास अशक्य." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (आवृत्ती %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "प्लगइन %s तपासले गेले नाही, वगळत आहे" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "प्लगइन %s चे प्रतिष्ठापान अशक्य, वगळत आहे" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "वैध प्लगइनस् आढळले नाही" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "खालील प्लगइनस् सध्या कार्यक्षम केले आहेत:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "प्लगइन कार्यक्षम केले नाही." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "खालील प्लगइनस् सध्या अकार्यक्षम केले आहे:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "खालील प्लगइन पर्याय उपलब्ध आहे:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "प्लगइन पर्याय उपलब्ध नाही." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ला चालवण्यासाठी रूट परवानगी आवश्यक आहे." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "वैध प्लगइनस् कार्यक्षम केले नाही" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "ही युटीलीटी हार्डवेअर विषयी काहिक तपशील माहिती\n" "गोळा करते व तुमची %(distroa)s प्रणली सेटअप करते.\n" "माहिती गोळा केली जाते व एक आर्काइव्ह\n" "/tmp अंतर्गत पॅकेज्ड् केले जाते, जे तुम्ही सपोर्ट प्रतिनीधीकडे पाठवू शकता.\n" "%(distrob)s या माहितीचा वापर फक्त विश्लेषण कारणास्तवच करेल\n" "व त्यांस गोपणीय म्हणून ठरवते.\n" "\n" "हे कार्य पूर्ण व्हायला काहिक वेळ जरूर लागेल.\n" "परंतु तुमच्या प्रणलीत कोणताही बदल केला जाणार नाही.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "पुढे जाण्यासाठी ENTER दाबा, किंवा बाहेर पडण्यासाठी CTRL-C दाबा.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "तुमच्या संयोजनात एक किंवा जास्त प्लगइनमध्ये अडचणी आढळल्यात." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "कृपया खालील संदेशचे पूनरावलोकन करा:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "तुम्हाला नक्की पुढे जायचे (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " प्लगईन्स् चालवत आहे. कृपया थांबा ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport बिल्ड ट्री येथे स्थीत आहे : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "कृपया तुमची प्रथम व शेवटचे नाव द्या [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "ही तपशील निर्माणसाठी कृपया केस क्रमांक द्या: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "आकुंचीत आर्काइव्ह निर्माण करत आहे..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "आर्काइव्ह एनक्रिप्ट करत आहे..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "तुमचे तपशील एनक्रिप्ट करतेवेळी अडचण." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "तुमचे sosreport निर्माण झाले व येथे साठले गेले आहे:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum याप्रमाणे आहे: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "तुमच्या समर्थीत प्रतिनीधीकरीता कृपया फाइल पाठवा." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "संरचना फाइलमध्ये URL ठरवले नाही." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "निर्देशीत URL अपलोड करण्यास अशक्य." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "तुमचा अहवाल Red Hat सपोर्टकडे पाठवतेवेळी अडचण आढळली." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "तुमचे अहवाल %s करीता नावासह यशस्वीरित्या अपलोड केले:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "कृपया हे नाव तुमच्या सपोर्ट प्रतिनीधीला कळवा." sosreport-3.2+git276-g7da50d6/po/id.po0000644000175000017500000001135012433342602017056 0ustar cariboucaribou# Indonesian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Tidak dapat menciptakan direktori sementara." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "Tidak ada plugin yang valid ditemukan" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Opsi plugin ini memungkinkan:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Tidak ada plugin yang memungkinkan." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Opsi plugin ini sedang tidak mungkin:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Opsi plugin ini tersedia:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "laporan sos membutuhkan hak akses root untuk berjalan." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "Tidak ada plugin yang valid yang dimungkinkan." #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Tekan ENTER untuk melanjutkan, atau CTRL+C untuk keluar.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Satu atau lebih plugin telah mendeteksi sebuah masalah di konfigurasi Anda." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Harap masukkan nama depan dan nama belakang Anda [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Please enter the case number that you are generating this report for: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Membuat arsip yang dikompresi..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Mengekripsi arsip..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Ada masalah dalam mengekripsi laporan Anda." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Laporan sos Anda telah digenerate dan disimpan di:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum adalah:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/lv.po0000644000175000017500000001013112433342602017077 0ustar cariboucaribou# Latvian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : " "2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/zh_CN.po0000644000175000017500000001321212433342602017462 0ustar cariboucaribou# translation of sos.trunk.po to Wei Liu # Chinese translations for PACKAGE package # PACKAGE �ļ���ķ�. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Leah Liu , 2007, 2010. msgid "" msgstr "" "Project-Id-Version: sos.trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-05-28 12:38+1000\n" "Last-Translator: Leah Liu \n" "Language-Team: Wei Liu\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "无法生成临时目录。" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "插件 %s 无效,跳过" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "未安装插件 %s,跳过" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "未发现可用插件" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "目前已启用了以下插件:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "没有启用插件。" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "目前禁用了以下插件:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "以下插件选项可用:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "没有可用的插件选项。" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport 需要根权限才可运行。" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "没有启用任何可用插件" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "此工具程序将收集一些有关硬件和\n" "您的 %(distroa)s 系统设置的信息。\n" "收集这些信息后会在 /tmp 中打包一个归档文件,\n" "然后您就可将这个归档发送给您的支持代表。\n" "%(distrob)s 将只以诊断为目的使用这些信息,\n" "并将其视为保密信息。\n" "\n" "这个过程要过一会儿才能完成。\n" "不会对您的系统做任何修改。\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "按 ENTER 键继续,或者 CTRL-C 组合键退出。\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "一个或者更多的插件检测出您的配置中的问题。" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "请浏览以下信息:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "您确定要继续吗(y/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N " #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " 正在运行插件,请等候 ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport 构建树位于:%s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "请输入您姓名的首写字母和姓 [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "请输入您要生成此报告的事件编号:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "生成压缩归档......" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "为归档加密......" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "在为您的报告加密时出错。" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "已经为您生成 sosreport 并保存在:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum 值为:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "请将此文件发送给您的支持代表。" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "在配置文件中定义 URL。" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "无法上传到指定的网址。" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "在将您的报告上传到红帽支持时出错。" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "已经成功将您的报告使用以下名称上传到 %s:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "请将此名称告知您的支持代表。" sosreport-3.2+git276-g7da50d6/po/ca.po0000644000175000017500000001616212433342602017053 0ustar cariboucaribou# Catalan translation of iok by Softcatalà # Copyright (C) 2009 Free Software Foundation # This file is distributed under the same license as the iok package. # Xavier Conde Rueda , 2009. # # This file is translated according to the glossary and style guide of # Softcatalà. If you plan to modify this file, please read first the page # of the Catalan translation team for the Fedora project at: # http://www.softcatala.org/projectes/fedora/ # and contact the previous translator. # # Aquest fitxer s'ha de traduir d'acord amb el recull de termes i la guia # d'estil de Softcatalà. Si voleu modificar aquest fitxer, llegiu si # us plau la pàgina de catalanització del projecte Fedora a: # http://www.softcatala.org/projectes/fedora/ # i contacteu l'anterior traductor/a. # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2009-05-17 08:45\n" "Last-Translator: Xavier Faus i Torà \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "No es pot crear el directori temporal." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "informe d'ajuda (versió %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "el connector %s no es valida, ometent" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "el connector %s no s'instal·la, ometent" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "cap connector vàlid trobat" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Els següents connectors estan actualment activats:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Cap connector activat." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Els següents connectors estan desactivats:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Les següents opcions dels connectors són disponibles:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "No hi ha cap opció disponible dels connectors." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "el sosreport necessita privilegis de root." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "cap connector vàlid està activat" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Aquesta utilitat recollirà informació detallada quant\n" "al maquinari i la configuració del vostre sistema %(distroa)s.\n" "La informació es recollida i s'empaqueta en un arxiu sota el directori\n" "/tmp, el qual es pot enviar a l'encarregat del suport.\n" "%(distrob)s utilitzarà aquesta informació únicament per a diagnòstics\n" "i es considerarà com a informació confidencial.\n" "\n" "Aquest procés pot trigar una estona en completar-se.\n" "No es realitzarà cap canvi en el vostre sistema.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Premeu Entrar per continuar, o Control-C per sortir.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Un o més connectors han detectat un problema en la configuració." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Si us plau reviseu els següents missatges:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Esteu segurs que voleu continuar (s/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "s" #: ../sos/sosreport.py:685 msgid "Y" msgstr "S" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Executant complements. Espereu ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "L'arbre de la construcció sosreport està localitzat a : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Si us plau entreu la vostra inicial i el cognom [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Si us plau introduïu el número del cas per al qual esteu generant l'informe :" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "S'està creant l'arxiu comprimit..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "S'està xifrant l'arxiu..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Hi ha hagut un problema xifrant el vostre informe." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "El vostre informe del sos ha estat generat i desat a:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "L'md5sum és:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Si us plau envieu aquest fitxer al vostre responsable del manteniment." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Cap URL definida en el fitxer de configuració." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "No es pot pujar a la URL especificada." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Hi ha hagut un problema en pujar l'informe al manteniment de Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "El vostre informe s'ha pujat correctament a %s amb el nom:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" "Si us plau comuniqueu aquest nom a la vostra persona encarregada del " "manteniment." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "el connector %s s'ha omés (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "el connector %s és inactiu (utilitzeu -e o -o per activar-lo)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "el connector %s no s'ha especificat a la llista --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "processant opcions del connector: %s" sosreport-3.2+git276-g7da50d6/po/fi.po0000644000175000017500000001457212433342602017071 0ustar cariboucaribou# Finnish translations for sos package. # Ville-Pekka Vainio , 2009, 2010. msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-28 01:03+0200\n" "Last-Translator: Ville-Pekka Vainio \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Väliaikaista hakemistoa ei voitu luoda." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versio %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "liitännäinen %s on virheellinen, ohitetaan" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "liitännäinen %s ei asennu, ohitetaan" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "kelvollisia liitännäisiä ei löytynyt" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Seuraavat liitännäiset ovat tällä hetkellä käytössä:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Yhtään liitännäistä ei ole käytössä." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Seuraavat liitännäiset ovat tällä hetkellä poissa käytöstä:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Seuraavat liitännäisen asetukset ovat käytettävissä:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Liitännäisellä ei ole asetuksia." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreportin käyttö vaatii root-oikeudet." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "yhtään kelvollista liitännäistä ei ole otettu käyttöön" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Tämä ohjelma kerää yksityiskohtaisia tietoja\n" "%(distroa)s -järjestelmän laitteistosta ja asetuksista.\n" "Tiedot kerätään arkistoon, joka tallennetaan /tmp-hakemistoon.\n" "Tämä arkisto voidaan lähettää käyttötukeen.\n" "%(distrob)s käyttää tätä tietoa vain vianetsintätarkoituksiin ja\n" "tietoa käsitellään luottamuksellisesti.\n" "\n" "Tämä toiminto voi kestää jonkin aikaa.\n" "Järjestelmään ei tehdä muutoksia.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Paina ENTER jatkaaksesi, CTRL-C lopettaaksesi.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Yksi tai useampi liitännäinen on huomannut ongelman järjestelmässä." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Tarkista seuraavat viestit:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Haluatko jatkaa (k/e)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "k" #: ../sos/sosreport.py:685 msgid "Y" msgstr "K" #: ../sos/sosreport.py:688 msgid "n" msgstr "e" #: ../sos/sosreport.py:688 msgid "N" msgstr "E" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Suoritetaan liitännäisiä. Odota..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport-käännöspuu on sijainnissa: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Syötä etunimesi ensimmäinen kirjain ja sukunimesi [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Syötä tapausnumero, jota varten olet tekemässä tätä raporttia:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Luodaan pakattua arkistoa..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Salataan arkistoa..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Raportin salaamisessa oli ongelma." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Sosreport-raportti on luotu ja tallennettu sijaintiin:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Md5sum-tarkistussumma on:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Lähetä tämä tiedosto käyttötukeen." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Asetustiedostossa ei ole määritelty osoitetta." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Annettuun osoitteeseen ei voida lähettää." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Raportin lähettämisessä Red Hatin käyttötukeen oli ongelmia." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Raportin lähetys kohteeseen %s onnistui, käytettiin nimeä:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Kerro tämä nimi käyttötukeen." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "liitännäinen %s ohitettiin (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "" #~ "liitännäinen %s ei ole käytössä (ota käyttöön valitsimella -e tai -o)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "liitännäinen %s ei ole --only-plugins-luettelossa" #~ msgid "processing options from plugin: %s" #~ msgstr "käsitellään liitännäisen %s asetukset" sosreport-3.2+git276-g7da50d6/po/my.po0000644000175000017500000001000412433342602017102 0ustar cariboucaribou# Burmese translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/sr@latin.po0000644000175000017500000001455012433342602020243 0ustar cariboucaribou# Serbian(Latin) translations for sos # Copyright (C) 2007 Red Hat, Inc. # This file is distributed under the same license as the sos package. # Miloš Komarčević , 2009. # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-28 23:56+0100\n" "Last-Translator: Miloš Komarčević \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Ne mogu da napravim privremeni direktorijum." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (verzija %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "dodatak %s se nije overio, preskačem" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "dodatak %s se nije instalirao, preskačem" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "nisu pronađeni valjani dodaci" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Sledeći dodaci su trenutno uključeni:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Nema uključenih dodataka." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Sledeći dodaci su trenutno isključeni:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Dostupne su sledeće opcije dodatka:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nema dostupnih opcija dodatka." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport zahteva root dozvole za izvršavanje." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "nisu uključeni valjani dodaci" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Ova alatka će sakupiti neke detaljne informacije o\n" "hardveru i postavci vašeg %(distroa)s sistema.\n" "Informacije se sakupljaju i pakuje se arhiva pod\n" "/tmp, koju možete poslati predstavniku za podršku.\n" "%(distrob)s će upotrebiti ove informacije SAMO u dijagnostičke\n" "svrhe i biće smatrane poverljivim informacijama.\n" "\n" "Ovaj proces može da potraje duže dok se ne završi.\n" "Nikakve promene neće bite načinjene na sistemu.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Pritisnite ENTER za nastavak, ili CTRL-C za izlaz.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Jedan ili više dodataka su otkrili problem sa vašim podešavanjima." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Pregledajte sledeće poruke:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Da li sigurno želite da nastavite (d/n) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "d" #: ../sos/sosreport.py:685 msgid "Y" msgstr "D" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Pokrećem dodatke. Molimo sačekajte ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " stablo sosreport izgradnje se nalazi na : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Unesite vaš prvi inicijal i prezime [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Unesite broj slučaja za koji pravite ovaj izveštaj:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Pravim komprimovanu arhivu..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Šifriram arhivu..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Došlo je do greške pri šifrovanju vašeg izveštaja." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Vaš sos izveštaj je napravljen i sačuvan u:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum je: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Pošaljite ovu datoteku vašem predstavniku podrške." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nema definisane URL adrese u datoteci podešavanja." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Ne mogu da pošaljem na navedeni URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Pojavio se problem pri slanju vašeg izveštaja Red Hat podršci." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Vaš izveštaj je uspešno poslat na %s sa imenom:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Prenesite ovo ime vašem predstavniku podrške." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "dodatak %s je preskočen (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "dodatak %s nije aktivan (upotrebite -e ili -o da ga uključite)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "dodatak %s nije naveden u spisku --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "obrađujem opcije od dodatka: %s" sosreport-3.2+git276-g7da50d6/po/af.po0000644000175000017500000001000612433342602017045 0ustar cariboucaribou# Afrikaans translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/es.po0000644000175000017500000001544012433342602017075 0ustar cariboucaribou# Fedora Spanish translation of sos.trunk. # This file is distributed under the same license as the sos.trunk package. # # Manuel Ospina , 2007. # Héctor Daniel Cabrera , 2010. # msgid "" msgstr "" "Project-Id-Version: sos.trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-12 10:56-0300\n" "Last-Translator: Héctor Daniel Cabrera \n" "Language-Team: Español \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Spanish\n" "Generated-By: pygettext.py 1.5\n" "X-Poedit-Country: ARGENTINA\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "No se pudo crear un directorio temporal." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versión %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "no se validó el plugin %s, ignorándolo" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "no se instaló el plugin %s, ignorándolo" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "no se encontró un plugin válido" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Los siguientes plugins están activados actualmente:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Ningún plugin está activado." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Los siguientes plugins no están activados:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Las siguientes opciones del plugin están disponibles:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "No hay opciones de plugin disponibles." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport requiere privilegios de root para ser ejecutado." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "ningún plugin válido fue activado" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Esta herramienta obtendrá cierta información detallada relacionada\n" "con la configuración y el hardware de su sistema %(distroa)s.\n" "La información conseguida se empaquetará en un archivo del directorio\n" "/tmp, archivo que usted podrá enviar a un representante de soporte técnico.\n" "%(distrob)s utilizará esta información con el UNICO fin de poder realizar\n" "un diagnóstico, iserá considerado como información confidencial.\n" "\n" "Este proceso puede demorar algún tiempo en completarse.\n" "No se realizará ninguna modificación en su sistema.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Presione INTRO para continuar o CTRL-C para salir.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Uno o más plugins han detectado un problema en su configuración." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Por favor revise los siguientes mensajes:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "¿Está seguro que desea continuar (s/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "s" #: ../sos/sosreport.py:685 msgid "Y" msgstr "S" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Ejecutando complementos. Por favor espere..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "el árbol de compilación de sosreport se encuentra ubicado en : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" "Por favor introduzca la inicial de su primer nombre y su apellido [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Por favor introduzca el número de caso para el cual está generando este " "reporte:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Creando un archivo comprimido..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Encriptando el archivo..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Hubo un problema mientras se encriptaba el reporte." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Su reporte sos ha sido generado y guardado en:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "El md5sum es:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Por favor envíe este archivo a su representante de soporte." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "No hay URL definida en el archivo de configuración." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "No se puede cargar a la URL especificada." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Hubo un problema al cargar su reporte al equipo de asistencia de Red Hat" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Su reporte ha sido cargado satisfactoriamente a %s con el nombre:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Por favor comunique este nombre a su representante de soporte." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s ignorado (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "plugin %s no está activo (use -e o -o para activarlo)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "plugin %s no está especificado en la lista --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "procesando las opciones del plugin: %s" sosreport-3.2+git276-g7da50d6/po/nds.po0000644000175000017500000001115412433342602017250 0ustar cariboucaribou# translation of sos.trunk.po to # Low German translation of sos # This file is distributed under the same license as the sos package. # Copyright (C) 2007 Red hat, Inc. # # # Nils-Christoph Fiedler , 2010. msgid "" msgstr "" "Project-Id-Version: sos.trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-12-05 10:16+0100\n" "Last-Translator: Nils-Christoph Fiedler \n" "Language-Team: Fedora Low German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nds\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Low German\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Künn keen twüschentiedliches Verteeknis erstellen." #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Keen Plugin aktivert." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Keene Pluginoptschoonen verfögbar." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Wullt je seker wietermaken (y/n) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Plugins lööpen. Bidde töven ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Entslötel Archiv..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "De md5sum is:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Keene URL in de config Dateil geven." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (Verschoon %s)" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Erstelle komprimertes Archiv..." sosreport-3.2+git276-g7da50d6/po/ur.po0000644000175000017500000001000112433342602017100 0ustar cariboucaribou# Urdu translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/nl.po0000644000175000017500000001511712433342602017100 0ustar cariboucaribou# translation of sos.trunk-nl.po to Dutch # Copyright (C) YEAR ORGANIZATION # R.E. van der Luit , 2009, 2010. # Geert Warrink , 2010. msgid "" msgstr "" "Project-Id-Version: sos.trunk-nl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-07-04 18:00+0200\n" "Last-Translator: Geert Warrink \n" "Language-Team: Fedora\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Virtaal 0.6.1\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Kon geen tijdelijke map maken." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sos rapport (versie %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "plug-in %s valideerde niet, wordt overgeslagen" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "plug-in %s laat zich niet installeren, wordt overgeslagen" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "geen geldige plug-in gevonden" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "De volgende plug-ins zijn momenteel actief:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Geen plug-in aangezet." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "De volgende plug-ins zijn momenteel actief:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "De volgende plug-in opties zijn beschikbaar:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Geen plug-in opties beschikbaar." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sos rapport vereist root rechten om te draaien." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "er waren geen geldige plug-ins aangezet" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Dit programma zal enige gedetailleerde informatie over de hardware\n" "en instelling van jouw %(distroa)s systeem verzamelen.\n" "De informatie wordt verzameld en een archief bestand wordt ingepakt in\n" "/tmp, welke je naar jouw ondersteuning representant kunt sturen.\n" "%(distrob)s zal deze informatie ALLEEN voor diagnose doeleinden\n" "gebruiken en het zal beschouwd worden als vertrouwelijke informatie.\n" "\n" "Dit proces kan enige tijd duren voordat het klaar is.\n" "Er zullen geen veranderingen aan jouw systeem gemaakt worden.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Druk op ENTER om verder te gaan, of op CTRL-C om te stoppen.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Eén of meerdere plug-ins hebben een probleem in jouw configuratie bemerkt." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Lees a.u.b. de volgende berichten door:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Weet je zeker dat je door wilt gaan (j/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "j" #: ../sos/sosreport.py:685 msgid "Y" msgstr "J" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Plug-ins worden gedraaid. Wachten a.u.b. ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "De sos melding opbouw boom bevindt zich in : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Voer jouw eerste initiaal en jouw achternaam in [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Voer a.u.b. het zaak nummer in waarvoor je dit rapport aanmaakt:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Gecomprimeerd archief bestand wordt gemaakt..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Archief bestand wordt versleuteld..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Er trad een probleem op bij het versleutelen van jouw melding." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Jouw sos rapport is gegenereerd en opgeslagen in:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "De md5sum is: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Zendt dit bestand a.u.b. naar jouw ondersteuning representant." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Er is geen URL gedefinieerd in het config bestand." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Kan niet naar de opgegeven URL uploaden." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Er trad een probleem op bij het uploaden van jouw rapport naar Red Hat " "support." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Jouw melding is succesvol verstuurd naar %s met de naam:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Meldt deze naam a.u.b. aan jouw ondersteuning representant." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s overgeslagen (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "plugin %s is niet actief (gebruik -e of -o om in te schakelen)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "plugin %s is niet gespecificeerd in --only-plugin lijst" #~ msgid "processing options from plugin: %s" #~ msgstr "verwerken opties van plugin: %s" sosreport-3.2+git276-g7da50d6/po/lo.po0000644000175000017500000001000412433342602017067 0ustar cariboucaribou# Laotian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/he.po0000644000175000017500000001006212433342602017055 0ustar cariboucaribou# Hebrew translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/lt.po0000644000175000017500000001017012433342602017100 0ustar cariboucaribou# Lithuanian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n" "%100<10 || n%100>=20) ? 1 : 2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/is.po0000644000175000017500000001000612433342602017072 0ustar cariboucaribou# Icelandic translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/be.po0000644000175000017500000001000712433342602017046 0ustar cariboucaribou# Belarusian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/da.po0000644000175000017500000001504012433342602017046 0ustar cariboucaribou# Danish translations for sos package. # Copyright (C) 2007-10 # Automatically generated, 2007. # Kris Thomsen , 2009, 2010. # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-12 13:39+0100\n" "Last-Translator: Kris Thomsen \n" "Language-Team: Danish 1);\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Kunne ikke oprette midlertidig mappe." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "udvidelsesmodulet %s validerer ikke, springer over" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "udvidelsesmodulet %s installerer ikke, springer over" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ingen gyldige udvidelsesmoduler fundet" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Følgende udvidelsesmoduler er aktiveret i øjeblikket:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Ingen udvidelsesmoduler aktiveret." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Følgende udvidelsesmoduler er deaktiveret i øjeblikket:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Følgende indstillinger for udvidelsesmodul er tilgængelige:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Ingen indstillinger tilgængelige for udvidelsesmodul." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport behøver administratorrettigheder for at køre." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "ingen gyldige udvidelsesmoduler er aktiveret" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Dette hjælpeværktøj vil indsamle detaljeret information om\n" "hardwaren og din %(distroa)s systemopsætning\n" "Informationen er indsamlet og et arkiv er pakket under /tmp,\n" "som du kan sende til din supportrepræsentant.\n" "%(distrob)s vil KUN bruge denne information til diagnostiske\n" "formål, og det vil blive behandlet som fortrolig information.\n" "\n" "Denne proces kan tage et stykke tid at gennemføre.\n" "Ingen ændringer vil blive foretaget på dit system.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Tryk ENTER for at fortsætte, eller CTRL-C for at afslutte.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Èn eller flere udvidelsesmoduler har fundet et problem i din konfiguration." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Gennemse venligst følgende beskeder:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Er du sikker på, at du vil fortsætte (j/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "j" #: ../sos/sosreport.py:685 msgid "Y" msgstr "J" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Kører udvidelsesmoduler. Vent venligst ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "sosreport bygningstræ er placeret på : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Indtast venligst dit for- og efternavn [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Indtast venligst nummeret på sagen, som du opretter denne rapport for: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Opretter komprimeret arkiv..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Krypterer arkiv..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Der opstod et problem under kryptering af din rapport." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Din sosrapport er blevet oprettet og gemt i:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "MD5summen er: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Indsend venligst denne fil til din supportrepræsentant." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Ingen URL defineret i konfigurationsfil." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Kan ikke overføre til den angivne URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Der opstod et problem under overførsel af din rapport til Red Hat-support." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Din rapport er overført til %s med succes, under navnet:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Giv venligst dit navn til din supportrepræsentant." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "udvidelsesmodulet %s sprunget over (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "" #~ "udvidelsesmodulet %s er inaktivt (brug -e eller -o for at aktivere)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "udvidelsesmodulet %s er er ikke angivet i --only-plugins listen" #~ msgid "processing options from plugin: %s" #~ msgstr "bearbejder indstillinger fra udvidelsesmodul: %s" sosreport-3.2+git276-g7da50d6/po/pl.po0000644000175000017500000001346512433342602017106 0ustar cariboucaribou# translation of pl.po to Polish # Piotr Drąg , 2007. # msgid "" msgstr "" "Project-Id-Version: pl\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-26 23:42+0100\n" "Last-Translator: Piotr Drąg \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Nie można utworzyć katalogu tymczasowego." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (wersja %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "nie można sprawdzić wtyczki %s, pomijanie" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "nie można zainstalować wtyczki %s, pomijanie" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "nie odnaleziono prawidłowych wtyczek" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Następujące wtyczki są obecnie włączone:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Brak włączonych wtyczek." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Następujące wtyczki są obecnie wyłączone:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Następujące wtyczki są dostępne:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Brak dostępnych wtyczek." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport wymaga uprawnień roota do uruchomienia." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "brak włączonych prawidłowych wtyczek" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "To narzędzie zbiera niektóre szczegółowe informacje o sprzęcie\n" "i ustawieniach systemu %(distroa)s. Informacje są\n" "zbierane i archiwizowane w formie pakietu w /tmp, który można\n" "wysłać reprezentantowi wsparcia technicznego. Firma %(distrob)s\n" "użyje tych informacji TYLKO do celów diagnostycznych i zachowa\n" "je jako informacje poufne.\n" "\n" "Ten proces może chwilę zająć.\n" "Żadne zmiany nie zostaną wprowadzane do systemu.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" "Należy nacisnąć przycisk Enter, aby kontynuować lub Ctrl-C, aby zakończyć.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Jedna lub więcej wtyczek wykryły problem w konfiguracji." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Proszę przejrzeć poniższe komunikaty:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Na pewno kontynuować (t/n)? " #: ../sos/sosreport.py:685 msgid "y" msgstr "t" #: ../sos/sosreport.py:685 msgid "Y" msgstr "T" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Wykonywanie wtyczek. Proszę czekać..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " Drzewo budowania sosreport znajduje się w: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Proszę podać imię i nazwisko [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Proszę podać numer sprawy, dla której ten raport jest tworzony: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Tworzenie skompresowanego archiwum..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Szyfrowanie archiwum..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Wystąpił problem podczas szyfrowania raportu." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Raport sos został utworzony i zapisany w:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Suma MD5 to: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Proszę wysłać ten plik do reprezentanta wsparcia technicznego." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nie podano adresu URL w pliku konfiguracji." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Nie można wysłać na podany adres URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Wystąpił problem podczas wysyłania raportu do wsparcia technicznego firmy " "Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Raport został pomyślnie wysłany do %s za pomocą nazwy:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Proszę podać tę nazwę reprezentantowi wsparcia technicznego." sosreport-3.2+git276-g7da50d6/po/hr.po0000644000175000017500000001020112433342602017065 0ustar cariboucaribou# Croatian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/bs.po0000644000175000017500000001361012433342602017067 0ustar cariboucaribou# Bosnian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Nije se mogao kreirati privremeni direktorij." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosizjestaj (verzija %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "plugin %s se nije mogao potvrditi, preskace se" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "plugin %s se nije instalirao, preskace se " #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ispravan plugin nije nadjen" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Sljedeci plugin-i su trenutno osposobljeni:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Nema osposobljenih plugin-a." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Sljedeci su plugin-i onesposobljeni:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Sjedeci su plugini-i na raspolaganju:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nema plugin-a na raspolaganju." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosizvjestaj zahtijeva 'root' privilegije da bi se pokrenuo." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "Nema ispravnih plugin-a na raspolaganju." #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Ovaj ce usluzni program sakupiti detaljne informacije o\n" "\r\n" "hardveru i postavci vašeg %(distroa)s sistema.\n" "\r\n" "Informacije se sakupljaju i pakuje se arhiva pod\n" "\r\n" "/tmp, koju možete poslati predstavniku za podršku.\n" "\r\n" "%(distrob)s će upotrebiti ove informacije JEDINO u dijagnostičke\n" "\r\n" "svrhe i ove informacije biće smatrane povjerljivim informacijama.\n" "\r\n" "\n" "\r\n" "Ovom procesu može trebati vremena dok se ne završi.\n" "\r\n" "Nikakve promjene neće biti ucinjene vasem sistemu.\n" "\r\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Pritisnite ENTER da nastavite, ili CTRL-C da odustanete.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Jedan ili vise plugin-a su otkrili probleme u vasoj konfiguraciji." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Molim vas pregledajte sljedece poruke:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Jeste li sigurni da zelite nastaviti (d/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "d" #: ../sos/sosreport.py:685 msgid "Y" msgstr "D" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Pokrecu se plugin-i. Molim vas pricekajte ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "sosizvjestaj 'build' stablo nalazi se pod: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Molim vas unesite prvo slovo vaseg imena i prezime [%s]" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Molim vas unesite broj slucaja za koji pripremate ovaj izvjestaj:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Kreira se komprimirana arhiva ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Sifrira se arhiva ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Bilo je problema u sifriranju vaseg izvjestaja." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Vas sosizvjestaj je kreiran i sacuvan u:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum je:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Molim vas posaljite ovu datoteku vasem predstavniku za podrsku." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nema URL definiranog u konfiguracijskoj datoteci." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Nije se mogao postaviti specificirani URL," #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Bilo je problema u postavljanju vaseg izvjestaja na Red Hat podrsku. " #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Vas je izvjestaj uspjesno postavljen u %s sa nazivom:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Molim vas prenesite ovo ime vasem predstavniku za podrsku." sosreport-3.2+git276-g7da50d6/po/sl.po0000644000175000017500000001015412433342602017101 0ustar cariboucaribou# Slovenian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" "%100==4 ? 2 : 3);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/bg.po0000644000175000017500000001411712433342602017056 0ustar cariboucaribou# Bulgarian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-08-05 15:37+0100\n" "Last-Translator: Ivelin \n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Не може да се създаде временна директория." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (версия %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "плъгин %s не се валидира, прескачане" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "плъгин %s не се инсталира, прескачане" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "не са открити валидни плъгин-и." #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Следните плъгин-и са включени:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Няма включен плъгин." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Следните plugin-и са изключени:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Следните plugin опции са налични:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Няма налични plugin опции." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport изисква root права за да стартира." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "няма включени валидни plugin-и" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Натиснете ENTER за да продължите или CTRL-C за изход.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Един или повече plugin-и са открили проблем във вашата настройка." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Моля прегледайте следните съобщения:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Сигурни ли сте, че искате да продължите (y/n) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Стартирване на plugin-и. Моля изчакайте ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport build tree се намира на : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" "Моля въведете инициал на първото си име и вашата фамилия (Пример: И Джантов) " "[%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Създаване на компресиран архив..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Кодиране на архива..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Възникна проблем при кодирането на вашия отчет." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Вашия sosreport бе генериран и запаметен в:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum е:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Моля изпратете този файл до представителя на вашата подръжка." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Няма зададен URL в конфигурационния файл." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Не може да се качи на посочения URL" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Възникна проблем при качването на вашия отчет на проддръжката на Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Вашият отчет беше успешно качен на %s с име:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Моля съобщете това име на представителя на вашата подръжка." sosreport-3.2+git276-g7da50d6/po/ru.po0000644000175000017500000001600412433342602017111 0ustar cariboucaribou# translation of ru.po to # Russian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Yulia , 2010. msgid "" msgstr "" "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-30 08:47\n" "Last-Translator: Yulia \n" "Language-Team: Russian\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Не удалось создать временный каталог." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (версия %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "модуль %s не прошёл проверку. Пропускается." #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "модуль %s не устанавливается. Пропускается." #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "верные модули не найдены" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "В настоящее время включены модули:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Нет активных модулей." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "В настоящее время отключены модули:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Доступные опции модулей:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Нет опций." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "Для выполнения sosreport необходимы права root." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "не включены верные модули" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Эта программа выполнит сбор подробной информации об оборудовании\n" "и настройках вашей системы %(distroa)s.\n" "Полученные сведения будут упакованы в архив, который будет помещён в " "каталог /tmp.\n" "Этот архив можно отправить в службу поддержки для анализа.\n" "%(distrob)s рассматривает эту информацию как конфиденциальную и использует\n" "исключительно в целях диагностики.\n" "\n" "Этот процесс может занять некоторое время.\n" "Система при этом изменена не будет.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Нажмите ENTER для продолжения или CTRL-C для выхода.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Модули обнаружили ошибки конфигурации." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Пожалуйста, просмотрите сообщения:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Вы действительно хотите продолжить? (y/n)" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Выполняются модули. Пожалуйста, подождите..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " расположение дерева sosreport: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Пожалуйста, укажите первую букву имени и фамилию [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Пожалуйста, введите номер проверки для создаваемого отчёта:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Создаётся архив..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Выполняется шифрование архива..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Произошла ошибка при шифровании отчёта." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Созданный отчёт сохранен в: \n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Отправьте этот файл представителю службы поддержки." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Файл конфигурации не содержит URL." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Не удалось отправить файл." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Произошла ошибка при попытке отправить отчёт в службу поддержки Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Ваш отчёт был успешно отправлен на %s под именем:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Сообщите это имя представителю службы поддержки." sosreport-3.2+git276-g7da50d6/po/it.po0000644000175000017500000001445012433342602017102 0ustar cariboucaribou# translation of it.po to # Copyright (C) YEAR ORGANIZATION # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-11-06 15:02+1000\n" "Last-Translator: \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Impossibile creare la cartella temporanea." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (versione %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "il plugin %s non é valido e verrà ignorato" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "il plugin %s non si installa, ignorato" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "non é stato trovato nessun plugin valido " #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "I seguenti plugin sono attivi:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Nessun plugin abilitato." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "I seguenti plugin sono disattivati:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Sono disponibili le seguenti opzioni per il plugin:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Nessuna opzione disponibile per il plugin." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport necessita dei permessi di root" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "non é stato attivato nessun plugin" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Questo strumento raccoglierà alcune informazioni dettagliate sull'hardware\n" " e sulla impostazione del vostro sistema %(distroa)s.\n" " Queste informazioni verranno archiviate in\n" "/tmp, e potranno essere inviate ad un rappresentante del supporto tecnico.\n" "%(distrob)s utilizzerà questi dati ESCLUSIVAMENTE per scopi diagnostici e\n" "verranno considerate come informazioni riservate.\n" "\n" "Questo processo potrebbe durare alcuni minuti.\n" "Non verrà apportata alcuna modifica al sistema.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Premere INVIO per continuare, o CTRL-C per usicre.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "Uno o più plugin hanno individuato un problema nella configurazione." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Si prega di rileggere i seguenti messaggi:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Si desidera continuare (s/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "s" #: ../sos/sosreport.py:685 msgid "Y" msgstr "S" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Plugin in esecuzione. Attendere prego ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "il sosreport generato si trova in : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Inserire l'iniziale del nome e il cognome [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Inserire il numero di identificazione di questo report: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Creazione di un archivio compresso, in corso ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Cifratura dell'archivio, in corso ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Si è verificato un problema durante la cifratura del report." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Il sosreport é stato creato e salvato in:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "L'md5sum é: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Si prega di inviare questo file al supporto tecnico." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Nessun URL definito nel file config." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Impossibile inviare all'URL specificato." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" "Si è verificato un problema nell'inviare il report al supporto tecnico Red " "Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Il report con il seguente nome, è stato inviato con successo a %s: " #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Si prega di inviare questo nome al supporto tecnico." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "plugin %s disattivata (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "plugin %s non é attiva (utilizzare -e o -o per riattivarla)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "plugin %s non specificata nella lista --only-plugins" #~ msgid "processing options from plugin: %s" #~ msgstr "sto processando le opzioni della plugin: %s" sosreport-3.2+git276-g7da50d6/po/gu.po0000644000175000017500000002102512433342602017075 0ustar cariboucaribou# translation of sos.trunk.gu.po to Gujarati # Gujarati translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Ankit Patel , 2007. # Sweta Kothari , 2011. msgid "" msgstr "" "Project-Id-Version: sos.trunk.gu\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-04 17:39+0530\n" "Last-Translator: Sweta Kothari \n" "Language-Team: Gujarati\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: gu\n" "Generated-By: pygettext.py 1.5\n" "X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "કામચલાઉ ડિરેક્ટરી બનાવી શક્યા નહિં." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (આવૃત્તિ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "પ્લગઈન %s માન્ય થઈ શક્યું નહિં, અવગણી રહ્યા છીએ" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "પ્લગઈન %s સ્થાપિત થતું નથી, અવગણી રહ્યા છીએ" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "કોઈ માન્ય પ્લગઈનો મળ્યા નહિં" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "નીચેના પ્લગઈનો વર્તમાનમાં સક્રિય કરવામાં આવેલ છે:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "કોઈ પ્લગઈન સક્રિય કરેલ નથી." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "નીચેના પ્લગઈનો વર્તમાનમાં નિષ્ક્રિય કરેલ છે:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "નીચેના પ્લગઈન વિકલ્પો ઉપલબ્ધ છે:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "કોઈ પ્લગઈન વિકલ્પો ઉપલબ્ધ નથી." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ને ચલાવવા માટે રુટ પરવાનગીઓ જરૂરી છે." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "કોઈ માન્ય પ્લગઈનો સક્રિય કરેલ હતા નહિં" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "આ ઉપયોગીતા હાર્ડવેર વિશે અમુક વિગતવાર જાણકારી\n" "ભેગી કરશે અને તમારી %(distroa)s સિસ્ટમ સુયોજીત કરશે.\n" "જાણકારી ભેગી થયેલ છે અને પેટી એ /tmp ડિરેક્ટરી હેઠળ પેકેજ\n" "થયેલ છે, કે જેને તમે આધાર રજૂઆતકને મોકલી શકો છો.\n" "%(distrob)s આ જાણકારીનો માત્ર તપાસ હેતુઓ માટે જ ઉપયોગ કરશે\n" "અને તે ખાનગી જાણકારી તરીકે ધ્યાનમાં લેવામાં આવશે.\n" "\n" "આ પ્રક્રિયા સમાપ્ત થવા માટે થોડો સમય લેશે.\n" "તમારી સિસ્ટમમાં કોઈ ફેરફારો કરવામાં આવશે નહિં.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ચાલુ રાખવા માટે ENTER દબાવો, અથવા બંધ કરવા માટે CTRL-C દબાવો.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "એક અથવા વધુ પ્લગઈનોને તમારા રૂપરેખાંકનમાં સમસ્યા મળી આવી." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "મહેરબાની કરીને નીચેના સંદેશાઓ રીવ્યુ કરો:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "શું તમે ખરેખર ચાલુ રાખવા ઈચ્છો છો (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " પ્લગઇનોને ચલાવી રહ્યા છીએ. મહેરબાની કરીને થોભો ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport બિલ્ડ ટ્રી તેની પર સ્થિત થયેલ છે : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "મહેરબાની કરીને તમારું પ્રથમ અને છેલ્લું નામ દાખલ કરો [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "મહેરબાની કરીને તમારો કેસ નંબર દાખલ કરો કે જેમાંથી તમે આ અહેવાલ બનાવી રહ્યા છો: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "સંકુચિત પેટી બનાવી રહ્યા છીએ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "પેટી એનક્રિપ્ટ કરી રહ્યા છીએ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "તમારો અહેવાલ એનક્રિપ્ટ કરવામાં સમસ્યા હતી." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "તમારો sosreport બની ગયેલ છે અને આમાં સંગ્રહાયેલ છે:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum આ છે: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "મહેરબાની કરીને આ ફાઈલ તમારા આધાર રજૂઆતકને મોકલો." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "config ફાઇલમાં URL વ્યાખ્યાયિત થયેલ નથી." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "સ્પષ્ટ કરેલ URL અપલોડ કરી શકતા નથી." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "તમારા અહેવાલને Red Hat આધારમાં અપલોડ કરવામાં સમસ્યા હતી." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "તમારો અહેવાલ %s નામ સાથે સફળતાપૂર્વક અપલોડ થયો હતો:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "મહેરબાની કરીને આ નામ તમારા આધાર રજૂઆતકને મોકલો." sosreport-3.2+git276-g7da50d6/po/ro.po0000644000175000017500000001000512433342602017076 0ustar cariboucaribou# Romanian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/nn.po0000644000175000017500000001007512433342602017100 0ustar cariboucaribou# Norwegian Nynorsk translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/de.po0000644000175000017500000001450212433342602017054 0ustar cariboucaribou# translation of sos.trunk.po to # German translation of sos # This file is distributed under the same license as the sos package. # Copyright (C) 2007 Red hat, Inc. # # # Timo Trinks , 2007. # Fabian Affolter , 2009. # sknirT omiT , 2010. msgid "" msgstr "" "Project-Id-Version: sos.trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-31 14:19+1000\n" "Last-Translator: sknirT omiT \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: KBabel 1.11.4\n" "X-Poedit-Language: German\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Temporäres Verzeichnis konnte nicht erstellt werden." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "Plugin %s validiert nicht, wird ausgelassen" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "Plugin %s installiert sich nicht, wird ausgelassen" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "keine gültigen Plugins gefunden" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Die folgenden Plugins sind derzeit aktiviert:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Kein Plugin aktiviert." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Die folgenden Plugins sind derzeit deaktiviert:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Die folgenden Plugin-Optionen stehen zur Verfügung:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Keine Plugin-Optionen verfügbar." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport benötigt zur Ausführung Root-Berechtigungen." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "keine gültigen Plugins wurden aktiviert" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Dieses Dienstprogramm sammelt einige detaillierte Informationen\n" "zur Hardware und Einrichtung Ihres %(distroa)s Systems.\n" "Die Informationen werden gesammelt und in einem Archiv unter /tmp\n" "zusammengefasst, welches Sie an einen Support-Vertreter schicken\n" "können. %(distrob)s verwendet diese Informationen AUSSCHLIEßLICH zu\n" "Diagnosezwecken und behandelt sie als vertrauliche Informationen.\n" "\n" "Die Fertigstellung dieses Prozesses kann eine Weile dauern.\n" "Es werden keinerlei Änderungen an Ihrem System vorgenommen.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" "Drücken Sie die EINGABETASTE, um fortzufahren, oder STRG-C, um abzubrechen.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Ein oder mehrere Plugins haben ein Problem in Ihrer Konfiguration entdeckt." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Bitte überprüfen Sie die folgenden Meldungen erneut:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Möchten Sie wirklich fortfahren (j/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "j" #: ../sos/sosreport.py:685 msgid "Y" msgstr "J" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Plugins werden ausgeführt. Bitte warten ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport-Build-Tree befindet sich unter : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Bitte geben Sie Ihren Vor- und Nachnamen ein [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" "Bitte geben Sie die Fallnummer an, für die Sie diesen Bericht generieren: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Erstelle komprimiertes Archiv..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Verschlüssele Archiv..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Beim Verschlüsseln Ihres Berichts trat ein Fehler auf." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Ihr \"sosreport\" wurde erstellt und gespeichert unter:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Die md5sum lautet: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Bitte senden Sie diese Datei an Ihren Support-Vertreter." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Keine URL in Konfigurationsdatei definiert." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Hochladen zu spezieller URL scheiterte." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Beim Hochladen Ihres Berichts zum Red Hat Support trat ein Fehler auf." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Ihr Bericht wurde erfolgreich auf %s hochgeladen, mit dem Namen:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Bitte teilen Sie diesen Namen Ihrem Support-Vertreter mit." sosreport-3.2+git276-g7da50d6/po/el.po0000644000175000017500000002021212433342602017057 0ustar cariboucaribou# Greek translation for sos.trunk package. # Copyright (C) 2010 Fedora Project Greek Translation Team # Giannis Konstantinidis , 2010. # msgid "" msgstr "" "Project-Id-Version: trunk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-03-10 16:21-0500\n" "Last-Translator: Giannis Konstantinidis \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Δεν μπόρεσε να δημιουργηθεί προσωρινή τοποθεσία." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (έκδοση %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "το πρόσθετο %s δεν είναι έγκυρο,η διαδικασία προσπερνάται." #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "το πρόσθετο %s δεν μπορεί να εγκατασταθεί,η διαδικασία προσπερνάται" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "δεν βρέθηκαν έγκυρα πρόσθετα" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Τα παρακάτω πρόσθετα είναι αυτη τη στιγμή ενεργοποιημένα:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Δεν ενεργοποιήθηκε κάποιο πρόσθετο." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Τα παρακάτω πρόσθετα είναι αυτη τη στιγμή απενεργοποιημένα:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Οι παρακάτω ρυθμίσεις για τα πρόσθετα είναι διαθέσιμες:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Δεν υπάρχουν διαθέσιμες ρυθμίσεις για τα πρόσθετα." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" "το sosreport χρειάζεται να έχετε δικαιώματα διαχειρηστή για να εκτελεστεί." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "δεν ενεργοποιήθηκε κάποιο έγκυρο πρόσθετο" #: ../sos/sosreport.py:624 #, fuzzy, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Αυτό το εργαλείο θα συγκετρώσει ορισμένες πληροφορίες για τον υπολογιστή σας " "και την εγκατάσταση του Red Hat Enterprise Linux συστήματος.\n" "Οι πληροφορίες συγκετρώνονται και το archive δημιουργήται στο\n" "/tmp,το οποίο και μπορείτε να στείλετε σε έναν αντιπρόσωπο υποστήριξης.\n" "Η Red Hat θα χρησιμοποιήσει αυτα τα δεδομένα ΜΟΝΟ για διαγνωστικούς σκοπούς\n" "και θα παραμείνουν εμπιστευτηκά.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Πατήστε ENTER για να συνεχίσετε ή CTRL-C για έξοδο.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "Ένα ή περισσότερα plugins αντιμετώπησαν πρόβλημα κατα τις ρυθμίσεις σας." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Παρακαλώ δείτε τα παρακάτω μυνήματα:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Είστε σίγουρος οτι θέλετε να συνεχίσετε (ν/ο) ;" #: ../sos/sosreport.py:685 msgid "y" msgstr "ν" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Ν" #: ../sos/sosreport.py:688 msgid "n" msgstr "ο" #: ../sos/sosreport.py:688 msgid "N" msgstr "Ο" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "Εκτέλεση πρόσθετων. Παρακαλώ περιμένετε ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "Το δημιουργημένο sosreport βρίσκεται στον φάκελο: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Παρακαλώ εισάγετε το ονοματεπώνυμό σας [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Παρακαλώ εισάγετε το case number για το οποίο γράφετε την αναφορά:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Δημιουργία συμπιεσμένου αρχείου..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Το αρχείο κρυπτογραφείται..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Υπήρξε ένα πρόβλημα κατα την διαδικασία κρυπτογράφησης της αναφοράς." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Η αναφορά σας δημιουργήθηκε και αποθηκεύτηκε στο:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "Το md5sum είναι:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Παρακαλώ στείλτε το αρχείο αυτό στο αντιπρόσωπο υποστήριξης σας." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Δεν ορίστηκε URL στο αρχείο ρυθμίσεων" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Δεν είναι δυνατό το upload στο καθορισμένο URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Υπήρξε ένα πρόβλημα κατα το upload της αναφοράς σας στην Red Hat." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Η αναφορά σας στάλθηκε επιτυχώς στo %s με όνομα:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Παρακαλώ επικοινωνήστε με τον αντιπρόσωπο υποστήριξής σας." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "το πρόσθετο %s προσπερνάται (--skip plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "" #~ "το πρόσθετο %s είναι ανένεργο (χρησιμποιήστε τα -e ή -o για ενεργοποίηση)" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "το πρόσθετο %s δεν είναι δηλωμένο --only plugins list" #~ msgid "processing options from plugin: %s" #~ msgstr "γίνεται επεξεργασία των ρυθμίσεων από το πρόσθετο: %s" sosreport-3.2+git276-g7da50d6/po/zu.po0000644000175000017500000001000112433342602017110 0ustar cariboucaribou# Zulu translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/zh_TW.po0000644000175000017500000001334312433342602017521 0ustar cariboucaribou# Traditional Chinese Messages for sos. # Copyright (C) 2010 The sos Project (msgids) # This file is distributed under the same license as the sos package. # Chester Cheng , 2007. # Wei-Lun Chao , 2010. # msgid "" msgstr "" "Project-Id-Version: sos 2.2\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-09-19 00:10+1000\n" "Last-Translator: Wei-Lun Chao \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "無法建立暫存目錄。" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport(版本 %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "外掛程式 %s 無法驗證,因此跳過" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "未安裝外掛程式 %s,故而跳過" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "找不到正確的外掛程式" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "目前以下外掛程式已經啟用:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "並未啟用任何外掛程式。" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "目前以下外掛程式已經停用:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "外掛程式有以下選項可用:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "沒有可用的外掛程式選項。" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport 需要 root 權限才可以執行。" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "並未啟用合用的外掛程式" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "這個工具程式會蒐集 %(distroa)s 系統的硬體與設定資訊。\n" "這些資訊被蒐集後,會以壓縮檔形式備份於 /tmp 目錄中,您可以將\n" "這些訊息傳給技術支持人員。%(distrob)s 將這些資訊視為機密,\n" "「只會」將它拿來作為診斷問題之用。\n" "\n" "這個過程會花上一點時間,\n" "而您的系統不會有任何改變。\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "請按下「Enter」繼續,或按下「CTRL-C」離開。\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "一或多個外掛程式在您的設定中偵測到一個問題。" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "請檢視以下訊息:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "確定要繼續嗎 (y/n)?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " 正在執行外掛程式,請稍待…" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport 建構樹位於:%s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "請輸入您的名與姓 [%s]:" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "請輸入本報告的編號:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "建立壓縮檔…" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "加密壓縮檔…" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "壓縮您的報告時出現問題。" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "您的 sosreport 報告已經產生,並儲存於:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum 檢查碼為:" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "請將這檔案傳送給技術人員。" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "組態檔中沒有定義 URL。" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "無法上傳指定的網址。" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "將報告上傳至 Red Hat 技術支援時,出現問題。" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "您的報告已經成功傳送至 %s,名稱為:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "請將這名稱告知您的技術支援人員。" sosreport-3.2+git276-g7da50d6/po/sv.po0000644000175000017500000001405712433342602017121 0ustar cariboucaribou# Swedish translations for the sos package. # This file is distributed under the same license as the sos package. # Copyright © 2009-2010 Free Software Foundation, Inc. # Göran Uddeborg , 2009-2010. # # $Revision: 1.8 $ # msgid "" msgstr "" "Project-Id-Version: sos\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-08-11 22:07+0200\n" "Last-Translator: Göran Uddeborg \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "Kunde inte skapa en temporärkatalog." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "insticksmodul %s validerar inte, hoppar över" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "insticksmodul %s installerar inte, hoppar över" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "inga giltiga insticksmoduler funna" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "Följande insticksmoduler är för närvarande aktiva:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "Inga insticksmoduler aktiverade." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "Följande insticksmoduler är för närvarande inaktiva:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "Följande flaggor för insticksmoduler är tillgängliga:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "Inga flaggor för insticksmoduler finns tillgängliga." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport behöver root-rättigheter för att köra." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "inga giltiga insticksmoduler var aktiva" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "Detta verktyg kommer att samla en del detaljerad information om\n" "hårdvaran och inställningarna hos ditt %(distroa)s-system.\n" "Informationen samlas och ett arkiv paketeras under /tmp, som du kan\n" "skicka till en servicerepresentant. %(distrob)s kommer använda denna\n" "information ENDAST för diagnostiksyften och det betraktas som\n" "konfidentiell information.\n" "\n" "Denna process kan ta ett tag att bli klar.\n" "Inga ändringar kommer att göras i ditt system.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "Tryck RETUR för att fortsätta, eller CTRL-C för att avbryta.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "En eller flera insticksmoduler har upptäckt problem i din konfiguration." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "Se över följande meddelanden:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "Är du säker på att du vill fortsätta (j/n)? " #: ../sos/sosreport.py:685 msgid "y" msgstr "j" #: ../sos/sosreport.py:685 msgid "Y" msgstr "J" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " Kör insticksmoduler. Var god dröj ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreports byggträd finns på: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "Ange din förnamnsinitial och ditt efternam [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "Ange ärendenumret som du genererar denna rapport för: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "Skapar komprimerat arkiv ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "Krypterar arkiv ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "Ett problem uppstod vid kryptering av din rapport." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "Din sos-rapport har genererats och sparats i:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "MD5-summan är: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "Skicka denna fil till din servicerepresentant." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "Ingen URL definierad i konfigurationsfilen." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "Kan inte skicka till angiven URL." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "Ett problem uppstod när din rapport skickades till Red Hat support." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "Din rapport har skickats till %s med namnet:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "Berätta detta namn för din servicerepresentant." sosreport-3.2+git276-g7da50d6/po/ja.po0000644000175000017500000001536612433342602017067 0ustar cariboucaribou# translation of ja.po to Japanese # Japanese translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # Kiyoto Hashida , 2007, 2010. msgid "" msgstr "" "Project-Id-Version: ja\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2010-05-31 15:20+0900\n" "Last-Translator: Kiyoto Hashida \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: Plural-Forms: nplurals=2; plural=(n!=1);\n" "\n" "\n" "X-Generator: KBabel 1.11.4\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "一時ディレクトリを作成できませんでした。" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sos レポート (バージョン %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "プラグイン %s は認証できません、スキップします" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "プラグイン %s は インストールできません。スキップします" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "有効なプラグインは見付かりません" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "以下のプラグインが現在有効になっています:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "有効なプラグインはありません" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "以下のプラグインは現在無効になっています:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "以下のプラグインオプションが使用できます:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "プラグインオプションは使用できません。" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sos レポートは実行するのに root 権限が必要です。" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "有効な正当プラグインはありませんでした" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "このユーティリティは、ご使用の %(distroa)s システムのハードウェアと \n" "セットアップに関する詳細情報を収集します。情報は収集されて、\n" " そのアーカイブが /tmp にパッケージされますので、それをサポート担当者に \n" " 送信することが出来ます。%(distrob)s は、この情報を分析の為にのみ使用し、\n" " これは内密情報として扱われます。\n" "\n" "このプロセスは完了するまでしばらく時間がかかるかも知れません。\n" " ご使用のシステムは変更されません。\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ENTER を押して継続するか、又は CTRL-C で終了します。\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "1つ、又は複数のプラグインが現在の設定に問題を検知しています。" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "以下のメッセージを確認してください:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "本当に継続したいですか (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " プラグインを実行中です。少しお待ち下さい ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport のビルドツリーは以下の場所にあります: %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "名前のイニシャルと姓を記入してください [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "作成しているレポートのケース番号を記入してください :" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "アーカイブを圧縮しています..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "アーカイブを暗号化しています..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "このレポートの暗号化に問題がありました。" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "sos レポートが生成されて、以下の場所に保存されました:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum は :" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "このファイルを担当のサポート代表者に送信してください。" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "設定ファイル内に URL が定義されていません。" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "指定された URL にアップロードできません。" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "レポートを Red Hat サポートにアップロードするのに問題がありました。" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "レポートは以下の名前で正常に %s にアップロードされました:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "担当のサポート代表者とはこの名前を使用して通信してください。" sosreport-3.2+git276-g7da50d6/po/ta.po0000644000175000017500000002365612433342602017102 0ustar cariboucaribou# translation of ta.po to # Tamil translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # # Automatically generated, 2007. # I Felix , 2011. msgid "" msgstr "" "Project-Id-Version: ta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-02-02 15:23+0530\n" "Last-Translator: I Felix \n" "Language-Team: Tamil \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: \n" "Generated-By: pygettext.py 1.5\n" "X-Generator: Lokalize 1.1\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "தற்காலிக அடைவை உருவாக்க முடியவில்லை." #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (version %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "கூடுதல் இணைப்பு %s தவறாக உள்ளது, எனவே தவிர்க்கிறது" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "கூடுதல் இணைப்பு %s நிறுவப்படவில்லை, தவிர்க்கப்படுகிறது" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "சரியான கூடுதல் இணைப்புகள் இல்லை" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "பின்வரும் கூடுதல் இணைப்புகள் தற்போது செயல்படுத்தப்படுகிறது:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "கூடுதல் இணைப்புகள் எதுவும் செயல்படுத்தப்படவில்லை." #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "பின்வரும் கூடுதல் இணைப்புகள் தற்போது செயல்நீக்கப்பட்டுள்ளது:" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "பின்வரும் கூடுதல் இணைப்பு விருப்பங்கள் உள்ளன:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "கூடுதல் இணைப்பு விருப்பங்கள் எதுவும் இல்லை." #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreportஐ இயக்க ரூட் அனுமதிகள் வேண்டும்." #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "சரியான கூடுதல் இணைப்புகள் எதுவும் செயல்படுத்தப்படவில்லை" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "இந்த வசதி வன்பொருள் பற்றியும் மற்றும் உங்கள் %(distroa)s \n" "கணினியை அமைப்பது பற்றியும் விரிவான தகவலை கொண்டிருக்கும்.\n" "இந்த தகவல்கள் சேகரிக்கப்பட்டு /tmpஇல் தொகுக்கப்படுகிறது,\n" "இதனை நீங்கள் சேவை பிரதிநிதிக்கு அனுப்பலாம்.\n" "%(distrob)s இந்த தகவலை ஆராய மட்டுமே பயன்படுத்தி\n" "இரகசியமாக வைத்து கொள்ளும்.\n" "\n" "இந்தப் பணி முடிய சிறிது நேரம் ஆகும்.\n" "உங்கள் கணினியில் எந்த மாற்றமும் செய்யப்படாது.\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ENTER ஐ அழுத்தவும் அல்லது CTRL-C ஐ அழுத்தி வெளியேறவும்.\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" "ஒன்று அல்லது அதற்கு மேல் கூடுதல் இணைப்புகள் கண்டறியப்பட்டதால் உங்கள் கட்டமைப்பில் பிழை " "ஏற்பட்டுள்ளது." #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "பின்வரும் செய்திகளை மறுபார்வையிடவும்:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "நீங்கள் தொடர வேண்டுமா (y/n) ?" #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" " கூடுதல் இணைப்புகள் இயங்குகிறது. காத்திருக்கவும் ... கூடுதல் இணைப்புகள் இயங்குகிறது. " "பகாத்தஇஉ" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport உருவாக்கும் மரம் இங்குள்ளது : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "உங்கள் பெயரின் முதல் எழுத்து மற்றும் கடைசி பெயரை உள்ளிடவும் [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "இந்த அறிக்கையை உருவாக்க அதற்கான எண்ணை உள்ளிடவும்:" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "குறுக்கப்பட்ட காப்பினை உருவாக்குகிறது..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "காப்பினை மறைகுறியாக்குகிறது..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "உங்கள் அறிக்கையை மறைகுறியாக்குவதில் சிக்கல்." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "உங்கள் sosreport உருவாக்கப்பட்டு இதில் சேமிக்கப்பட்டுள்ளது:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum : " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "இந்த கோப்பினை உங்கள் சேவை பிரதிநிதியிடம் அனுப்பவும்." #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "URL எதுவும் கட்டமைப்பு கோப்பில் இல்லை." #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "குறிப்பிட்ட இணைய முகவரியில் ஏற்ற முடியவில்லை." #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "உங்கள் அறிக்கையை Red Hat சேவைக்கு அனுப்புவதில் சிக்கல்." #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "உங்கள் அறிக்கை வெற்றிகரமாக %s இல் பெயருடன் ஏற்றப்பட்டது:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "இந்த பெயரை உங்கள் சேவை பிரதிநிதியிடம் தெரிவிக்கவும்." #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "கூடுதல் இணைப்பு %s தவிர்க்கப்பட்டது (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "" #~ "கூடுதல் இணைப்பு %s செயலிழக்கப்பட்டுள்ளது (-e அல்லது -o ஐ பயன்படுத்தி செயல்படுத்தவும்)." #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "கூடுதல் இணைப்பு %s --only-plugins பட்டியலில் குறிப்பிடப்படவில்லை" #~ msgid "processing options from plugin: %s" #~ msgstr "கூடுதல் இணைப்பிலிருந்து விருப்பம் செயல்படுகிறது: %s" sosreport-3.2+git276-g7da50d6/po/et.po0000644000175000017500000001006412433342602017073 0ustar cariboucaribou# Estonian translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2007-10-24 08:45\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: pygettext.py 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "" #: ../sos/sosreport.py:685 msgid "y" msgstr "" #: ../sos/sosreport.py:685 msgid "Y" msgstr "" #: ../sos/sosreport.py:688 msgid "n" msgstr "" #: ../sos/sosreport.py:688 msgid "N" msgstr "" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr "" #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr "" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "" #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "" #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "" #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "" #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "" #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "" #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "" sosreport-3.2+git276-g7da50d6/po/pa.po0000644000175000017500000002122112433342602017060 0ustar cariboucaribou# translation of pa.po to Punjabi # Punjabi translations for PACKAGE package. # Copyright (C) 2007 ORGANIZATION # Automatically generated, 2007. # Jaswinder Singh , 2007. # Jaswinder Singh , 2011. msgid "" msgstr "" "Project-Id-Version: pa\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-11-15 15:02+0000\n" "PO-Revision-Date: 2011-01-11 15:33+0530\n" "Last-Translator: Jaswinder Singh \n" "Language-Team: PLTG\n" "Language: pa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Virtaal 0.6.1\n" "Generated-By: pygettext.py 1.5\n" #: ../sos/sosreport.py:350 msgid "Could not create temporary directory." msgstr "ਆਰਜੀ ਡਾਇਰੈਕਟਰੀ ਨਹੀਂ ਬਣਾ ਸਕਦਾ।" #: ../sos/sosreport.py:413 #, python-format msgid "sosreport (version %s)" msgstr "sosreport (ਵਰਜਨ %s)" #: ../sos/sosreport.py:438 #, python-format msgid "plugin %s does not validate, skipping" msgstr "ਪਲੱਗਇਨ %s ਪ੍ਰਮਾਣਿਤ ਨਹੀਂ ਹੈ, ਛੱਡ ਰਿਹਾ ਹੈ" #: ../sos/sosreport.py:467 #, python-format msgid "plugin %s does not install, skipping" msgstr "ਪਲੱਗਇਨ %s ਇੰਸਟਾਲ ਨਹੀਂ ਹੋਇਆ, ਛੱਡ ਰਿਹਾ ਹੈ" #: ../sos/sosreport.py:563 msgid "no valid plugins found" msgstr "ਕੋਈ ਯੋਗ ਪਲੱਗਿਨ ਨਹੀਂ ਲੱਭਿਆ" #: ../sos/sosreport.py:567 msgid "The following plugins are currently enabled:" msgstr "ਹੇਠਲੇ ਪਲੱਗਇਨ ਯੋਗ ਕੀਤੇ ਹਨ:" #: ../sos/sosreport.py:573 msgid "No plugin enabled." msgstr "ਕੋਈ ਪਲੱਗਇਨ ਯੋਗ ਨਹੀਂ ਹੈ।" #: ../sos/sosreport.py:577 msgid "The following plugins are currently disabled:" msgstr "ਹੇਠਲੇ ਪਲੱਗਇਨ ਅਯੋਗ ਹਨ।" #: ../sos/sosreport.py:585 msgid "The following plugin options are available:" msgstr "ਹੇਠਲੀਆਂ ਪਲੱਗਇਨ ਚੋਣਾਂ ਉਪਲੱਬਧ ਹਨ:" #: ../sos/sosreport.py:606 msgid "No plugin options available." msgstr "ਕੋਈ ਪਲੱਗਇਨ ਚੋਣ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ।" #: ../sos/sosreport.py:614 msgid "sosreport requires root permissions to run." msgstr "sosreport ਚਲਾਉਣ ਲਈ ਪਰਬੰਧਕ ਅਧਿਕਾਰ ਹੋਣੇ ਜਰੂਰੀ ਹਨ।" #: ../sos/sosreport.py:621 msgid "no valid plugins were enabled" msgstr "ਕੋਈ ਸਹੀ ਪਲੱਗਇਨ ਯੋਗ ਨਹੀਂ ਕੀਤਾ" #: ../sos/sosreport.py:624 #, python-format msgid "" "This utility will collect some detailed information about the\n" "hardware and setup of your %(distroa)s system.\n" "The information is collected and an archive is packaged under\n" "/tmp, which you can send to a support representative.\n" "%(distrob)s will use this information for diagnostic purposes ONLY\n" "and it will be considered confidential information.\n" "\n" "This process may take a while to complete.\n" "No changes will be made to your system.\n" "\n" msgstr "" "ਇਹ ਸਹੂਲਤ ਹਾਰਡਵੇਅਰ ਬਾਰੇ ਕੁਝ ਵਿਸਥਾਰ ਜਾਣਕਾਰੀ ਇਕੱਠੀ\n" "ਕਰੇਗੀ ਅਤੇ ਤੁਹਾਡੇ %(distroa)s ਸਿਸਟਮ ਨੂੰ ਨਿਰਧਾਰਤ ਕਰੇਗੀ।\n" "ਜਾਣਕਾਰੀ ਇਕੱਠੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਅਤੇ /tmp ਵਿੱਚ ਇੱਕ ਆਰਚੀਵ ਬਣਾਈ ਜਾਂਦੀ\n" "ਹੈ, ਜੋ ਤੁਸੀਂ ਸਹਿਯੋਗ ਪ੍ਰਤੀਨਿਧ ਨੂੰ ਭੇਜ ਸਕਦੇ ਹੋ।\n" "%(distrob)s ਇਸ ਜਾਣਕਾਰੀ ਨੂੰ ਸਿਰਫ ਹੱਲ ਕਰਨ ਲਈ ਵਰਤੇਗਾ\n" "ਅਤੇ ਇਹ ਜਾਣਕਾਰੀ ਗੁਪਤ ਰੱਖੀ ਜਾਏਗੀ।\n" "\n" "ਇਹ ਕਾਰਜ ਮੁਕੰਮਲ ਹੋਣ ਲਈ ਕੁਝ ਸਮਾਂ ਲੈ ਸਕਦਾ ਹੈ।\n" "ਤੁਹਾਡੇ ਸਿਸਟਮ ਉੱਪਰ ਕੋਈ ਤਬਦੀਲੀ ਨਹੀਂ ਕੀਤੀ ਜਾਏਗੀ।\n" "\n" #: ../sos/sosreport.py:639 msgid "Press ENTER to continue, or CTRL-C to quit.\n" msgstr "ਜਾਰੀ ਰੱਖਣ ਲਈ ENTER ਦਬਾਓ, ਜਾਂ ਬੰਦ ਕਰਨ ਲਈ CTRL-C ਦਬਾਓ।\n" #: ../sos/sosreport.py:665 msgid "One or more plugins have detected a problem in your configuration." msgstr "ਤੁਹਾਡੀ ਸੰਰਚਨਾ ਵਿੱਚ ਇੱਕ ਜਾਂ ਜਿਆਦਾ ਪਲੱਗਇਨ ਸਮੱਸਿਆ ਪੈਦਾ ਕਰਦੇ ਹਨ।" #: ../sos/sosreport.py:667 msgid "Please review the following messages:" msgstr "ਕਿਰਪਾ ਕਰਕੇ ਹੇਠਲੇ ਸੁਨੇਹੇ ਵੇਖੋ:" #: ../sos/sosreport.py:683 msgid "Are you sure you would like to continue (y/n) ? " msgstr "ਕੀ ਤੁਸੀਂ ਯਕੀਨਨ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ (y/n) ? " #: ../sos/sosreport.py:685 msgid "y" msgstr "y" #: ../sos/sosreport.py:685 msgid "Y" msgstr "Y" #: ../sos/sosreport.py:688 msgid "n" msgstr "n" #: ../sos/sosreport.py:688 msgid "N" msgstr "N" #: ../sos/sosreport.py:713 msgid " Running plugins. Please wait ..." msgstr " ਪਲੱਗਇਨ ਚਲਾ ਰਿਹਾ। ਉਡੀਕ ਕਰੋ ਜੀ ..." #: ../sos/sosreport.py:827 #, python-format msgid " sosreport build tree is located at : %s" msgstr " sosreport ਬਿਲਡ ਟਰੀ ਇੱਥੇ ਰੱਖਿਆ ਹੈ : %s" #: ../sos/policyredhat.py:211 #, python-format msgid "Please enter your first initial and last name [%s]: " msgstr "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਪਹਿਲਾ ਅਤੇ ਆਖਰੀ ਨਾਂ ਦਿਓ [%s]: " #: ../sos/policyredhat.py:214 msgid "Please enter the case number that you are generating this report for: " msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੁੱਦਾ ਨੰਬਰ ਦਿਓ ਜੋ ਤੁਸੀਂ ਇਸ ਰਿਪੋਰਟ ਵਿੱਚ ਦੇ ਰਹੇ ਹੋ: " #: ../sos/policyredhat.py:254 msgid "Creating compressed archive..." msgstr "ਸੰਕੁਚਿਤ ਆਰਚੀਵ ਬਣਾ ਰਿਹਾ ਹੈ..." #: ../sos/policyredhat.py:284 msgid "Encrypting archive..." msgstr "ਆਰਚੀਵ ਇਨਕ੍ਰਿਪਟ ਹੋ ਰਿਹਾ ਹੈ..." #: ../sos/policyredhat.py:304 msgid "There was a problem encrypting your report." msgstr "ਤੁਹਾਡੀ ਰਿਪੋਰਟ ਇਨਕ੍ਰਿਪਟ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ ਆਈ ਹੈ..." #: ../sos/policyredhat.py:328 #, python-format msgid "" "Your sosreport has been generated and saved in:\n" " %s" msgstr "" "ਤੁਹਾਡੀ sosreport ਬਣਾਈ ਗਈ ਹੈ ਅਤੇ ਇੱਥੇ ਸੰਭਾਲੀ ਗਈ ਹੈ:\n" " %s" #: ../sos/policyredhat.py:331 msgid "The md5sum is: " msgstr "md5sum ਇਹ ਹੈ: " #: ../sos/policyredhat.py:333 msgid "Please send this file to your support representative." msgstr "ਕਿਰਪਾ ਕਰਕੇ ਇਸ ਫਾਇਲ ਨੂੰ ਆਪਣੇ ਸਹਿਯੋਗ ਪ੍ਰਤੀਨਿਧ ਨੂੰ ਭੇਜੋ।" #: ../sos/policyredhat.py:355 msgid "No URL defined in config file." msgstr "ਸੰਰਚਨਾ ਫਾਇਲ ਵਿੱਚ ਕੋਈ URL ਨਹੀਂ ਦਿੱਤਾ।" #: ../sos/policyredhat.py:362 msgid "Cannot upload to specified URL." msgstr "ਦਿੱਤੇ URL ਤੇ ਅੱਪਲੋਡ ਨਹੀਂ ਕਰ ਸਕਦਾ।" #: ../sos/policyredhat.py:399 msgid "There was a problem uploading your report to Red Hat support." msgstr "ਤੁਹਾਡੀ ਰਿਪੋਰਟ ਨੂੰ Red Hat ਸਹਿਯੋਗ ਤੇ ਅੱਪਲੋਡ ਕਰਨ ਵੇਲੇ ਗਲਤੀ ਆਈ ਹੈ।" #: ../sos/policyredhat.py:401 #, python-format msgid "Your report was successfully uploaded to %s with name:" msgstr "ਤੁਹਾਡੀ ਰਿਪੋਰਟ ਸਫਲਤਾਪੂਰਕ %s ਉੱਪਰ ਇਸ ਨਾਂ ਨਾਲ ਅੱਪਲੋਡ ਹੋ ਗਈ ਹੈ:" #: ../sos/policyredhat.py:404 msgid "Please communicate this name to your support representative." msgstr "ਕਿਰਪਾ ਕਰਕੇ ਇਸ ਨਾਂ ਨੂੰ ਸਹਿਯੋਗੀ ਪ੍ਰਤੀਨਿਧ ਨਾਲ ਜੋੜੋ।" #~ msgid "plugin %s skipped (--skip-plugins)" #~ msgstr "ਪਲੱਗਇਨ %s ਛੱਡਿਆ ਹੈ (--skip-plugins)" #~ msgid "plugin %s is inactive (use -e or -o to enable)." #~ msgstr "ਪਲੱਗਇਨ %s ਨਾ-ਸਰਗਰਮ ਹੈ ( ਯੋਗ ਕਰਨ ਲਈ use -e ਜਾਂ -o ਵਰਤੋ)।" #~ msgid "plugin %s not specified in --only-plugins list" #~ msgstr "ਪਲੱਗਇਨ %s ਨੂੰ --only-plugins ਸੂਚੀ ਵਿੱਚ ਨਹੀਂ ਦਿੱਤਾ" #~ msgid "processing options from plugin: %s" #~ msgstr "ਪਲੱਗਇਨ ਤੋਂ ਚੋਣਾਂ ਲੈ ਰਿਹਾ ਹੈ: %s" sosreport-3.2+git276-g7da50d6/tests/0000755000175000017500000000000012625313247016654 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/tests/policy_tests.py0000644000175000017500000000344712625313241021751 0ustar cariboucaribouimport unittest from sos.policies import Policy, PackageManager, import_policy from sos.plugins import Plugin, IndependentPlugin, RedHatPlugin, DebianPlugin class FauxPolicy(Policy): distro = "Faux" class FauxPlugin(Plugin, IndependentPlugin): pass class FauxRedHatPlugin(Plugin, RedHatPlugin): pass class FauxDebianPlugin(Plugin, DebianPlugin): pass class PolicyTests(unittest.TestCase): def test_independent_only(self): p = FauxPolicy() p.valid_subclasses = [] self.assertTrue(p.validate_plugin(FauxPlugin)) def test_redhat(self): p = FauxPolicy() p.valid_subclasses = [RedHatPlugin] self.assertTrue(p.validate_plugin(FauxRedHatPlugin)) def test_debian(self): p = FauxPolicy() p.valid_subclasses = [DebianPlugin] self.assertTrue(p.validate_plugin(FauxDebianPlugin)) def test_fails(self): p = FauxPolicy() p.valid_subclasses = [] self.assertFalse(p.validate_plugin(FauxDebianPlugin)) def test_can_import(self): self.assertTrue(import_policy('redhat') is not None) def test_cant_import(self): self.assertTrue(import_policy('notreal') is None) class PackageManagerTests(unittest.TestCase): def setUp(self): self.pm = PackageManager() def test_default_all_pkgs(self): self.assertEquals(self.pm.all_pkgs(), {}) def test_default_all_pkgs_by_name(self): self.assertEquals(self.pm.all_pkgs_by_name('doesntmatter'), []) def test_default_all_pkgs_by_name_regex(self): self.assertEquals(self.pm.all_pkgs_by_name_regex('.*doesntmatter$'), []) def test_default_pkg_by_name(self): self.assertEquals(self.pm.pkg_by_name('foo'), None) if __name__ == "__main__": unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/ziptest_link0000777000175000017500000000000012433342647022743 2ziptestustar cariboucaribousosreport-3.2+git276-g7da50d6/tests/tail_test.txt0000644000175000017500000000017212433342602021377 0ustar cariboucaribouthis is a file to test tail with I have a few lines in here I just need enough text to mess with it this is the last line sosreport-3.2+git276-g7da50d6/tests/plugin_tests.py0000644000175000017500000002444612625313241021752 0ustar cariboucaribouimport unittest import os import tempfile # PYCOMPAT import six try: from StringIO import StringIO except: from io import StringIO from sos.plugins import Plugin, regex_findall, _mangle_command from sos.archive import TarFileArchive import sos.policies PATH = os.path.dirname(__file__) def j(filename): return os.path.join(PATH, filename) def create_file(size): f = tempfile.NamedTemporaryFile(delete=False) f.write(six.b("*" * size * 1024 * 1024)) f.flush() f.close() return f.name class MockArchive(TarFileArchive): def __init__(self): self.m = {} self.strings = {} def name(self): return "mock.archive" def add_file(self, src, dest=None): if not dest: dest = src self.m[src] = dest def add_string(self, content, dest): self.m[dest] = content def add_link(self, dest, link_name): pass def open_file(self, name): return open(self.m.get(name), 'r') def close(self): pass def compress(self, method): pass class MockPlugin(Plugin): option_list = [("opt", 'an option', 'fast', None), ("opt2", 'another option', 'fast', False)] def setup(self): pass class NamedMockPlugin(Plugin): """This plugin has a description.""" plugin_name = "testing" def setup(self): pass class ForbiddenMockPlugin(Plugin): """This plugin has a description.""" plugin_name = "forbidden" def setup(self): self.add_forbidden_path("tests") class EnablerPlugin(Plugin): def is_installed(self, pkg): return self.is_installed class MockOptions(object): pass class PluginToolTests(unittest.TestCase): def test_regex_findall(self): test_s = "\n".join(['this is only a test', 'there are only two lines']) test_fo = StringIO(test_s) matches = regex_findall(r".*lines$", test_fo) self.assertEquals(matches, ['there are only two lines']) def test_regex_findall_miss(self): test_s = "\n".join(['this is only a test', 'there are only two lines']) test_fo = StringIO(test_s) matches = regex_findall(r".*not_there$", test_fo) self.assertEquals(matches, []) def test_regex_findall_bad_input(self): matches = regex_findall(r".*", None) self.assertEquals(matches, []) matches = regex_findall(r".*", []) self.assertEquals(matches, []) matches = regex_findall(r".*", 1) self.assertEquals(matches, []) def test_mangle_command(self): name_max = 255 self.assertEquals("foo", _mangle_command("/usr/bin/foo", name_max)) self.assertEquals("foo_-x", _mangle_command("/usr/bin/foo -x", name_max)) self.assertEquals("foo_--verbose", _mangle_command("/usr/bin/foo --verbose", name_max)) self.assertEquals("foo_.path.to.stuff", _mangle_command("/usr/bin/foo /path/to/stuff", name_max)) longcmd ="foo is " + "a" * 256 + " long_command" expected = longcmd[0:name_max].replace(' ', '_') self.assertEquals(expected, _mangle_command(longcmd, name_max)) class PluginTests(unittest.TestCase): sysroot = os.getcwd() def setUp(self): self.mp = MockPlugin({ 'cmdlineopts': MockOptions(), 'sysroot': self.sysroot }) self.mp.archive = MockArchive() def test_plugin_default_name(self): p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.name(), "mockplugin") def test_plugin_set_name(self): p = NamedMockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.name(), "testing") def test_plugin_no_descrip(self): p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_description(), "") def test_plugin_no_descrip(self): p = NamedMockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_description(), "This plugin has a description.") def test_set_plugin_option(self): p = MockPlugin({'sysroot': self.sysroot}) p.set_option("opt", "testing") self.assertEquals(p.get_option("opt"), "testing") def test_set_nonexistant_plugin_option(self): p = MockPlugin({'sysroot': self.sysroot}) self.assertFalse(p.set_option("badopt", "testing")) def test_get_nonexistant_plugin_option(self): p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_option("badopt"), 0) def test_get_unset_plugin_option(self): p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_option("opt"), 0) def test_get_unset_plugin_option_with_default(self): # this shows that even when we pass in a default to get, # we'll get the option's default as set in the plugin # this might not be what we really want p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_option("opt", True), True) def test_get_unset_plugin_option_with_default_not_none(self): # this shows that even when we pass in a default to get, # if the plugin default is not None # we'll get the option's default as set in the plugin # this might not be what we really want p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_option("opt2", True), False) def test_get_option_as_list_plugin_option(self): p = MockPlugin({'sysroot': self.sysroot}) p.set_option("opt", "one,two,three") self.assertEquals(p.get_option_as_list("opt"), ['one', 'two', 'three']) def test_get_option_as_list_plugin_option_default(self): p = MockPlugin({'sysroot': self.sysroot}) self.assertEquals(p.get_option_as_list("opt", default=[]), []) def test_get_option_as_list_plugin_option_not_list(self): p = MockPlugin({'sysroot': self.sysroot}) p.set_option("opt", "testing") self.assertEquals(p.get_option_as_list("opt"), ['testing']) def test_copy_dir(self): self.mp._do_copy_path("tests") self.assertEquals(self.mp.archive.m["tests/plugin_tests.py"], 'tests/plugin_tests.py') def test_copy_dir_bad_path(self): self.mp._do_copy_path("not_here_tests") self.assertEquals(self.mp.archive.m, {}) def test_copy_dir_forbidden_path(self): p = ForbiddenMockPlugin({ 'cmdlineopts': MockOptions(), 'sysroot': self.sysroot }) p.archive = MockArchive() p.setup() p._do_copy_path("tests") self.assertEquals(p.archive.m, {}) class AddCopySpecTests(unittest.TestCase): expect_paths = set(['tests/tail_test.txt']) def setUp(self): self.mp = MockPlugin({ 'cmdlineopts': MockOptions(), 'sysroot': os.getcwd() }) self.mp.archive = MockArchive() def assert_expect_paths(self): def pathmunge(path): if path[0] == '/': path = path[1:] return os.path.join(self.mp.sysroot, path) expected_paths = set(map(pathmunge, self.expect_paths)) self.assertEquals(self.mp.copy_paths, expected_paths) # add_copy_spec() def test_single_file(self): self.mp.add_copy_spec('tests/tail_test.txt') self.assert_expect_paths() def test_glob_file(self): self.mp.add_copy_spec('tests/tail_test.*') self.assert_expect_paths() def test_single_file_under_limit(self): self.mp.add_copy_spec_limit("tests/tail_test.txt", 1) self.assert_expect_paths() # add_copy_spec_limit() def test_single_file_over_limit(self): self.mp.sysroot = '/' fn = create_file(2) # create 2MB file, consider a context manager self.mp.add_copy_spec_limit(fn, 1) content, fname = self.mp.copy_strings[0] self.assertTrue("tailed" in fname) self.assertTrue("tmp" in fname) self.assertTrue("/" not in fname) self.assertEquals(1024 * 1024, len(content)) os.unlink(fn) def test_bad_filename(self): self.mp.sysroot = '/' self.assertFalse(self.mp.add_copy_spec_limit('', 1)) self.assertFalse(self.mp.add_copy_spec_limit(None, 1)) def test_glob_file_over_limit(self): self.mp.sysroot = '/' # assume these are in /tmp fn = create_file(2) fn2 = create_file(2) self.mp.add_copy_spec_limit("/tmp/tmp*", 1) self.assertEquals(len(self.mp.copy_strings), 1) content, fname = self.mp.copy_strings[0] self.assertTrue("tailed" in fname) self.assertEquals(1024 * 1024, len(content)) os.unlink(fn) os.unlink(fn2) class CheckEnabledTests(unittest.TestCase): def setUp(self): self.mp = EnablerPlugin({ 'policy': sos.policies.load(), 'sysroot': os.getcwd() }) def test_checks_for_file(self): f = j("tail_test.txt") self.mp.files = (f,) self.assertTrue(self.mp.check_enabled()) def test_checks_for_package(self): self.mp.packages = ('foo',) self.assertTrue(self.mp.check_enabled()) def test_allows_bad_tuple(self): f = j("tail_test.txt") self.mp.files = (f) self.mp.packages = ('foo') self.assertTrue(self.mp.check_enabled()) def test_enabled_by_default(self): self.assertTrue(self.mp.check_enabled()) class RegexSubTests(unittest.TestCase): def setUp(self): self.mp = MockPlugin({ 'cmdlineopts': MockOptions(), 'sysroot': os.getcwd() }) self.mp.archive = MockArchive() def test_file_never_copied(self): self.assertEquals(0, self.mp.do_file_sub("never_copied", r"^(.*)$", "foobar")) def test_no_replacements(self): self.mp.add_copy_spec(j("tail_test.txt")) self.mp.collect() replacements = self.mp.do_file_sub(j("tail_test.txt"), r"wont_match", "foobar") self.assertEquals(0, replacements) def test_replacements(self): # test uses absolute paths self.mp.sysroot = '/' self.mp.add_copy_spec(j("tail_test.txt")) self.mp.collect() replacements = self.mp.do_file_sub(j("tail_test.txt"), r"(tail)", "foobar") self.assertEquals(1, replacements) self.assertTrue("foobar" in self.mp.archive.m.get(j('tail_test.txt'))) if __name__ == "__main__": unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/utilities_tests.py0000644000175000017500000000620612625313241022461 0ustar cariboucaribouimport os.path import unittest # PYCOMPAT import six from six import StringIO from sos.utilities import grep, get_hash_name, is_executable, sos_get_command_output, find, tail, shell_out import sos TEST_DIR = os.path.dirname(__file__) class GrepTest(unittest.TestCase): def test_file_obj(self): test_s = "\n".join(['this is only a test', 'there are only two lines']) test_fo = StringIO(test_s) matches = grep(".*test$", test_fo) self.assertEquals(matches, ['this is only a test\n']) def test_real_file(self): matches = grep(".*unittest$", __file__.replace(".pyc", ".py")) self.assertEquals(matches, ['import unittest\n']) def test_open_file(self): matches = grep(".*unittest$", open(__file__.replace(".pyc", ".py"))) self.assertEquals(matches, ['import unittest\n']) def test_grep_multiple_files(self): matches = grep(".*unittest$", __file__.replace(".pyc", ".py"), "does_not_exist.txt") self.assertEquals(matches, ['import unittest\n']) class TailTest(unittest.TestCase): def test_tail(self): t = tail("tests/tail_test.txt", 10) self.assertEquals(t, six.b("last line\n")) def test_tail_too_many(self): t = tail("tests/tail_test.txt", 200) expected = open("tests/tail_test.txt", "r").read() self.assertEquals(t, six.b(expected)) class ExecutableTest(unittest.TestCase): def test_nonexe_file(self): path = os.path.join(TEST_DIR, 'utility_tests.py') self.assertFalse(is_executable(path)) def test_exe_file(self): path = os.path.join(TEST_DIR, 'test_exe.py') self.assertTrue(is_executable(path)) def test_exe_file_abs_path(self): self.assertTrue(is_executable("/usr/bin/timeout")) def test_output(self): path = os.path.join(TEST_DIR, 'test_exe.py') result = sos_get_command_output(path) self.assertEquals(result['status'], 0) self.assertEquals(result['output'], "executed\n") def test_output_non_exe(self): path = os.path.join(TEST_DIR, 'utility_tests.py') result = sos_get_command_output(path) self.assertEquals(result['status'], 127) self.assertEquals(result['output'], "") def test_output_chdir(self): cmd = "/bin/bash -c 'echo $PWD'" result = sos_get_command_output(cmd, chdir=TEST_DIR) print(result) self.assertEquals(result['status'], 0) self.assertEquals(result['output'].strip(), TEST_DIR) def test_shell_out(self): path = os.path.join(TEST_DIR, 'test_exe.py') self.assertEquals("executed\n", shell_out(path)) class FindTest(unittest.TestCase): def test_find_leaf(self): leaves = find("leaf", TEST_DIR) self.assertTrue(any(name.endswith("leaf") for name in leaves)) def test_too_shallow(self): leaves = find("leaf", TEST_DIR, max_depth=1) self.assertFalse(any(name.endswith("leaf") for name in leaves)) def test_not_in_pattern(self): leaves = find("leaf", TEST_DIR, path_pattern="tests/path") self.assertFalse(any(name.endswith("leaf") for name in leaves)) # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/importer_tests.py0000644000175000017500000000050012625313241022276 0ustar cariboucaribouimport unittest from sos.utilities import ImporterHelper class ImporterHelperTests(unittest.TestCase): def test_runs(self): h = ImporterHelper(unittest) modules = h.get_modules() self.assertTrue('main' in modules) if __name__ == "__main__": unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/archive_tests.py0000644000175000017500000000623012625313247022072 0ustar cariboucaribou#!/usr/bin/env python import unittest import os import tarfile import zipfile import tempfile import shutil from sos.archive import TarFileArchive from sos.utilities import tail # PYCOMPAT import six class TarFileArchiveTest(unittest.TestCase): def setUp(self): self.tmpdir = tempfile.mkdtemp() self.tf = TarFileArchive('test', self.tmpdir) def tearDown(self): shutil.rmtree(self.tmpdir) def check_for_file(self, filename): rtf = tarfile.open(os.path.join(self.tmpdir, 'test.tar')) rtf.getmember(filename) rtf.close() def test_create(self): self.tf.finalize('auto') self.assertTrue(os.path.exists(os.path.join(self.tmpdir, 'test.tar'))) def test_add_file(self): self.tf.add_file('tests/ziptest') self.tf.finalize('auto') self.check_for_file('test/tests/ziptest') # when the string comes from tail() output def test_add_string_from_file(self): self.copy_strings = [] testfile = tempfile.NamedTemporaryFile(dir=self.tmpdir, delete=False) testfile.write(six.b("*" * 1000)) testfile.flush() testfile.close() self.copy_strings.append((tail(testfile.name, 100), 'string_test.txt')) self.tf.add_string(self.copy_strings[0][0], 'tests/string_test.txt') self.tf.finalize('auto') # Since commit 179d9bb add_file does not support recursive directory # addition. Disable this test for now. # def test_add_dir(self): # self.tf.add_file('tests/') # self.tf.close() # # self.check_for_file('test/tests/ziptest') def test_add_renamed(self): self.tf.add_file('tests/ziptest', dest='tests/ziptest_renamed') self.tf.finalize('auto') self.check_for_file('test/tests/ziptest_renamed') # Since commit 179d9bb add_file does not support recursive directory # addition. Disable this test for now. # def test_add_renamed_dir(self): # self.tf.add_file('tests/', 'tests_renamed/') # self.tf.close() # # self.check_for_file('test/tests_renamed/ziptest') def test_add_string(self): self.tf.add_string('this is content', 'tests/string_test.txt') self.tf.finalize('auto') self.check_for_file('test/tests/string_test.txt') def test_get_file(self): self.tf.add_string('this is my content', 'tests/string_test.txt') afp = self.tf.open_file('tests/string_test.txt') self.assertEquals('this is my content', afp.read()) def test_overwrite_file(self): self.tf.add_string('this is my content', 'tests/string_test.txt') self.tf.add_string('this is my new content', 'tests/string_test.txt') afp = self.tf.open_file('tests/string_test.txt') self.assertEquals('this is my new content', afp.read()) def test_make_link(self): self.tf.add_file('tests/ziptest') self.tf.add_link('tests/ziptest', 'link_name') self.tf.finalize('auto') self.check_for_file('test/link_name') def test_compress(self): self.tf.finalize("auto") if __name__ == "__main__": unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/ziptest0000644000175000017500000000000012433342647020272 0ustar cariboucaribousosreport-3.2+git276-g7da50d6/tests/path/0000755000175000017500000000000012433342602017602 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/tests/path/to/0000755000175000017500000000000012433342602020224 5ustar cariboucaribousosreport-3.2+git276-g7da50d6/tests/path/to/leaf0000644000175000017500000000000012433342602021044 0ustar cariboucaribousosreport-3.2+git276-g7da50d6/tests/option_tests.py0000644000175000017500000000203512625313241021752 0ustar cariboucaribou#!/usr/bin/env python import unittest from sos.plugins import Plugin class GlobalOptionTest(unittest.TestCase): def setUp(self): self.commons = { 'sysroot': '/', 'global_plugin_options': { 'test_option': 'foobar', 'baz': None, 'empty_global': True }, } self.plugin = Plugin(self.commons) self.plugin.opt_names = ['baz', 'empty'] self.plugin.opt_parms = [{'enabled': False}, {'enabled': None}] def test_simple_lookup(self): self.assertEquals(self.plugin.get_option('test_option'), 'foobar') def test_multi_lookup(self): self.assertEquals(self.plugin.get_option(('not_there', 'test_option')), 'foobar') def test_cascade(self): self.assertEquals(self.plugin.get_option(('baz')), False) def test_none_should_cascade(self): self.assertEquals(self.plugin.get_option(('empty', 'empty_global')), True) if __name__ == "__main__": unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/sosreport_pexpect.py0000644000175000017500000000147112625313241023013 0ustar cariboucaribou#!/usr/bin/env python import unittest import pexpect from re import search, escape from os import kill from signal import SIGINT class PexpectTest(unittest.TestCase): def test_plugins_install(self): sos = pexpect.spawn('/usr/sbin/sosreport -l') try: sos.expect('plugin.*does not install, skipping') except pexpect.EOF: pass else: self.fail("a plugin does not install or sosreport is too slow") kill(sos.pid, SIGINT) def test_batchmode_removes_questions(self): sos = pexpect.spawn('/usr/sbin/sosreport --batch') grp = sos.expect('send this file to your support representative.', 15) self.assertEquals(grp, 0) kill(sos.pid, SIGINT) if __name__ == '__main__': unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/test_exe.py0000755000175000017500000000007612625313241021046 0ustar cariboucaribou#!/usr/bin/python print "executed" # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/tests/report_tests.py0000644000175000017500000000701612625313241021761 0ustar cariboucaribou#!/usr/bin/env python import unittest import os try: import json except ImportError: import simplejson as json from sos.reporting import Report, Section, Command, CopiedFile, CreatedFile, Alert from sos.reporting import PlainTextReport class ReportTest(unittest.TestCase): def test_empty(self): report = Report() expected = json.dumps({}) self.assertEquals(expected, str(report)) def test_nested_section(self): report = Report() section = Section(name="section") report.add(section) expected = json.dumps({"section": {}}) self.assertEquals(expected, str(report)) def test_multiple_sections(self): report = Report() section = Section(name="section") report.add(section) section2 = Section(name="section2") report.add(section2) expected = json.dumps({"section": {}, "section2": {},}) self.assertEquals(expected, str(report)) def test_deeply_nested(self): report = Report() section = Section(name="section") command = Command(name="a command", return_code=0, href="does/not/matter") section.add(command) report.add(section) expected = json.dumps({"section": {"commands": [{"name": "a command", "return_code": 0, "href": "does/not/matter"}]}}) self.assertEquals(expected, str(report)) class TestPlainReport(unittest.TestCase): def setUp(self): self.report = Report() self.section = Section(name="plugin") self.div = PlainTextReport.DIVIDER def test_basic(self): self.assertEquals("", str(PlainTextReport(self.report))) def test_one_section(self): self.report.add(self.section) self.assertEquals("plugin\n" + self.div, str(PlainTextReport(self.report))) def test_two_sections(self): section1 = Section(name="first") section2 = Section(name="second") self.report.add(section1, section2) self.assertEquals("first\n" + self.div + "\nsecond\n" + self.div, str(PlainTextReport(self.report))) def test_command(self): cmd = Command(name="ls -al /foo/bar/baz", return_code=0, href="sos_commands/plugin/ls_-al_foo.bar.baz") self.section.add(cmd) self.report.add(self.section) self.assertEquals("plugin\n" + self.div + "\n- commands executed:\n * ls -al /foo/bar/baz", str(PlainTextReport(self.report))) def test_copied_file(self): cf = CopiedFile(name="/etc/hosts", href="etc/hosts") self.section.add(cf) self.report.add(self.section) self.assertEquals("plugin\n" + self.div + "\n- files copied:\n * /etc/hosts", str(PlainTextReport(self.report))) def test_created_file(self): crf = CreatedFile(name="sample.txt") self.section.add(crf) self.report.add(self.section) self.assertEquals("plugin\n" + self.div + "\n- files created:\n * sample.txt", str(PlainTextReport(self.report))) def test_alert(self): alrt = Alert("this is an alert") self.section.add(alrt) self.report.add(self.section) self.assertEquals("plugin\n" + self.div + "\n- alerts:\n ! this is an alert", str(PlainTextReport(self.report))) if __name__ == "__main__": unittest.main() # vim: set et ts=4 sw=4 : sosreport-3.2+git276-g7da50d6/sos.conf0000644000175000017500000000014412625313241017156 0ustar cariboucaribou[plugins] #disable = rpm, selinux, dovecot [tunables] #rpm.rpmva = off #general.syslogsize = 15