Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie).
V programovacím jazyce Go naprogramovaná webová aplikace pro spolupráci na zdrojových kódech pomocí gitu Forgejo byla vydána ve verzi 12.0 (Mastodon). Forgejo je fork Gitei.
Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 155 (pdf) a Hello World 27 (pdf).
Hyprland, tj. kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, byl vydán ve verzi 0.50.0. Podrobný přehled novinek na GitHubu.
Patrick Volkerding oznámil před dvaatřiceti lety vydání Slackware Linuxu 1.00. Slackware Linux byl tenkrát k dispozici na 3,5 palcových disketách. Základní systém byl na 13 disketách. Kdo chtěl grafiku, potřeboval dalších 11 disket. Slackware Linux 1.00 byl postaven na Linuxu .99pl11 Alpha, libc 4.4.1, g++ 2.4.5 a XFree86 1.3.
Ministerstvo pro místní rozvoj (MMR) jako první orgán státní správy v Česku spustilo takzvaný „bug bounty“ program pro odhalování bezpečnostních rizik a zranitelných míst ve svých informačních systémech. Za nalezení kritické zranitelnosti nabízí veřejnosti odměnu 1000 eur, v případě vysoké závažnosti je to 500 eur. Program se inspiruje přístupy běžnými v komerčním sektoru nebo ve veřejné sféře v zahraničí.
Vláda dne 16. července 2025 schválila návrh nového jednotného vizuálního stylu státní správy. Vytvořilo jej na základě veřejné soutěže studio Najbrt. Náklady na přípravu návrhu a metodiky činily tři miliony korun. Modernizovaný dvouocasý lev vychází z malého státního znaku. Vizuální styl doprovází originální písmo Czechia Sans.
Vyhledávač DuckDuckGo je podle webu DownDetector od 2:15 SELČ nedostupný. Opět fungovat začal na několik minut zhruba v 15:15. Další služby nesouvisející přímo s vyhledáváním, jako mapy a AI asistent jsou dostupné. Pro některé dotazy během výpadku stále funguje zobrazování například textu z Wikipedie.
Více než 600 aplikací postavených na PHP frameworku Laravel je zranitelných vůči vzdálenému spuštění libovolného kódu. Útočníci mohou zneužít veřejně uniklé konfigurační klíče APP_KEY (např. z GitHubu). Z více než 260 000 APP_KEY získaných z GitHubu bylo ověřeno, že přes 600 aplikací je zranitelných. Zhruba 63 % úniků pochází z .env souborů, které často obsahují i další citlivé údaje (např. přístupové údaje k databázím nebo cloudovým službám).
Open source modální textový editor Helix, inspirovaný editory Vim, Neovim či Kakoune, byl vydán ve verzi 25.07. Přehled novinek se záznamy terminálových sezení v asciinema v oznámení na webu. Detailně v CHANGELOGu na GitHubu.
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).
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.
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."
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).
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í.
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
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 je důležité hned z několika důvodů:
src_compile()
.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 subshellyVarová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 cat
u, který lidé tak rádi naprosto zbytečně používají.
while read file; do epatch "${file}"; done < list
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
.
Č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.
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.
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 )"
Č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ý díl bude o běžných problémech, sandboxu a kontrolních součtech.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej: