Základní scénář (přednastavená konfigurace, aktivní po instalaci) vypadá následovně: když se aplikace nestandardně ukončí, v systémové liště se objeví informace o pádu:
Pokud kliknete na tuto ikonku, objeví se okno zobrazující všechny uložené pády, z něhož je možno kliknutím na „report“ nahlásit chybu do Bugzilly.
Hlášení chyby obsahuje backtrace, tedy informace, v které části programu k pádu došlo.
Takže máme za sebou jednoduchý popis standardní konfigurace a můžeme se podívat „pod kapotu“, co dalšího tento nástroj umí:
Abrt „odchytává“ pády, čili nestandardní ukončení, aplikací. V okamžiku pádu se probudí ABRT daemon… a něco provede. Takto obecně jsem to napsal proto, že co se konkrétně provede, závisí na konfiguraci v souboru abrt.conf
a v konfiguraci jednotlivých pluginů.
V „centrálním“ konfiguračním souboru se specifikuje, které z pluginů a v jakém případě se spustí. Základní rozlišení je na kompilované programy (napsané v C/C++) a programy v Pythonu. Díky modulární architektuře „analyzerů“ bude tento seznam rozšířen třeba i na Javu nebo další typy programů. Dále je možno specifikovat konkrétní balík: které pluginy spustit (a s jakými parametry) v okamžiku, kdy program z daného balíku spadne. Dále je zde sekce [cron]
, kde můžete naplánovat spuštění nějakého pluginu v konkrétním čase či časovém intervalu.
Nyní již přistoupíme ke konkrétnímu popisu pluginů:
- Bugzilla plugin jste již viděli: specifikujete mu přihlašovací údaje do Bugzilly a on pro daný balíček vyplní bug report.
- podobný je Kerneloops plugin, který vyplní chybovou zprávu v kerneloops trackeru.
- Logger loguje data o pádu do souboru.
- Mailx plugin pošle mail (se zadaným předmětem a adresou), pokud je spuštěn.
- FileTransfer plugin pošle data o pádu po síti (FTP, SCP a tak dále) na jiný počítač.
- nejobecnější RunApp plugin spustí libovolnou externí aplikaci, lze specifikovat příkazový řádek a výstup do souboru.
- je možno vytvářet vlastní pluginy, viz soubor
PLUGINS-HOWTO
v balíku ABRT.
Možná vás při popisu Bugzilla pluginu napadlo, co se stane, když jeden a tentýž program spadne stejným způsobem znovu: bude se generovat pokaždé nové hlášení o chybě? Bohudík nebude: ABRT vždy u chyby spočítá její hash a poté porovnává tento hash s předchozími položkami v databázi: chyba se pak neukládá dvakrát znovu.
Stejně tak pokud je položka s daným hashem v Bugzille již vyplněna (hash píšeme na Bugzilla whiteboard), místo nového nahlášení chyby se pouze přidá komentář „+1“.
Další netriviální věcí, na niž je třeba dát pozor, jsou „konkurenční“ odchytávače chyb, například BugBuddy pro GNOME aplikace: věc se má tak, že pokud jsou aktivní, tak se „ke slovu“ dostanou dříve než ABRT. To je spíše vlastnost než chyba, protože tyto aplikace mohou nahlásit detailnější informace o chybě „svých“ programů. Pokud je vypneme, přijde ke slovu – jako záchranná síť o patro níž – ABRT.
Zmiňme ještě fakt, že ABRT se „stará“ pouze o balíčky: pokud máte v systému nějaký program zkompilovaný „na divoko“ přímo ze zdrojových kódů, ABRT od něj dá ruce pryč. Opět nejde o chybu, ale o vlastnost: takový program by se těžko reportoval do Bugzilly dané distribuce…
Instalace
V distribuci Fedora 11 je ABRT již přítomen v repositářích, stačí zadat
$ yum install abrt-desktop
a máte základní nastavení,
$ yum install abrt*
pro všechny pluginy. K dispozici jsou i manuálové stránky s podrobnější dokumentací.
Pokud chcete sledovat nejnovější vývoj, zdrojové kódy jsou k dispozici v GIT repositáři:
$ git clone git://git.fedorahosted.org/git/abrt.git
Ještě bych rád uvedl nějaký příklad konfigurace /etc/abrt/abrt.conf
, abyste viděli, jak nastavení „vypadají“:
[common] Blacklist=firefox EnabledPlugins=SQLite3,CCpp,Logger,Bugzilla,Python,Mailx,KerneloopsScanner [AnalyzersActionsAndReporters] CCpp = Bugzilla CCpp:httpd = Mailx("[abrt] Apache crashed") [cron] 10 = KerneloopsScanner
Popis konfigurace řádek po řádku:
- pády Firefoxu ignorujeme.
- další řádek obsahuje všechny „povolené“ pluginy (ty, které ABRT při startu načte).
- při pádu v kompilované aplikaci se spustí Bugzilla plugin.
- při pádu v balíku httpd se pošle mail na adresu. definovanou v konfiguračním souboru Mailx pluginu.
- každých deset sekund se zjišťuje, zda proběhl nějaký kernel oops.
Na závěr vám přejeme, ať vaše aplikace padají co nejméně, k čemuž snad přispěje i nahlášení chyb tímto novým, automatizovaným způsobem.