  RPM HOWTO (RPM at Idle)
  Donnie Barnes, djb@redhat.com. Svensk versttning: Linus
  kerlund, uxm165t@tninet.se
  v2.0, 8 April 1997. Svensk versttning: 8 juni 1998.
  ____________________________________________________________

  Innehllsfrteckning


  1. Inledning

  2. versikt

  3. Grundlggande information

     3.1 Skaffa RPM
     3.2 RPM-krav

  4. Anvnda RPM

  5. Okej, vad kan jag

  6. Skapa RPM-paket

     6.1 rpmrc-filen
     6.2 Spec-filen
     6.3 Rubrik-delen
     6.4 Prep
     6.5 Build
     6.6 Install
     6.7 Valfria skal-program som krs fre eller efter installering/avinstallering
     6.8 Files
     6.9 Bygga paketet
        6.9.1 Kllkodens katalog-trd
        6.9.2 Test-bygga
        6.9.3 Skapa fil-listan
        6.9.4 Skapa paketet med RPM
     6.10 Testa det
     6.11 Vad du ska gra med dina nya RPM-paket
     6.12 Och nu d?

  7. RPM-skapande fr flera arkitekturer

     7.1 Exempel p spec-filer
     7.2 Opt-flaggor
     7.3 Makron
     7.4 Utesluta arkitekturer frn paket
     7.5 Avslutning

  8. Upphovsrtt



  ______________________________________________________________________

  1.  Inledning

  RPM str fr Red Hat Package Manager (Red Hat paket-
  hanterare.vers.anm). ven om namnet innehller Red Hat, s r RPM
  helt och hllet avsett att vara ett ppet paket-system, tillgngligt
  fr alla. Det tillter anvndare att ta kllkoden till ny mjukvara och
  paketera det till kllkods- eller binr-format, s att binr-filerna
  ltt kan installeras och spras, och kllkod ltt kan kompileras om.
  Det administrerar ven en databas, ver alla paket och deras filer,
  vilken kan anvndas fr att verifiera och "frga" paket efter
  information om filer och/eller paket.
  Red Hat Software uppmuntrar framstllare av andra distributioner att
  ta sig tid att ta en titt p RPM, och anvnda det i sina egna
  distributioner. RPM r ganska flexibelt och ltt-anvnt, trots att det
  tillhandahller en bas fr ett vldigt omfattande system. Det r ven
  helt och hllet ppet och tillgngligt, ven om de uppskattar bugg-
  rapporteringar och bugg-fixar. Tilltelse ges att anvnda och
  distribuera RPM, utan avgifter, under GPL.


  Mer fullstndigt dokumentation om RPM r tillgnglig i Ed Baileys bok
  Maximum RPM. Den r tillgnglig fr nedladdning eller bestllning frn
  www.redhat.com <http://www.redhat.com>.


  2.  versikt

  Lt mig frst frklara en del av filosofin bakom RPM. Ett design-ml
  var att tillta anvndningen av "ofrdrvad" kllkod. Med RPP (vrt
  tidigare system fr paket-administrering, p vilket inget i RPM r
  baserat) var vra kllkods-paket "hackade" kllkoder, som vi byggde
  frn. Teoretiskt s var det mjligt att installera en kllkods-RPM och
  sedan make-a det utan problem. Men kllkoden var inte den
  ursprungliga, och det fanns inga uppgifter om vilka ndringar vi hade
  gjort, fr att f den att kompilera. Man var tvungen att ladda ned den
  urprungliga kllkoden separat. Med RPM fr du ofrdrvad kllkod,
  tillsammans med en patch, som vi anvnde fr att kompilera frn. Vi
  ser detta som en stor frdel. Varfr? Av flera anledningar. En av dem
  r, att om det kommer en ny version av ett program, s behver vi inte
  brja om frn brjan, fr att f det att kompilera under RHL. Du kan
  titta p patchen, fr att se vad du kan bli tvungen att gra. Alla
  saker som kompileras in, som standard, r p detta stt klart synliga.


  RPM r ocks designat att ha kraftfulla "frge"-mjligheter. Du kan
  leta igenom hela din paket-databas eller bara vissa filer. Du kan
  ocks enkelt ta reda p vilket paket en fil tillhr, och var den kom
  ifrn. RPM-filerna sjlva r komprimerade arkiv, men du kan frga
  individuella paket enkelt och snabbt, p grund av en standardiserad
  binr rubrik-fil (header file. vers.anm.), vilken innehller all
  information du ngon gng skulle vilja ha. Denna r inte komprimerad.
  Detta tillter snabb informations-skning.


  En annan kraftfull funktion r mjligheten att verifiera paket. Om du
  r orolig att du har raderat en fil som r viktig fr ngot paket,
  verifiera det bara. Du fr ett meddelande om alla ovanligheter. P
  detta stadium kan du, om det r ndvndigt, ominstallera paketet.
  Eventuella konfigurerings-filer som du har bevaras ocks.


  Vi vill tacka mnniskorna bakom BOGUS-distributionen fr mnga av
  deras ider och koncept, vilka tagits med i RPM. ven om RPM skrivits
  helt och hllet av Red Hat Software, s r dess funktion baserad p
  kod som skrivits av BOGUS (PM och PMS).


  3.  Grundlggande information


  3.1.  Skaffa RPM

  Det bsta sttet att skaffa RPM r att installera Red Hat Linux. Om du
  inte vill gra det, s kan du fortfarande skaffa och anvnda RPM. Du
  kan hmta det frnftp.redhat.com
  <ftp://ftp.redhat.com/pub/redhat/code/rpm>.

  3.2.  RPM-krav

  Huvud-kravet fr att kunna kra RPM r att du har cpio 2.4.2 eller
  senare. ven om det hr systemet r avsett att anvndas med Linux, s
  skulle det mycket vl g att konvertera det till andra Unix-system.
  Det har faktiskt kompilerats p SunOS, Solaris, AIX, Irix, AmigaOS och
  andra operativ-system. Vi mste dock varna dig, fr binr-paketen som
  skapats p en annan Unix-typ kan inte kompileras.


  Dessa r de minimala kraven fr att installera RPM-paket. Fr att
  skapa RPM-paket frn kllkod behver du allt som normalt krvs fr att
  kompilera paket, som gcc, make osv.


  4.  Anvnda RPM

  I dess enklaste form kan RPM anvndas fr att installera paket:


               rpm -i foobar-1.0-1.i386.rpm




  Det nst enklaste kommandot r fr att avinstallera ett paket:


               rpm -e foobar




  Ett av de mest komplicerade, men mycket anvndbara kommandona, lter
  dig installera paket via FTP. Om du r uppkopplat p ntet, och vill
  installera ett nytt paket, s r allt du behver gra att specificera
  en korrekt URL, t.ex.:


               rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rpm




  Observera att RPM nu kommer att frga och/eller installera via FTP.

  ven om dessa kommandon r enkla, s kan rpm anvndas p mnga olika
  stt, vilket vi ser i Usage-meddelandet:


















  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}




  Du kan hitta mer detaljer om vad dessa alternativ gr i man-sidan fr
  RPM.


  5.  Okej, vad kan jag faktiskt  gra med RPM?

  RPM r ett mycket anvndbart verktyg och, som du ser, s har det mnga
  mjligheter. Det bsta sttet att frst dem r att ta en titt p
  ngra exempel. Jag tog upp installering och avinstallering ovan, s
  hr kommer ngra andra exempel:

    Lt oss sga att du, av misstag, raderat ngra filer, men inte r
     sker p vad du har raderat. Om du ville verifiera hela ditt
     system, och se efter vad som fattas, s skulle du skriva:


       rpm -Va


    Lt oss sga att du hittar en fil som du inte knner igen. Fr att
     ta reda p vilket paket den tillhr, s skulle du skriva:


       rpm -qf /usr/X11R6/bin/xjewel




  Utdatan skulle bli:


       xjewel-1.6-1




    Du hittar en ny koules-RPM, men du vet inte vad det r. Fr att f
     en del information skriver du:


       rpm -qpi koules-1.2-2.i386.rpm




  Utdatan skulle bli:


       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.




    Vidare vill du se vilka filer som koules-RPM installerar. Du skulle
     skriva:


       rpm -qpl koules-1.2-2.i386.rpm




  Utdatan blir:











  /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




  Dessa r bara ngra exempel. Mer kreativa exempel kan du komma p nr
  du har lrt knna RPM bttre.


  6.  Skapa RPM-paket

  Att skapa RPM-paket r ocks ganska ltt, speciellt om du kan f
  mjukvaran som du frsker gra ett paket av att kompilera.

  Den grundlggande proceduren fr att skapa ett RPM-paket r som
  fljer:

    Se till att /etc/rpmrc r instlld fr ditt system.

    F kllkoden som du ska bygga RPM-paketet fr att kompilera p ditt
     system.

    Gr en patch med de ndringar du behvde gra, fr att f kllkoden
     att kompilera ordentligt.

    Gr en specifikations-fil fr paketet.

    Se till s att allt r p sin plats.

    Skapa paketet med hjlp av RPM

  Under normal anvndning skapar RPM bde binr- och kllkods-paket.



  6.1.  rpmrc-filen


  Som det r nu, s r det enda sttet att konfigurera RPM via
  /etc/rpmrc-filen. Ett exempel ser ut s hr:









  require_vendor: 1
  distribution: I roll my own!
  require_distribution: 1
  topdir: /usr/src/me
  vendor: Mickiesoft
  packager:  Mickeysoft Packaging Account <packages@mickiesoft.com>

  optflags: i386 -O2 -m486 -fno-strength-reduce
  optflags: alpha -O2
  optflags: sparc -O2

  signature: pgp
  pgp_name: Mickeysoft Packaging Account
  pgp_path: /home/packages/.pgp

  tmppath: /usr/tmp




  require_vendor-raden gr att RPM krver (require) att finna en vendor-
  rad. Denna kan komma frn /etc/rpmrc eller frn rubrik-delen (header)
  eller spec-filen sjlv. Fr att sl av detta, s kan du ndra vrdet
  till 0. Detsamma gller fr require_distribution- och require_group-
  raderna.

  Nsta rad r distribution-raden. Du kan ange denna hr, eller senare i
  rubrik-delen av spec-filen. Nr du skapar ett RPM-paket fr en
  speciell distribution, s r det en god id att se till att den hr
  raden r korrekt, ven om det inte krvs. vendor-raden fungerar i
  stort sett p samma stt, men kan vara vad som helst (allts Joe's
  Software och Rock Music Emporium).

  RPM har nu ocks std fr att skapa paket p flera olika arkitekturer.
  rpmrc-filen kan innehlla flera "optflag"-variabler (optimerings-
  flaggor), fr att kompilera saker, som krver en arkitektur-specifik
  flagga under kompileringen. Se senare avsnitt fr om hur du kan
  anvnda denna varibel.

  Utver de ovan nmnda makrona, s finns det flera till. Du kan
  anvnda:


       rpm --showrc




  fr att ta reda p hur dina taggar r satta, och vilka alla
  tillgngliga flaggor r.


  6.2.  Spec-filen

  Vi ska brja med att diskutera spec-filen. Spec-filer krvs, fr att
  du ska kunna skapa ett paket. Spec-filen r en beskrivning av
  mjukvaran, tillsammans med instruktioner fr hur den ska kompileras,
  och en fil-lista ver alla de binr-filer som installeras.


  Du br ge din spec-fil ett namn, i linje med konventionen. Det ska
  vara paket-namn-bindestreck-versions-nummer-bindestreck-utgvonummer-
  punkt-spec.



  Hr r en liten spec-fil (vim-3.0-1.spec): (Det str s, men det
  verkar uppenbart att det rr sig om eject-1.4-3.spec. vers.anm.)



       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.  Rubrik-delen

  Rubrik-delen innehller ngra standard-flt, som du mste fylla i. Det
  finns ngra konventioner du mste flja ocks. Flten som mste fyllas
  i r de fljande:


    Summary: Detta r en en-rads beskrivning av paketet.

    Name: Detta mste vara namn-strngen frn rpm-filnamnet du har
     tnkt anvnda

    Version: Detta mste vara versions-strngen frn rpm-filnamnet du
     har tnkt anvnda.

    Release: Detta r utgvo-numret fr ett paket av samma version
     (allts, om vi skapar ett paket, och upptcker ngot mindre fel i
     det, s att vi mste skapa om det, s ska nsta paket ha utgvo-
     nummer 2).

    Icon: Detta r namnet p ikon-filen, fr anvndning med andra hg-
     niv installerings-verktyg (som Red Hats "glint"). Den mste vara
     en gif, och finnas i SOURCES-katalogen.

    Source: Denna rad pekar ut den ofrdrvade kllkods-filens HEM-
     katalog. Den anvnds om du ngonsin skulle vilja ha kllkoden igen,
     eller leta efter nya versioner. Konvention: filnamnet i den hr
     raden MSTE matcha filnamnet du har p ditt eget system (ladda
     allts inte ned kllkoden och ndra dess namn). Du kan ocks ange
     mer n en kllkodsfil, genom att anvnda rader som: using lines
     like:


       Source0: blah-0.tar.gz
       Source1: blah-1.tar.gz
       Source2: fooblah.tar.gz




  Dessa filer ska vara i SOURCES-katalogen. (Katalog-strukturen
  diskuteras i ett senare avsnitt, "Kllkodens katalog-trd".)

    Patch: Detta r stllet dr du kan hitta patchen, om du skulle
     behva ladda ned den igen. Konvention: filnamnet hr mste matcha
     det du anvnder nr du skapar DIN patch. Observera ocks att du kan
     ha flera patch-filer, precis som kan ha flera kllkods-filer. Du
     kan ha ngot i stil med:


       Patch0: blah-0.patch
       Patch1: blah-1.patch
       Patch2: fooblah.patch




  Dessa filer ska finnas i SOURCES-katalogen.

    Copyright: Denna rad anger hur upphovsrtten fr paketet ser ut. Du
     br anvnda ngonting i stil med GPL, BSD, MIT, public domain,
     distribuerbart eller kommersiellt.

    BuildRoot: Denna rad lter dig specificera en katalog som "rot" fr
     skapandet och installerandet av nya paket. Du kan anvnda detta fr
     att hjlpa dig att testa ditt paket, innan du installerar det p
     din maskin.

    Group: Denna rad anvnds fr att tala om fr hg-niv
     installerings-program (som Red Hats "glint"), var de ska placera
     detta speciellt program i den hierarkiska strukturen. Grupp-trdet
     ser fr tillfllet ut ungefr s hr:




















  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 Detta r inte riktigt en rubrik-post, men br tas upp
     i anslutning till resten av rubrik-delen. Du behver en
     "description" per paket och/eller under-paket. Detta r ett flt p
     flera rader, som du ska anvnda fr att ge en omfattande
     beskrivning av paketet.
  6.4.  Prep

  Detta r den andra avdelningen i spec-filen. Den anvnds fr att gra
  kllkoden redo fr kompilering. Hr ska du gra allt som r ndvndigt
  fr att f kllkoden patchad och instlld, som den behver vara
  konfigurerad fr att kra make.


  En sak att observera: Vartenda av dessa avsnitt r egentligen bara ett
  stlle att kra skal-program. Du skulle helt enkelt kunna gra ett sh-
  skal-program och stoppa in det efter %prep-taggen, fr att packa upp
  och patcha kllkoden. Vi har dock skapat makron fr att hjlpa till
  med detta.


  Den frsta av dessa makron r %setup-makron. I dess enklaste form
  (inga kommando-rads-parametrar), s packar den helt enkelt upp
  kllkoden och cd-ar till kllkods-katalogen. Den knner ocks till
  fljande parametrar:


    -n namn stter namnet p installerings-katalogen till det angivna
     namnet. Standarden r $NAMN-$VERSION. Andra mjligheter inbegriper
     $NAMN, ${NAMN}${VERSION}, eller vad den huvudsakliga tar-filen nu
     anvnder. (Observera att dessa "$"-variabler inte r riktiga
     varibler, som r tillgngliga inom spec-filen. De anvnds hr bara
     i stllet fr exempel p namn. Du mste anvnda det riktiga namnet
     och den riktiga versionen i ditt paket, inte en variabel.)

    -c skapar och cd-ar till den angivna katalogen innan den kr untar.

    -b # packar upp Source# innan den cd-ar till katalogen (och detta
     gr inte ihop med -c, s anvnd det inte). Detta r bara anvndbart
     i paket med flera kllkods-filer.

    -a # packar upp Source# efter att det cd-ar till katalogen.

    -T Denna parameter kr ver standard-handlingen, att packa upp
     kllkoden, och krver en -b 0 eller -a 0 fr att f den
     huvudsakliga kllkods-filen uppackad. Du behver detta nr det
     finns sekundra kllkodsfiler.

    -D Radera inte katalogen innan uppackningen. Det r endast
     anvndbart dr du har mer n en konfigurerings-makro. Den ska
     endast anvndas i konfigurerings-makron efter den frsta (men
     aldrig i den frsta).

  Nsta av de tillgngliga makrona r %patch-makron. Denna makro hjlper
  dig att automatisera processen att lgga till patchar till kllkoden.
  Den knner till flera parametrar, vilka rknas upp nedan:


    # lgger till Patch# som patch-fil.

    -p # anger antalet kataloger att strippa, fr patch(1)-kommandot.

    -P Standard-handlingen r att lgga till Patch (eller Patch0).
     Denna parameter frhindrar detta och krver en 0 fr att f den
     huvudsakliga kllkods-filen uppackad. Denna parameter r anvndbar
     i en andra (eller senare) %patch-makro, vilken krver ett annat
     nummer n den frsta makron.

    Du kan ocks kra %patch#, istllet fr att kra det riktiga
     kommandot: %patch # -P .


  Fler makron n s br du inte behva. Efter att du har gjort allt
  detta, s kan du gra vilka ytterligare instllningar du behver,
  genom skal-program av sh-typen. Allt du tar med, fram till %build-
  makron (vilken tas upp i nsta avsnitt) krs via sh. Se exemplen ovan
  fr information om vilka sorters saker du kan tnkas vilja gra hr.


  6.5.  Build

  Det finns egentligen inga makron fr detta avsnitt. Hr ska du bara
  lgga in de kommandon, som du behver fr att kompilera mjukvaran,
  efter att du har packat upp kllkoden, patchat den och cd-at till
  katalogen. Det hr r bara en uppsttning kommandon som skickas till
  sh, s alla giltiga sh-kommandon fungerar hr (inklusive kommentarer).
  Din aktuella arbets-katalog stlls i varje avsnitt om till kllkodens
  topp-katalog, glm inte det. Du kan cd-a till underkataloger, om det
  r ndvndigt.


  6.6.  Install

  Det finns inga makron hr, heller. Hr ska du bara stoppa in de
  kommandon som r ndvndiga fr att installera. Om du har make install
  tillgngligt, i paketet du skapar, lgg in det hr. Om inte, s kan du
  antingen patch makefilen, s att den har make install och sedan gra
  en make install hr, eller s kan du installera filerna manuellt med
  sh-kommandon. Du kan se din aktuella katalog som kllkodens topp-
  katalog.


  6.7.  installering/avinstallering Valfria skal-program som krs fre
  eller efter

  Du kan lgga in skal-program fre och efter installering och
  avinstalleringen, i binr-paket. En bra anledning att gra detta r
  fr att gra saker som att kra ldconfig efter installeringen, eller
  radera paket som innehller delade bibliotek (shared libraries).
  Makrona fr alla skal-program r som fljer:


    %pre r makrot fr skal-program som krs innan installeringen.

    %post r makrot fr skal-program som krs efter installeringen.

    %preun r makrot fr skal-program som krs fre avinstalleringen.

    %postun r makrot fr skal-program som krs efter avinstalleringen.

  Innehllet i dessa avsnitt kan vara vilka sh-program som helst, men du
  behver inte #!/bin/sh.


  6.8.  Files

  Det hr r avsnittet dr du mste rkna upp filerna till binr-
  paketet. RPM kan inte p ngot stt veta vilka binr-filer som
  installeras som ett resultat av make install. Det finns INGET stt att
  gra detta. Vissa har freslagit att det skulle kra find innan och
  efter att paketet installerats. I ett system med flera anvndare r
  detta dock oacceptabelt, eftersom andra filer kan skapas, under det
  att ett paket skapas, som inte har ngonting att gra med sjlva
  paketet.


  Det finns ngra makron tillgngliga fr att gra ngra speciella
  grejer hr ocks. De rknas upp och beskrivs hr:
    %doc anvnds fr att markera dokumentation i kllkods-paketet, som
     du vill installera i en binr-installering. Dokumenten kommer
     installeras i /usr/doc/$NAMN-$VERSION-$UTGVA. Du kan rkna upp
     flera dokument p samma rad med denna makro, eller s kan du rkna
     upp dem separat, med en makro fr varje dokument.

    %config anvnds fr att markera konfigurerings-filer i ett paket.
     Detta inkluderar filer som sendmail.cf, passwd osv. Om du senare
     avinstallerar ett paket som innehller konfigurerings-filer, s
     kommer alla ofrndrade filer raderas, och de som har ndrats
     kommer flyttas till sina gamla namn, med .rpmsave tillagt till
     namnet. Du kan rkna upp flera filer med denna makro ocks.

    %dir markerar en enda katalog, i en fillista, s att den blir
     inkluderad som "gd" av paketet. Som standard r det s, att om du
     listar ett katalog-namn UTAN en %dir-makro, s kommer ALLT i den
     katalogen att inkluderas i fil-listan, och senare installeras, som
     en del av det paketet.

    %files -f <filnamn> lter dig lista dina filer i en godtyckligt
     vald fil, i kllkodens build-katalog. Det hr r trevligt i de fall
     dr du har ett paket som kan skapa sin egen fillista. D inkluderar
     du bara den fillistan hr, och s behver du inte sjlv rkna upp
     filerna.

  Det viktigaste att tnka p i fillistan r hur du rknar upp
  kataloger. Om du tar med /urs/bin av misstag, s kommer ditt binr-
  paket att innehlla varje fil i /usr/bin p ditt system.


  6.9.  Bygga paketet


  6.9.1.  Kllkodens katalog-trd

  Det frsta du behver r ett korrekt konfigurerar build-katalog-trd.
  Detta kan du stlla in med /etc/rpmrc-filen. De flesta anvnder helt
  enkelt /usr/src.


  Du kan bli tvungen att skapa fljande kataloger i ditt build-trd:


    BUILD r katalogen dr allt skapande (building) utfrs av RPM. Du
     behver inte utfra dina test-byggen p ngot speciellt stlle, men
     det r hr RPM kommer utfra sitt byggnads-arbete.

    SOURCES r katalogen dr du br stoppa in dina ursprungliga
     kllkods-filer (packade med tar) och dina patchar. Hr kommer RPM
     leta, som standard.

    SPECS r katalogen dr alla spec-filer ska finnas.

    RPMS r katalogen dr RPM kommer stoppa de binra RPM-paket som det
     byggt.

    SRPMS r katalogen dr alla kllkods-RPM-paket kommer hamna.


  6.9.2.  Test-bygga

  Det frsta du antagligen kommer vilja gra r att f kllkoden att
  kompilera, utan att anvnda RPM. Fr att gra detta, packa upp
  kllkoden, och byt ut katalog-namnet till $NAMN.orig. Packa sedan upp
  kllkoden igen. Anvnd kllkoden att kompilera frn. G in i kllkods-
  katalogen och flj instruktionerna fr att kompilera den. Om du mste
  modifiera saker och ting, s behver du en patch. S fort du har
  kompilerat det, stda upp i kllkods-katalogen. Se till s att du har
  tagit bort alla filer som skapas av configure-programmet. cd-a ut ur
  kllkods-katalogen till dess frldra-katalog. Sen kan du gra ngot i
  stil med:


               diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch




  Detta skapar en patch t dig, som du kan anvnda i din spec-fil.
  Observera att "linux" i patch-namnet bara r ett stt att identifiera
  den. Det r bst om du anvnder ngot mer beskrivande namn, ssom
  "config" eller "bugs" fr att beskriva varfr du var tvungen att skapa
  en patch. Det r ocks en god id att titta p patch-filerna du ska
  par, innan du anvnder dem, fr att se till s att inga binr-filer
  kom med av misstag.



  6.9.3.  Skapa fil-listan

  Nu nr du har kllkoden som ska kompileras, och vet hur du ska gra
  det, kompilera och installera den. Titta p utdatan frn
  installerings-sekvensen och skapa din fil-lista, som du ska anvnda i
  spec-filen, frn den. Vi skapar oftast spec-filen parallellt med dessa
  andra steg. Du kan skapa en frsta fil-lista och fylla i de enkla
  delarna, och sedan fylla i de andra stegen, medan du utfr dem.



  6.9.4.  Skapa paketet med RPM

  S fort du har en spec-fil, s r du klar att frska skapa ditt
  paket. Det bsta sttet att gra detta, r med en kommando-rad i stil
  med:



               rpm -ba foobar-1.0.spec




  Det finns ocks andra alternativ, som r anvndbara med -b-parametern:


    p betyder att endast prep-avsnittet i spec-filen ska kras.

    l r ett list-kollning, som gr ngra kontroller p %files.

    c gr en prep och kompilerar. Detta r anvndbart nr du r osker
     p om kllkoden alls kommer att kompilera. Det kan verka ondigt,
     eftersom du helst vill fippla med kllkoden sjlv, tills du fr den
     att kompilera, och sedan anvnda RPM, men nr du vant dig vid att
     anvnda RPM, s kommer du hitta tillfllen d du fr anvndning fr
     detta.

    i gr en prep, kompilera och installera.

    b prep, kompilera, installera och bygg endast ett binr-paket.

    a skapa allt (bda kllkods- och binr-paket).

     Det finns flera alternativ till -b-parametern. Dessa r:


    --short-circuit hoppar direkt till ett specifikt steg (kan -->
     --endast anvndas med c och i).

    --clean raderar byggnades-trdet nr det allt r klart.

    --keep-temps spara alla temporra filer och skal-program, --> --som
     skapades i /tmp. Du kan faktiskt se vilka filer som skapades i -->
     --/tmp med -v-parametern.

    --test utfr inga steg p riktigt, men anvnder keep-temp.


  6.10.  Testa det

  Nr du har en kllkods- och en binr-rpm fr ditt paket, s mste du
  testa det. Det enklaste och bsta sttet r att anvnda en helt annan
  maskin  n den du skapade paketet p. Nr allt kommer omkring s har
  du bara gjort en massa make install p din egen maskin, s det borde
  vara ganska vl installerat.

  Du kan kra rpm -u paketnamn p paketet du vill testa, men det kan
  vara frrdiskt, eftersom du, d du skapade paketet, gjorde en make
  install. Om du glmde att ta med ngot i fil-listan, s kommer det
  inte bli avinstallerat. Du kommer d om-installera binr-paketet och
  ditt system kommer vara komplett igen, men din rpm r det fortfarande
  inte. Kom ihg, att bara fr att du kr rpm -ba paket, s kommer de
  flesta som installerar paketet kra rpm -i paket. Se till s att du
  inte gr ngot i build- och install-avsnitten, som behver gras nr
  binr-filerna redan r installerade.




  6.11.  Vad du ska gra med dina nya RPM-paket

  S fort du skapat dina egna RPM-paket (om vi frutstter att det r
  ngot som inte redan gjorts till RPM-paket), s kan du dela med dig av
  ditt arbete till andra (vilket ocks frutstter att det du gjorde ett
  RPM-paket av r fritt distribuerbart). Fr att gra detta, ladda upp
  det till ftp.redhat.com <ftp://ftp.redhat.com>.



  6.12.  Och nu d?

  Se avsnittet ovan, om att Testa det och Vad du ska gra med dina nya
  RPM-paket. Vi vill ha alla tillgngliga RPM-paket vi kan f, och vi
  vill att de ska vara bra RPM-paket. Ta dig tid att testa dem
  ordentligt, och ta dig sedan tid att ladda upp dem, s att alla kan f
  tillgng till dem. Var vnlig se till att du laddar upp fritt
  distribuerbar mjukvara. Kommersiell mjukvara och shareware ska inte
  laddas upp, om de inte har en copyright som explicit sger att det r
  tilltet. Detta inkluderar Netscapes mjukvara, ssh, pgp osv.


  7.  RPM-skapande fr flera arkitekturer

  RPM kan nu anvndas fr att bygga paket fr Intel i386, Digital Alpha
  som kr Linux och Sparc. Det har ven rapporterats att det fungerar p
  SGIs och HPs arbetsstationer. Det finns flera funktioner som gr det
  enkelt att skapa paket p alla plattformar. Den frsta av dessa r
  "optflags"-direktivet i /etc/rpmrc. Det kan anvndas fr att ange
  flaggor, vilka anvnds nr mjukvara byggs med arkitektur-specifika
  vrden. En annan funktion r "arch"-makrona i spec-filen. De kan
  anvndas fr att utfra olika saker, beroende p vilken arkitektur du
  skapar paketen p. En annan funktion r "Exclude"-direktivet i rubrik-
  delen.


  7.1.  Exempel p spec-filer

  Det fljande r delar av spec-filen till "fileutils"-paketet. Det r
  konfigurerat fr att kunna byggas p bde Alpha och 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.  Opt-flaggor

  I det hr exemplet kan du se hur "optflags"-direktivet anvnds frn
  /etc/rpmrc. Beroende p vilken arkitektur det byggas p, s ges det
  korrekta vrdet till RPM_OPT_FLAGS. Du mste patcha Makefilen fr ditt
  paket, fr att anvnda denna variabel, istllet fr de vanliga
  direktiven som kanske anvnds (som -m486 och -O2). Du kan f en bttre
  knsla fr vad som behver gras, genom att installera detta kllkods-
  paket och sedan packa upp kllkoden och underska Makefilen. Ta sedan
  en titt p patchen fr Makefilen och se vilka ndringar som mste
  gras.



  7.3.  Makron

  %ifarch-makron r vldigt viktig i allt detta. I de flesta fall
  behver du skapa en patch eller tv, som r specifika fr endast en
  arkitektur. I det hr fallet kommer RPM tillta dig att lgga till den
  patchen till endast en arkitektur.

  I exemplet ovan har fileutils en patch fr 64-bitars maskinter. Denna
  ska uppenbarligen endast lggas till p Alpha. S vi la till en
  %ifarch-makro kring 64-bitars-patchen, p fljande stt:



       %ifarch axp
       %patch1 -p1
       %endif




  Detta ser till s att patchen inte lggs till p ngon annan arkitek
  tur n alpha.


  7.4.  Utesluta arkitekturer frn paket

  Fr att du ska kunna underhlla kllkods-paket i en katalog, fr alla
  plattformar, s har vi implementerat mjligheten att "utesluta" paket
  frn att byggas p vissa arkitekturer. Detta r fr att du fortfarande
  ska kunna gra saker som


       rpm --rebuild /usr/src/SRPMS/*.rpm




  och f rtt paket att byggas. Om du fortfarande inte har portat en
  applikation till en viss plattform, s r allt du behver gra att
  lgga till en rad som:


       ExcludeArch: axp




  till rubrik-delen av spec-filen i kllkods-paketet. Bygg sedan om
  paketet p plattformen som det ska kunna byggas p. Du har sedan ett
  kllkods-paket som gr att bygga p en Intel, och kan som enkelt kan
  hoppas ver p en Alpha.


  7.5.  Avslutning

  Att anvnda RPM fr att bygga paket fr flera arkitekturer r oftast
  enklare att gra n att skaffa paketet sjlvt och bygga det p bda
  stllena. Detta blir dock mycket enklare, i det att fler av de "hrda"
  paketen byggs. Som alltid s r den bsta hjlpen, om du fastnar, d
  du bygger RPM-paket, att titta p andra, liknande paket.






  8.  Upphovsrtt

  Detta dokument och dess innehll r upphovsrtts-skyddat.
  Vidaredistribution av detta dokument r tillten, s lnge innehllet
  r helt och hllet intakt och utan ndringar. Med andra ord, du fr
  endast omformatera och trycka om och vidaredistribuera det.




























































