RPM-HOWTO
 Donnie Barnes, <[email protected]> prevedel Andrej Grauf
 <[email protected]>
 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 <[email protected]>

     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.