abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:11 | Bezpečnostní upozornění

    Red Hat řeší bezpečnostní incident, při kterém došlo k neoprávněnému přístupu do GitLab instance používané svým konzultačním týmem.

    Ladislav Hagara | Komentářů: 0
    včera 23:33 | Nová verze

    Immich byl vydán v první stabilní verzi 2.0.0 (YouTube). Jedná se o alternativu k výchozím aplikacím od Googlu a Applu pro správu fotografií a videí umožňující vlastní hosting serveru Immich. K vyzkoušení je demo. Immich je součástí balíčků open source aplikací FUTO. Zdrojové kódy jsou k dispozici na GitHubu pod licencí AGPL-3.0.

    Ladislav Hagara | Komentářů: 1
    včera 22:33 | IT novinky

    Český telekomunikační úřad vydal zprávy o vývoji cen a trhu elektronických komunikací se zaměřením na rok 2024. Jaká jsou hlavní zjištění? V roce 2024 bylo v ČR v rámci služeb přístupu k internetu v pevném místě přeneseno v průměru téměř 366 GB dat na jednu aktivní přípojku měsíčně – celkově jich tak uživateli bylo přeneseno přes 18 EB (Exabyte). Nejvyužívanějším způsobem přístupu k internetu v pevném místě zůstal v roce 2024 bezdrátový

    … více »
    Ladislav Hagara | Komentářů: 0
    včera 12:11 | Nová verze

    Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-10-01. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Jedná o první verzi postavenou na Debianu 13 Trixie.

    Ladislav Hagara | Komentářů: 0
    včera 05:22 | Nová verze

    Byla vydána nová verze 4.6 svobodného notačního programu MuseScore Studio (Wikipedie). Představení novinek v oznámení v diskusním fóru a také na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 02:22 | Komunita

    Společnost DuckDuckGo stojící za stejnojmenným vyhledávačem věnovala 1,1 milionu dolarů (stejně jako loni) na podporu digitálních práv, online soukromí a lepšího internetového ekosystému. Rozdělila je mezi 29 organizací a projektů. Za 15 let rozdala 8 050 000 dolarů.

    Ladislav Hagara | Komentářů: 4
    1.10. 20:11 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.17. Díky 278 přispěvatelům.

    Ladislav Hagara | Komentářů: 0
    1.10. 16:11 | Nová verze

    Bylo vydáno openSUSE Leap 16 (cs). Ve výchozím nastavení přichází s vypnutou 32bitovou (ia32) podporou. Uživatelům však poskytuje možnost ji ručně povolit a užívat si tak hraní her ve Steamu, který stále závisí na 32bitových knihovnách. Změnily se požadavky na hardware. Leap 16 nyní vyžaduje jako minimální úroveň architektury procesoru x86-64-v2, což obecně znamená procesory zakoupené v roce 2008 nebo později. Uživatelé se starším hardwarem mohou migrovat na Slowroll nebo Tumbleweed.

    Ladislav Hagara | Komentářů: 3
    1.10. 16:00 | IT novinky

    Ministerstvo průmyslu a obchodu (MPO) ve spolupráci s Národní rozvojovou investiční (NRI) připravuje nový investiční nástroj zaměřený na podporu špičkových technologií – DeepTech fond. Jeho cílem je posílit inovační ekosystém české ekonomiky, rozvíjet projekty s vysokou přidanou hodnotou, podpořit vznik nových technologických lídrů a postupně zařadit Českou republiku mezi země s nejvyspělejší technologickou základnou.

    … více »
    Ladislav Hagara | Komentářů: 3
    1.10. 12:55 | Nová verze

    Radicle byl vydán ve verzi 1.5.0 s kódovým jménem Hibiscus. Jedná se o distribuovanou alternativu k softwarům pro spolupráci jako např. GitLab.

    Ladislav Hagara | Komentářů: 3
    Jaké řešení používáte k vývoji / práci?
     (40%)
     (47%)
     (14%)
     (16%)
     (17%)
     (14%)
     (17%)
     (14%)
     (14%)
    Celkem 161 hlasů
     Komentářů: 11, poslední dnes 07:30
    Rozcestník

    Gentoo ebuild - 4 (hlášky, ošetřování chyb, podmínky)

    26. 3. 2007 | David Watzke | Návody | 4273×

    Prvky podmíněné USE flagy, informační, varovné a chybové hlášky, ošetřování chyb.

    Hlášky

    Občas je třeba uživatelům zobrazit různé hlášky, např. chyby, tipy, varování, informace o tom, co se zrovna děje atp. Vhodné je například informovat uživatele o tom, že se spustila nějaká úloha, která může trvat hodně dlouho, a v průběhu nic nevypisuje (omezí se tím hlášení chyb v bugzille typu "kompilace balíčku zamrzla!").

    Ve všech případech předpokládejte, že uživatel nemá terminál širší než 79 znaků (s tím, že funkce elog, einfo, einfon, ewarn, eerror zabírají samy o sobě 4 znaky svými barevnými hvězdičkami).

    Informační hlášky

    Existuje několik pomocných funkcí. Interní příkaz bashe echo je nejjednodušší – vypíše jen to, co mu zadáte.

    Funkce elog je určená k zobrazení informativní hlášky, která se zároveň s Portage 2.1 a Paludius 0.6 a novějšími zaloguje (pokud je logování povolené). Ve starších verzích se elog chová stejně jako einfo. Na barevném terminálu se hlášky zobrazí se zelenou hvězdičkou na začátku.

    elog "After a rebuild of Qt, it can happen that Qt plugins (such as Qt/KDE styles,"
    elog "or widgets for the Qt designer) are no longer recognized.  If this situation"
    elog "occurs you should recompile the packages providing these plugins,"
    elog "and you should also make sure that Qt and its plugins were compiled with the"
    elog "same version of gcc.  Packages that may need to be rebuilt are, for instance,"
    elog "kde-base/kdelibs, kde-base/kdeartwork and kde-base/kdeartwork-styles."
    elog "See http://doc.trolltech.com/3.3/plugins-howto.html for more infos."

    Funkce einfo je určená k zobrazení informativní hlášky. Na barevném terminálu se hlášky zobrazí se zelenou hvězdičkou na začátku. Tyto hlášky používají elog třídu INFO, která se ve výchozím nastavení neloguje.

    einfo "Visit http://www.gentoo.org/doc/en/index.xml?catid=desktop"
    einfo "for more information on configuring X."

    Funkce einfon je einfo s tím rozdílem, že za hláškou neodřádkuje.

    Varovné hlášky

    Funkce ewarn je podobná einfo, ale na barevném terminálu zobrazí žlutou hvězdičku.

    ewarn "In XScreenSaver 5.00 API was changed. All third party screen savers"
    ewarn "need to be ported to the new API. Until then they will not work."

    Chybové hlášky

    Pro vypsání podrobností o chybách se používá funkce eerror, která na barevném terminálu zobrazí pro změnu červenou hvězdičku. Ve většině případů by měla být následována funkcí die (vizte níže).

    Důležité hlášky

    Pro opravdu důležité hlášky obsahuje eutils.eclass zvláštní funkce.

    Funkce ebeep několikrát zapípá a pak pár sekund čeká, aby si uživatel mohl přečíst hlášky. Bere jeden nepovinný celočíselný argument, kterým se nastaví, kolikrát má zapípat. Bez něj pípá 5×.

    Funkce epause bere jeden nepovinný celočíselný argument, kterým se udává, jak dlouho bude čekat (sleep). Bez něj čeká 5 sekund.

    Tyto funkce používejte opravdu pouze ve výjimečných případech, kdy je hláška velmi důležitá.

    Obojí si může uživatel zakázat, stačí v /etc/make.conf nastavit proměnným Portage ${EBEEP_IGNORE} a ${EPAUSE_IGNORE} libovolnou hodnotu. Nikdy se nepokoušejte obcházet uživatelské nastavení.

    Dobré a špatné hlášky

    Zde je ukázka typicky špatné hlášky:

    i=10
    while ((i--)); do
    	ewarn "PLEASE UPDATE TO YOUR PACKAGE TO USE linux-info.eclass"
    done

    • Zobrazování hlášky vícekrát je zbytečné.
    • Používání velkých písmen je zbytečné (a otravné).
    • Špatná angličtina vypadá neprofesionálně.
    • Hláška koncové uživatele pouze zmate a nijak jim nepomůže.

    Ukázka dobré hlášky:

    ewarn "The 'frozbinate' function provided by eutils.eclass is deprecated"
    ewarn "in favour of frozbinate.eclass, but this package has not been"
    ewarn "updated yet. If this is a package from the main tree, please check"
    ewarn "http://bugs.gentoo.org/ and file a bug if there is not one already."
    ewarn "If this is your own package, please read the comments in the"
    ewarn "frozbinate eclass for instructions on how to convert."

    Ošetřování chyb

    Ošetřování chyb je důležité hned z několika důvodů:

    • Chyby musí být zjištěny před tím, než Portage nainstaluje zničený nebo nekompletní balíček do systému. Pokud se neodchytí chyba při sestavování, může být odstraněna fungující verze balíčku, která bude nahrazena doslova ničím.
    • Při procházení nahlášených chyb je pak mnohem jednodušší zjistit, kde je problém, když vývojář ví, kde přesně problém nastal, místo toho, aby jen věděl, že je to např. někde v src_compile().
    • Dobré ošetření chyb může pomoci k omezení duplikátních záznamů pro daný balíček v bugzille.

    Funkce die()

    Tato funkce se používá pro oznámení fatální chyby a zrušení sestavování. Jejím argumentem by měla být stručná chybová hláška – stručná v tom smyslu, že musí sdělovat pouze co se stalo, na případné informace se ještě před voláním die používá výše zmíněná funkce eerror.

    Přestože die funguje i bez parametrů, stručný popis by měla pro snadné rozpoznání chyby obsahovat vždy. To je obzvláště důležité, když se v jedné funkci může spustit na více místech.

    Některé funkce Portage při chybě automaticky volají die, jiné zase ne. Bezpečné je vynechat || die za voláním funkce epatch, ale ne u econf nebo emake.

    die() a subshelly

    Varování: die nefunguje v subshellu!

    Následující kód nebude fungovat tak, jak by se dalo očekávat, protože die je v subshellu.

    [[ -f foorc ]] && ( update_foorc || die "Couldn't update foorc!" )

    Je třeba jej přepsat tak, aby používal podmínku if:

    if [[ -f foorc ]]; then
    	update_foorc || die "Couldn't update foorc!"
    fi

    Když používáte roury, opět se zavede subshell, takže následující zápis není bezpečný.

    cat list | while read file; do epatch "${file}"; done

    Tento problém řeší přesměrování vstupu. Navíc se zbavíme zbytečného catu, který lidé tak rádi naprosto zbytečně používají.

    while read file; do epatch "${file}"; done < list

    Funkce assert a proměnná ${PIPESTATUS}

    Jednoduché podmínky a kontroly $? rozpoznají případné chyby při použití rour pouze v posledním příkazu v řetězci. To se dá obejít kontrolou proměnné ${PIPESTATUS}, kterou poskytuje bash. Portage obsahuje funkci assert, která tuto proměnnou automaticky zkontroluje.

    bunzip2 "${DISTDIR}/${VIM_RUNTIME_SNAP}" | tar xf
    assert

    Pro podrobnosti o proměnné ${PIPESTATUS} vizte bash(1). Pro většinu případů vám postačí assert.

    Prvky podmíněné USE flagy

    Často je třeba podmínit určité akce v ebuildu USE flagy. Například když se zdrojový kód na nějaké architektuře nezkompiluje s určitým GCC flagem, bylo by zbytečné takový flag zakazovat pro všechny architektury (mimochodem, USE flagy architektur se nemusíte zabývat, automaticky se aktivují v závislosti na použitém profilu). Nebo když potřebujete zakázat „napevno“ povolenou podporu pro OGG, aplikujete patch pro její zakázání pouze v případě, že je USE flag ogg neaktivní. Proto existují tyto podmínky.

    Zdrojové soubory

    Jak jsem psal v prvním díle, ${SRC_URI} je proměnná, do které se zadávají adresy zdrojových souborů, jež budou staženy. Občas je třeba stáhnout nějaký soubor pouze je-li aktivní určitý USE flag. V následující ukázce se první soubor stáhne vždy a druhý jen tehdy, když je aktivní gtk USE flag.

    SRC_URI="http://www.website.wtf/files/${P}.tar.gz
    	gtk? ( ftp://ftp.website.wtf/pub/${PN}/gtk-gui-1.2.tar.bz2 )"

    Lze použít samozřejmě i složitější podmínky. Kupříkladu chcete-li stáhnout soubory, pouze je-li aktivní USE mplayer a navíc neaktivní USE sparc, protože na SPARC architektuře se kód třeba nesestaví, pak v ${SRC_URI} použijete toto:

    mplayer? ( !sparc? ( http://www.gentoo.rox/${PN}/{P}.tar.bz2
                         http://www.gentoo.rox/${PN}/{P}-patches-${PATCH_VER}.tar.bz2 ) )
    Na SPARCu se pak soubor v ${A} neobjeví, ani když je aktivní USE mplayer, takže nemusíte podmiňovat rozbalování, ale pouze kompilaci (či jiné zpracování) a instalaci dané části.

    Závislosti

    Se závislostmi je to podobné jako se zdrojovými soubory. Na této ukázce balíček závisí ve všech případech na app-arch/unzip, ostatní závislosti platí, pouze je-li aktivní USE flag, který je před jejich závorkou.

    DEPEND="app-arch/unzip
    	doc? ( >=app-text/docbook-sgml-dtd-4.1.2
    	       app-text/docbook-xml-dtd
    	       >=app-text/docbook-xml-simple-dtd-1.50.0
    	       dev-libs/libxslt )
    	dga? ( x11-proto/xf86dgaproto )
    	xinerama? ( x11-proto/xineramaproto )
    	xv? ( x11-proto/videoproto
    	      x11-proto/xf86vidmodeproto )
    	gtk? ( x11-proto/xextproto
    	       x11-proto/xf86vidmodeproto )
    	X? ( x11-proto/xextproto
    	     x11-proto/xf86vidmodeproto )
    	iconv? ( virtual/libiconv )"

    Příkazy

    Často je třeba spustit nějaké příkazy, pouze když je (ne)aktivní nějaký USE flag. Pro větší kusy kódu je nejlepší použít podmínku if use flag, případně if ! use flag nebo if use !flag, chcete-li spustit příkazy, když je USE neaktivní. Pro spuštění jednoho příkazu můžete použít use flag && příkaz (nebo use flag || příkaz), protože je to často čitelnější.

    Zápisy if [ "`use flag`" ] a if [ -n "`use flag`" ], které lze příležitostně nalézt ve starším kódu, se nesmí používat. Pokud skutečně potřebujete zobrazit výstup, jako tomu bylo dříve, použijte funkci usev. Funkce useq se v současnosti chová jako use a je dostupná naopak pro explicitní zakázání výstupu.

    Nepoužívejte zápis use flag && ( příkaz1 ; příkaz2 ). Důvod vizte o kousek výše pod nadpisem „die() a subshelly“.

    if use minimal; then
    	rm -rf "${D}"/usr/share/doc/${PF}/{pdf,html}
    	rm -rf "${D}"/usr/$(get_libdir)/${PN}/{tcl,lua,perl,python,ruby}
    fi
    
    
    if ! use cscope; then
    	# the --disable-cscope configure arg doesn't quite work properly,
    	# so sed it out of feature.h if we're not USEing cscope.
    	sed -i -e '/# define FEAT_CSCOPE/d' src/feature.h || die "couldn't disable cscope"
    fi
    
    use ssl && epatch "${FILESDIR}/${P}-ssl.patch"
    use sparc && filter-flags -fomit-frame-pointer
    
    use ncurses || epatch "${FILESDIR}/${P}-no-ncurses.patch"

    Pro vypsání nějakých informací založených na USE flagu existuje většinou nějaká pomocná funkce. Například use_with a use_enable se vám budou často hodit při spouštění econf. Vysvětlím na komentované ukázce. Předpokládejme, že máme nastavené USE="gtk mad -aac -theora".

    econf \
    	$(use_enable gtk gtk2) \ # vypíše --enable-gtk2
    	$(use_enable theora) \	 # vypíše --disable-theora
    	$(use_with mad) \	 # vypíše --with-mad
    	$(use_with aac faac)	 # vypíše --without-faac

    Příště

    Pátý díl bude o běžných problémech, sandboxu a kontrolních součtech.

           

    Hodnocení: 88 %

            špatnédobré        

    Nástroje: Tisk bez diskuse

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    26.3.2007 11:19 finn | skóre: 43 | blog: finnlandia | 49° 44´/13° 22´
    Rozbalit Rozbalit vše Re: Gentoo ebuild - 4 (hlášky, ošetřování chyb, podmínky)
    …funkce (…) zabírají samy o sobě…
    Užívej dne – možná je tvůj poslední.
    26.3.2007 13:03 Robert Krátký | skóre: 94 | blog: Robertův bloček
    Rozbalit Rozbalit vše Re: Gentoo ebuild - 4 (hlášky, ošetřování chyb, podmínky)
    oops
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.