  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. Splone informacije

     3.1 Pridobitev RPM
     3.2 Zahteve za RPM

  4. Uporaba RPM

  5. No, kaj pa lahko dejansko ponem 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 Izloevanje arhitektur iz paketa
     7.5 Zakljuek

  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 omogoa
  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 vzdruje 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
  obsene sisteme. Prav tako je popolnoma odprt in vsem na voljo. Zelo
  veseli bomo vaih obvestil o napakah in njihovih popravkih. RPM je
  dovoljeno uporabljati in razirjati brez dobika pod pogoji GPL.

  Podrobneja dokumentacija o RPM je na voljo v knjigi avtorja Eda
  Baileya, Maximum RPM. Knjigo lahko zajamete ali naroite na
  <http://www.redhat.com/>.


  2.  Pregled


  Najprej mi dovolite, da navedem nekaj ozadja o RPM. Eden izmed namenov
  razvoja je bil, omogoiti uporabo ,,prvotne`` izvorne kode. Pri RPP
  (na prejnji sistem za pakiranje, s katerim RPM nima ni skupnega),
  je bila izvorna koda iz katere smo gradili, "razbita" izvorna koda.
  Teoretino je mono namestiti izvorni RPP in ga potem brez teav
  zgraditi. Ampak izvorna koda ni bila organizirana in nikjer ni bilo
  navedeno, kakne spremembe je potrebno narediti, da se bo paket
  zgradil. Najprej je potrebno loeno zajeti prvotno izvorno kodo. Z RPM
  imate prvotno izvorno kodo skupaj s popravki, s pomojo katerih smo
  prej prevajali. Nam se zdi to velika prednost. Zakaj? Iz praktinih
  razlogov. Eden je v tem, da vam ob izidu nove verzije programa ni
  potrebno vedno zaeti od zaetka, da bi ga prevedli pod RHL. Ogledate
  si lahko popravek in tako ugotovite, kaj boste verjetno morali
  postoriti. Na ta nain lahko privzete nastavitve za prevajanje
  enostavno pregledate.

  RPM je oblikovan tako, da ima mone informacijske izbire. Pakete lahko
  iete v celotni bazo podatkov ali pa samo v doloenih 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 preiete, ker je paketu obiajno dodana
  binarna glava, z vsemi monimi informacijami, ki bi jim morali vedeti.
  To omogoa hitro iskanje.

  Prav tako mona lastnost je sposobnost preverjanja paketov. e ste v
  skrbeh, da ste izbrisali za nek paket pomembno datoteko, lahko to
  preverite. O morebitnih nepravilnostih boste obveeni. e je
  potrebno, lahko sedaj paket ponovno namestite. Ohranijo se tudi vse
  vae nastavitvene datoteke.

  Za mnogo drugih idej in konceptov, ki so vkljueni 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.  Splone informacije


  3.1.  Pridobitev RPM


  Najbolji nain, 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 noveja 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
  zdruljivi.

  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 najenostavneji 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 celovitejih, ampak zelo uporabnih ukazov vam omogoa
  namestitev paketov preko FTP-ja. e ste povezani z omrejem 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 nameal preko
  FTP-ja.

  Ker so to preprosti ukazi, se lahko rpm uporablja, kot je razvidno iz
  sporoila o uporabnosti (Usage massage), na razline naine:


  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 ponem z RPM?


  RPM je zelo uporabno orodje in, kot lahko vidite, ima kar nekaj
  stikal. Njihova uporabnost je najlaje 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 nesrei zbrisali nekaj datotek, niste pa
     prepriani, 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

  *  Nali 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 domai 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:

  *  Prepriajte se, da je na vaem sistemu imenik /etc/rpmrc
     namestitveni imenik.

  *  Priskrbite si izvorno kodo za katero bi na vaem sistemu radi
     zgradili RPM.

  *  V vire vnesite vse popravke, ki so potrebni za pravilno izgradnjo.

  *  Za paket ustvarite specifikacijsko datoteko.

  *  Prepriajte se, da je vse na ustreznem mestu.

  *  S pomojo 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 povzroi, da RPM poie 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 doloeno distribucijo, je dobro, da ta vrstica vsebuje
  pravilne podatke, eprav ni obvezna. Vrstica s podatki o prodajalcu
  deluje na podoben nain, definirana pa je lahko poljubno (npr.
  Andrejeva tacuna z rock glasbo in programsko opremo).

  RPM podpira tudi izgradnjo paketov na razlinih arhitekturah. Datoteka
  rpmrc lahko vsebuje spremenljivko ,,optflags`` potrebno za izgradnjo
  arhivov, ki med izgradnjo zahtevajo oznake za doloene arhitekture. Za
  uporabo te spremenljivke si oglejte kasneje razdelke.

  Poleg tega makra, obstajajo e drugi. Uporabite lahko:

       rpm --showrc

  ter tako ugotovite vae nastavitve in najdete vse oznake, ki so na
  voljo.


  6.2.  Datoteka Spec


  Prieli 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 nameeni.

  Svojo datoteko spec poimenujte v skladu s standardnim dogovorom.
  Imenovala naj bi se: ime paketa -vezaj- tevilka razliice -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 nain:

  *  Summary: Enovrstien opis paketa.

  *  Name: ime se mora ujemati z imenom datoteke rpm-ja, ki ga
     nameravate uporabiti.

  *  Version: ime razliice 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
     vije stopnje (kot npr. ,,glint``). To mora biti datoteka s
     konnico gif in mora biti v imeniku SOURCES.

  *  Source: Vrstica kae na lokacijo prvotne izvorne datoteke HOME.
     Potrebovali jo boste, ko boste ponovno eleli zajeti izvorno kodo
     ali iskali noveje verzije. Opozorilo: pot do datoteke v tej
     vrstici SE MORA ujemati s potjo do datoteke, ki je na vaem sistemu
     (npr. ko boste zajeli izvorno datoteko, ji ne spremenite imena). S
     pomojo 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 kasnejem razdelku, ,,imenika struktura izvora``.)

  *  Patch: To je mesto, kjer boste lahko nali 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 taknega kot GPL, BSD, MIT, public domain,
     distribute ali commercial.

  *  BuildRoot: Ta vrstica vam pri izgradnji in namestitvi omogoa, da
     imenik oznaite kot ,,korenski imenik``. To monost lahko uporabite
     pri testiranju paketa, preden ga namestite na va raunalnik.

  *  Group: Ta vrstica pove namestitvenim programom vije stopnje (kot
     je npr, ,,glint``) kam v hierarhini 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 oznabo. To
     je ve vrstino 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 izvri
  zapis lupine. Za razpakiranje in popravo vai virov, enostavno tvorite
  zapis sh in ga vstavite za oznabo %prep. Za pomo pri tem smo
  kreirali makre.

  Prvi izmed teh makrov je makro %setup. V najpreprosteji 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 monosti vkljuujejo
     $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
     vaem paketu morate uporabiti pravo ime in verzijo, ne pa
     spremenljivke.)

  *  -c tvori omenjeni imenik, se pomakne vanj in izvri 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 razlinih izvornih datotek.

  *  -a # najprej se pomakne v imenik in nato razpakira Source#.

  *  -T to stikalo prepie 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 zbrii. 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 # doloi tevilo imenikov, ki jih je potrebno izloiti iz ukaza
     patch(1).

  *  -P privzeto opravilo je uporaba Patch (ali Patch0). Oznaka
     prepreuje 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 drugano
     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 pomojo zapisa tipa sh. Vse kar boste vnesli pred makrom
     %build (obravnavan v naslednjem razdelku) se izvede preko sh. V
     zgornjem primeru poiite 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 (vkljuno s komentarji). Trenutni delovni imenik se
  v vsakem razdelku ponastavi na najvijo 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. Drugae lahko za tvornjenje
  namestitve popravite makefile in izvrite namestitev, ali pa jo
  opravite rono z ukazom sh. Va trenutni imenik lahko smatrate kot
  najvijo 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 zaenete po namestitvi ali odstranitvi paketov, ki vsebujejo
  deljene knjinice. Makri za vsako skripto so v obliki:

  *  %pre je makro, ki izvri pred-namestitvene skripte.

  *  %post je makro, ki izvri po-namestitvene skripte.

  *  %preun je makro, ki izvri pred-odstranitvene skripte.

  *  %postun je makro, ki izvri 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 nain. Nekateri so predlagali, da je
  potrebno pred in po namestitvi paketa izvajati iskanje. Na
  veuporabnikem 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 oznaevanje 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 loeno z uporabo
     makra za vsakega posebej.

  *  %config se uporablja za oznaevanje 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 oznauje samostojen imenik v seznamu datotek, da je vkljuen,
     kot bi spadal k paketu. e prelistate ime imenika BREZ UPORABE
     makra %dir, bo glede na privzeto vrednost v seznam datotek
     vkljueno VSE kar ta imenik vsebuje in kasneje nameeno kot del
     paketa.

  *  %files f <ime datoteke> vam omogoa 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 vkljuite in vam ne bo treba
     podajati seznama datotek.

     Najvejo nevarnost v seznamu datotek predstavlja listanje imenikov.
     e prelistate /usr/bin po nesrei, bo va binarni paket vseboval
     vse datoteke v /usr/bin na vaem sistemu.


  6.9.  Izgradnja


  6.9.1.  Struktura imenika vira

  Najprej potrebujete pravilno oblikovano gradbeno strukturo. To lahko
  opravite z uporabo datoteke /etc/rpmrc. Veina ljudi uporablja kar
  /usr/src.

  Mogoe boste morali za tvorjenje gradbene strukture ustvarili
  naslednje imenike:

  *  BUILD je imenik, kjer RPM izvri celotno izgradnjo. eprav ni
     potrebno, da testne izgradnje vrite v tono doloenem imeniku, bo
     RPM vril 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, poistite izvorni imenik.
  Prepriajte 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 taknega:

       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, slui samo
  identifikaciji. Mogoe 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 prepriate, da ste vkljuili 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 pomojo izgradite seznam datotek, ki ga boste
  uporabili v datoteki spec. Ponavadi gradimo datoteko spec vzporedno z
  vsemi temi koraki. Tvorite lahko zaetno datoteko in vstavite
  enostavneje dele, potem po korakih vstavite e ostale.


  6.9.4.  Izgradnja paketov z RPM

  Ko imate datoteko spec, ste pripravljeni na izgradnjo svojega paketa.
  Najuporabneji nain 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: zaeni samo razdelek prep datoteke spec.

  *  l je namenjen preverjanju seznama in opravi nekaj testov na %files.

  *  c tvori prep in prevod. To je primeren nain, kadar niste
     prepriani, 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 doloil:

  *  --short-circuit bo skoil neposredno na doloeno stopnjo (uporablja
     se lahko samo v kombinaciji s c in i).

  *  --clean odstrani gradbeno strukturo, ko je gotova.

  *  --keep-temps ohranijo se vse zaasne 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. Najenostavneje in najbolj uinkovito je, da ga preizkusite
  na popolnoma drugem raunalniku. Nenazadnje ste izvrili veliko ukazov
  make install na vaem raunalniku, torej mora biti dokaj dobro
  nameen.
  Na paketu lahko uporabite rpm -u imepaketa in ga tako testirate. To pa
  lahko daje zavajajoe 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, veina
  ljudi pri namestitvi uporabila samo rpm -i. V razdelkih izgradnje in
  namestitve ne storite niesar, kar bi bilo potrebno storiti kadar se
  binarne datoteke nameajo samodejno.


  6.11.  Kaj narediti z novimi RPM-ji


  Ko ste naredili svoj RPM neesa (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 razirja). To lahko storite
  tako, da paket naloite 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
  naloite v dobro vsem. Prosim, prav tako se prepriajte, da nalagate
  samo programsko opremo, ki je prosto dostopna. Komercialne programske
  oprema ne nalagajte, e avtorske pravice tega ne dopuajo. 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
  poroila, 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 specifine za doloeno
  arhitekturo. Naslednja lastnost so makri "arch" v datoteki spec.
  Uporabljate jih lahko v razline 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 raunalnikih 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. Bolji
  obutek za to, kaj je potrebno storiti, lahko dobite tako, da
  namestite ta izvorni paket, ga potem razpakirate in preuite Makefile.
  Potem si oglejte popravek za Makefile in videli boste, kakne
  spremembe je potrebno opraviti.


  7.3.  Makri


  Makro %ifarch je pri vsem tem zelo pomemben. Najvekrat boste morali
  narediti popravek ali dva, ki je znailen samo za doloeno
  arhitekturo. V tem primeru vam RPM dopua, da napravite popravek samo
  za to arhitekturo.

  V zgornjem primeru ima fileutils popravke za 64 bitne raunalnike. 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.  Izloevanje arhitektur iz paketa


  Da boste lahko vzdrevali izvorne RPM-je za vse platforme v enem
  imeniku, smo vgradili sposobnost za "izloevanje" paketov, ki bi se
  zgradili za doloene 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
  doloeno 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 raunalnik s procesorjem Alpha.


  7.5.  Zakljuek


  Uporaba RPM-ja za izgradnjo ve-arhitekturnih paketov je po navadi
  bolj enostavno, kot pa dobiti pakete za samo izgradnjo. Ve kot je
  paketov, laje je to opraviti. Kot vedno, je najbolja pomo, ko pri
  izgradnji RPM-jev obtiite ta, da pogledate v podoben izvorni paket.


  8.  O avtorskih pravicah


  Ta dokument in njegova vsebina so zaiteni 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.
