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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
#!/usr/bin/python
import os, commands, getopt, sys, tarfile
# FILES NEEDED BY CHECKSYSREPORT: /etc/redhat-release /etc/sysconfig/rhn/up2date rpm-Va installed-rpms uname lsmod
CONFIG = {}
report_dirs = []
CONFIG["outdir"] = "/tmp/sysreports"
CONFIG["extract_reports"] = []
CONFIG["spawn_terminal"] = False
if not sys.stdin.isatty(): CONFIG["spawn_terminal"] = True
else: CONFIG["spawn_terminal"] = False
def cat(fname):
try:
fp = open(fname,"r")
print fp.read()
fp.close()
except: pass
try:
opts, args = getopt.getopt(sys.argv[1:], "hi:w:vxf", ["help", "input="])
except getopt.GetoptError:
# print help information and exit:
usage()
sys.exit(2)
for o, a in opts:
if o == "-v":
verbose = True
if o == "-f":
CONFIG["spawn_terminal"] = False
if o == "-x":
CONFIG["spawn_terminal"] = True
sys.argv[sys.argv.index("-x")] = "-f"
if o in ("-h", "--help"):
usage()
sys.exit()
if o in ("-d"):
CONFIG["outdir"] = a
if o in ("-w"):
a = os.path.abspath(a)
try: os.stat(a)
except: print "ERROR: could not open", a
else: report_dirs.append(a)
if o in ("-i"):
a = os.path.abspath(a)
try: os.stat(a)
except: print "ERROR: could not open", a
if CONFIG["spawn_terminal"]:
print "spawning new terminal"
sys.argv[0] = os.path.abspath(sys.argv[0])
os.system("gnome-terminal -e '%s'" % (' '.join(sys.argv)))
sys.exit()
CONFIG["extract_reports"] = [os.path.abspath(a) for a in args]
if not os.path.isdir(CONFIG["outdir"]):
if not os.path.exists(CONFIG["outdir"]):
exit("ERROR: working directory path exists but it's not a directory")
else:
try: os.mkdir(CONFIG["outdir"])
except: exit("ERROR: could not create working directory")
try: os.chdir(CONFIG["outdir"])
except: exit("ERROR: could not chdir into working directory, please check permissions")
for report in CONFIG["extract_reports"]:
report_ext = report.rsplit(".",1)[-1]
if report_ext == "gpg":
clear_fname = os.path.join(CONFIG["outdir"],os.path.basename(report.rsplit(".",1)[0]))
status, output = commands.getstatusoutput("gpg --output %s %s" % (clear_fname,report))
if status:
sys.exit("ERROR: could not decrypt using gpg" + output )
report = clear_fname
report_ext = clear_fname.rsplit(".",1)[-1]
del clear_fname
outdir = None
tar = tarfile.open(report, "r")
for tarinfo in tar:
if tarinfo.isdir(): outdir = tarinfo.name ; break
tar.close()
if not outdir:
print("INFO: archive doesn't appear to be either a sysreport or sosreport")
cddir = os.path.basename(report)
for sout in [ ".tar.gz", ".tgz", ".tar.bz2" ]:
if cddir.endswith(sout): cddir = cddir[:-len(sout)]
cddir = os.path.abspath(os.path.join(CONFIG["outdir"],"extract_" + cddir))
outdir = cddir
else:
cddir = CONFIG["outdir"]
outdir = os.path.abspath(os.path.join(CONFIG["outdir"], outdir))
extract = True
if os.path.isdir(outdir):
extract = False
yorno = False
print "This report already seems to have been extracted in:"
print " " + outdir
print
while yorno not in ['y','n']: yorno = raw_input("Do you want to replace it with a fresh copy ? (y/n) ").lower()
if yorno == 'y':
print "Deleting previous copy..."
os.system("chmod -R u+rw %s" % outdir)
os.system("rm -rf %s" % outdir)
extract = True
if extract:
print "Extracting..."
if not os.path.isdir(cddir):
os.mkdir(cddir)
if report_ext == "bz2":
status, output = commands.getstatusoutput("tar xCfj %s %s" % (cddir,report))
elif report_ext == "gz" or report_ext == "tgz" :
status, output = commands.getstatusoutput("tar xCfz %s %s" % (cddir,report))
if status:
print("ERROR: there was some problem extracting the report (%s)" % report)
report_dirs.append(os.path.abspath(outdir))
if len(report_dirs) == 1 and os.path.isdir(report_dirs[0]):
os.chdir(report_dirs[0])
if os.path.isfile("sos_reports/diagnose.txt"):
print
print "Diagnostics messages available:"
print
fp = open("sos_reports/diagnose.txt","r")
for line in fp.readlines():
print " " + line.strip("\n")
fp.close()
print
report_dirs[0]
print
print "The extracted report is located in: "
print " " + report_dirs[0]
print "Once finished, press exit to return."
print
cat("uname")
os.system("PS1='[SoS \W]\$ ' HOME='%s' /bin/bash -l" % (report_dirs[0]) )
sys.exit(-1)
|