1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#!/usr/bin/python
#
# Collect information about a kernel oops.
#
# Copyright (c) 2007 Canonical Ltd.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#
# 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. See http://www.gnu.org/copyleft/gpl.html for
# the full text of the license.
import os, re
import apport, apport.fileutils
vmcore_root = os.path.join(apport.fileutils.report_dir)
vmcore_path = os.path.join(vmcore_root, 'vmcore')
pr = apport.Report('KernelCrash')
package = apport.packaging.get_kernel_package()
try:
package_version = apport.packaging.get_version(package)
except ValueError as e:
if 'does not exist' in e.message:
package_version = 'unknown'
pr['Package'] = '%s %s' % (package, package_version)
pr.add_os_info()
if os.path.exists(vmcore_path + '.log'):
pr['VmCoreLog'] = (vmcore_path + '.log',)
if os.path.exists(vmcore_path):
pr['VmCore'] = (vmcore_path,)
try:
with open(apport.fileutils.make_report_path(pr), 'wb') as f:
pr.write(f)
except IOError as e:
apport.fatal('Cannot create report: ' + str(e))
else:
# kdump-tools has moved vmcore to timestamped dir
for root, dirs, files in os.walk(vmcore_root):
for timedir in dirs:
if re.search('^[0-9]{12}$', timedir):
vmcore_dir = os.path.join(vmcore_root, timedir)
dmesgfile = os.path.join(vmcore_dir, 'dmesg.' + timedir)
report_name = pr['Package'] + '-' + timedir + '.crash'
crash_report = os.path.join(vmcore_root, report_name)
pr['VmCoreDmesg'] = (dmesgfile,)
if not os.path.exists(crash_report):
try:
with open(crash_report, 'wb') as f:
pr.write(f)
except IOError as e:
apport.fatal('Cannot create report: ' + str(e))
# clean up the core file
# if not generated by kdump-tools
if os.path.exists(vmcore_path):
try:
os.unlink(vmcore_path)
except OSError:
pass # huh, already gone?
try:
os.unlink(vmcore_path + '.log')
except OSError:
pass
|