- předchozí článek - následující článek - obsah - úvodní stránka - | - předchozí část - následující část - první část - |
Linuxové noviny | 11-12/98 | ||
| |||
MakraV předchozích částech tohoto seriálu jsme viděli v činnosti některá makra (například %setup nebo %patch v sekci %prep). Nyní se na problematiku maker zaměříme detailněji.
Makro %setup a jeho možnostiToto makro má (jak víme) za úkol vzít zdrojový archív a rozbalit jej v adresáři BUILD. Předpokládá se, že vznikne adresář balík-verze, ve kterém budou všechny potřebné soubory. Ale co když zdrojový archív obsahuje jiný horní (top-level) adresář nebo se dokonce rozbaluje přímo do pracovního adresáře? Co dělat, pokud máme více zdrojových archívů (například X Window System má tři)?
PříkladMáme-li dva zdrojové archívy, můžeme mít ve spec-souboru například toto:
... Source0: balík-1.0.tar.gz Source1: balík-fonts-1.0.tar.gz ... %prep %setup %setup -T -D -a 1 ...
Makro %patch - aplikace záplatMakro %patch akceptuje podobné přepínače, jako program patch. Navíc je zde pouze specifikace toho, který soubor se má použít. Následující dva řádky jsou ekvivalentní a aplikují soubor, uvedený v hlavičce jako Patch2:
%patch2 %patch -P 2 Kromě velkého -P toto makro akceptuje ještě přepínače -s, -E, -pN a -b suffix.
VětveníRPM je ideální nástroj pro generování balíků pro různé architektury a různé operační systémy z jednoho konfiguračního souboru. Svět ale není ideální, a proto je někdy potřeba upravit běh kompilace nebo vlastnosti balíku pro daný systém nebo danou architekturu. V kterémkoli ze skriptů nebo v sekci %files lze říct, že určitá část platí pouze pro některou architekturu nebo operační systém. K tomu lze použít direktivy %ifarch a %ifos (případně %ifnarch a %ifnos), s dalšími direktivami %else a %endif. Význam je intuitivně jasný, proto uvedu jen příklady. V sekci %prep například může být:
... %ifarch alpha sparc64 %patch4 -p1 -b .64-bit %endif ... Podobně je možné v sekci %files zařadit nebo nezařadit určité soubory do distribuce podle konkrétní architektury nebo operačního systému.
Uživatelská makraVe spec-souboru si uživatel může definovat i svá vlastní makra pomocí syntaxe %define makro hodnota. Makro lze použít pomocí znaku procento jedním ze dvou ekvivalentních způsobů:
%makro %{makro} RPM má dvě předdefinovaná makra: %PACKAGE_VERSION a %PACKAGE_RELEASE. Tato makra umožní mít verzi balíku pouze na jednom místě a psát následující text:
... Version: 1.2.26 Source0:\ ftp://.../.../ssh-%{PACKAGE_VERSION}.tar.gz Source1:\ ftp://.../.../ssh-%{PACKAGE_VERSION}.tar.gz.sig ...
Více balíků v jednom souboru?Někdy je vhodné rozdělit soubory, které vzniknou například překompilováním zdrojového tar.gz archívu, do více balíků. Jde-li například o knihovnu, vytvářejí se typicky dva balíky. V jednom z nich je sdílená knihovna plus případná obecná dokumentace, konfigurační soubory a podobně, a ve druhém (obvykle nazvaném knihovna-devel je statická verze knihovny a její hlavičkové soubory). Nebo například u síťové aplikace lze mít zvlášť balík serveru a zvlášť klienta.Systém RPM umožňuje takovéto balíky vytvářet najednou, to jest z jednoho zdrojového archívu a jednoho spec-souboru. Výsledkem je kromě několika binárních RPM souborů jen jeden zdrojový (src.rpm) RPM-soubor. Z jednoho zdrojového RPM souboru lze tedy vytvářet více binárních tzv. sub-balíků (sub-packages). Každý takovýto balík by měl mít ovšem svoji hlavičku (tagy Summary, Group a další). Hlavičku sub-balíku uvedeme do spec-souboru za direktivu %package:
... Name: libpenguin Summary: The Penguin library Group: Penguins/Libraries ... %package devel Group: Development/Penguins Summary: The Static Penguin library\ and its header files ... %package -n penguin-builder Group: Development/Penguins Summary: The Penguin User Interface Builder ... Výsledkem by pak byly balíky libpenguin-verze-release.arch.rpm, libpenguin-devel-verze-release.arch.rpm a penguin-builder-verze-release.arch.rpm. Pokud chceme vytvořit sub-balík s úplně novým názvem (bez prefixu z hlavního balíku), použijeme direktivu %package -n jméno. Každý sub-balík musí mít svůj tag Group a Summary. Ostatní tagy lze zdědit z hlavního balíku. Kromě toho musí být pro každý sub-balík uvedena sekce %description (uvádí se se stejným argumentem jako direktiva %package, včetně flagu -n):
%description devel ... %description -n penguin-builder Podobně je možné uvádět speciální pre- a post-instalační skripty a spouště pro jednotlivé balíky:
%post -n penguin-builder ... %trigger devel -- penguin-builder ... I sekce %files je pak rozdělena na část hlavního balíku a část sub-balíků. Pokud sekci %files pro daný sub-balík neuvedeme vůbec, RPM daný binární RPM soubor nevytvoří (uvedeme-li sekci %files prázdnou, vytvoří se RPM soubor, který neobsahuje žádné soubory, jen hlavičku a případné skripty). Takže umístíme-li tuto sekci do větvení, můžeme sub-balík vytvářet jen pro některé architektury:
%ifarch alpha %files alpha-fix /usr/bin/foobar-alpha-fix %doc README-alpha-fix %endif
ZávěrTím končí seriál o RedHat Package Manageru, systému RPM. Snažil jsem se v tomto seriálu se aspoň dotknout každé problematiky, která se týká používání tohoto systému a tvorby balíků v něm. Podrobnější informace o RPM lze nalézt v knize Maximum RPM, na WWW stránkách RPM http://www.rpm.org nebo v diskusním listu, zaměřeném na systém RPM rpm-list@redhat.com. Archív listu je dostupný na adrese http://archive.redhat.com/rpm-list/. |
- předchozí část - následující část - první část - | - předchozí článek - následující článek - obsah - úvodní stránka - |