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