Tvorba RPM balφk∙ |
Jan Kasprzak, 15. kv∞tna 1998 |
V p°edchozφch dφlech na╣eho serißlu o systΘmu RPM jsme rozebφrali
v╣echny vlastnosti RPM z hlediska u╛ivatele. V dal╣φ Φßsti se budeme
v∞novat RPM z hlediska vlastnφ tvorby RPM balφk∙. Co tedy d∞lat,
mßme-li n∞jak² software a chceme jej zabalit do RPM balφku?
Prvnφ Φinnost, kterou je nutno p°ed vlastnφm zabalenφm softwaru do
formßtu RPM ud∞lat, je zkompilovat software pod Linuxem a ujistit se,
jestli v∙bec pod Linuxem funguje. V nßsledujφcφm budeme p°edpoklßdat,
╛e software lze bez problΘm∙ zkompilovat a ╛e takΘ funguje. Jako
p°φklad si vezmeme program gmemusage, kter² slou╛φ k m∞°enφ
obsazenφ operaΦnφ pam∞ti jednotliv²mi procesy. K jeho zkompilovßnφ
a nainstalovßnφ staΦφ spustit p°φkazy make a make install.
Bez jakΘhokoli vysv∞tlovßnφ uvedu p°φklad, jak vyrobit RPM-balφk gmemusage (vysv∞tlenφ bude nßsledovat):
- Jako root nakopφrujte soubor http://reality.sgi.com/raju/software/gmemusage-0.2.tar.gz
do adresß°e /usr/src/redhat/SOURCES/.
- Nakopφrujte soubor na v²pise Soubor SPEC pro gmemusage pod nßzvem gmemusage-0.2.spec do adresß°e /usr/src/redhat/SPECS/.
- V adresß°i /usr/src/redhat/SPECS spus╗te p°φkaz
rpm -ba gmemusage-0.2.spec. V²sledkem by m∞l b²t zdrojov²
RPM soubor gmemusage-0.2-1.src.rpm v adresß°i
/usr/src/redhat/SRPMS (k Φemu jsou zdrojovΘ RPM soubory,
uvidφme pozd∞ji) a binßrnφ RPM pro danou architekturu (gmemusage
jsem zkou╣el vyrßb∞t pouze pro platformu i386 a sparc,
ale pro sparc m∞l program jistΘ problΘmy. Binßrnφ RPM soubor
je v RPMS/i386/gmemusage-0.2-1.i386.rpm.
- Nov∞ vytvo°en² RPM soubor lze nainstalovat p°φkazem
rpm -Uvh RPMS/i386/gmemusage-0.2-1.i386.rpm.
Summary: graphics memory usage meter
Name: gmemusage
Version: 0.2
Release: 1
Source: http://reality.sgi.com/raju/software/gmemusage-0.2.tar.gz
Copyright: GPL
Group: Utilities/System
Packager: Jan "Yenya" Kasprzak <kas@fi.muni.cz>
BuildRoot: /tmp/gmemusage-root
%description
This tool displays the bar graph describing memory usage of processes
on the Linux box. Uses /proc filesystem.
%prep
%setup
%build
make OPTIM="$RPM_OPT_FLAGS"
%install
mkdir -p $RPM_BUILD_ROOT/usr/X11R6/{bin,man/man1}
make PREFIX=$RPM_BUILD_ROOT/usr/X11R6 install
%files
%attr(0775,root,root) /usr/X11R6/bin/gmemusage
%attr(0644,root,root) /usr/X11R6/man/man1/gmemusage.1
|
V²pis Φ. 6: Soubor SPEC pro gmemusage
A te∩ zp∞t k tomu, co jsme vlastn∞ v p°edchozφ sekci ud∞lali. Je
vid∞t n∞kolik zßkladnφch fakt∙:
- RPM vyu╛φvß adresß° /usr/src/redhat.
- pou╛φvß se p°φkaz rpm -ba
- tvorba balφku je °φzena souborem s koncovkou .spec.
- vytvß°φ se zßrove≥ zdrojov² i binßrnφ RPM soubor.
Adresß° /usr/src/redhat obsahuje tyto podadresß°e (lze zm∞nit
v souboru /etc/rpmrc, co╛ umo╛nφ vyrßb∞t RPM balφky i jako b∞╛n²
u╛ivatel):
- SPECS - obsahuje spec-soubory, kterΘ °φdφ vlastnφ sestavovßnφ
RPM balφku.
- SOURCES - zde jsou zdrojovΘ soubory, ze kter²ch se balφk vytvß°φ.
- BUILD - do tohoto adresß°e se rozbalφ zdrojovΘ soubory a probφhß zde
kompilace.
- RPMS/architektura - sem se ulo╛φ v²slednΘ RPM soubory.
- SRPMS - zde budou v²slednΘ zdrojovΘ RPM soubory.
Tento soubor °φdφ celou kompilaci. Jeho p°φklad byl uveden, jednotlivΘ
mo╛nosti budou podrobn∞ popsßny v nßsledujφcφch dφlech tohoto serißlu.
Na zaΦßtku souboru je hlaviΦka, kterß popisuje, o jak² balφk se jednß,
odkud pochßzφ zdrojov² text, kdo balφk vytvo°il, jakß je jeho licence,
a mno╛stvφ dal╣φch informacφ, pozd∞ji z balφku vypsateln²ch pomocφ
rpm -q.
Dßle nßsledujφ jednotlivΘ sekce - jsou odd∞leny klφΦov²m slovem
s procentem na zaΦßtku °ßdku. V na╣em p°φkladu jsou pou╛ity tyto sekce:
- %description - popis balφku, kter² dßle rozvφjφ krßtkou informaci
ze Summary: v hlaviΦΦe souboru.
- %prep - p°φprava na kompilaci. Tato sekce se vykonß jako shellovsk²
skript a mß za ·kol provΘst rozbalenφ zdrojovΘho archφvu, aplikaci
p°φpadn²ch zßplat, konfiguraci a podobn∞. Ve v²╣e uvedenΘm souboru
tato sekce obsahuje jedin² p°φkaz - makro (pozor, ne sekci)
%setup, kterΘ d∞lß p°esn∞ to, ╛e do adresß°e BUILD
rozbalφ archφv, uveden² v hlaviΦΦe jako Source: z adresß°e
SOURCES. Tedy z celΘho tam uvedenΘho URL se pou╛ije pouze
Φßst za poslednφm lomφtkem. Ostatnφ slou╛φ jen pro informaci.
- %build - vlastnφ kompilace. Jde op∞t o shellovsk² skript. Zde
je dobrΘ si v╣imnout prom∞nnΘ $RPM_OPT_FLAGS - jednotlivΘ
skripty dostßvajφ od RPM p°ednastavenΘ n∞kterΘ prom∞nnΘ. Tato
prom∞nnß je jednou z nich a obsahuje implicitnφ volby p°edßvanΘ
kompilßtoru pro optimalizaci. Tak╛e zm∞nou tohoto parametru
nap°φklad v /etc/rpmrc m∙╛eme dosßhnout toho, aby se v╣echny
nov∞ kompilovanΘ balφky stav∞ly s t∞mito volbami.
- %install - vlastnφ instalace soubor∙ v balφku. V b∞╛n²ch p°φpadech
se v tomto skriptu spou╣tφ p°φkaz make install. Je ov╣em
dobrΘ, pokud rekompilace RPM balφku neprovede instalaci do skuteΦnΘho
systΘmu, ale n∞kam do vlastnφho stromu. Tato vlastnost se jmenuje
Buildroot a zapφnß se uvedenφm stejnojmennΘho parametru v hlaviΦce
spec-souboru. RPM pak vytvo°φ jmenovan² adresß° a nastavφ
skript∙m (vΦetn∞ toho %install) prom∞nnou
$RPM_BUILD_ROOT. V²hoda tohoto p°φstupu je v tom, ╛e takto
m∙╛e bez modifikace spec-souboru vytvo°it RPM balφk
i b∞╛n² u╛ivatel, nikoliv jen superu╛ivatel.
- %files - popisuje, kterΘ soubory majφ b²t zahrnuty do RPM balφku.
Tato sekce nenφ shellovsk² skript, ale seznam.
Je mo╛no tΘ╛ specifikovat atributy jednotliv²ch soubor∙, Φφm╛
umo╛nφme vytvo°it RPM balφk i b∞╛nΘmu u╛ivateli. Neuvedeme-li
atributy, RPM vezme takovΘ atributy, jakΘ mß jmenovan² soubor
v dob∞ tvorby balφku.
K vytvß°enφ RPM balφk∙ se pou╛φvß p°φkaz rpm -b. Jeho argumentem
je .spec soubor. Akceptuje nßsledujφcφ p°epφnaΦe:
- -p Vykonß pouze %prep sekci ve spec-souboru.
- -l Zkontroluje, jestli soubory jmenovanΘ v sekci %files
skuteΦn∞ existujφ.
- -c Vykonß %prep a %build.
- -i Vykonß %prep, %build a %install.
- -b Vytvo°φ binßrnφ RPM soubor (po vykonßnφ %prep,
%build a %install).
- -a Vytvo°φ binßrnφ a zdrojov² RPM soubor (po vykonßnφ
%prep, %build a %install).
- --short-circuit Pou╛φvß se ve spojitosti s -bc a -bi.
Vykonß pouze jmenovanou sekci, bez p°edchozφch.
- --timecheck Φφslo Vypφ╣e varovßnφ, pokud se sna╛φme do RPM balφku
zabalit soubor star╣φ ne╛ dan² poΦet sekund.
- --clean Sma╛e kompilaΦnφ strom p°φslu╣nΘho balφku v adresß°i
/usr/src/redhat/BUILD po skonΦenφ tvorby balφku.
- --test Otestuje syntaxi spec-souboru, neprovßdφ
╛ßdnΘ kompilaΦnφ akce.
- --sign Vytvo°φ balφk s PGP podpisem.
Krom∞ rpm -b lze takΘ pou╛φt rpm -t a jako parametr uvΘst
soubor ve formßtu tar.gz. Takov²to archφv se rozbalφ a jako spec-soubor se pou╛ije prvnφ soubor s koncovkou .spec, obsa╛en²
v archφvu. P°i kompilaci se samoz°ejm∞ neprovßdφ sekce %prep.
Ji╛ n∞kolikrßt padla zmφnka o zdrojov²ch RPM souborech. To je soubor
s koncovkou .src.rpm. Takov²to soubor obsahuje v sob∞ spec-soubor p°φslu╣nΘho balφku, dßle v╣echny soubory pot°ebnΘ
k sestavenφ binßrnφho RPM balφku (zejmΘna soubory uvedenΘ v hlaviΦce
v polo╛ce Source) a p°φpadnou ikonku RPM balφku.
Zdrojov² RPM balφk lze zpracovßvat t°emi zp∙soby. Prvnφ mo╛nost je
tento balφk nainstalovat pomocφ rpm -i. V╣echny soubory, kterΘ
zdrojov² balφk obsahuje, jsou nainstalovßny do adresß°e SOURCES
a spec-soubor je potΘ p°esunut do adresß°e SPECS. Dal╣φ
dv∞ mo╛nosti jsou vytvo°enφ binßrnφho RPM balφku pro danou
architekturu, p°φpadn∞ vytvo°enφ jak binßrnφho, tak i zdrojovΘho RPM
balφku. Dosßhneme toho p°φkazem rpm --recompile balφk.src.rpm,
p°φpadn∞ rpm --rebuild balφk.src.rpm. Oproti p°φkazu rpm
-ba se navφc implicitn∞ sma╛e kompilaΦnφ adresß° tak, jako kdybychom
pou╛ili --clean.
To zatφm jako ·vod do problematiky tvorby vlastnφch RPM balφk∙ staΦφ.
P°φ╣t∞ se podrobn∞ji vrßtφme k formßtu spec-souboru
a k podrobnostem tΘto problematiky.
|