Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 12801f336d9e363d2d56a08891cdf472 > files > 20

howto-text-sl-2006-5mdv2010.0.noarch.rpm

  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.