From 8c03ba1f2e171471f870951119fbdbd3d34c58b6 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Sep 13 2011 10:50:39 +0000 Subject: fixed update from abrt1 to abrt2 --- diff --git a/abrt.spec b/abrt.spec index 91a5360..5424a12 100644 --- a/abrt.spec +++ b/abrt.spec @@ -10,7 +10,7 @@ Summary: Automatic bug detection and reporting tool Name: abrt Version: 2.0.4 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2+ Group: Applications/System URL: https://fedorahosted.org/abrt/ @@ -18,6 +18,7 @@ Source: https://fedorahosted.org/released/%{name}/%{name}-%{version}.tar.gz Source1: abrt.init Source2: abrt-ccpp.init Source3: abrt-oops.init +Source4: abrt1_to_abrt2 Patch0: 0001-abrt-gui-launch-reporter-children-with-LIBREPORT_GET.patch Patch1: 0002-gui-split-the-main-window-in-2-panes-reported-not-re.patch Patch2: 0004-install-debuginfo-ask-before-downloading.patch @@ -191,6 +192,7 @@ install -m 755 %SOURCE1 ${RPM_BUILD_ROOT}/%{_initrddir}/abrtd install -m 755 %SOURCE2 ${RPM_BUILD_ROOT}/%{_initrddir}/abrt-ccpp install -m 755 %SOURCE3 ${RPM_BUILD_ROOT}/%{_initrddir}/abrt-oops %endif +install -m 755 %SOURCE4 ${RPM_BUILD_ROOT}/%{_libexecdir}/abrt1-to-abrt2 mkdir -p $RPM_BUILD_ROOT/var/cache/abrt-di mkdir -p $RPM_BUILD_ROOT/var/run/abrt mkdir -p $RPM_BUILD_ROOT/var/spool/abrt @@ -230,6 +232,7 @@ if [ $1 -eq 1 ]; then /sbin/chkconfig --add abrtd %endif fi +%{_libexecdir}/abrt1-to-abrt2 || : %post addon-ccpp # this is required for transition from 1.1.x to 2.x @@ -244,6 +247,18 @@ if [ $1 -eq 1 ]; then /sbin/chkconfig --add abrt-ccpp %endif fi +# FIXME: Workaround for update from abrt-1.1.x, can be removed in +# F17(18) update. When we are updating from ABRT 1 to ABRT 2, assume +# that abrtd service is enabled and thus enable the new abrt-ccpp +# service. If abrtd is running on the system, run abrt-ccpp service +# as well, because what was a part of abrtd became a separate service. +if [ $1 -gt 1 ]; then # Is this an upgrade? + /sbin/chkconfig --add abrt-ccpp + /sbin/pidof abrtd >/dev/null 2>&1 + if [ $? -eq 0 ]; then # Is abrtd running? + service abrt-ccpp restart >/dev/null 2>&1 || : + fi +fi %post addon-kerneloops if [ $1 -eq 1 ]; then @@ -254,6 +269,18 @@ if [ $1 -eq 1 ]; then /sbin/chkconfig --add abrt-oops %endif fi +# FIXME: Workaround for update from abrt-1.1.x, can be removed in +# F17(18) update. When we are updating from ABRT 1 to ABRT 2, assume +# that abrtd service is enabled and thus enable the new abrt-oops +# service. If abrtd is running on the system, run abrt-ccpp service +# as well, because what was a part of abrtd became a separate service. +if [ $1 -gt 1 ]; then # Is this an upgrade? + /sbin/chkconfig --add abrt-oops + /sbin/pidof abrtd >/dev/null 2>&1 + if [ $? -eq 0 ]; then # Is abrtd running? + service abrt-oops restart >/dev/null 2>&1 || : + fi +fi %preun if [ "$1" -eq "0" ] ; then @@ -444,6 +471,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %defattr(-,root,root,-) %changelog +* Tue Aug 30 2011 Jiri Moskovcak - 2.0.4-3 +- fixed abrt1-abrt2 update + * Fri Aug 19 2011 Jiri Moskovcak - 2.0.4-2 - enable bugzilla for kerneloops rhbz#725970 - Resolves: #725970 diff --git a/abrt1_to_abrt2 b/abrt1_to_abrt2 new file mode 100755 index 0000000..978c38f --- /dev/null +++ b/abrt1_to_abrt2 @@ -0,0 +1,115 @@ +#! /usr/bin/python +#-*- coding: utf-8 -*- + +import os + +# abrt_v4 TABLE columns: +UUID = 0 +UID = 1 +INFORMALL = 2 +DUMPDIR_PATH = 3 +COUNT = 4 +REPORTED = 5 +TIME = 6 +MESSAGE = 7 + +# abrt_v4_reportresult columns: +#UUID = 0 +#UID = 1 +REPORTER = 2 +RESULT_MESSAGE = 3 + +def get_db_path(): + path = "/var/spool/abrt/abrt-db" + try: + with open("/etc/abrt/plugins/SQLite3.conf") as f: + for line in f: + line = line.split('=', 1) + if len(line) == 2 and line[0].strip() == "DBPath": + path = line[1].strip() + except Exception, ex: + pass + return path + +def get_url_from_text(text): + url_marks = ["http://", "https://", "ftp://", "ftps://", "file://"] + lines = text.split('\n') + url = "" + for mark in url_marks: + for line in lines: + last_mark = line.find(mark) + if last_mark != -1: + url_end = line.find(' ',last_mark) + if url_end == -1: + url_end = len(line) + url = "URL=" + line[last_mark:url_end] + return url + +def format_reported_to(reported_to): + reporter = reported_to[REPORTER] + url = get_url_from_text(reported_to[RESULT_MESSAGE]) + if not url: + url = reported_to[RESULT_MESSAGE] + return reporter + ": " + url + +if __name__ == "__main__": + try: + from sqlite3 import dbapi2 as sqlite + db = sqlite.connect(get_db_path()) + crashes = db.execute("SELECT * FROM abrt_v4") + # abrt_v4 TABLE columns: + # UUID | UID | INFORMALL | DUMPDIR_PATH | COUNT | REPORTED | TIME | MESSAGE + for crash in crashes: + # abrt_v4_reportresult columns: + # UUID | UID | REPORTER | MESSAGE + report_results = db.execute("SELECT * FROM abrt_v4_reportresult WHERE UUID='%s'" % crash[UUID]) + + # save count from db to file + count_file = "%s/count" % crash[DUMPDIR_PATH] + # don't overwrite + if not os.path.exists(count_file): + try: + fout = open(count_file, "w") + fout.write(str(crash[COUNT])) + fout.close() + except Exception, ex: + # silently ignore errors -> probably stalled db, but we can't + # do much about it, so it's better to not polute the rpm output + pass + + # save uuid from db to file + uuid_file = "%s/uuid" % crash[DUMPDIR_PATH] + # don't overwrite + if not os.path.exists(uuid_file): + try: + fout = open(uuid_file, "w") + fout.write(str(crash[UUID])) + fout.close() + except Exception, ex: + # silently ignore errors -> probably stalled db, but we can't + # do much about it, so it's better to not polute the rpm output + pass + + results = report_results.fetchall() + if results: + # save report results from db to file + reported_to_file = "%s/reported_to" % crash[DUMPDIR_PATH] + if not os.path.exists(reported_to_file): + try: + fout = open(reported_to_file, "w") + except Exception, ex: + # silently ignore errors -> probably stalled db, but we can't + # do much about it, so it's better to not polute the rpm output + continue + + for report_result in results: + # print "\t", format_reported_to(report_result) + # I know, it adds a '\n' to the end, but it's not a problem + fout.write("%s\n" % format_reported_to(report_result)) + fout.close() + db.close() + except Exception, ex: + # in case of any unhandled error, just ignore it, the worst, what + # can happen is that the old reports are marked as unreported + #print ex + pass