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í
×
    včera 14:00 | Zajímavý článek

    Byl publikován aktuální přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie).

    Ladislav Hagara | Komentářů: 0
    včera 12:00 | Nová verze

    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.

    Ladislav Hagara | Komentářů: 0
    17.7. 18:44 | Zajímavý článek

    Nová čísla časopisů od nakladatelství Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 155 (pdf) a Hello World 27 (pdf).

    Ladislav Hagara | Komentářů: 1
    17.7. 16:11 | Nová verze

    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.

    Ladislav Hagara | Komentářů: 2
    17.7. 15:55 | Komunita

    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.

    Ladislav Hagara | Komentářů: 5
    16.7. 21:22 | IT novinky

    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čí.

    Ladislav Hagara | Komentářů: 19
    16.7. 16:22 | IT novinky

    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.

    Ladislav Hagara | Komentářů: 26
    16.7. 15:33 | Upozornění

    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 mapyAI asistent jsou dostupné. Pro některé dotazy během výpadku stále funguje zobrazování například textu z Wikipedie.

    bindiff | Komentářů: 8
    16.7. 13:33 | Bezpečnostní upozornění

    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).

    Ladislav Hagara | Komentářů: 5
    16.7. 00:11 | Nová verze

    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.

    Ladislav Hagara | Komentářů: 0
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (0%)
     (25%)
     (25%)
     (0%)
     (0%)
     (0%)
     (0%)
     (50%)
    Celkem 4 hlasů
     Komentářů: 0
    Rozcestník

    Rukověť baliče RPM - IV (Fáze balení)

    9. 6. 2005 | David Nečas | Návody | 9152×

    Konfigurace zdrojových kódů, kompilace, instalace do pracovního adresáře.

    Fáze balení

    Nic není tak jednoduché, jak to napíši. Zabalení rpm balíčku, jež jsme zatím prováděli celé naráz, se ve skutečnosti skládá z několika fází (packaging stages), které lze spustit i samostatně. A co víc, mají samostatné sekce ve spec souboru. Každá sekce je skript v shellu, který vykoná, cokoli je v dané fázi balení zapotřebí. Sekce trochu připomínají pravidla makefile, na rozdíl od nich však opravdu obsahují skripty, nikoli seznamy příkazů – přejdeme-li např. jedním příkazem do jiného adresáře, bude se následující příkaz spouštět v novém adresáři.

    Jednotlivé fáze lze spouštět pomocí voleb -bněco. Při kompilaci za sebou následují ve stejném pořadí, ve kterém je zde uvádím.

    Sekce %prep-bp

    Přípravná fáze. Rozbalí zdrojový kód, aplikuje patche, případně provede další předkompilační úpravy. V lobster.spec obsahuje jen:

    %prep
    %setup

    %setup je mocné makro, které umí mimo jiné rozbalit zdrojový kód a přejít do vzniklého adresáře, což je vše, co od něj zatím chceme.

    Sekce %build-bc

    Vlastní překlad. Typicky spouští ./configuremake. Shodou okolností máme přesně tohle v lobster.spec:

    %build
    %configure
    make

    Tedy až na to, že namísto ./configure spouštíme %configure, což je opět makro, které mimo jiné přidává ./configure argumenty s cestami (--prefix=… a pod.), aby si program své soubory hledal v /usr namísto implicitního /usr/local.

    Chceme-li přidat ./configure další argumenty, uvedeme je jako argumenty %configure:

    %configure --enable-sandals --without-money

    Sekce %install-bi

    Instalace do dočasného adresáře, tedy do $RPM_BUILD_ROOT. Je to obyčejně tentýž adresář jako BuildRoot, který jsme definovali v hlavičce, ale lze ho při kompilaci změnit volbou --buildroot=adresář nebo definicí makra %buildroot~/.rpmmacros. Instalační sekce typicky spouští make install, ovšem do dočasného adresáře:

    %install
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    make install DESTDIR=$RPM_BUILD_ROOT

    Je tu jedna novinka, a to vymazání adresáře $RPM_BUILD_ROOT, abychom měli jistotu, že bude obsahovat jen to, co do něj teď nainstalujeme. Testování rozumné hodnoty $RPM_BUILD_ROOT je pozůstatek z doby (zhruba RPM 2.0), kdy se při balení instalovalo přímo do /. Dnes už to snad nikdo nedělá a některé manuály výslovně označují testování za zbytečné, na druhé straně jím nelze nic zkazit.

    Kromě změny DESTDIR můžeme použít i standardní makro %makeinstall, které mění nastavení cest prefix=… a pod.

    %install
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    %makeinstall
    

    Změna DESTDIR je modernější, čistší a teoreticky správnější; v praxi to může vypadat různě. Tedy tak, že správně nefunguje ani jedno a musíme patchovat Makefile[.in], aby se program nechal nainstalovat, kam chceme. Důležité je, že míchání obou způsobu je zaručený recept na katastrofu, tudíž musíme jeden zvolit. U programů s vysokým poměrem svéráznosti instalace ku počtu instalovaných souborů se může ukázat jako nejjednodušší neválčit s autorovým Makefile a nainstalovat soubory ručně installem.

    Sekce %check

    Kontrola funkčnosti. Používá se zřídka a obvykle obsahuje make check nebo nějaký jeho ekvivalent. Nelze ji spustit explicitně, spouští se automaticky po instalaci. V lobster.spec jsme %check nepoužili.

    Sekce %clean

    Vymazání dočasného instalačního adresáře. Tuto fázi nelze spustit explicitně, ale provede se automaticky po úspěšném zabalení balíčku. Prakticky vždy obsahuje jediný řádek:

    %clean
    [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
    

    který už známe.

    Sekce %files-bl

    Seznam souborů. Tato sekce neobsahuje skript, ale prostý seznam souborů, které se mají do balíku zahrnout, a jejich vlastnosti. Lze v něm používat žolíky (wildcards). Musí obsahovat všechny soubory, které %install nainstalovalo, a samozřejmě nesmí uvádět žádné, které neexistují. Mohlo by se zdát, že takový seznam je zbytečný, protože by stačilo zabalit celý $RPM_BUILD_ROOT. RPM však umí z jednoho zdrojového rpm vytvořit několik binárních, a pak je takový seznam, určující, co patří kam, nezbytný. Kromě toho v něm můžeme přiřadit souborům různé vlastnosti.

    Práva souborů definujeme pomocí

    %defattr(mód, vlastník, skupina[, mód_adresářů])

    který se vztahuje na následující soubory (do případného dalšího %defattr). Uvedeme-li jako mód pomlčku -, zachová se mód souborů, jak byly nainstalovány; mód adresářů je nepovinný. Deklarace nastavující vlastníka na roota

    %defattr(-,root,root)

    lobster.spec je standardní a měli bychom ji vždy uvádět, jinak by se soubory mohly do rpm zabalit s náhodným vlastníkem – typicky uživatelem, který balíček kompiloval. To je docela zrádné, protože kdo takový zmršený balíček vyrobil, má zrovna nejmenší šanci si toho všimnout – že /usr/bin/lobster vlastní pepa a ne root, nemusí mít na jeho počítači na funkčnost žádný vliv. Zato ostatní, kdo si ho nainstalují, se budou trochu divit. Přinejmenším na Red Hatu by se od verze RPM 4.0.4 měla tato deklarace vkládat automaticky (%files je tiše předefinováno makrem, které navíc vloží %defattr), ale nespoléhal bych na to.

    Chceme-li nastavit atributy jen pro jediný soubor, použijeme %attr. Má stejné argumenty, ale píše se na začátek řádku před název souboru:

    %attr(2755,root,games) %{_bindir}/lobster

    Další přívlastky (tags) jsou už vyloženě rpmoidní. Přívlastek %doc označuje soubor jako dokumentaci (tu lze při instalaci vynechat volbou --excludedocs):

    %doc %{_mandir}/man1/lobster.1*

    A %doc má ještě druhou funkci: uvedeme-li soubor bez cesty (resp. s relativní cestou), vezme se z adresáře se zdrojovým kódem a nainstaluje do adresáře s dokumentací balíčku /usr/share/doc/%{name}-%{version}. Tak snadno doplníme licenci a různé README a ChangeLogy, které make install neinstaluje:

    %doc README COPYING NEWS

    Dokumentace uvedená v %doc se přesněji instaluje do místa určeného makrem %docdir, resp. položkou hlavičky Docdir. To by ovšem měla definovat distribuce a jednotlivé balíčky už by je neměly měnit.

    Další běžný přívlastek je %dir označující adresář. Neuvedeme-li ho u adresáře, znamená to, že do balíčku patří všechno, co adresář obsahuje.

    Přívlastky lze kombinovat, napíšeme jich prostě několik za sebou a oddělíme mezerami:

    %attr(0755,rpm,rpm) %dir /var/lib/rpm

    Všímavějším jistě neuniklo, že se v seznamu souborů objevuje %{_bindir} namísto /usr/bin%{_mandir} namísto /usr/share/man. Ke každému standardnímu adresářovému argumentu ./configure je pro každou distribuci a architekturu definováno odpovídající makro s cestou, jež %configure předává jako argument ./configure. A dále je %makeinstall využívá v argumentech make install. Je proto konzistentní používat je i v seznamu souborů, byť se za normálních okolností jejich hodnoty neliší se od cest, které bychom tam napsali ručně.

    Konkrétně jsou to tato makra:

    Proměnná configureMakro RPM
    ${prefix}%_prefix
    ${exec_prefix}%_exec_prefix
    ${bindir}%_bindir
    ${sbindir}%_sbindir
    ${libexecdir}%_libexecdir
    ${datadir}%_datadir
    ${sysconfdir}%_sysconfdir
    ${sharedstatedir}%_sharedstatedir
    ${localstatedir}%_localstatedir
    ${libdir}%_libdir
    ${includedir}%_includedir
    ${oldincludedir}%_oldincludedir
    ${infodir}%_infodir
    ${mandir}%_mandir

    Spouštění jednotlivých fází

    Napsal jsem, že fáze lze spouštět samostatně, ale nic není tak jednoduché, jak to napíši. Každá z fází -bb, -bi, -bc-bp obsahuje implicitně všechny předchozí. Příkaz rpmbuild -bi lobster.spec proto spustí nejen %install, ale i %prep%build. Spustit opravdu jen %install lze s volbou --short-circuit:

    rpmbuild -bi --short-circuit lobster.spec

    Tato volba je však ignorována u příkazů, které vytvářejí balíček (-bb, -ba, -bs), ty provedou vždy všechny fáze. RPM se nás tím snaží přimět k reprodukovatelným kompilačním postupům, protože je tak o hodně obtížnější provést část kompilace, v čemsi se jaksi povrtat, spustit další kousek, …, tudíž se rozumný člověk raději zaměří na sepsání pořádného spec souboru.

    Volba -bl (kontrola seznamu souborů) je speciální a nespouští předchozí fáze.

    A nakonec zde uvedu ještě volbu --clean, která sice neodpovídá žádné kompilační fázi, ale smaže adresář s rozbaleným zdrojovým kódem v BUILD, což se po kompilaci neděje automaticky (zato to dělá %setup před novou kompilací).

    Nejčtenější články posledního měsíce

    Týden na ITBiz: Nekonečný pracovní den a propouštění lidí ve prospěch AI
    Týden na ScienceMag.cz: Umělá inteligence vtělená do kamene
    Událo se v týdnu 25/2025

    Nejkomentovanější články posledního měsíce

      všechny statistiky »

    Seriál Rukověť baliče RPM (dílů: 15)

    Rukověť baliče RPM - I (Úvod) (první díl)
    <—« Rukověť baliče RPM - III (Struktura spec souboru)
    »—> Rukověť baliče RPM - V (Zdrojové soubory)
    Rukověť baliče RPM 15 - XV (Závěr) (poslední díl)

    Související články

    Rukověť baliče RPM - I (Úvod)
    Rukověť baliče RPM - II (Prostředí)
    Rukověť baliče RPM - III (Struktura spec souboru)
    Rukověť baliče RPM - V (Zdrojové soubory)
    Rukověť baliče RPM - VI (Makro %setup)
    Rukověť baliče RPM - VII (Podepisování, verze)
    Rukověť baliče RPM - VIII (Závislosti)
    Rukověť baliče RPM - IX (Sekce %files)
    Rukověť baliče RPM - X (Skriptíky)
    Rukověť baliče RPM - XI (Architektury. systémy, platformy)
    Rukověť baliče RPM - XII (Makra, úvod)
    Rukověť baliče RPM - XIII (Makra, dokončení)
    Rukověť baliče RPM - XIV (Přizpůsobení)
    Rukověť baliče RPM 15 - XV (Závěr)
    Na co se často ptáme: Balíčkovací systémy kromě posledního odstavce o checkinstallu.
    Nebojíme se kompilace - I (Teorie)
    Nebojíme se kompilace - II (GCC, configure, make, checkinstall) kompilace a instalace software, opět kromě části o checkinstallu.
    Balíčkovací systém Mandrake Linuxu RPM na uživatelské úrovni (a pro Mandrake).

    Odkazy a zdroje

    Doporučené čtení

    Další články z této rubriky

    VDR a DVB-T2, část 2.
    VDR a DVB-T2, část 1.
    Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
    MapTiler – proměňte obrázek v zoomovatelnou mapu
    Syncthing
           

    Hodnocení: 97 %

            š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ář

    Stanislav Brabec avatar 9.6.2005 13:08 Stanislav Brabec | skóre: 45 | Praha
    Rozbalit Rozbalit vše %doc README
    A %doc má ještě druhou funkci: uvedeme-li soubor bez cesty (resp. s relativní cestou), vezme se z adresáře se zdrojovým kódem a nainstaluje do adresáře s dokumentací balíčku /usr/share/doc/%{name}-%{version}.

    Pokud se nemýlím, tak alespoň v SuSE tento zápis ještě smaže to, co tam již bylo. Takže nelze kombinovat zápis s cestou a bez ní. Navíc ta cesta /usr/share/doc/%{name}-%{version} není napevno, ale lze ji měnit přes %{_defaultdocdir} (a SuSE tuto cestu předefinovává na %{_usr}/share/doc/packages).
    9.6.2005 14:35 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: %doc README
    Jo, maže to myslím všude. Pokud do toho adresáře chci strkat něco ručně, tak tam musím dát ručně vše.

    %_defaultdoc dir je výchozí hodnota %_docdir (definice jednoho na druhé je zadrátovaná ve funkci parseSpec(), netuším proč). Obecně bych stejně doporučil se v nich moc nevrtat a instalovat dokumentaci, kam je distro zvyklé.
    xxx avatar 10.6.2005 12:32 xxx | skóre: 42 | blog: Na Kafíčko
    Rozbalit Rozbalit vše %configure --enable-sandals --without-money
    tak tohle nama chybu :)))))))))))
    Please rise for the Futurama theme song.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.