RPM-HOWTO Donnie Barnes, <djb@redhat.com> prevedel Andrej Grauf <andrej.grauf@club.win-ini.si> v2.0, 8. april 1997, prevod 17. december 1998 ____________________________________________________________ Kazalo 1. Uvod 2. Pregled 3. Splo¹ne informacije 3.1 Pridobitev RPM 3.2 Zahteve za RPM 4. Uporaba RPM 5. No, kaj pa lahko dejansko poènem z RPM? 6. Izgradnja RPM-jev 6.1 Datoteka rpmrc 6.2 Datoteka Spec 6.3 Glava 6.4 Prep 6.5 Izgradnja 6.6 Namestitev 6.7 Izbirne pred in po namestitvene/odstranjevalne skripte 6.8 Datoteke 6.9 Izgradnja 6.9.1 Struktura imenika vira 6.9.2 Testna izgradnja 6.9.3 Tvorjenje seznama datotek 6.9.4 Izgradnja paketov z RPM 6.10 Testiranje 6.11 Kaj narediti z novimi RPM-ji 6.12 Kaj sedaj? 7. Veè-arhitekturna izgradnja RPM-jev 7.1 Primer datoteke spec 7.2 Optflags 7.3 Makri 7.4 Izloèevanje arhitektur iz paketa 7.5 Zakljuèek 8. O avtorskih pravicah ______________________________________________________________________ 1. Uvod RPM je kratica za paketni upravljalnik podjetja Red Hat (ang. Red Hat Package Manager) . Èeprav v imenu vsebuje Red Hat, je popolnoma odprt sistem za pakiranje, ki ga lahko vsakdo uporablja. Uporabnikom omogoèa zajetje izvorne kode nove programske opreme, ki jo lahko zapakirajo v izvorno in binarno obliko, tako da lahko binarno kodo enostavno namestijo in ji sledijo, izvorno kodo pa lahko enostavno preoblikujejo. Prav tako vzdr¾uje bazo podatkov za vse pakete in njihove datoteke, ki se uporabljajo za preverjanje paketov in iskanje informacij o datotekah in/ali paketih. Podjetje Red Hat Software vzpodbuja ostale prodajalce distribucij, naj si ogledajo RPM in ga uporabijo za svoje distribucije. RPM je zelo prilagodljiv in enostaven za uporabo, èeprav nudi osnovo za zelo obse¾ne sisteme. Prav tako je popolnoma odprt in vsem na voljo. Zelo veseli bomo va¹ih obvestil o napakah in njihovih popravkih. RPM je dovoljeno uporabljati in raz¹irjati brez dobièka pod pogoji GPL. Podrobnej¹a dokumentacija o RPM je na voljo v knjigi avtorja Eda Baileya, Maximum RPM. Knjigo lahko zajamete ali naroèite na <http://www.redhat.com/>. 2. Pregled Najprej mi dovolite, da navedem nekaj ozadja o RPM. Eden izmed namenov razvoja je bil, omogoèiti uporabo ,,prvotne`` izvorne kode. Pri RPP (na¹ prej¹nji sistem za pakiranje, s katerim RPM nima niè skupnega), je bila izvorna koda iz katere smo gradili, "razbita" izvorna koda. Teoretièno je mo¾no namestiti izvorni RPP in ga potem brez te¾av zgraditi. Ampak izvorna koda ni bila organizirana in nikjer ni bilo navedeno, kak¹ne spremembe je potrebno narediti, da se bo paket zgradil. Najprej je potrebno loèeno zajeti prvotno izvorno kodo. Z RPM imate prvotno izvorno kodo skupaj s popravki, s pomoèjo katerih smo prej prevajali. Nam se zdi to velika prednost. Zakaj? Iz praktiènih razlogov. Eden je v tem, da vam ob izidu nove verzije programa ni potrebno vedno zaèeti od zaèetka, da bi ga prevedli pod RHL. Ogledate si lahko popravek in tako ugotovite, kaj boste verjetno morali postoriti. Na ta naèin lahko privzete nastavitve za prevajanje enostavno pregledate. RPM je oblikovan tako, da ima moène informacijske izbire. Pakete lahko i¹èete v celotni bazo podatkov ali pa samo v doloèenih datotekah. Prav tako lahko enostavno ugotovite, h kateremu paketu datoteka spada in od kod prihaja. RPM datoteke so stisnjeni arhivi, vendar lahko posamezne pakete hitro in enostavno prei¹èete, ker je paketu obièajno dodana binarna glava, z vsemi mo¾nimi informacijami, ki bi jim morali vedeti. To omogoèa hitro iskanje. Prav tako moèna lastnost je sposobnost preverjanja paketov. Èe ste v skrbeh, da ste izbrisali za nek paket pomembno datoteko, lahko to preverite. O morebitnih nepravilnostih boste obve¹èeni. Èe je potrebno, lahko sedaj paket ponovno namestite. Ohranijo se tudi vse va¹e nastavitvene datoteke. Za mnogo drugih idej in konceptov, ki so vkljuèeni v RPM, bi se radi zahvalili ljudem pri distribuciji BOGUS. Èeprav je bil RPM v celoti napisan v Red Hat Software, njegovo delovanje temelji na kodi, ki so jo napisali pri BOGUS-u (PM in PMS). 3. Splo¹ne informacije 3.1. Pridobitev RPM Najbolj¹i naèin, da pridete do RPM je, da namestite Red Hat Linux. Èe tega ne ¾elite, lahko RPM vseeno dobite in uporabljate. Najdete ga lahko na <ftp://ftp.redhat.com/pub/redhat/code/rpm>. 3.2. Zahteve za RPM Minimalna zahteva za uporabo RPM je cpio 2.4.2 ali novej¹a verzija. Ta sistem je namenjen za uporabo z Linux-om, vendar bo z veliko verjetnostjo deloval tudi na drugih Unix sistemih. Dejansko je bil preveden na SunOs, Solaris, AIX, Irix, AmigaOS in drugih. Ampak pazite, binarni paketi, tvorjeni na drugih tipih Unixa ne bodo zdru¾ljivi. To so minimalne zahteve za namestitev RPM-jev. Za izgradnjo RPM-jev iz vira potrebujete tudi vse programe, ki so potrebni za izgradnjo paketov, kot npr. gcc, make, itd. 4. Uporaba RPM V najenostavnej¹i obliki, se za namestitev paketov lahko RPM uporabi v obliki: rpm -i foobar-1.0-1.i386.rpm Naslednji enostaven ukaz je za odstranitev paketa: rpm -e foobar Eden izmed celovitej¹ih, ampak zelo uporabnih ukazov vam omogoèa namestitev paketov preko FTP-ja. Èe ste povezani z omre¾jem in bi ¾eleli namestiti nov paket, morate podati samo veljavni URL naslov, nekako takole: rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm Ne pozabite, da se bo ta RPM sedaj preverjal in/ali name¹èal preko FTP-ja. Ker so to preprosti ukazi, se lahko rpm uporablja, kot je razvidno iz sporoèila o uporabnosti (Usage massage), na razliène naèine: RPM version 2.3.9 Copyright (C) 1997 - Red Hat Software This may be freely redistributed under the terms of the GNU Public License usage: rpm {--help} rpm {--version} rpm {--initdb} [--dbpath <dir>] rpm {--install -i} [-v] [--hash -h] [--percent] [--force] [--test] [--replacepkgs] [--replacefiles] [--root <dir>] [--excludedocs] [--includedocs] [--noscripts] [--rcfile <file>] [--ignorearch] [--dbpath <dir>] [--prefix <dir>] [--ignoreos] [--nodeps] [--ftpproxy <host>] [--ftpport <port>] file1.rpm ... fileN.rpm rpm {--upgrade -U} [-v] [--hash -h] [--percent] [--force] [--test] [--oldpackage] [--root <dir>] [--noscripts] [--excludedocs] [--includedocs] [--rcfile <file>] [--ignorearch] [--dbpath <dir>] [--prefix <dir>] [--ftpproxy <host>] [--ftpport <port>] [--ignoreos] [--nodeps] file1.rpm ... fileN.rpm rpm {--query -q} [-afpg] [-i] [-l] [-s] [-d] [-c] [-v] [-R] [--scripts] [--root <dir>] [--rcfile <file>] [--whatprovides] [--whatrequires] [--requires] [--ftpuseport] [--ftpproxy <host>] [--ftpport <port>] [--provides] [--dump] [--dbpath <dir>] [targets] rpm {--verify -V -y} [-afpg] [--root <dir>] [--rcfile <file>] [--dbpath <dir>] [--nodeps] [--nofiles] [--noscripts] [--nomd5] [targets] rpm {--setperms} [-afpg] [target] rpm {--setugids} [-afpg] [target] rpm {--erase -e} [--root <dir>] [--noscripts] [--rcfile <file>] [--dbpath <dir>] [--nodeps] [--allmatches] package1 ... packageN rpm {-b|t}[plciba] [-v] [--short-circuit] [--clean] [--rcfile <file>] [--sign] [--test] [--timecheck <s>] specfile rpm {--rebuild} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm rpm {--recompile} [--rcfile <file>] [-v] source1.rpm ... sourceN.rpm rpm {--resign} [--rcfile <file>] package1 package2 ... packageN rpm {--addsign} [--rcfile <file>] package1 package2 ... packageN rpm {--checksig -K} [--nopgp] [--nomd5] [--rcfile <file>] package1 ... packageN rpm {--rebuilddb} [--rcfile <file>] [--dbpath <dir>] rpm {--querytags} Podrobnosti o uporabi teh stikal lahko najdete na strani o RPM za man. 5. No, kaj pa lahko dejansko poènem z RPM? RPM je zelo uporabno orodje in, kot lahko vidite, ima kar nekaj stikal. Njihova uporabnost je najla¾je razvidna iz primerov. Kako enostavno namestiti in odstraniti pakete, sem navedel ¾e zgoraj, sedaj pa si oglejmo ¹e nekaj drugih primerov: * Predpostavimo, da ste po nesreèi zbrisali nekaj datotek, niste pa preprièani, kaj ste zbrisali. Èe ¾elite preveriti va¹ celoten sistem in ugotoviti, kaj bi lahko manjkalo, uporabite rpm -Va * Predpostavimo, da naletite na nepoznano datoteko. Da bi ugotovili, kateremu paketu pripada, uporabite: rpm -qf /usr/X11R6/bin/xjewel Rezultat bi bil: xjewel-1.6-1 * Na¹li ste koules RPM, pa ne veste kaj to je. Da bi izvedeli kaj o njem, uporabite: rpm -qpi koules-1.2-2.i386.rpm Rezultat, ki bi ga dobili: Name : koules Distribution: Red Hat Linux Colgate Version : 1.2 Vendor: Red Hat Software Release : 2 Build Date: Mon Sep 02 11:59:12 1996 Install date: (none) Build Host: porky.redhat.com Group : Games Source RPM: koules-1.2-2.src.rpm Size : 614939 Summary : SVGAlib action game with multiplayer, network, and sound support Description : This arcade-style game is novel in conception and excellent in execution. No shooting, no blood, no guts, no gore. The play is simple, but you still must develop skill to play. This version uses SVGAlib to run on a graphics console. * Sedaj bi radi videli, katere datoteke koules RPM namesti. Uporabite: rpm -qpl koules-1.2-2.i386.rpm Rezultat: /usr/doc/koules /usr/doc/koules/ANNOUNCE /usr/doc/koules/BUGS /usr/doc/koules/COMPILE.OS2 /usr/doc/koules/COPYING /usr/doc/koules/Card /usr/doc/koules/ChangeLog /usr/doc/koules/INSTALLATION /usr/doc/koules/Icon.xpm /usr/doc/koules/Icon2.xpm /usr/doc/koules/Koules.FAQ /usr/doc/koules/Koules.xpm /usr/doc/koules/README /usr/doc/koules/TODO /usr/games/koules /usr/games/koules.svga /usr/games/koules.tcl /usr/man/man6/koules.svga.6 To je le nekaj primerov. Bolj kreativnih se lahko zlahka domislite, ko boste bolj domaèi v RPM. 6. Izgradnja RPM-jev RPM-je je razmeroma enostavno zgraditi, ¹e posebej èe lahko dobite programsko opremo, ki jo ¾elite zapakirati tako, da se bo lahko potem sama zgradila. Osnovni potek izgradnje RPM-jev je naslednji: * Preprièajte se, da je na va¹em sistemu imenik /etc/rpmrc namestitveni imenik. * Priskrbite si izvorno kodo za katero bi na va¹em sistemu radi zgradili RPM. * V vire vnesite vse popravke, ki so potrebni za pravilno izgradnjo. * Za paket ustvarite specifikacijsko datoteko. * Preprièajte se, da je vse na ustreznem mestu. * S pomoèjo RPM-ja zgradite paket. Pri normalnem delovanju, RPM zgradi tako binarne, kot tudi izvorne pakete. 6.1. Datoteka rpmrc Trenutno se nastavitve za RPM izvajajo samo preko datoteke /etc/rpmrc. Primer te datoteke: require_vendor: 1 distribution: I roll my own! require_distribution: 1 topdir: /usr/src/me vendor: Mickiesoft packager: Mickeysoft Packaging Account <packages@mickiesoft.com> signature: pgp pgp_name: Mickeysoft Packaging Account pgp_path: /home/packages/.pgp tmppath: /usr/tmp Vrstica require_vendor povzroèi, da RPM poi¹èe vrstico s podatki o prodajalcu. Ta podatek lahko izhaja iz /etc/rpmrc ali iz glave datoteke spec same. To izbiro izklopite tako, da postavite ¹tevilko na 0. Enako velja za vrstici require_distribution in require_group. Naslednja vrstica je vrstica s podatki o distribuciji. Definirate jo lahko na tem mestu, ali pa kasneje v glavi datoteke spec. Kadar gradite za doloèeno distribucijo, je dobro, da ta vrstica vsebuje pravilne podatke, èeprav ni obvezna. Vrstica s podatki o prodajalcu deluje na podoben naèin, definirana pa je lahko poljubno (npr. Andrejeva ¹tacuna z rock glasbo in programsko opremo). RPM podpira tudi izgradnjo paketov na razliènih arhitekturah. Datoteka rpmrc lahko vsebuje spremenljivko ,,optflags`` potrebno za izgradnjo arhivov, ki med izgradnjo zahtevajo oznake za doloèene arhitekture. Za uporabo te spremenljivke si oglejte kasnej¹e razdelke. Poleg tega makra, obstajajo ¹e drugi. Uporabite lahko: rpm --showrc ter tako ugotovite va¹e nastavitve in najdete vse oznake, ki so na voljo. 6.2. Datoteka Spec Prièeli bomo z obravnavo datoteke spec. Ta datoteka je potrebna za izgradnjo paketov. Vsebuje opise programske opreme, skupaj z navodili kako jo zgraditi in seznam vseh binarnih zapisov, ki bodo name¹èeni. Svojo datoteko spec poimenujte v skladu s standardnim dogovorom. Imenovala naj bi se: ime paketa -vezaj- ¹tevilka razlièice -vezaj- ¹tevilka izdaje -pika- spec. Oglejte si naslednjo majhno datoteko spec (vim-3.0-1.spec): Summary: ejects ejectable media and controls auto ejection Name: eject Version: 1.4 Release: 3 Copyright: GPL Group: Utilities/System Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz Patch: eject-1.4-make.patch Patch1: eject-1.4-jaz.patch %description This program allows the user to eject media that is autoejecting like CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines. %prep %setup %patch -p1 %patch1 -p1 %build make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" %install install -s -m 755 -o 0 -g 0 eject /usr/bin/eject install -m 644 -o 0 -g 0 eject.1 /usr/man/man1 %files %doc README COPYING ChangeLog /usr/bin/eject /usr/man/man1/eject.1 6.3. Glava Glava vsebuje nekaj standardnih polj, ki jim morate izpolniti. Vsebuje tudi nekaj opozoril. Polja je potrebno izpolniti na naslednji naèin: * Summary: Enovrstièen opis paketa. * Name: ime se mora ujemati z imenom datoteke rpm-ja, ki ga nameravate uporabiti. * Version: ime razlièice se mora ujemati z imenom rpm-ja, ki ga nameravate uporabiti. * Release: ©tevilka izdaje paketa za isto verzijo (npr. èe tvorimo paket in ugotovimo, da je rahlo okvarjen in ga je potrebno ponovno kreirati, bo naslednji paket imel ¹tevilko izdaje 2). * Icon: Ime datoteke z ikono, ki jo uporablja namestitveno orodje vi¹je stopnje (kot npr. ,,glint``). To mora biti datoteka s konènico gif in mora biti v imeniku SOURCES. * Source: Vrstica ka¾e na lokacijo prvotne izvorne datoteke HOME. Potrebovali jo boste, ko boste ponovno ¾eleli zajeti izvorno kodo ali iskali novej¹e verzije. Opozorilo: pot do datoteke v tej vrstici SE MORA ujemati s potjo do datoteke, ki je na va¹em sistemu (npr. ko boste zajeli izvorno datoteko, ji ne spremenite imena). S pomoèjo naslednjih vrstic lahko definirate tudi veè kot eno izvorno datoteko: Source0: blah-0.tar.gz Source1: blah-1.tar.gz Source2: fooblah.tar.gz Te vrstice bi ¹le v imenik SOURCES. (Struktura imenika je obravnavana v kasnej¹em razdelku, ,,imeni¹ka struktura izvora``.) * Patch: To je mesto, kjer boste lahko na¹li popravek, èe ga boste morali ponovno zajeti. Opozorilo: Ime datoteke se mora ujemati z imenom, ki ste ga uporabili, ko ste kreirali VA© popravek. Prav tako, kot lahko imate veè virov, lahko imate tudi veè popravkov. ] Rezultat bo izgledal nekako tako: Patch0: blah-0.patch Patch1: blah-1.patch Patch2: fooblah.patch Te datoteke gredo v imenik SOURCES. * Copyright: Ta vrstica pove komu pripadajo avtorske pravice. Uporabili bi naj nekaj tak¹nega kot GPL, BSD, MIT, public domain, distribute ali commercial. * BuildRoot: Ta vrstica vam pri izgradnji in namestitvi omogoèa, da imenik oznaèite kot ,,korenski imenik``. To mo¾nost lahko uporabite pri testiranju paketa, preden ga namestite na va¹ raèunalnik. * Group: Ta vrstica pove namestitvenim programom vi¹je stopnje (kot je npr, ,,glint``) kam v hierarhièni strukturi naj ga namesti. Trenutna drevesna struktura skupine izgleda nekako tako: Applications Communications Editors Emacs Engineering Spreadsheets Databases Graphics Networking Mail Math News Publishing TeX Base Kernel Utilities Archiving Console File System Terminal Text Daemons Documentation X11 XFree86 Servers Applications Graphics Networking Games Strategy Video Amusements Utilities Libraries Window Managers Libraries Networking Admin Daemons News Utilities Development Debuggers Libraries Libc Languages Fortran Tcl Building Version Control Tools Shells Games * %description: Ni ravno del glave, vendar mora biti definiran skupaj z glavo. Za en paket in/ali podpaket rabite en opisno oznaèbo. To je veè vrstièno polje, ki bo moralo vsebovati razumljiv opis paketa. 6.4. Prep Prep je drugi razdelek v datoteki spec. Uporablja se za pripravo virov na izgradnjo. Tu boste morali narediti vse, kar je potrebno za popravo in pripravo virov. Pazite: Ta dva razdelka sta dejansko le prostora v katerem se izvr¹i zapis lupine. Za razpakiranje in popravo va¹i virov, enostavno tvorite zapis sh in ga vstavite za oznaèbo %prep. Za pomoè pri tem smo kreirali makre. Prvi izmed teh makrov je makro %setup. V najpreprostej¹i obliki (brez stikal ukazne vrstice), preprosto razpakira vire in se pomakne (cd) v izvorno datoteko. V ukazu lahko uporabite tudi naslednja stikala: * -n ime (name) nastavi ime zgrajenega imenika na izpisano ime. Privzeta vrednost je $NAME-$VERSION. Ostale mo¾nosti vkljuèujejo $NAME, ${NAME}${VERSION} oz. karkoli glavna datoteka tar uporablja. (Ne pozabite, da spremenljivke ,,$`` niso prave spremenljivke, ki so na voljo v datoteki spec. Tu se uporabljajo samo kot primer. V va¹em paketu morate uporabiti pravo ime in verzijo, ne pa spremenljivke.) * -c tvori omenjeni imenik, se pomakne vanj in izvr¹i ukaz untar. * -b # pred premaknitvijo (cd) v imenik razpakira Source# (to stikalo v kombinaciji s c nima nobenega smisla, torej je ne uporabljajte). Stikalo je uporabno samo v primeru razliènih izvornih datotek. * -a # najprej se pomakne v imenik in nato razpakira Source#. * -T to stikalo prepi¹e privzeto opravilo za razpakiranje vira s programom tar in za razpakiranje glavne izvorne datoteke zahteva -b 0 ali -a 0. Uporabite ga, kadar obstajajo sekundarni viri. * -D imenika pred razpakiranjem ne zbri¹i. Stikalo je primerno samo v primeru, kadar imate veè kot en nastavitveni makro. Uporabljalo naj bi se samo v naslednjih nastavitvenih makrih (nikoli pa ne v prvem makru). Naslednji makro, ki je na voljo se imenuje makro %patch. Pomaga pri avtomatizaciji procesa uvajanja popravkov v vire. V njem lahko uporabite veè stikal, ki so navedena spodaj: * # bo uvedel Patch# kot popravljeno datoteko. * -p # doloèi ¹tevilo imenikov, ki jih je potrebno izloèiti iz ukaza patch(1). * -P privzeto opravilo je uporaba Patch (ali Patch0). Oznaka prepreèuje privzeto opravilo in za razpakiranje glavne izvorne datoteke s programom tar zahteva vrednost 0. To stikalo je uporabno v drugem ali naslednjih makrih %patch, ki zahtevajo drugaèno vrednost kot prvi makro. * Namesto dejanskega ukaza %patch # -P lahko uporabite tudi %patch#. To naj bi bili vsi makri, ki jih potrebujete. Ko jih boste pravilno sestavili, lahko opravite tudi druge nastavitve, ki jih potrebno opraviti s pomoèjo zapisa tipa sh. Vse kar boste vnesli pred makrom %build (obravnavan v naslednjem razdelku) se izvede preko sh. V zgornjem primeru poi¹èite stvari, ki bi jih lahko opravili na tem mestu. 6.5. Izgradnja V tem razdelku dejansko sploh ni makrov. Ko ste vir razpakirali, popravili in se premaknili v imenik, lahko v ta razdelek vnesete poljubne ukaze, ki jih pri izgradnji programske opreme potrebujete. To je ¹e eno zaporedje ukazov, ki jih izvede sh, torej lahko vstavite vse dovoljene ukaze sh (vkljuèno s komentarji). Trenutni delovni imenik se v vsakem razdelku ponastavi na najvi¹jo stopnjo izvornega imenika. Ne pozabite na to. Èe bo potrebno, se lahko premaknete v podimenike z ukazom cd. 6.6. Namestitev V tem razdelku sploh ni makrov. Vanj lahko vstavite poljubne ukaze, ki jih za namestitev potrebujete. Èe ste si zagotovili namestitev v paketih, ki jih gradite, vnesite to sedaj. Drugaèe lahko za tvornjenje namestitve popravite makefile in izvr¹ite namestitev, ali pa jo opravite roèno z ukazom sh. Va¹ trenutni imenik lahko smatrate kot najvi¹jo stopnjo izvornega imenika. 6.7. Izbirne pred in po namestitvene/odstranjevalne skripte Vstavite lahko zapise, ki se izvedejo pred in po namestitvi in odstranitvi binarnih paketov. Glavni razlog za to je, da lahko ldconfig za¾enete po namestitvi ali odstranitvi paketov, ki vsebujejo deljene knji¾nice. Makri za vsako skripto so v obliki: * %pre je makro, ki izvr¹i pred-namestitvene skripte. * %post je makro, ki izvr¹i po-namestitvene skripte. * %preun je makro, ki izvr¹i pred-odstranitvene skripte. * %postun je makro, ki izvr¹i po-odstranitvene skripte. Vsebina teh razdelkov mora biti v obliki zapisa sh, èeprav ne potrebujete #!/bin/sh. 6.8. Datoteke To je razdelek, kjer morate navesti datoteke za binarni paket. RPM ne ve, katere binarne datoteke se namestijo kot rezultat ukaza make install. Za to NE obstaja noben naèin. Nekateri so predlagali, da je potrebno pred in po namestitvi paketa izvajati iskanje. Na veèuporabni¹kem sistemu, to ni sprejemljivo, ker se lahko med procesom izgradnje paketov tvorijo druge datoteke, ki s paketom nimajo niè skupnega. Na voljo je nekaj makrov, ki opravljajo tudi posebna opravila. Navedeni in opisani so spodaj: * %doc se uporablja za oznaèevanje dokumentacije v izvornem paketu, ki ga ¾elite namestiti v binarni obliki. Spis se bodo namestili v /usr/doc//$NAME-$VERSION-$RELEASE. S tem makrom lahko v opravilni vrstici prelistate tudi veè spisov hkrati, ali pa loèeno z uporabo makra za vsakega posebej. * %config se uporablja za oznaèevanje nastavitvenih datotek v paketu. Sem spadajo datoteke kot so sendmail.cf, passwd, itd. Èe paket, ki vsebuje nastavitvene datoteke kasneje odstranite, se bodo odstranile vse nespremenjene datoteke, vse spremenjene datoteke pa bodo dobile prvotno ime s pripono .rpmsave. Z makrom lahko prelistate tudi veè datotek. * %dir oznaèuje samostojen imenik v seznamu datotek, da je vkljuèen, kot bi spadal k paketu. Èe prelistate ime imenika BREZ UPORABE makra %dir, bo glede na privzeto vrednost v seznam datotek vkljuèeno VSE kar ta imenik vsebuje in kasneje name¹èeno kot del paketa. * %files f <ime datoteke> vam omogoèa listanje datotek v poljubni datoteki znotraj gradbenega imenika vira. To je koristno v primerih, ko imate paket, ki lahko zgradi svoj lasten seznam datotek. Ta seznam tukaj preprosto vkljuèite in vam ne bo treba podajati seznama datotek. Najveèjo nevarnost v seznamu datotek predstavlja listanje imenikov. Èe prelistate /usr/bin po nesreèi, bo va¹ binarni paket vseboval vse datoteke v /usr/bin na va¹em sistemu. 6.9. Izgradnja 6.9.1. Struktura imenika vira Najprej potrebujete pravilno oblikovano gradbeno strukturo. To lahko opravite z uporabo datoteke /etc/rpmrc. Veèina ljudi uporablja kar /usr/src. Mogoèe boste morali za tvorjenje gradbene strukture ustvarili naslednje imenike: * BUILD je imenik, kjer RPM izvr¹i celotno izgradnjo. Èeprav ni potrebno, da testne izgradnje vr¹ite v toèno doloèenem imeniku, bo RPM vr¹il izgradnjo vedno v tem imeniku. * SOURCES je imenik, kamor bi morali vstaviti originalne izvorne datoteke tar in popravke. RPM bo, glede na privzeto nastavitev, iskal v tem imeniku. * SPECS je imenik, kjer naj bi bile vse datoteke spec. * RPMS je imenik, kamor bo po izgradnji RPM shranil binarne RPM-je. * SRPMS je imenik, kjer bodo shranjeni vsi izvorni RPM-ji. 6.9.2. Testna izgradnja Verjetno boste najprej poskusili dobiti izvorno kodo, da bi izgradili èisto brez uporabe RPM. Da bi to storili, najprej razpakirajte vir in spremenite ime imenika v $NAME.orig. Potem ponovno razpakirajte vir. Pri izgradnji uporabite ta vir. Premaknite se v izvorni imenik in za izgradnjo sledite navodilom. Èe boste morali stvari urejati, boste potrebovali popravek. Ko se bo izgradil, poèistite izvorni imenik. Preprièajte se, da ste odstranili vse datoteke, ki jih je tvorila nastavitvena skripta configure. Potem se iz izvornega imenika pomaknite v njegov predhodni imenik in izvedite nekaj tak¹nega: diff uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch S tem boste ustvarili popravek, ki ga lahko uporabite v datoteki spec. Ne pozabite, da "linux", ki ga vidite v imenu popravka, slu¾i samo identifikaciji. Mogoèe boste za opis namena popravka uporabili tudi kaj bolj opisnega, kot npr. "config" ali "bugs". Dobro je, da pred uporabo datoteke za popravek, ki jo ustvarite, le to pred tem pregle date in se preprièate, da ste vkljuèili samo tiste binarne datoteke, ki jih ¾elite. 6.9.3. Tvorjenje seznama datotek Sedaj, ko imate vir, ki bo izgradil paket, in ko veste, kako to narediti, ga izgradite in namestite. Oglejte si izhod namestitvenega niza in z njegovo pomoèjo izgradite seznam datotek, ki ga boste uporabili v datoteki spec. Ponavadi gradimo datoteko spec vzporedno z vsemi temi koraki. Tvorite lahko zaèetno datoteko in vstavite enostavnej¹e dele, potem po korakih vstavite ¹e ostale. 6.9.4. Izgradnja paketov z RPM Ko imate datoteko spec, ste pripravljeni na izgradnjo svojega paketa. Najuporabnej¹i naèin za to opravilo je uporaba ukaz v naslednji obliki: rpm ba foobar-1.0.spec Skupaj s stikalom -b lahko koristno uporabite tudi druga stikala: * p pomeni: za¾eni samo razdelek prep datoteke spec. * l je namenjen preverjanju seznama in opravi nekaj testov na %files. * c tvori prep in prevod. To je primeren naèin, kadar niste preprièani, ali se bo va¹ izvor sploh zgradil. Zdi se neuporaben, ker se verjetno ¾elite igrati z virom tako dolgo, dokler se ne zgradi in potem uporabiti RPM. Ko pa se boste privadili uporabe RPM, boste spoznali, da vam bo v nekaterih primerih v pomoè. * i napravi prep, prevede in namesti. * b napravi prep, prevede, namesti in izgradi samo binarni paket. * a zgradi vse (tako izvorne, kot tudi binarne pakete). Za stikalo b obstaja tudi nekaj doloèil: * --short-circuit bo skoèil neposredno na doloèeno stopnjo (uporablja se lahko samo v kombinaciji s c in i). * --clean odstrani gradbeno strukturo, ko je gotova. * --keep-temps ohranijo se vse zaèasne datoteke in skripte, ki so bili ustvarjene v /tmp. Z uporabo stikala -v lahko vidite, katere datoteke so se ustvarile v /tmp. * --test ne izvede dejanskih stopenj, vendar izvede keep-temp. 6.10. Testiranje Ko imate izvorni in binarni rpm za svoj paket, ju je potrebno testirati. Najenostavnej¹e in najbolj uèinkovito je, da ga preizkusite na popolnoma drugem raèunalniku. Nenazadnje ste izvr¹ili veliko ukazov make install na va¹em raèunalniku, torej mora biti dokaj dobro name¹èen. Na paketu lahko uporabite rpm -u imepaketa in ga tako testirate. To pa lahko daje zavajajoèe rezultate, ker ste pri izgradnji paketa uporabili make install. Èe ste nekaj s seznama datotek izpustili, se to ne bo odstranilo. Potem boste binaren paket ponovno namestili in va¹ sistem bo spet popoln, va¹ rpm pa ¹e vedno ne bo. Ne pozabite, da bo zaradi tega ker ste za kreiranje paketa uporabili rpm -ba, veèina ljudi pri namestitvi uporabila samo rpm -i. V razdelkih izgradnje in namestitve ne storite nièesar, kar bi bilo potrebno storiti kadar se binarne datoteke name¹èajo samodejno. 6.11. Kaj narediti z novimi RPM-ji Ko ste naredili svoj RPM neèesa (predpostavljamo, da to nekaj ni bil ¾e RPM-jan), lahko svoje delo razdelite ostalim (predpostavljamo tudi, da ste RPM-jali nekaj, kar se lahko prosto raz¹irja). To lahko storite tako, da paket nalo¾ite na <ftp://ftp.redhat.com/>. 6.12. Kaj sedaj? Oglejte si zgornja razdelka o testiranju in kaj narediti z novimi RPM- ji. ®elimo, da so na voljo vsi RPM-ji, ki jih dobimo in, da so dobro narejeni. Vzemite si èas in jih dobro preskusite, potem pa jih nalo¾ite v dobro vsem. Prosim, prav tako se preprièajte, da nalagate samo programsko opremo, ki je prosto dostopna. Komercialne programske oprema ne nalagajte, èe avtorske pravice tega ne dopu¹èajo. Sem spadajo programska oprema Netscape, ssh, pgp, itd. 7. Veè-arhitekturna izgradnja RPM-jev RPM se lahko sedaj uporablja za izgradnjo paketov za procesorje Intel i386, Digital Alpha, ki uporabljajo Linux in Sparc. Obstajajo poroèila, da deluje tudi na SGI in HP delovnih postajah. Obstajajo ¹tevilne lastnosti, ki poenostavljajo izgradnjo paketov na vseh platformah. Prva izmed njih je direktiva "optflag" v /etc/rpmrc. Uporablja se lahko za postavitev oznak, ki se uporabljajo pri izgradnji programske opreme za vrednosti, ki so specifiène za doloèeno arhitekturo. Naslednja lastnost so makri "arch" v datoteki spec. Uporabljate jih lahko v razliène namene, odvisno od arhitekture na kateri gradite. Naslednja lastnost je direktiva "Exclude" v glavi. 7.1. Primer datoteke spec Sledi del datoteke spec za paket "fileutils". Zgrajena je tako, da se lahko zgradi na raèunalnikih s procesorji Alpha in Intel. Summary: GNU File Utilities Name: fileutils Version: 3.16 Release: 1 Copyright: GPL Group: Utilities/File Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz Source1: DIR_COLORS Patch: fileutils-3.16-mktime.patch %description These are the GNU file management utilities. It includes programs to copy, move, list, etc, files. The ls program in this package now incorporates color ls! %prep %setup %ifarch alpha %patch -p1 autoconf %endif %build configure --prefix=/usr --exec-prefix=/ make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s %install rm -f /usr/info/fileutils* make install gzip -9nf /usr/info/fileutils* . . . 7.2. Optflags V tem primeru boste videli, kako se direktiva "optflag" uporablja iz /etc/rpmrc. Glede na arhitekturo na kateri gradite, se ustrezna vrednost posreduje RPM_OPT_FLAGS. Da bi lahko namesto navadne direktive, ki jo uporabljate (kot je npr. -m486 ali -O2), uporabljali to spremenljivko, boste morali popraviti Makefile za va¹ paket. Bolj¹i obèutek za to, kaj je potrebno storiti, lahko dobite tako, da namestite ta izvorni paket, ga potem razpakirate in preuèite Makefile. Potem si oglejte popravek za Makefile in videli boste, kak¹ne spremembe je potrebno opraviti. 7.3. Makri Makro %ifarch je pri vsem tem zelo pomemben. Najveèkrat boste morali narediti popravek ali dva, ki je znaèilen samo za doloèeno arhitekturo. V tem primeru vam RPM dopu¹èa, da napravite popravek samo za to arhitekturo. V zgornjem primeru ima fileutils popravke za 64 bitne raèunalnike. V tem trenutku se ta popravek uporablja samo za procesorje Alpha. Okrog popravka za 64 bitne procesorje dodajmo makro %ifarch: %ifarch axp %patch1 -p1 %endif S tem boste zagotovili, da se bo popravek uporabljal samo na arhitek turah s procesorji Alpha. 7.4. Izloèevanje arhitektur iz paketa Da boste lahko vzdr¾evali izvorne RPM-je za vse platforme v enem imeniku, smo vgradili sposobnost za "izloèevanje" paketov, ki bi se zgradili za doloèene arhitekture in sicer tako, da boste ¹e vedno lahko uporabljali ukaze, kot je rpm --rebuild /usr/src/SRPMS/*.rpm in pri tem izgradite ustrezen paket. Èe aplikacije ¹e niste dali na doloèeno platformo, je vse kar morate storiti, da dodate podobno vrstico: ExcludeArch: axp v glavo datoteke spec izvornega paketa. Potem ponovno izgradite paket na platformi, na kateri je prvotno izgrajena. Dobili boste izvorni paket, ki deluje s procesorjem Intel, lahko ga pa enostavno prenesete na raèunalnik s procesorjem Alpha. 7.5. Zakljuèek Uporaba RPM-ja za izgradnjo veè-arhitekturnih paketov je po navadi bolj enostavno, kot pa dobiti pakete za samo izgradnjo. Veè kot je paketov, la¾je je to opraviti. Kot vedno, je najbolj¹a pomoè, ko pri izgradnji RPM-jev obtièite ta, da pogledate v podoben izvorni paket. 8. O avtorskih pravicah Ta dokument in njegova vsebina so za¹èiteni z avtorskim pravicam. ©irjenje tega dokumenta je dovoljeno, dokler vsebina ostane popolnoma nedotaknjena in nespremenjena. Povedano z drugimi besedami, ta dokument lahko samo tiskate, preoblikujete ali ¹irite.