








			    RPM HOWTO (RPM at Idle)

		      @: Donnie Barnes, djb@redhat.com

			   Ķ: JR marr@cc.nccu.edu.tw

			      v2.0, 8 April 1997



				   Abstract

     pϥ Red Hat ]˺޲z{C



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 sz]˦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 ѨtXRoi¦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 www.redhat.com1  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פWA
ϥΪ̥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ɦAW@upatch
ɮסvA iǤ{sĶu@C ڭ̫ܮeo{A o˪kaӤ֦nBC
򻡩OS |ӪpҡA b Red Hat Linux UA pGYӷs{ݥ@FA

____________________

1. <URL:http://www.redhat.com>

RPM HOWTO (RPM at Idle) 						      1





RPM HOWTO (RPM at Idle) 						      2



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٬OiHܮeӧֳtaA dߨCӵ{M󪺤eA ]b{M̡A
wg[J@qS binary headerA OFd߮ɩһݪeA o˪kA
ϱ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 ftp.redhat.com2
C

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

____________________

2. <URL:ftp://ftp.redhat.com/pub/redhat/code/rpm>







RPM HOWTO (RPM at Idle) 						      3



UӪOdҸA D`ΡA iHzzL FTP Ӧw˵{MC
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.rpm

Я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}








RPM HOWTO (RPM at Idle) 						      4



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 QnoTA
     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 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.

    pGzQFѬY RPM ɮסA |btθ̦w˭ɮסA ziHo˰G

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


     䵲G|OG











RPM HOWTO (RPM at Idle) 						      5



	  /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զXC


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
䤺edҦpUG
















RPM HOWTO (RPM at Idle) 						      6



     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 OQw˨̡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













RPM HOWTO (RPM at Idle) 						      7



     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








RPM HOWTO (RPM at Idle) 						      8



     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 OziHwC

    BuildRoot: ziHw@ӥؿA |Q@O build P install s{M
     ``root'' ؿA pGzQbڦwˤeA յ{eA
     iHΦ]wC

    Group: o̪]wA Ω󰪶wˤu{ ( Ҧp Red Hat  ``glint''
     { ) A ΥH{ݪsզmC ثesլ[cA jPpUҭzG






























RPM HOWTO (RPM at Idle) 						      9



	  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








RPM HOWTO (RPM at Idle) 						     10



	  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\hC

Ĥ@ӭ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-$VER
     SIONA LiؿW٥]A $NAMEA ${NAME}${VERSION}A άO tar
     ɮץҥΪؿC ( Ъ`NA Wz ``$'' ܼơA äO spec
     ɮ׸̪ܼơA ̦bo̥uOΨӥN@ӽdҦW١A zb{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ΩϥΨӥHW
     setup macro XA ӥBuΩĤ@ setup macro  (
     dUOΩĤ@Ӥ )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









RPM HOWTO (RPM at Idle) 						     11



    -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 OA 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[HC
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 õLqoA 
make install A 쩳 binary ɮ׳Qw˶ihA
ثeõLLkiHѨMDC ǤHĳb install {M󪺫eA ϥ
find OӳBzA Lb@ӦhϥΪ̪tΤUA oӬOi檺A








RPM HOWTO (RPM at Idle) 						     12



]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-$VER
     SION-$RELEASEC ziHbROCWA H macro PɫwnXӻW١A
     άOH macroA UO̤@@wC

    %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
     ziHbPɦCXhɮצW١C

    %dir bɮצCA ЩY@ӯSwؿA
     ΥHӥؿY{MҾ֦C pGzbɮצCw@ӥؿW١A
     oSbe[W%dir macroA ӥؿA
     Ҧɮץؿ|Q]tbɮצCA æ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ۦ樯WaCXC

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

6.9.1  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

6.9.2  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








RPM HOWTO (RPM at Idle) 						     13



Ӷi build ʧ@C iJ@ source ؿA ӫܨӶi buildA
pGzsFA 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

6.9.3  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`ڭ̷|biWzBJPɡA @_إ spec ɮסA
ziHɮת_lA MX²檺A
MALBJ[HC

6.9.4  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 {MC

    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










RPM HOWTO (RPM at Idle) 						     14



    --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 OiHۥѶǧG )C
ziHҼ{⥦WǦ ftp.redhat.com3 C

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
Hyִù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 ]iHb 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@ӯSObɮ header B ``Exclude''
]wءC

7.1  Sample spec File

UCH ``fileutils'' {M󬰨ҡA  spec ɮתeA iΨӦb Alpha P

____________________

3. <URL:ftp://ftp.redhat.com>







RPM HOWTO (RPM at Idle) 						     15



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ܥHAΩ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ȰwY@x[cA ĥΥn patchC









RPM HOWTO (RPM at Idle) 						     16



bWzdҤA fileutils Ӵѵ 64 bit ϥΪ patchA ܩaA 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ˤUOG

     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 WC

7.5  Finishing Up

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


8.  Copyright Notice

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





















RPM HOWTO (RPM at Idle) 						     17





































































				   CONTENTS



1. Introduction ............................................................. 1

2. Overview ................................................................. 1

3. General Information ...................................................... 2
   3.1	Acquiring RPM ....................................................... 2
   3.2	RPM Requirements .................................................... 2

4. Using RPM ................................................................ 2

5. Now what can I really do with RPM? ....................................... 4

6. Building RPMs ............................................................ 5
   6.1	The rpmrc File ...................................................... 5
   6.2	The Spec File ....................................................... 6
   6.3	The Header .......................................................... 7
   6.4	Prep ............................................................... 10
   6.5	Build .............................................................. 11
   6.6	Install ............................................................ 11
   6.7	Optional pre and post Install/Uninstall Scripts .................... 11
   6.8	Files .............................................................. 11
   6.9	Building It ........................................................ 12
   6.10 Testing It ......................................................... 14
   6.11 What to do with your new RPMs ...................................... 14
   6.12 What Now? .......................................................... 14

7. Multi-architectural RPM Building ........................................ 14
   7.1	Sample spec File ................................................... 14
   7.2	Optflags ........................................................... 15
   7.3	Macros ............................................................. 15
   7.4	Excluding Architectures from Packages .............................. 16
   7.5	Finishing Up ....................................................... 16

8. Copyright Notice ........................................................ 16


















				       i


