
                            RPM HOWTO (RPM at Idle)
                                       
@: Donnie Barnes, djb@redhat.com
Ķ: JR marr@cc.nccu.edu.tw

   v2.0, 8 April 1997
     _________________________________________________________________
   
   pϥ Red Hat ]˺޲z{C
     _________________________________________________________________
   
1. Introduction

2. Overview

3. General Information

     * 3.1 Acquiring RPM
     * 3.2 RPM Requirements
       
4. Using RPM

5. Now what can I really do with RPM?

6. Building RPMs

     * 6.1 The rpmrc File
     * 6.2 The Spec File
     * 6.3 The Header
     * 6.4 Prep
     * 6.5 Build
     * 6.6 Install
     * 6.7 Optional pre and post Install/Uninstall Scripts
     * 6.8 Files
     * 6.9 Building It
     * 6.10 Testing It
     * 6.11 What to do with your new RPMs
     * 6.12 What Now?
       
7. Multi-architectural RPM Building

     * 7.1 Sample spec File
     * 7.2 Optflags
     * 7.3 Macros
     * 7.4 Excluding Architectures from Packages
     * 7.5 Finishing Up
       
8. Copyright Notice
     _________________________________________________________________
   
1. Introduction

   RPM O Red Hat Package Manager YgA MW٤W]t Red Hat 
   rA l]pzOĶ}A ηNboӵ{ണѵҦH
   ϥΡC zL rpm ޲zA ϥΪ̥iHNYӷsn骺 source codeA s
   z]˦t@ source P binary ɮ׫A p@ӡA ڭ̥iHPa
    binary ɮסA iw˻PMlܺ޲zu@A  source 
   ɮסA ]ܤKaAQsz]ˡC PɡA rpm ޲zۤ@ƮwA
   Y]tFҦ{Mɮ׸ơA zLoƮwA ڭ̥iHi{
   M󤧽T{Pdߤu@C
   
   Red Hat qyLOtӡA @PoiΨϥ RPM 󥦭̪
   distribution C RPM ۷㦳uʡA ާ@D`²A ѨtXRo
   i¦A t@譱A oi}A ӥBiKOoA ϥΪ̥iH^
   Х{XW~PץeC unbŦX GPL ŧiUA jaiH
   ۥѦaϥΤζǼ RPM {C
   
   pGzQo RPM ԲӪ󻡩A iHѦ Ed Bailey Ҽ
   Maximum RPM @ѡC oѥi [1]www.redhat.com UʶRC
   
2. Overview

   A ڭ̥ӤF RPM I᪺]pǡA ]pت@A KO\
   ϥΪ̯ϥΡu²bv source ɮסC IA ڭ̥^ RPP {
   A ( oO@ӦҨϥΪ{M޲ztΡA LA  RPM ˨S
   l )A ұĥΪ source ɮסA OgLB~u}ѳBzvC zפW
   A ϥΪ̥iHZL~aA q@ RPP lɡA  install P make 
   @C Oo˳BzL source ɮסA wODA ϥΪ̥iLqoA
   ɮ׸̨쩳ǦaQLA q`B~^gBzL source ɮסC
    RPM kA KOϥΪ̨ougBzL source ɮסvA PɦA
   W@upatch ɮסvA iǤ{sĶu@C ڭ̫ܮeo{A o
   kaӤ֦nBC 򻡩OS |ӪpҡA b Red Hat Linux UA p
   GYӷs{ݥ@FA ziSnAY}l compile ʧ@A [
   upatch ɮסveA ݬݬO_ǳ~OzݭnC p@ӡA
   Ҧt{w]ȫKܮeݥXӡC
   
   t@譱A RPM ]㦳jjdߥ\A ziHwӵ{M󪺸ƮwA
   άOYǯSwɮסA idߪʧ@A ]iHPadXA Yɮ׬Oݩ
   ӵ{MA άOq̨ӪC RPM ɮץOgLYA z٬O
   iHܮeӧֳtaA dߨCӵ{M󪺤eA ]b{M̡A wg[
   J@qS binary headerA OFd߮ɩһݪeA o˪k
   A ϱodߥ\ܱo۷ֳtC
   
   t@jj\A KO{M󪺧T{C pGz߻~YɮסA 
   OYӵ{M󪺭nA 򰵭ӡuT{ʧ@vNFC p
   `aA K|qzA oɭԡA ziHpsw˸ӵ{MA 
   BҦe]wɡA |naQOsUӡC
   
   ڭ̫D`P¨Ӧ BOGUS distribution ̡A L̴ѤF\hNcQA
   Ӥ]QĥΩ RPM C M RPM O Red Hat Software ҼgA
   ާ@ҦOھ BOGUS (PM P PMS) Ҽg{XC
   
3. General Information

3.1 Acquiring RPM

   ̦nB²檺kA MNOw Red Hat Linux oA pGz覺qA
   ̵MiHq FTP A l{^ӦwˡC {ɮתmO
   [2]ftp.redhat.comC
   
3.2 RPM Requirements

   Q RPM ̤jA NOun 2.4.2 HW cpio {vC RPM
   DnO]p Linux ϥΪA L Unix tΪۮeʤ]۷A 
   WA wgQb SunOSB SolarisB AIXB IrixB AmigaOS ΨLtΤW
    compile ʧ@C ȱo`NOA ѤP Unix @~xҽsĶXӪ
   binary {MA O੼ۮeC
   
   WzuOw RPM ̧CݨDA pGQn source ɮ׫سy_A zٻ
   n gccA make sĶu{A oMسy@{MõLGPC
   
4. Using RPM

   RPM iHΩw˵{MWA ²檺ާ@榡pUG
   
rpm -i foobar-1.0-1.i386.rpm

   t@²檺ާ@dҡA OΩѰY@ӵ{M󪺦wˡG
   
rpm -e foobar

   UӪOdҸA D`ΡA iHzzL FTP Ӧw˵{M
   C pGzsWA QwˬYӷs{MɡA һݤUFOA
   KObɮ׫e[WA URL 榡A ҦpG
   
rpm -i ftp://ftp.pht.com/pub/linux/redhat/rh-2.0-beta/RPMS/foobar-1.0-1.i386.rp
m

   ЯSO`NA RPM ثew\zL FTP ӶidߩΦwˡC
   
   WzO²檺OA rpm ٦\hPﶵ覡A oǥi Usage 
   ݥXG
   
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}

   ziHb RPM  man page ̡A oǿﶵԲӻC
   
5. Now what can I really do with RPM?

   RPM OӫD`ΪuA ӥBpzҪA 㦳\hﶵ\C zF
   oǥ\઺̦n覡A KOڤдXӽdҡA eڭ̤wgLw˻PѰ
   w˪²ҤlA UO@B~dҡG
     * ]A zp߻~RFXɮסA Tw쩳OɮסA zQ
       ӨtζiT{ʧ@A HFѭǳiwglA ziHo˰G
       
rpm -Va

     * ]A zI@ӻ{XӪɮסA QnDOݩ@ӵ{M
       ܡA ziHo˰G
       
rpm -qf /usr/X11R6/bin/xjewel

       䵲G|oG
       
xjewel-1.6-1

     * pGz@ӷs RPM ɮסA oMeA QnoT
       A iHo˰G
       
rpm -qpi koules-1.2-2.i386.rpm

       䵲G|oG
       
Name        : koules                      Distribution: Red Hat Linux Colgate
Version     : 1.2                               Vendor: Red Hat Software
Release     : 2                             Build Date: Mon Sep 02 11:59:12 199
6
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.

     * pGzQFѬY RPM ɮסA |btθ̦w˭ɮסA ziHo˰G
       
rpm -qpl koules-1.2-2.i386.rpm

       䵲G|OG
       
/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

   WzuO@ǽdҡA z RPM U[xɡA ӯQXLhзNզX
   C
   
6. Building RPMs

   pGziHۭӨoһݪnAسy RPM ɮפ]OD`²檺C
   
   سy RPM ɮת򥻨BJpUG
     * Twz /etc/rpmrc wgŦXtΩһݡA ]wC
     * ^ҭnسy source codeC
     * iһݪ source ɮ patch ʧ@A Hϱoڭ̯බQa build ӵ{
       C
     * {M󼶼g@ spec ɮסC
     * T{Cɮ׳bTؿmC
     * ϥ RPM  build ӵ{MC
       
   pG@ާ@TA RPM KබQ build  binary P source {MC
   
6.1 The rpmrc File

   ثeA RPM tΰߤ@]wɡA OzL /etc/rpmrc ɮרӺ޲zC 䤺e
   dҦpUG
   
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 o@ԭzA ΥH RPM O_nM vendor
   @ԭzA  verdor TiӦ /etc/rpmrc άO spec ɮת
   header BC pGzWzXאּ 0A KoM\C o˪
   ]w覡A P˾AΩ require_distribution P require_group ԭzWC
   
   UӡA ڭ̬ݨ distribution o@A ziHb]wA άOb
   spec ɮת header B]wC ڭ̦bY distribution W build {M
   ɡA N⤣ݭnd߳]wA 椺e]wTA ]Oaӳ\hKQC
   vendor @檺@ΡA MWz distribution D`ۦA 䤺eäw
   ( ҦpO Joe's Software  Rock Music Emporium )C
   
   RPM ثe䴩uhx[cv{M build \A ڭ̥iHb rpmrc ɮ
   ̫w ``optflags'' ܼơA i{M build ʧ@ɡA Ki̾کһݪ
   xA ίSwܼƤeC ڭ̱N|bUh`̡A pϥ
   oܼơC
   
   FWz macro ]w~A ٦\hL]w覡A ziHϥΡG
   
rpm --showrc

   ӬdݨtΪ tag PiѨϥΪ flag ǡC
   
6.2 The Spec File

   bڭ̱NQ spec ɮת]wC build @ӵ{MɡA ڭ̻ݭnϥΨ
   spec ɮסA 䤺eӵ{M󪺻A B~٥]A@ǫOA ΥHܾ
    build L{A ٦@ɮצCA ΥHܵ{M󤤪ɮסA OQ
   w˨̡C
   
   spec ɮתRW覡A ̦nO`зǪDҡA 榡Ӭ package
   name-dash-version number-dash-release number-dot-specC
   
   o̧ڭ|@Ӥp spec ɮ׬ (vim-3.0-1.spec)G
   
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 The Header

   ɮ header A XӯSw줺eA z[H]wA t~
   XI`NƶC z]w줺epUG
     * Summary: H@תyzA ӻ{M󪺤eC
     * Name: oɮצW٥PzǳƨϥΪ rpm ɦW@PC
     * Version: oӪW٥PzǳƨϥΪ rpm ɦW@PC
     * Release: oӵoǸPzǳƨϥΪ rpm ɦW@PC ( ]NOA
       pGڭ̧@ӵ{MA ƫo{ǤppDA s
       build @A ɷs{MA oǸKO 2  )C
     * Icon: pGzϥΤFLwˤu{ ( O Red Hat 
       ``glint'' { )A o̥iHw۹ϥɡA O@
       gif ɮסA ӥB SOURCES ؿC
     * Source: o̫wFǡugBzL source ɮסv HOME ؿA 
       zQnso source ɮסA άO˹O_sɡA NݭnΨo
       ӳ]wC `NƶG o̪ɦWA uȥvPztΤWɮצW٤@P
       ( ]NOA U source ɮ׫A nhܧɮצW )C PɡA
       ziHw@ӥHW source ɮסA 覡pUG
       
Source0: blah-0.tar.gz
Source1: blah-1.tar.gz
Source2: fooblah.tar.gz

       oɮ׳| SOURCES ؿU ( ؿcA |b᭱
       "The Source Directory Tree" `̥[HQ )C
     * Patch: pGzݭnsU patch ɮסA ؿm]w󦹡C `
       NƶG o̪ɦWA PztΤWϥΪ patch ɮצW٬۲šA t
       @譱A Mezh source ɮת]w@ˡA z]iHwh patch
       ɮצW١C 榡dҦpUG
       
Patch0: blah-0.patch
Patch1: blah-1.patch
Patch2: fooblah.patch

       oɮ׳| SOURCES ؿUC
     * Copyright: o̪]wA ΥH{MĥΦتvnC  GPLB
       BSDB MITB public domainB distributableB commercial A Oz
       iHwC
     * BuildRoot: ziHw@ӥؿA |Q@O build P install s{
       M ``root'' ؿA pGzQbڦwˤeA յ{e
       A iHΦ]wC
     * Group: o̪]wA Ω󰪶wˤu{ ( Ҧp Red Hat 
       ``glint'' { ) A ΥH{ݪsզmC ثesլ[c
       A jPpUҭzG
       
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 oӨëDuO header ءA zӳsPWzؤ@
       PgA Cӡu{MvΡul{MvA Ӧ@
       description tagC o̤\zJh椺eA ϱo{M㦳@
       ԺɪC
       
6.4 Prep

   o̬O spec ɮתt@Ӭq`A ΥH]w source ɮ״NA HѤU
   @B build ʧ@C `ڭ̥gL setupA ~ڶi make ʧ@A
   ]bq`A ڭ̱Nݭni source ɮת patch P setupC
   
   ƭȱo`NG UӪq]wA ڤWuOYq shell scripts
   mA ziHN shell scripts eA t~H sh script 覡[Hs
   ɡA ñN script {Wٸm %prep tag A ΥH source ɮת
   unpack P patch ʧ@C MA H즳 macro ӰA ӬOK\h
   C
   
   Ĥ@ӭn macro O %setupC pGڭ̱ĥΨ²檺榡 ( Y[
   ROCѼƪp )A |¦aN source ɮץ[H unpackA  cd iJ
   source ɮתؿC ~A z٥iHϥΤUCﶵG
   
     * -n name oӿﶵ]w| build ؿ] nameA w]Ȭ
       $NAME-$VERSIONA LiؿW٥]A $NAMEA ${NAME}${VERSION}A
       άO tar ɮץҥΪؿC ( Ъ`NA Wz ``$'' ܼơA ä
       O spec ɮ׸̪ܼơA ̦bo̥uOΨӥN@ӽdҦW١A z
       b{M̡A ϥιڪɮצWٻPW )C
     * -c bi untar ʧ@eA |إߤ@ӥؿA  cd iJӥؿC
     * -b # b cd iJӥؿeA |N Source# i untar ʧ@ ( oӿ
       P -c ﶵæsɡA OSNqA ҥHקKPɨϥ )A ӥBo
       ﶵA ȾAΩh source ɮתXC
     * -a # b cd iJӥؿA AN Source# i untar ʧ@C
     * -T oӿﶵ|\L쥻w] untar ʧ@A Pɻݭn@ -b 0 άO -a
       0 ﶵӰtXA zϥΨӥHW source ɮ׮ɡA Kݭn\
       C
     * -D bѶ}{M󤧫eA nRӥؿC oӿﶵȾAΩϥΨӥH
       W setup macro XA ӥBuΩĤ@ setup macro  ( dU
       OΩĤ@Ӥ )C
       
   Uӭn macro O %patchC OΨӨU۰ʳBz source ɮקs
   ʧ@A ﶵܦhA CpUG
     * # |ޥ Patch# @һݤsɡC
     * -p #  patch(1) OݰtXw strip ؿƥءA AiHbﶵ
       [H]wC
     * -P w]ʧ@Oޥ Patch (  Patch0 )A zϥΨӥHW
       %patch macroA åBݭnPĤ@ macro P patch number ɡA o
       ﶵo۷ΡC |\L쥻w]ʧ@A åBݭntX@ 0A H
       ϱoDn source ɮױoHi untar ʧ@C
     * z]iHϥ %patch#A Ӥϥγo˪OG %patch # -P
       
   oӴNOһݭnD macro A Fѥ̤A z]iHzL
   sh  script 榡A ]wP setup kA b %build macro ( bU@
   `| ) eA zҳ]wҦﶵA Og sh ӰA ziHA
   ѦҤ@UezdҡA γ\iHAΩzݭnC
   
6.5 Build

   oӳ`̡A ҭzΪëDu macroC z source ɮ untarA åB
   patch A cd iJؿA }lǳ build ʧ@ɡA KObo̳]w
   Ǳ build ʧ@OC ӳoǫO٬Oǵ shA ҥH sh O
   A iHbw ( ]A comments b )C b spec ɮ׸̪C@q`
   ]wA zثeҦbؿmA |Qs]w source directory 
   WhA ҥHШcObߡA nɡA ziH cd iJlؿC
   
6.6 Install

   o̩ҳ]wA Pˤ]O macroA 򥻤WA zunb]w@
   install һݤOC pGzb{M̡A ѧ㪺 make install
   O]wA Цbq]wA MA z]iH makefile ɮ
   ̡A  make install A MȦbq]ww make installC
   άOA ]iH install O浹 sh ӰC OA zثeҦb
   mA ӤwQs]w source directory ̤WhC
   
6.7 Optional pre and post Install/Uninstall Scripts

   {Mbw˻PѰwˤeAziHw scriptA Ϩp[H
   C i榹ʧ@Dn]@A KOJpUXA ĴpA ڭ̦bw
   ˩θѰwˤ@ǧt shared library {MɡA ݭn ldconfigC
   U script һݤ macro W٦pUG
     * %pre  pre-install scripts  macroC
     * %post  post-install scripts  macroC
     * %preun  pre-uninstall scripts  macroC
     * %postun  post-uninstall scripts  macroC
       
   oǬq]weA iHO sh  scriptA LA zLw
   ԭz #!/bin/shC
   
6.8 Files

   q]wA zCX{M󤺤ɮצW١C RPM õLqo
   A  make install A 쩳 binary ɮ׳Qw˶ihA ثe
   LLkiHѨMDC ǤHĳb install {M󪺫eA ϥ
   find OӳBzA Lb@ӦhϥΪ̪tΤUA oӬOi檺A ]
   b{M build L{A i঳LP{M󥻨Lɮ׳Q͡C
   
   t~٦@ macroA ̥iΨӰ@ǯSu@A NCzUG
     * %doc ΥHХܦb install {MɡA zҷQnwˤ source ɮ׸̪
       OǡA ӳoǻ|Qw˦b
       /usr/doc/$NAME-$VERSION-$RELEASEC ziHbROCWA H macro P
       ɫwnXӻW١A άOH macroA UO̤@@w
       C
     * %config ΥHХܵ{M̪]wɮ׬OǡA o]A sendmail.cfB
       passwd ɮסC pGzƫ uninstall FYӵ{MA ӥBt
       ]wɮסA ҦSܪɮ׷|QA өҦwgܪɮ
       A |bɮצW٤A [W .rpmsave W١C P˪A ziH
       bPɦCXhɮצW١C
     * %dir bɮצCA ЩY@ӯSwؿA ΥHӥؿY{M
       Ҿ֦C pGzbɮצCw@ӥؿW١A oSbe[
       W%dir macroA ӥؿA Ҧɮץؿ|Q]tbɮצC
       A æbyA Q@O{M󪺤@ӥQw˶ihC
     * %files -f <filename> \zޥ source  build ؿ̡A YɮײM
       檺eC zJY@ӵ{MA iHإߦۤvɮײMɡA o
       ӿﶵKo۷A zunޥθӥɮײMA Aۦ樯Wa
       CXC
       
   bɮצC̡A ӳ̤j`NƶA KOؿ]wC pGzp߱N
   /usr/bin CJA z{MA N|]Atθ /usr/bin UҦ
   סC
   
6.9 Building It

  The Source Directory Tree
  
   Ĥ@ơA zw@ӾA build treeA ]wib /etc/rpmrc 
   ׸̧A ӤjhƤH|ϥ /usr/srcC
   
   ziٻݭnإߤUCؿA ϱo build tree ]wG
     * BUILD ؿKO RPM iҦ build ʧ@u@ؿC zSOab
       ӥؿiթʪ build ʧ@C
     * SOURCES ؿs۱zu_lv (original) l tar ɮסB P
        patch ɮסA RPM w]|M䥻ؿC
     * SPECS ؿsҦ spec ɮסC
     * RPMS ؿsҦ build ͤ binary 榡 RPM ɮסC
     * SRPMS ؿsҦ source 榡 RPM ɮסC
       
  Test Building
  
   A zj|Qn^ source ɮסA bSϥ RPM pUA i@
   u²bv build ʧ@C BJKOA Ѷ} source ɮסA NӥؿW
   אּ $NAME.orgA MAѶ} source ɮסA ڭ̻ݭnϥΦ@ source 
   i build ʧ@C iJ@ source ؿA ӫܨӶi buildA pGz
   sFA z|ݭn@ patchA @z build u@A KiM
    source ؿ̪eC нTwN configure script ̡A Ҧͤɮ
   [HMA MA cd ^ source ؿWhA ۫Kio˪ʧ@G
   
diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch

   WzO|ͤ@ patchA zb spec ɮץiHϥΨ쥦C `NW
   ''linux'' W١A uO@Ӵܧ@ΡA γ\ziHϥΨLW١A Ѧp
   ''config''  ''bugs'' ܦW١A ΥHzHs@@ patch 
   סC PɡA z̦n]bϥ patch ɮפeA [YeA TwO_
   LN]tFL binary ɮסC
   
  Generating the File List
  
   {bA zwgF@iH build  source ɮסA ӥBz]Dp
   ʧ@A p build P install C [ install ɡA ̧ǲͪ
   GA ڭ̱NѦGA b spec ɮפإߤ@ɮצCC q`ڭ̷|bi
   WzBJPɡA @_إ spec ɮסA ziHɮת_lA M
   X²檺A MALBJ[HC
   
  Building the Package with RPM
  
   @zF@ spec ɮסA @KwNA ziHǳ build հʧ@C
   ̦n覡A NOϥUCOG
   
rpm -ba foobar-1.0.spec

   tX -b ﶵA ڭ٥iHϥΨLΪﶵG
     * p Ou spec ɮפ prep C
     * l w %files iɮצCˬdʧ@C
     * c  prep P compile ʧ@C zTw source ɮ׬O_
       build ɡA ﶵo۷ΡC γ\z|ıoèShjγBA ]
       ziQn~ק source ɮץA  build A}lϥ RPMA
       @zx RPM ΪkA |o{KQBC
     * i  prepB compileB P installC
     * b  prepB compileB installB åu build X@ binary {M
       C
     * a Ҧ build ʧ@ ( ]A source P binary {M )C
       
   tX -b ﶵA t~٦@ǲӶﶵiѨϥΡA ̤OOG
     * --short-circuit |ܬYӯSwq ( ȥitX c P i ﶵӨ
        )C
     * --clean 槹ɡA  build treeC
     * --keep-temps |Ҧ temp P scripts ɮסA Odb /tmp ؿA
       ziHϥ -v ﶵA [ɮ׳Q͡C
     * --test äڰ󶥬qʧ@A  keep-temp C
       
6.10 Testing It

   @F source P binary  rpm ɮסA ziդu@C ²B
   n覡A NOϥΥt@xӴաA ]NOi build ʧ@~C
   A zbzWA @j諸 make install ʧ@A YbW
   աA M|o۷QoC
   
   ziH rpm -u packagename ӶiաA o˰٬OyiA
   ]b build L{A zF make install ʧ@A pGzbɮצC
   |FYǪFA 򥦤|QѰwˡA MzA reinstall o binary
   {MA K|o{Өt٬OӹB@`A ڤW rpm ɮ
   ODC ]ЯSOOA ѩz檺O rpm -ba packageA Ӥjhƪ
   HA |uH rpm -i package 覡A Ӧw˱z{MC  binary ɮ׿W
   ۳QwˮɡA zTwb build  install q]wA èS
   䦳vTC
   
6.11 What to do with your new RPMs

   @z@XF@ۤv RPM ɮ ( woɮסA eåH RPM 覡s
   @L )A ziHNz@~^mOH ( ɰwzs@ RPM ɮסA Oi
   HۥѶǧG )C ziHҼ{⥦WǦ [3]ftp.redhat.comC
   
6.12 What Now?

   Ц^UWz`A buTestingvMuWhat to do with new RPMsv̡A ڭ
   ƱҦ RPM ɮ׳QѥXӡA ӥBڭ̧Ʊ楦̳|On RPM ɮ
   C ]A Цh@Iɶnnaե̡A MAIɶN̤WǡA H
   yִùjC PɡA нTwzuWǥiѦۥѶǧGnC ӷ~nP@
   nOӳQWǪA D̦\inbWC o˪nA ]A
   Netscape softwareB sshB pgp C
   
7. Multi-architectural RPM Building

   RPM ثeiΩ build U@~x{MA p Intel i386B w
   Linux  Digital AlphaB P Sparc A ӥBHճiA ]i
   Hb SGI P HP u@WϥΡC RPM \hSA ϱoPa䴩bU
   @~xW build {MA Ĥ@ӯSKOb /etc/rpmrc ɮ׸̪
   ``optflags'' ]wءA ڭ̦b build nMɡA iΩwx[
   c]wȡC t@ӯSO spec ɮ׸̪ ``arch'' macro ءA ھ
   ҭni build x[cA ziHw̰椣Pu@C t@ӯSO
   bɮ header B ``Exclude'' ]wءC
   
7.1 Sample spec File

   UCH ``fileutils'' {M󬰨ҡA  spec ɮתeA iΨӦb
   Alpha P Intel x[cWA i build u@C
   
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

   b@dҤA ziHo{ ``optflags'' ]wءA Op /etc/rpmrc
   ɮפo@ΡC MwzҶi build ʧ@A O@إx[cA
   бN䥿T]wȡA w RPM_OPT_FLAGSC zw{M
   Makefile ɮסA i patch ʧ@A N@ǳqΪܼƳ]wȡA [HܥH
   AΩz ( p -m486 P -O2 )C ziH install o source MA
   ۸Ѷ} source ˬd Makefile ɮסA Hi@BXn]w覡A
   M[ Makefile  patch eA HFѧڭ̥ǧܡC
   
7.3 Macros

   %ifarch @ macro ]wجOD`nA b\hXA znuwY@
   Swx[cA i@ patch u@A oرpUA RPM zȰw
   Y@x[cA ĥΥn patchC
   
   bWzdҤA fileutils Ӵѵ 64 bit ϥΪ patchA ܩa
   A o patch Ȼݭn Alpha ұĥΡA ]A ڭ̰w 64 bit 
   patch A W[@ %ifarch  macro ]wءA dҦpUG
   
%ifarch axp
%patch1 -p1
%endif

   o˯OҡA F Alpha ~A Lx[cä|ĥΦ
   patchC
   
7.4 Excluding Architectures from Packages

   ziHb@ӥؿA Pɺ޲zU@~x RPM lɮסA o\ϱo
   ڭ̦bs@{M󪺮ɭԡA wYǧ@~xWC ]ziHoˤU
   OG
   
rpm --rebuild /usr/src/SRPMS/*.rpm

   ϱoT{MQ buildC pGz|ӬYε{ܬY@Sw
   @~xA iH[Wo˪@椺eG
   
ExcludeArch: axp

    source {MA spec ɮת header BA Mb쥻i build
   @~xWA A@ rebuild ʧ@C ɡA zNF@b Intel 
   W build  source {MA Pɥ]ܮeKಾ Alpha W
   C
   
7.5 Finishing Up

   ϥ RPM ӻs@uh@~xv{MA q`|UObӥxs@ӱo
   eA ӥBH۱zs@Vh{MA |[A ]A ڭ̥i
   HѦҨLl{M󤺮eA oHBzs@ɹJ쪺DC
   
8. Copyright Notice

   Ψ䤺eA vҫO@A bOB QʪpU
   A \NA ]NOA zȯ[HsƪB sCLB ζi
   C

References

   1. http://www.redhat.com/
   2. ftp://ftp.redhat.com/pub/redhat/code/rpm
   3. ftp://ftp.redhat.com/
