summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Toman <mtoman@redhat.com>2010-11-22 10:29:19 +0100
committerMichal Toman <mtoman@redhat.com>2010-11-22 10:30:21 +0100
commit95d616ebead47fef85c1e50bee461ebd194db6ea (patch)
tree65bbc8032753e495d024f19282160c8207600085
parentde0a0d6e0089b38b21d225eda61a707cd97a730a (diff)
downloadabrt-95d616ebead47fef85c1e50bee461ebd194db6ea.tar.gz
abrt-95d616ebead47fef85c1e50bee461ebd194db6ea.tar.xz
abrt-95d616ebead47fef85c1e50bee461ebd194db6ea.zip
Worker update
-rwxr-xr-xretrace/worker/abrt-retrace-worker50
-rw-r--r--retrace/worker/worker.c85
-rwxr-xr-xretrace/worker/worker.py13
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])