diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 17:43:00 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 17:43:00 +0000 |
commit | 89853c290fd822a88c56150dde50aaa1421c0c8c (patch) | |
tree | c88de9d39f187cf339e1add1f768bbda4a61130f /debian/source_mdadm.py | |
parent | Adding upstream version 4.2. (diff) | |
download | mdadm-89853c290fd822a88c56150dde50aaa1421c0c8c.tar.xz mdadm-89853c290fd822a88c56150dde50aaa1421c0c8c.zip |
Adding debian version 4.2-5.debian/4.2-5debian
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/source_mdadm.py')
-rw-r--r-- | debian/source_mdadm.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/debian/source_mdadm.py b/debian/source_mdadm.py new file mode 100644 index 0000000..0aad41b --- /dev/null +++ b/debian/source_mdadm.py @@ -0,0 +1,60 @@ +'''apport package hook for mdadm + +(c) 2009-2016 Canonical Ltd. +Author: Steve Beattie <sbeattie@ubuntu.com> + +Based on the ideas in debian's /usr/share/bug/mdadm/script +''' + +from apport.hookutils import attach_file, attach_file_if_exists, attach_hardware, path_to_key, command_output +import os +import re +import glob +import gzip +import subprocess +import sys + + +def get_initrd_files(pattern): + '''Extract listing of files from the current initrd which match a regex. + + pattern should be a "re" object. ''' + + (_, _, release, _, _) = os.uname() + try: + fd = gzip.GzipFile('/boot/initrd.img-' + release, 'rb') + # universal_newlines needs to be False here as we're passing + # binary data from gzip into cpio, which means we'll need to + # decode the bytes into strings later when reading the output + cpio = subprocess.Popen(['cpio', '-t'], close_fds=True, stderr=subprocess.STDOUT, + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + universal_newlines=False) + except OSError as e: + return 'Error: ' + str(e) + + out = cpio.communicate(fd.read())[0].decode(sys.stdout.encoding, errors='replace') + if cpio.returncode != 0: + return 'Error: command %s failed with exit code %i %' % ( + 'cpio', cpio.returncode, out) + + lines = ''.join([l for l in out.splitlines(True) if pattern.search(l)]) + return lines + + +def add_info(report): + attach_hardware(report) + attach_file(report, '/proc/mounts', 'ProcMounts') + attach_file_if_exists(report, '/etc/mdadm/mdadm.conf', 'mdadm.conf') + attach_file(report, '/proc/mdstat', 'ProcMDstat') + attach_file(report, '/proc/partitions', 'ProcPartitions') + attach_file(report, '/etc/blkid.tab', 'etc.blkid.tab') + attach_file_if_exists(report, '/boot/grub/menu.lst', 'GrubMenu.lst') + attach_file_if_exists(report, '/boot/grub/grub.cfg', 'Grub.cfg') + attach_file_if_exists(report, '/etc/lilo.conf', 'lilo.conf') + + devices = glob.glob("/dev/[hs]d*") + for dev in devices: + report['MDadmExamine' + path_to_key(dev)] = command_output(['/sbin/mdadm', '-E', dev]) + + initrd_re = re.compile('md[a/]') + report['initrd.files'] = get_initrd_files(initrd_re) |