- 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

Tvorba RPM balφk∙ - pokraΦujeme

Jan Kasprzak, 1. listopadu 1998

Makra

V 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╛nosti

Toto 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)?

  • -n adresß° - tφmto p°epφnaΦem makra %setup °φkßme, ╛e hornφ adresß° se jmenuje jinak, ne╛ implicitnφ balφk-verze.

  • -c - p°epφnaΦ -c °φkß, ╛e RPM mß hornφ adresß° vytvo°it, p°epnout se do n∞j a pak teprve zaΦφt rozbalovat archφv Source0.

  • -D - makro %setup implicitn∞ sma╛e hornφ adresß°, pokud tento existuje. Mßme-li ov╣em vφce zdrojov²ch archφv∙, musφme v╣em volßnφm makra %setup krom∞ prvnφho °φct, aby tento adresß° nebyl smazßn. Dosßhneme toho prßv∞ p°epφnaΦem -D.

  • -T - ne°ekneme-li jinak, makro %setup rozbalφ archφv Source0. Pokud je tento archφv ji╛ rozbalen (nap°φklad v dal╣φch volßnφch tohoto makra), je nutnΘ uvΘst p°epφnaΦ -T.

  • -a Φφslo
  • -b Φφslo - rozbalφ zdrojov² archφv SourceΦφslo. P°epφnaΦ -a (after) provede rozbalenφ a╛ po p°epnutφ se do adresß°e BUILD/balφk-verze (nebo jinΘho), p°epφnaΦ -b (before) toto provede p°ed p°epnutφm se do tohoto adresß°e, Φili v adresß°i BUILD.

P°φklad

Mß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ßplat

Makro %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ß makra

Ve 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∞r

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