diff options
| author | Michal Toman <mtoman@redhat.com> | 2010-11-22 10:29:19 +0100 |
|---|---|---|
| committer | Michal Toman <mtoman@redhat.com> | 2010-11-22 10:30:21 +0100 |
| commit | 95d616ebead47fef85c1e50bee461ebd194db6ea (patch) | |
| tree | 65bbc8032753e495d024f19282160c8207600085 | |
| parent | de0a0d6e0089b38b21d225eda61a707cd97a730a (diff) | |
| download | abrt-95d616ebead47fef85c1e50bee461ebd194db6ea.tar.gz abrt-95d616ebead47fef85c1e50bee461ebd194db6ea.tar.xz abrt-95d616ebead47fef85c1e50bee461ebd194db6ea.zip | |
Worker update
| -rwxr-xr-x | retrace/worker/abrt-retrace-worker | 50 | ||||
| -rw-r--r-- | retrace/worker/worker.c | 85 | ||||
| -rwxr-xr-x | retrace/worker/worker.py | 13 |
3 files changed, 91 insertions, 57 deletions
diff --git a/retrace/worker/abrt-retrace-worker b/retrace/worker/abrt-retrace-worker deleted file mode 100755 index 05a31d5f..00000000 --- a/retrace/worker/abrt-retrace-worker +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -############################################################################## -# Usage: # -# abrt-retrace-worker retrace_directory # -# # -# retrace_directory is the directory created by abrt-retrace-interface. # -# By default it is "/var/spool/abrt-retrace/crashid". # -# # -# abrt-retrace-worker is a simple tool that runs worker.py (which contains # -# the main part of retrace code), saves its output to the log and makes log # -# and backtrace visible via abrt-retrace-interface. # -# # -# Created by: # -# Michal Toman <mtoman@redhat.com> # -############################################################################## - -if [ $1 ] && [ ! $2 ] && [ -d "$1" ] -then - export PYTHONPATH="/usr/share/abrt-retrace" - LOG="$1/log" - echo "Starting retrace" > $LOG - /usr/bin/python /usr/share/abrt-retrace/worker.py "$1" >> $LOG - RET=$? - - if [ $RET -eq "0" ] - then - echo "Retrace successful" >> $LOG - mv "$1/backtrace" "$1/retrace_backtrace" - chown "apache" "$1/retrace_backtrace" - else - echo "Retrace failed" >> $LOG - fi - - mv "$1/log" "$1/retrace_log" - chown "apache" "$1/retrace_log" - - for DEL in $1/* - do - if [ $DEL != "$1/retrace_log" ] && [ $DEL != "$1/retrace_backtrace" ] && [ $DEL != "$1/password" ] - then - rm -rf $DEL - fi - done - - exit $RET -else - echo "Usage: '$0 retrace_directory'" - exit 127 -fi diff --git a/retrace/worker/worker.c b/retrace/worker/worker.c new file mode 100644 index 00000000..21a79915 --- /dev/null +++ b/retrace/worker/worker.c @@ -0,0 +1,85 @@ +#include <dirent.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +int main(int argc, char **argv) +{ + char command[1024], line[256]; + FILE *pipe, *log; + int retcode; + DIR *dir; + struct dirent *entry; + + if (argc != 2) + { + printf("Usage: %s retrace_directory\n", argv[0]); + return 1; + } + + if (setuid(0) != 0) + { + printf("You must run %s with root permissions.\n", argv[0]); + return 2; + } + + sprintf(command, "%s/log", argv[1]); + + log = fopen(command, "w"); + fputs("Starting retrace\n", log); + + sprintf(command, "/usr/bin/python /usr/share/abrt-retrace/worker.py \"%s\"", argv[1]); + + pipe = popen(command, "r"); + while (fgets(line, 255, pipe) != NULL) + { + fputs(line, log); + } + + retcode = pclose(pipe) >> 8; + + if (retcode == 0) + { + fputs("Retrace successful\n", log); + + dir = opendir(argv[1]); + if (dir == NULL) + { + fputs("Cleanup error: opendir()", stderr); + } + else + { + while ((entry = readdir(dir)) != NULL) + { + if (entry->d_name[0] != '.' && strcmp("log", entry->d_name) != 0 && strcmp("backtrace", entry->d_name) != 0 && strcmp("password", entry->d_name) != 0) + { + sprintf(command, "rm -rf \"%s/%s\"", argv[1], entry->d_name); + if (system(command) != 0) + { + fprintf(stderr, "Cleanup error: %s", command); + } + } + } + + if (closedir(dir) < 0) + { + fputs("Cleanup error: closedir()", stderr); + } + } + + sprintf(command, "mv \"%s/backtrace\" \"%s/retrace_backtrace\"", argv[1], argv[1]); + system(command); + } + else + { + fputs("Retrace failed\n", log); + } + + fclose(log); + + sprintf(command, "mv \"%s/log\" \"%s/retrace_log\"", argv[1], argv[1]); + system(command); + + return retcode; +} diff --git a/retrace/worker/worker.py b/retrace/worker/worker.py index 8e28ea4b..5983f2fa 100755 --- a/retrace/worker/worker.py +++ b/retrace/worker/worker.py @@ -130,6 +130,7 @@ if __name__ == "__main__": mockcfg.write("\n") # at the moment only works for fedora with global repos # ToDo RHEL and local repos +# """ mockcfg.write("[fedora]\n") mockcfg.write("name=fedora\n") mockcfg.write("mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-" + version + "&arch=" + repoarch + "\n") @@ -153,7 +154,7 @@ if __name__ == "__main__": # custom repo containing abrt-1.1.4.1, abrt-addon-ccpp-1.1.4.1 and abrt-libs-1.1.4.1 for fedora-[12|13|14]-[i686|x86_64] mockcfg.write("[abrt]\n") mockcfg.write("name=abrt\n") - mockcfg.write("baseurl=http://simona.expresmu.sk:44480/" + distribution + "-" + version + "-" + arch + "-abrt\n") + mockcfg.write("baseurl=http://repos.fedorapeople.org/repos/mtoman/abrt/" + distribution + "-" + version + "/" + arch + "/\n") mockcfg.write("failovermethod=priority\n") """ # testing local repos @@ -181,7 +182,7 @@ if __name__ == "__main__": mockcfg.write("name=abrt\n") mockcfg.write("baseurl=http://localhost:44480/" + distribution + "-" + version + "-" + arch + "-abrt\n") mockcfg.write("failovermethod=priority\n") - """ +# """ mockcfg.write("\n") mockcfg.write("\"\"\"\n") mockcfg.close() @@ -192,23 +193,21 @@ if __name__ == "__main__": mockr = "../../" + workdir + "/mock" print "Initializing virtual root...", - sys.stdout.flush() retrace_run(11, ["mock", "init", "-r", mockr]) print "OK" print "Installing debuginfos...", - sys.stdout.flush() - retrace_run(12, ["mock", "shell", "-r", mockr, "debuginfo-install" + packages]) + retrace_run(12, ["cp", "-r", workdir + "/crash", workdir + "/" + chroot + "/root/var/spool/abrt"]) +# retrace_run(13, ["mock", "shell", "-r", mockr, "abrt-action-install-debuginfo", "/var/spool/abrt/crash/coredump", "/tmp/abrt"]) + retrace_run(13, ["mock", "shell", "-r", mockr, "debuginfo-install" + packages]) print "OK" print "Generating backtrace...", - sys.stdout.flush() - retrace_run(13, ["cp", "-r", workdir + "/crash", workdir + "/" + chroot + "/root/var/spool/abrt"]) retrace_run(14, ["mock", "shell", "-r", mockr, "--", "abrt-action-generate-backtrace -d /var/spool/abrt/crash"]) retrace_run(15, ["cp", workdir + "/" + chroot + "/root/var/spool/abrt/crash/backtrace", workdir]) |
