If a program developer (or package maintainer) requires some specific information which ABRT is not collecting, they can write a custom ABRT hook which collects the required data for his program (package). Such hook can be run at a different time during the problem processing depending on how "fresh" the information has to be. It can be run:
- at the time of the crash
- at the time when user decides to analyse the problem (usually run
gdb
on it) - at the time of reporting
All you have to do is create a .conf
and place it to
/etc/libreport/events.d/
from this template:
EVENT=<EVENT_TYPE> [CONDITIONS] <whatever command you like>
The commands will execute with the current directory set to the problem
directory (e.g: /var/spool/abrt/ccpp-2012-05-17-14:55:15-31664
)
If you need to collect the data at the time of the crash you need to
create a hook that will be run as a post-create
event.
WARNING: post-create events are run with root privileges!
This sample hook will save the time to the file dateofcrash
at the
time when the crash is detected by ABRT:
EVENT=post-create component=binutils date > dateofcrash
A more realistic example: save the smart
data when one of tools from
udisks
crashes:
EVENT=post-create component=udisks which skdump >/dev/null 2>&1 || exit 0 for f in /dev/[sh]d[a-z]; do test -e "$f" || continue skdump "$f" echo done >smart_data
If you want to collect the data at the time when the problem is being
reported, then you need to use a collect_
event type. Example:
EVENT=collect_syslog executable=`cat executable` && base_executable=${executable##*/} && grep -F -e "$base_executable" /var/log/messages | tail -999 >syslog
To make sure abrt is able to handle the crash of your application and generate backtraces correctly, you can try to crash it by sending it a SIGSEGV signal (only in case of C/C++ application):
kill -SIGSEGV $( pidof yourapp )
Abrt should catch the crash and produce a problem directory correctly. It should be possible to report the crash to ABRT Analytics and bugzilla.
ABRT allows package maintainers to override default Bugzilla bug formatting for their packages by providing a component specific template file for abrt. The file must be structured according to :ref:`bz-plugin-configuration` and must be stored in
/etc/libreport/plugins/bugzilla_format_$component.conf
for initial bug formatting and/etc/libreport/plugins/bugzilla_formatdup_$component.conf
for additional bug comments
Template files references ABRT problem elements listed on :ref:`elements` page.
Bugzilla reporter plugin accepts the -F
option (default:
/etc/libreport/plugins/bugzilla_format.conf
), which allows user to modify
the contents of the newly created bugs. Lines in this file have the following
format:
# comment %summary:: summary format section:: element1[,element2]... the literal text line to be added to Bugzilla comment. Can be empty.
Summary format is a line of text, where %element%
is replaced by text
element's content, and [[...%element%...]]
block is used only if
%element%
exists. [[...]]
blocks can nest.
Sections can be:
%attach::
a list of elements to attach.- text, double colon (
::
) and a list of comma-separated elements.
Elements can be:
problem directory element names, which get formatted as
<element_name>: <contents>
or
<element_name>: :<contents> :<contents> :<contents>
problem directory element names prefixed by
%bare_
, which is formatted as-is, without<element_name>:
and starting colons%oneline
,%multiline
,%text
wildcards, which select all corresponding elements for output or attachment%binary
wildcard, valid only for%attach
section, instructs to attach binary elementsproblem directory element names prefixed by "-", which excludes given element from all wildcards
Nonexistent elements are silently ignored. If none of elements exists, the section will not be created.
Example:
%summary:: [abrt] %package%[[: %reason%]] This bug was automatically created by ABRT. Description of problem:: %bare_comment Version-Release number of selected component:: %bare_package Additional info:: \ -analyzer,-count,-duphash,-uuid,-abrt_version,\ -username,-hostname,\ %oneline Bogosection:: nonexistent_element_name Backtrace:: %bare_backtrace %attach:: -comment,-reason,-reported_to,-event_log,%multiline,coredump
Note that empty lines are significant. In the above example, there is no empty line between Version-Release number of selected component and Additional info sections, which will result in these two sections having no empty line between them in newly created bug's description too.
- Initial bug formatting: https://github.com/abrt/libreport/blob/master/src/plugins/bugzilla_format.conf
- Additional bug comments formatting: https://github.com/abrt/libreport/blob/master/src/plugins/bugzilla_formatdup.conf