Blob Blame History Raw
#!/usr/bin/python3
#
# This script is meant to be run once at system startup
# It scans /sys/fs/pstore/*, reconstructs oops text(s)
# from these files, creates ABRT problem directories from them,
# then removes the files (UEFI storage is a limited resource).
#

import os
import sys
from subprocess import Popen

if __name__ == "__main__":
    # need to allow setting the pstore oops storage dir
    # to make this script testable
    pstoredir = "/sys/fs/pstore"
    dryrun = False

    for arg in sys.argv:
        if arg == "dryrun":
            dryrun = True
            continue

        if arg.startswith("--pstoredir"):
            pstoredir = arg.split('=')[1]

    try:
        os.chdir(pstoredir)
    except OSError as ex:
        # silently ignore if the pstore doesn't exist, because that usually
        # means that we're on the system where pstore boot is not supported
        sys.stderr.write("Can't chdir to {0}: {1}".format(pstoredir, ex))
        sys.exit(0)

    merge_status = Popen(
            ["-c", "abrt-merge-pstoreoops -o * | abrt-dump-oops {0}"
            .format("-o" if dryrun else "-D")],
            shell=True,
            bufsize=-1
        ).wait()
    if merge_status == 0:
        Popen(["abrt-merge-pstoreoops -d *"], shell=True, bufsize=-1)
    else:
        sys.stderr.write("Failed to merge pstore oops")