summaryrefslogtreecommitdiffstats
path: root/src/retrace
diff options
context:
space:
mode:
authorMichal Toman <mtoman@redhat.com>2011-03-09 12:59:41 +0100
committerMichal Toman <mtoman@redhat.com>2011-03-09 12:59:41 +0100
commitc7643b533a8a4eb44605266d0eb82e3a402b743f (patch)
tree945f7554679a3e37a47968477577dca17ea83146 /src/retrace
parentf849ea75e9511d0ac85a5e6a6144c82fca44a451 (diff)
downloadabrt-c7643b533a8a4eb44605266d0eb82e3a402b743f.tar.gz
abrt-c7643b533a8a4eb44605266d0eb82e3a402b743f.tar.xz
abrt-c7643b533a8a4eb44605266d0eb82e3a402b743f.zip
retrace server: get rid of ABRT inside chroots
Diffstat (limited to 'src/retrace')
-rw-r--r--src/retrace/retrace.py33
-rwxr-xr-xsrc/retrace/worker.py26
2 files changed, 49 insertions, 10 deletions
diff --git a/src/retrace/retrace.py b/src/retrace/retrace.py
index cc67f62f..ddeb9ffd 100644
--- a/src/retrace/retrace.py
+++ b/src/retrace/retrace.py
@@ -121,6 +121,39 @@ def guess_release(package):
return None, None
+def run_gdb(savedir):
+ try:
+ exec_file = open("%s/crash/executable" % savedir, "r")
+ executable = exec_file.read().replace("'", "")
+ exec_file.close()
+ except:
+ return ""
+
+ mockr = "../../%s/mock" % savedir
+
+ chmod = Popen(["mock", "shell", "-r", mockr, "--",
+ "/bin/chmod", "777", executable])
+ if chmod.wait() != 0:
+ return ""
+
+ pipe = Popen(["mock", "shell", "-r", mockr, "--",
+ "gdb", "-batch",
+ "-ex", "'file %s'" % executable,
+ "-ex", "'core-file /var/spool/abrt/crash/coredump'",
+ "-ex", "'thread apply all backtrace 2048 full'",
+ "-ex", "'info sharedlib'",
+ "-ex", "'print (char*)__abort_msg'",
+ "-ex", "'print (char*)__glib_assert_msg'",
+ "-ex", "'info registers'",
+ "-ex", "'disassemble'",
+ # redirect GDB's stderr, ignore mock's stderr
+ "2>&1"], stdout=PIPE).stdout
+
+ backtrace = pipe.read()
+ pipe.close()
+
+ return backtrace
+
def gen_task_password(taskdir):
generator = random.SystemRandom()
taskpass = ""
diff --git a/src/retrace/worker.py b/src/retrace/worker.py
index f7381c72..48ef8402 100755
--- a/src/retrace/worker.py
+++ b/src/retrace/worker.py
@@ -150,7 +150,7 @@ if __name__ == "__main__":
mockcfg = open("%s/mock.cfg" % savedir, "w")
mockcfg.write("config_opts['root'] = 'chroot'\n")
mockcfg.write("config_opts['target_arch'] = '%s'\n" % arch)
- mockcfg.write("config_opts['chroot_setup_cmd'] = 'install %s shadow-utils abrt-addon-ccpp gdb'\n" % packages)
+ mockcfg.write("config_opts['chroot_setup_cmd'] = 'install %s shadow-utils gdb'\n" % packages)
mockcfg.write("config_opts['basedir'] = '%s'\n" % workdir)
mockcfg.write("config_opts['plugin_conf']['ccache_enable'] = False\n")
mockcfg.write("config_opts['plugin_conf']['yum_cache_enable'] = False\n")
@@ -201,12 +201,6 @@ if __name__ == "__main__":
mockcfg.write("baseurl=file://%s/%s-%s-%s-updates-testing-debuginfo/\n" % (CONFIG["RepoDir"], distribution, version, arch))
mockcfg.write("failovermethod=priority\n")
mockcfg.write("\n")
- # custom ABRT repo with ABRT 2.0 binaries - obsolete after release of ABRT 2.0
- mockcfg.write("[abrt]\n")
- mockcfg.write("name=abrt\n")
- mockcfg.write("baseurl=http://repos.fedorapeople.org/repos/mtoman/abrt20/%s-%s/%s/\n" % (distribution, version, arch))
- mockcfg.write("failovermethod=priority\n")
- mockcfg.write("\n")
mockcfg.write("\"\"\"\n")
mockcfg.close()
except Exception as ex:
@@ -251,9 +245,21 @@ if __name__ == "__main__":
# generate backtrace
LOG.write("Generating backtrace... ")
- retrace_run(28, ["mock", "shell", "-r", mockr, "--", "/usr/bin/abrt-action-generate-backtrace", "-d", "/var/spool/abrt/crash/"])
- retrace_run(29, ["mock", "-r", mockr, "--copyout", "/var/spool/abrt/crash/backtrace", savedir])
- retrace_run(30, ["chmod", "a+r", "%s/backtrace" % savedir])
+ backtrace = run_gdb(savedir)
+
+ if not backtrace:
+ LOG.write("Error\n")
+ LOG.close()
+ sys.exit(29)
+
+ try:
+ bt_file = open("%s/backtrace" % savedir, "w")
+ bt_file.write(backtrace)
+ bt_file.close()
+ except Exception as ex:
+ LOG.write("Error: %s.\n" % ex)
+ LOG.close()
+ sys.exit(30)
LOG.write("OK\n")