ABRT plugin settings dialog proposal
by Jiri Moskovcak
Was thinking about how to implement the plugin settings dialog:
We can use the glade files we have for plugins right now. I would put
them into directory like /usr/share/abrt/plugins and the gui can just
read that directory and handle every .glade file as a plugin:
- create a window similar to what we have in old gui for plugin settings
- for every glade file add an entry to the list in the window
- every item in the glade file which have the prefix conf_<foo>
represents one item in the config file named <foo> so this way we can
fill the value read from the config file and later save values from the
dialog to the config file
- first iteration will only support .conf files
- second iteration should add support for gnome-keyring (and others like
kwallet?)
Any other ideas welcome.
Jirka
13 years, 2 months
build-id duplicity [Re: cores for sharedlibrary breakage]
by Jan Kratochvil
Hi Roland,
there is a proven build-id 3c3ec6b5aee374a2944f91e07d57baba05f37c57 duplicity
for openoffice.org-ure-3.3.0-20.2.fc14.i686 and some unknown build/version of
the same library/package. IIRC you have found such bug but I cannot find
a fix, could you give a pointer to the fix?
Thanks,
Jan
On Wed, 16 Feb 2011 10:10:08 +0100, Michal Toman wrote:
> http://retrace01.fedoraproject.org/cores.tar.gz
So far I was troubleshooting just ooo-calc, therefore:
sha256sum
022e897c38fecd089b88dcb7f74c7d4d592feb03ba00583deb4dce189b7745d1 ooo-calc/coredump
The problem #1 is that during
gdb -c ./coredump
it prints
Missing separate debuginfo for the main executable file
Try: yum --disablerepo='*' --enablerepo='*-debuginfo' install /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c
which is described in
[Bug 641377] hardlinks for new /usr/lib/rpm/find-debuginfo.sh
https://bugzilla.redhat.com/show_bug.cgi?id=641377
and trying any backtraces without resolving this problem makes no sense.
We will see how fast gets resolved the issue with hardlinks above, besides
/usr/lib/rpm/find-debuginfo.sh fix deployment it will require also rebuild of
the target packages and a GDB extensions for it. So far we can workaround it
for further testing by:
# mv /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c-orig
# mv /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c.debug /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c.debug-orig
# ln -s ../../../openoffice.org3/program/scalc.bin /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c
# ln -s ../../usr/lib/openoffice.org3/program/scalc.bin.debug /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c.debug
# ls -l /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c*
lrwxrwxrwx 1 root root 42 Feb 19 11:15 /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c -> ../../../openoffice.org3/program/scalc.bin*
lrwxrwxrwx 1 root root 40 Feb 16 12:40 /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c-orig -> ../../../broffice.org3/program/scalc.bin
lrwxrwxrwx 1 root root 53 Feb 19 11:16 /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c.debug -> ../../usr/lib/openoffice.org3/program/scalc.bin.debug
lrwxrwxrwx 1 root root 51 Feb 16 12:40 /usr/lib/debug/.build-id/6c/615ac474cbd79ca02f58b440ac3bfc3d648d0c.debug-orig -> ../../usr/lib/broffice.org3/program/scalc.bin.debug
The problem #2 is that still even afterwards one gets with `gdb -c core' lines
like:
warning: .dynamic section for "/usr/lib/openoffice.org/ure/lib/libuno_sal.so.3" is not at the expected address (wrong library or version mismatch?)
The part "wrong library or version mismatch?" is important there (there exists
also a different but similar GDB message).
This proves the on-disk library does not match the library used during runtime
as its .dynamic section / PT_DYNAMIC segment addresses modulo PAGE_SIZE do not
match (are not congruent).
Just both this core file and my local libuno_sal.so.3 from
openoffice.org-ure-3.3.0-20.2.fc14.i686 have the same build-id:
3c3ec6b5aee374a2944f91e07d57baba05f37c57
/usr/lib/debug/.build-id/3c/3ec6b5aee374a2944f91e07d57baba05f37c57 -> ../../../openoffice.org/ure/lib/libuno_sal.so.3*
= /usr/lib/openoffice.org/ure/lib/libuno_sal.so.3
/usr/lib/debug/.build-id/3c/3ec6b5aee374a2944f91e07d57baba05f37c57.debug -> ../../usr/lib/openoffice.org/ure/lib/libuno_sal.so.3.debug
= /usr/lib/debug/usr/lib/openoffice.org/ure/lib/libuno_sal.so.3.debug
eu-readelf -n /usr/lib/openoffice.org/ure/lib/libuno_sal.so.3
Build ID: 3c3ec6b5aee374a2944f91e07d57baba05f37c57
eu-readelf -n /usr/lib/debug/usr/lib/openoffice.org/ure/lib/libuno_sal.so.3.debug
Build ID: 3c3ec6b5aee374a2944f91e07d57baba05f37c57
dd 2>/dev/null if=ooo-calc/coredump bs=1 skip=$[0xf104] count=20|od -An -txC|tr -d '\n ';echo
3c3ec6b5aee374a2944f91e07d57baba05f37c57
dd 2>/dev/null if=ooo-calc/coredump bs=1 skip=$[0xf000] count=$[0x1000] >foo
readelf -l foo
DYNAMIC 0x1ca568 0x0039e568 0x0039e568 0x00118 0x00118 RW 0x4
readelf -l /usr/lib/openoffice.org/ure/lib/libuno_sal.so.3
DYNAMIC 0x1c5cb8 0x001c6cb8 0x001c6cb8 0x00118 0x00118 RW 0x4
This proves openoffice.org-ure-3.3.0-20.2.fc14.i686 was not in use for
ooo-calc/coredump and 3c3ec6b5aee374a2944f91e07d57baba05f37c57 exists also in
some other unknown build of /usr/lib/openoffice.org/ure/lib/libuno_sal.so.3 .
repoquery -qf /usr/lib/debug/.build-id/3c/3ec6b5aee374a2944f91e07d57baba05f37c57{,.debug}
openoffice.org-debuginfo-1:3.3.0-20.2.fc14.i686
But there is no different build in the current Fedora repositories - Michal,
could you look it up in your local copies?
BTW resolving the problem #1 is important to use `gdb -c core' instead
of `gdb executable core':
Denys provided for local backtracing
[Crash-catcher] [PATCH] save binary image along with coredump
https://fedorahosted.org/pipermail/crash-catcher/2010-June/000407.html
(a) this is no longer needed for RetraceServer, it has available all the needed
and matching versions.
(b) due to it ABRT is calling GDB with the explicit main executable filename.
ABRT is using
gdb ... -ex 'file /usr/bin/evolution' -ex 'core-file .../coredump' ...
instead of just
gdb ... -ex 'core-file .../coredump' ...
This way it does not use the default `set build-id-core-loads 1'.
The side-effect of build-id-core-loads is that it never loads a binary
with matching filename but non-matching build-id. This would safety check
a non-matching library does not get accidentally loaded.
Apparently it is all broken now when there are build-id duplicates out there.
As the problem #1 fix needs a rebuild of the target package I am not sure if
we will not need a workaround in the meantime. ABRT could send to the server
the executable filename (such as `/usr/bin/evolution' above) read from
/proc/PID/exe at the core dumping time. In such case the
`build-id-core-loads' build-id safety check will not be active even
server-side although it may not be required as the server-side packages should
always be provided in their right versions for the core file.
Apparently it is all broken now when there are build-id duplicates out there.
Thanks,
Jan
13 years, 2 months
Files containing translations and currently not in use
by Michal Nowak
`make check` on RHEL6 fails with following:
Making check in po
make[1]: Entering directory `/tmp/abrt/po'
rm -f missing notexist
srcdir=. /usr/bin/intltool-update -m
The following files contain translations and are currently not in use. Please
consider adding these to the POTFILES.in file, located in the po/ directory.
src/gui-gtk/abrt-gtk.c
src/gui-wizard-gtk/main.c
src/gui-wizard-gtk/wizard.c
src/gui-wizard-gtk/wizard.glade
If some of these files are left out on purpose then please add them to
POTFILES.skip instead of POTFILES.in. A file 'missing' containing this list
of left out files has been written in the current directory.
Please report to crash-catcher(a)fedorahosted.org
if [ -r missing -o -r notexist ]; then \
exit 1; \
fi
make[1]: *** [check] Error 1
make[1]: Leaving directory `/tmp/abrt/po'
make: *** [check-recursive] Error 1
Temporary added those files to POTFILES.skip so I can run the tests.
M.
13 years, 2 months
[PATCH] added SGIDed helper to run debuginfo install script
by Jiri Moskovcak
With this change non-root can install debuginfo into /var/cache/abrt-di
- abrt-di is owned by abrt/abrt
- the helper has SGID and is in abrt group
- please watch for any problems and SELinux denials
how to test:
1. copy some directory with coredump from /var/spool/ to ~/.abrt/spool/
2. remove backtrace if it's already been analyzed
3. remove files in /var/cache/abrt-di
4. run abrt-gtk as non-root and try to analyze the crash stored in
~/.abrt/spool/
- the output in gui needs some tweaks, but that's not for this patch to do..
Patch is run-tested.
Thanks,
Jirka
13 years, 2 months
abrt-action-save-package-data.c duplicate TODOs
by Vladimir Vinogradov
Hi all,
(while learning to the best OpenSource development practices with abrt as
good example), inside of abrt/src/ I've found among others a duplicate TODOs
in abrt-action-save-package-data.c, lines 121 and 233, "//TODO: move
hostname saving to a more logical place"
IMHO, "more logical place" is second, because in general both "if (!remote)"
and writing to FILENAME_HOSTNAME logically
not depends from anything else.
Hoping it will be useful, see attached .diff
--
v.v.
(Vladimir Vinogradov)
13 years, 2 months
[PATCH] copy /proc/<pid>/[map,smap] files into crash dir
by Nikola Pajkovsky
Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/hooks/abrt-hook-ccpp.c | 17 ++++++++++++++++-
src/include/abrt_crash_data.h | 3 ++-
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
index dc95d6d..8b6a692 100644
--- a/src/hooks/abrt-hook-ccpp.c
+++ b/src/hooks/abrt-hook-ccpp.c
@@ -498,8 +498,23 @@ int main(int argc, char** argv)
if (dd)
{
dd_create_basic_files(dd, uid);
+
+ char path_maps_in[sizeof("/proc/%lu/maps") + sizeof(long)*3];
+ sprintf(path_maps_in, "/proc/%lu/maps", (long)pid);
+ char *path_maps_out = concat_path_file(dd->dd_dir, FILENAME_MAPS);
+ copy_file(path_maps_in, path_maps_out, 0);
+ free(path_maps_out);
+
+ char path_smaps_in[sizeof("/proc/%lu/smaps") + sizeof(long)*3];
+ sprintf(path_smaps_in, "/proc/%lu/smaps", (long)pid);
+ char *path_smaps_out = concat_path_file(dd->dd_dir, FILENAME_SMAPS);
+ copy_file(path_smaps_in, path_smaps_out, 0);
+ free(path_smaps_out);
+
char *cmdline = get_cmdline(pid); /* never NULL */
- char *reason = xasprintf("Process %s was killed by signal %s (SIG%s)", executable, signal_str, signame ? signame : signal_str);
+ char *reason = xasprintf("Process %s was killed by signal %s (SIG%s)",
+ executable, signal_str, signame ? signame : signal_str);
+
dd_save_text(dd, FILENAME_ANALYZER, "CCpp");
dd_save_text(dd, FILENAME_EXECUTABLE, executable);
dd_save_text(dd, FILENAME_CMDLINE, cmdline);
diff --git a/src/include/abrt_crash_data.h b/src/include/abrt_crash_data.h
index 3243de8..b71b046 100644
--- a/src/include/abrt_crash_data.h
+++ b/src/include/abrt_crash_data.h
@@ -36,7 +36,8 @@
#define FILENAME_REASON "reason"
#define FILENAME_COREDUMP "coredump"
#define FILENAME_BACKTRACE "backtrace"
-#define FILENAME_MEMORYMAP "memorymap"
+#define FILENAME_MAPS "maps"
+#define FILENAME_SMAPS "smaps"
#define FILENAME_DUPHASH "global_uuid" /* name is compat, to be renamed to "duphash" */
// Name of the function where the application crashed.
// Optional.
--
1.7.1
13 years, 2 months
Re: ...dialog. 'Cron' - a bug?
by Denys Vlasenko
On Sat, Feb 12, 2011 at 10:42 PM, Vladimir Vinogradov
<vladimir.v.vinogradov(a)gmail.com> wrote:
> Is it a bug
> " Cannot show the settings dialog.
> 'Cron' "
> when I click Edit->Preferences at main window?
Likely yes.
Old GUI is in the process of being replaced anyway.
--
vda
13 years, 2 months
[PATCH] get rid of unused CD_FLAG_SYS
by Nikola Pajkovsky
Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/cli/CLI.cpp | 8 +++-----
src/cli/report.cpp | 12 ------------
src/daemon/MiddleWare.cpp | 12 ++++++++----
src/include/report/crash_data.h | 9 ++++-----
src/lib/abrt_dbus.c | 3 +--
src/lib/crash_data.c | 2 +-
src/report-python/reportmodule.c | 1 -
7 files changed, 17 insertions(+), 30 deletions(-)
diff --git a/src/cli/CLI.cpp b/src/cli/CLI.cpp
index 2ac6342..87bf7ec 100644
--- a/src/cli/CLI.cpp
+++ b/src/cli/CLI.cpp
@@ -43,11 +43,8 @@ static crash_data_t *FillCrashInfo(const char *dump_dir_name)
return NULL;
crash_data_t *crash_data = create_crash_data_from_dump_dir(dd);
-// char *events = list_possible_events(dd, NULL, "");
dd_close(dd);
-// add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
-// free(events);
- add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
+ add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE);
return crash_data;
}
@@ -471,7 +468,8 @@ int main(int argc, char** argv)
return -1;
crash_data_t *crash_data = create_crash_data_from_dump_dir(dd);
dd_close(dd);
- add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
+ add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name,
+ CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE);
print_crash_info(crash_data, backtrace);
free_crash_data(crash_data);
diff --git a/src/cli/report.cpp b/src/cli/report.cpp
index 29c5e06..c864b09 100644
--- a/src/cli/report.cpp
+++ b/src/cli/report.cpp
@@ -148,12 +148,6 @@ static void write_crash_report_field(FILE *fp, crash_data_t *crash_data,
return;
}
- if (value->flags & CD_FLAG_SYS)
- {
- error_msg("Cannot update field %s because it is a system value", field);
- return;
- }
-
fprintf(fp, "%s%s\n", FIELD_SEP, field);
fprintf(fp, "%s\n", description);
@@ -227,12 +221,6 @@ static int read_crash_report_field(const char *text, crash_data_t *report,
return 0;
}
- if (value->flags & CD_FLAG_SYS)
- {
- error_msg("Cannot update field %s because it is a system value", field);
- return 0;
- }
-
// Do not change noneditable fields.
if (!(value->flags & CD_FLAG_ISEDITABLE))
return 0;
diff --git a/src/daemon/MiddleWare.cpp b/src/daemon/MiddleWare.cpp
index 906b146..52560b7 100644
--- a/src/daemon/MiddleWare.cpp
+++ b/src/daemon/MiddleWare.cpp
@@ -74,10 +74,12 @@ static crash_data_t *DebugDumpToCrashReport(const char *dump_dir_name)
char *events = list_possible_events(dd, NULL, "");
dd_close(dd);
- add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
+ add_to_crash_data_ext(crash_data, CD_EVENTS, events,
+ CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE);
free(events);
- add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
+ add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name,
+ CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE);
return crash_data;
}
@@ -575,10 +577,12 @@ static crash_data_t *FillCrashInfo(const char *dump_dir_name)
char *events = list_possible_events(dd, NULL, "");
dd_close(dd);
- add_to_crash_data_ext(crash_data, CD_EVENTS, events, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
+ add_to_crash_data_ext(crash_data, CD_EVENTS, events,
+ CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE);
free(events);
- add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name, CD_FLAG_SYS + CD_FLAG_ISNOTEDITABLE);
+ add_to_crash_data_ext(crash_data, CD_DUMPDIR, dump_dir_name,
+ CD_FLAG_TXT + CD_FLAG_ISNOTEDITABLE);
return crash_data;
}
diff --git a/src/include/report/crash_data.h b/src/include/report/crash_data.h
index 86543a4..3854118 100644
--- a/src/include/report/crash_data.h
+++ b/src/include/report/crash_data.h
@@ -28,11 +28,10 @@ extern "C" {
struct dump_dir;
enum {
- CD_FLAG_SYS = (1 << 0),
- CD_FLAG_BIN = (1 << 1),
- CD_FLAG_TXT = (1 << 2),
- CD_FLAG_ISEDITABLE = (1 << 3),
- CD_FLAG_ISNOTEDITABLE = (1 << 4),
+ CD_FLAG_BIN = (1 << 0),
+ CD_FLAG_TXT = (1 << 1),
+ CD_FLAG_ISEDITABLE = (1 << 2),
+ CD_FLAG_ISNOTEDITABLE = (1 << 3),
};
struct crash_item {
diff --git a/src/lib/abrt_dbus.c b/src/lib/abrt_dbus.c
index d171763..9ac2620 100644
--- a/src/lib/abrt_dbus.c
+++ b/src/lib/abrt_dbus.c
@@ -196,7 +196,7 @@ static void store_crash_item(DBusMessageIter* iter, struct crash_item *val)
* type, editable, content.
* This doesn't match daemon-side representation: { content, flags } struct
*/
- store_string(&sub_iter, (val->flags & CD_FLAG_SYS ? "s" : (val->flags & CD_FLAG_BIN ? "b" : "t")));
+ store_string(&sub_iter, (val->flags & CD_FLAG_BIN ? "b" : "t"));
store_string(&sub_iter, (val->flags & CD_FLAG_ISEDITABLE ? "y" : "n"));
store_string(&sub_iter, val->content);
@@ -363,7 +363,6 @@ static int load_crash_item(DBusMessageIter* iter, struct crash_item *item)
return -1;
}
item->flags = 0;
- if (typestr[0] == 's') item->flags |= CD_FLAG_SYS;
if (typestr[0] == 'b') item->flags |= CD_FLAG_BIN;
if (typestr[0] == 't') item->flags |= CD_FLAG_TXT;
if (editable[0] == 'y') item->flags |= CD_FLAG_ISEDITABLE;
diff --git a/src/lib/crash_data.c b/src/lib/crash_data.c
index 410f35f..0702a56 100644
--- a/src/lib/crash_data.c
+++ b/src/lib/crash_data.c
@@ -42,7 +42,7 @@ void add_to_crash_data_ext(crash_data_t *crash_data,
const char *content,
unsigned flags)
{
- if (!(flags & (CD_FLAG_SYS|CD_FLAG_BIN|CD_FLAG_TXT)))
+ if (!(flags & (CD_FLAG_BIN|CD_FLAG_TXT)))
flags |= CD_FLAG_TXT;
if (!(flags & (CD_FLAG_ISEDITABLE|CD_FLAG_ISNOTEDITABLE)))
flags |= CD_FLAG_ISNOTEDITABLE;
diff --git a/src/report-python/reportmodule.c b/src/report-python/reportmodule.c
index bd74cff..fd58a3b 100644
--- a/src/report-python/reportmodule.c
+++ b/src/report-python/reportmodule.c
@@ -68,7 +68,6 @@ init_pyreport(void)
/* init type objects */
Py_INCREF(&p_crash_data_type);
PyModule_AddObject(m, "crash_data", (PyObject *)&p_crash_data_type);
- PyModule_AddObject(m, "CD_FLAG_SYS" , Py_BuildValue("i", CD_FLAG_SYS ));
PyModule_AddObject(m, "CD_FLAG_BIN" , Py_BuildValue("i", CD_FLAG_BIN ));
PyModule_AddObject(m, "CD_FLAG_TXT" , Py_BuildValue("i", CD_FLAG_TXT ));
PyModule_AddObject(m, "CD_FLAG_ISEDITABLE" , Py_BuildValue("i", CD_FLAG_ISEDITABLE ));
--
1.7.4.rc2.3.g60a2e
13 years, 2 months
Re: abrt brainstorming: further design changes
by Denys Vlasenko
Hi Vladimir,
On Sat, Feb 12, 2011 at 10:39 PM, Vladimir Vinogradov
<vladimir.v.vinogradov(a)gmail.com> wrote:
> https://fedorahosted.org/pipermail/crash-catcher/2010-November/001306.html
>
>> * implement .conf description files and event description files
>> ^^^^^^ Postponed
>>
>> * apply gui_event_fix.patch
>> [ AnalyzerActionsAndReporters ] section:
>> Kerneloops = KerneloopsReporter
>> CCpp = Bugzilla, Logger
>> Python = Bugzilla, Logger
>> ^^^^^^ I took it
>
> I'd like to add text explanation to checkboxes on "Send a bug report" form.
> I.e.
> Bugzilla: bug tracking service supported by RedHat
> Logger: save a note to local system log, currently to %s, lLogPath
> I think these infos can be added to (and fetched from) respective
> /etc/abrt/plugins/*.conf
> as "extended Descriptions".
>
> If you already know where to start digging in src/, point me please.
This will require a bit of explanation.
Currently, reporting is performed by "running report_FOO event".
The list of all available events is determined by looking into
/etc/abrt/abrt_event.conf file. Fir example, this line:
EVENT=report_Bugzilla analyzer=CCpp abrt-action-bugzilla -c
/etc/abrt/plugins/Bugzilla.conf
says that event "report_Bugzilla" is configured (can be run)
for any dump directory which has file named "analyzer" with
one line in it: "CCpp". when it is run,
abrt-action-bugzilla -c /etc/abrt/plugins/Bugzilla.conf
will be executed. An event can have more than one program.
They will be executed sequentially. If one of these programs
fails, event run is considered "failed" and execution stops.
If all program succeed, event run has succeeded.
A bit of history:
This scheme evolved from previous code where we had "reporter plugins"
which were implemented as loadable .so modules.
We found that we need better configurability (meaning: want to run
different reporters depending on wildly different conditions; want to run
more than one reporter; want to run reporters at different stages
of dump dir life, etc); want to have less problems with memory consumption
and resource leaks (meaning: loadable .so modules didn't provide
strong enough isolation); and want to be able to debug individual reporters
(again, loadable .so modules are not that easy to debug)
Therefore "reporter plugins" concept is now replaced by two concepts
of events and reporters. Reporters now are separate applications,
like abrt-action-bugzilla in the example above.
However, .conf files structure is carried out without change from the
old scheme,
when /etc/abrt/plugins/FOO.conf contained configuration for plugin FOO.
Plugin FOO is gone, but /etc/abrt/plugins/FOO.conf remains.
I somewhat haphazardly hooked then to "new" reporters using -c CONFFILE
option:
abrt-action-bugzilla -c /etc/abrt/plugins/Bugzilla.conf
Yet, some problems remain. For example, abrt-action-bugzilla needs
password, whereas abrt-action-print does not. If we want to be nice,
detect that password is needed and abort if it is not provided
(neither in .conf file nor in environment), how we can know it?
Another problem. You want to have "user visible" names for events.
Again, where we should put them?
We had several ideas about it. One idea is to have optional *.conf files
for events. Say, if we want to run report_Bugzilla, and report_Bugzilla.conf
exists, it is loaded and data from it is used. For your purposes,
it can have
display_name = string
directive. It also can have
need_Bugzilla_Password = 1
to indicate that without this variable, reporting won't work for sure.
If you want to work on this, start with abrt-cli tool.
Please see src/cli/report.cpp,
//TODO: rethink how we associate report events with configs
comment.
You probably need to start there. Currently, it loads "Bugzilla.conf",
and needs to be changed to load "report_Bugzilla.conf"
(from which directory?)...
Hacking on GUI at this time is not a good idea, Jiri is working
on a replacement.
>> * remove some (all remaining?) C++ isms
> Could I understand meanings and a reason? If so, will you explain briefly?
Developers agreed that we don't need/don't like C++ and will gradually
convert everything to pure C.
--
vda
13 years, 2 months