abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 5
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 10
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 1
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

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

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

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

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

    Ladislav Hagara | Komentářů: 0
    včera 04:11 | Nová verze

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    24.4. 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 13
    24.4. 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (73%)
     (9%)
     (2%)
     (16%)
    Celkem 779 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

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

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

    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

    Jaderné noviny – přehled za březen 2024
    Týden na ScienceMag.cz: Přišli s novým nápadem, jak poznat, zda text napsala umělá inteligence
    Týden na ITBiz: Efektivní podnikání se bez edge computingu neobejde

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

    Týden na ScienceMag.cz: Přišli s novým nápadem, jak poznat, zda text napsala umělá inteligence
      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.