Path : /bin/ |
|
Current File : //bin/abrt-action-analyze-vmcore |
#! /usr/bin/python -u
# -*- coding: utf-8 -*-
# Generate backtrace from vmcore
#
import os
import sys
import getopt
from subprocess import Popen, PIPE
from reportclient import verbose, set_verbosity, error_msg_and_die, error_msg
GETTEXT_PROGNAME = "abrt"
import locale
import gettext
_ = lambda x: gettext.lgettext(x)
def init_gettext():
try:
locale.setlocale(locale.LC_ALL, "")
except locale.Error:
os.environ['LC_ALL'] = 'C'
locale.setlocale(locale.LC_ALL, "")
# Defeat "AttributeError: 'module' object has no attribute 'nl_langinfo'"
try:
gettext.bind_textdomain_codeset(GETTEXT_PROGNAME, locale.nl_langinfo(locale.CODESET))
except AttributeError:
pass
gettext.bindtextdomain(GETTEXT_PROGNAME, '/usr/share/locale')
gettext.textdomain(GETTEXT_PROGNAME)
PROGNAME = "abrt-action-analyze-vmcore"
# everything was ok
RETURN_OK = 0
# serious problem, should be logged somewhere
RETURN_FAILURE = 2
ver = ""
if __name__ == "__main__":
dmesg_log = "dmesg_log"
cachedirs = []
vmlinux_di_cachedir = ""
vmlinux_di_path = ""
tmpdir = ""
vmcore = ""
init_gettext()
help_text = _("Usage: {0} [-v[v]] [--core=VMCORE]").format(PROGNAME)
try:
opts, args = getopt.getopt(sys.argv[1:], "hvd", ["help", "core="])
except getopt.GetoptError, err:
error_msg(str(err)) # prints something like "option -a not recognized"
error_msg_and_die(help_text)
usercache = False
for opt, arg in opts:
if opt in ("-h", "--help"):
print help_text
exit(0)
elif opt == "-v":
verbose += 1
elif opt in ("-d"):
try:
os.chdir(arg)
except OSError, ex:
print str(ex)
sys.exit(RETURN_FAILURE)
if not vmcore:
vmcore = os.path.join(os.getcwd(), "vmcore")
set_verbosity(verbose)
if not os.path.exists(vmcore):
print _("File {0} doesn't exist").format(vmcore)
sys.exit(RETURN_FAILURE)
print _("Extracting the oops text from core")
crash = Popen(["makedumpfile", "--dump-dmesg", "-f", vmcore, dmesg_log], stdout=PIPE, stderr=PIPE, bufsize=-1)
out, err = crash.communicate()
if crash.returncode != 0:
error_msg_and_die(_("Can't process {0}:\n{1}").format(vmcore, err))
backtrace_file = open("backtrace", "w")
dump_oops = Popen(["abrt-dump-oops", "-u", ".", dmesg_log], stdout=backtrace_file, stderr=PIPE, bufsize=-1)
out, err = dump_oops.communicate()
backtrace_file.close()
ret = dump_oops.returncode
if dump_oops.returncode != 0:
print _("Can't extract the oops message: '{0}'").format(err)
sys.exit(ret)
print _("Oops text extracted successfully")
sys.exit(ret)