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 00:22 | Komunita

    Vyjádřeni Software Freedom Conservancy (SFC) k porušování licence AGPLv3 společností Bambu Lab v jejich softwaru Bambu Studio pro 3D tisk. Bambu Studio vychází z PrusaSliceru. Ten zase z Slic3ru. Spuštěn byl projekt baltobu, který kombinuje několik strategií pro řešení problému. SFC zastřeší vývoj svobodné náhrady proprietární knihovny libbambu_networking pomocí reverzního inženýrství a reimplementace, forku OrcaSliceru pro Bambu Lab tiskárny od Paweła Jarczaka a forku celého Bambu Studia pod názvem Viscose.

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

    Správce souborů GNOME Commander (Wikipedie) byl přepsán do Rustu a vydán v nové verzi 2.0.0.

    Ladislav Hagara | Komentářů: 0
    včera 19:44 | Nová verze

    Sway (Wikipedie), dlaždicový (tiling) správce oken pro Wayland kompatibilní s i3, byl vydán ve verzi 1.12. Do vývoje se zapojilo 50 vývojářů. Přehled novinek na GitHubu. Sway 1.12 závisí na wlroots 0.20.0.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | IT novinky

    Papež Lev XIV. ve své první encyklice Magnifica Humanitas (Skvělé lidství), která se věnuje umělé inteligenci (AI), varoval před dezinformacemi, které AI manipulací s obsahem vytváří. Moc mají podle něj sociální sítě ovládané hrstkou soukromníků. Upozornil také roli digitálních platforem v obchodování s lidmi, které podle něj musí být uznáno jako současná forma otroctví. Papež se také poprvé omluvil za roli, kterou Vatikán sehrál při legitimizaci otroctví, a za to, že jej po staletí neodsoudil.

    Ladislav Hagara | Komentářů: 0
    včera 16:11 | IT novinky

    Český telekomunikační úřad zveřejnil Výroční zprávu za rok 2025 (pdf), která shrnuje jeho hlavní aktivity v oblasti regulace elektronických komunikací, poštovních služeb, digitálních služeb a přípravy na dohled nad umělou inteligencí. Součástí zprávy jsou také data o vývoji trhu, včetně pokračujícího růstu spotřeby mobilních dat a rozšiřování sítí nové generace. Celkový objem přenesených mobilních dat dosáhl v roce 2025 přibližně

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

    Tým sdružení CZ.NIC vyvíjející routovacího daemona BIRD oznámil vydání nových verzí 3.3.0 a 2.19.0. Ty přinášejí podporu pro EVPN/VXLAN a automatizaci BGP na základě router advertisementů. Více informací je k dispozici v archivu uživatelského mailing-listu.

    VSladek | Komentářů: 0
    24.5. 04:33 | Nová verze

    Open source software pro úpravu digitálních fotografií LightZone (Wikipedie) byl vydán v nové verzi 5.0.0. LightZone je dnes k dispozici pod licencí BSD. Původně se jednalo o proprietární software vyvíjený společností Light Crafts. Ta v prosinci 2012 souhlasila s uvolněním zdrojových kódů jako open source [Wayback Machine].

    Ladislav Hagara | Komentářů: 0
    23.5. 17:22 | Nová verze

    Byla vydána verze 0.84 telnet a ssh klienta PuTTY (Wikipedie). Podrobnosti v přehledu nových vlastností a oprav chyb a Change Logu.

    Ladislav Hagara | Komentářů: 2
    22.5. 19:44 | IT novinky

    Microsoft představil Azure Linux 4.0 a Azure Container Linux. Na konferenci Open Source Summit North America 2026 organizované konsorciem Linux Foundation a sponzorované také Microsoftem. Azure Linux 4.0 vychází z Fedora Linuxu. Azure Container Linux je založen na projektu Flatcar. Azure Linux (GitHub, Wikipedie) byl původně znám jako CBL-Mariner.

    Ladislav Hagara | Komentářů: 0
    22.5. 12:22 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 165 (pdf).

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (12%)
     (8%)
     (2%)
     (14%)
     (31%)
     (4%)
     (6%)
     (3%)
     (16%)
     (26%)
    Celkem 1711 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

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

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

    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: Útoky se skrývají ve virtuálních strojích. Firmy je často vůbec nevidí
    Bezkontaktní housing ve dvou pražských datacentrech
    Týden na ScienceMag.cz: Když se voda vaří a mrzne zároveň

    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.