#!/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")