From c7643b533a8a4eb44605266d0eb82e3a402b743f Mon Sep 17 00:00:00 2001 From: Michal Toman Date: Wed, 9 Mar 2011 12:59:41 +0100 Subject: retrace server: get rid of ABRT inside chroots --- src/retrace/retrace.py | 33 +++++++++++++++++++++++++++++++++ src/retrace/worker.py | 26 ++++++++++++++++---------- 2 files changed, 49 insertions(+), 10 deletions(-) (limited to 'src/retrace') 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") -- cgit