RPM HOWTO (RPM at Idle)
Donnie Barnes,
[email protected]. Svensk �vers�ttning: Linus
�kerlund,
[email protected]
v2.0, 8 April 1997. Svensk �vers�ttning: 8 juni 1998.
____________________________________________________________
Inneh�llsf�rteckning
1. Inledning
2. �versikt
3. Grundl�ggande information
3.1 Skaffa RPM
3.2 RPM-krav
4. Anv�nda 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 k�rs f�re eller efter installering/avinstallering
6.8 Files
6.9 Bygga paketet
6.9.1 K�llkodens katalog-tr�d
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 g�ra med dina nya RPM-paket
6.12 Och nu d�?
7. RPM-skapande f�r flera arkitekturer
7.1 Exempel p� spec-filer
7.2 Opt-flaggor
7.3 Makron
7.4 Utesluta arkitekturer fr�n paket
7.5 Avslutning
8. Upphovsr�tt
______________________________________________________________________
1. Inledning
RPM st�r f�r Red Hat Package Manager (Red Hat paket-
hanterare.�vers.anm). �ven om namnet inneh�ller Red Hat, s� �r RPM
helt och h�llet avsett att vara ett �ppet paket-system, tillg�ngligt
f�r alla. Det till�ter anv�ndare att ta k�llkoden till ny mjukvara och
paketera det till k�llkods- eller bin�r-format, s� att bin�r-filerna
l�tt kan installeras och sp�ras, och k�llkod l�tt kan kompileras om.
Det administrerar �ven en databas, �ver alla paket och deras filer,
vilken kan anv�ndas f�r att verifiera och "fr�ga" paket efter
information om filer och/eller paket.
Red Hat Software uppmuntrar framst�llare av andra distributioner att
ta sig tid att ta en titt p� RPM, och anv�nda det i sina egna
distributioner. RPM �r ganska flexibelt och l�tt-anv�nt, trots att det
tillhandah�ller en bas f�r ett v�ldigt omfattande system. Det �r �ven
helt och h�llet �ppet och tillg�ngligt, �ven om de uppskattar bugg-
rapporteringar och bugg-fixar. Till�telse ges att anv�nda och
distribuera RPM, utan avgifter, under GPL.
Mer fullst�ndigt dokumentation om RPM �r tillg�nglig i Ed Baileys bok
Maximum RPM. Den �r tillg�nglig f�r nedladdning eller best�llning fr�n
www.redhat.com <
http://www.redhat.com>.
2. �versikt
L�t mig f�rst f�rklara en del av filosofin bakom RPM. Ett design-m�l
var att till�ta anv�ndningen av "of�rd�rvad" k�llkod. Med RPP (v�rt
tidigare system f�r paket-administrering, p� vilket inget i RPM �r
baserat) var v�ra k�llkods-paket "hackade" k�llkoder, som vi byggde
fr�n. Teoretiskt s� var det m�jligt att installera en k�llkods-RPM och
sedan make-a det utan problem. Men k�llkoden var inte den
ursprungliga, och det fanns inga uppgifter om vilka �ndringar vi hade
gjort, f�r att f� den att kompilera. Man var tvungen att ladda ned den
urprungliga k�llkoden separat. Med RPM f�r du of�rd�rvad k�llkod,
tillsammans med en patch, som vi anv�nde f�r att kompilera fr�n. Vi
ser detta som en stor f�rdel. Varf�r? Av flera anledningar. En av dem
�r, att om det kommer en ny version av ett program, s� beh�ver vi inte
b�rja om fr�n b�rjan, f�r att f� det att kompilera under RHL. Du kan
titta p� patchen, f�r att se vad du kan bli tvungen att g�ra. Alla
saker som kompileras in, som standard, �r p� detta s�tt klart synliga.
RPM �r ocks� designat att ha kraftfulla "fr�ge"-m�jligheter. Du kan
leta igenom hela din paket-databas eller bara vissa filer. Du kan
ocks� enkelt ta reda p� vilket paket en fil tillh�r, och var den kom
ifr�n. RPM-filerna sj�lva �r komprimerade arkiv, men du kan fr�ga
individuella paket enkelt och snabbt, p� grund av en standardiserad
bin�r rubrik-fil (header file. �vers.anm.), vilken inneh�ller all
information du n�gon g�ng skulle vilja ha. Denna �r inte komprimerad.
Detta till�ter snabb informations-s�kning.
En annan kraftfull funktion �r m�jligheten att verifiera paket. Om du
�r orolig att du har raderat en fil som �r viktig f�r n�got paket,
verifiera det bara. Du f�r ett meddelande om alla ovanligheter. P�
detta stadium kan du, om det �r n�dv�ndigt, ominstallera paketet.
Eventuella konfigurerings-filer som du har bevaras ocks�.
Vi vill tacka m�nniskorna bakom BOGUS-distributionen f�r m�nga av
deras id�er och koncept, vilka tagits med i RPM. �ven om RPM skrivits
helt och h�llet av Red Hat Software, s� �r dess funktion baserad p�
kod som skrivits av BOGUS (PM och PMS).
3. Grundl�ggande information
3.1. Skaffa RPM
Det b�sta s�ttet att skaffa RPM �r att installera Red Hat Linux. Om du
inte vill g�ra det, s� kan du fortfarande skaffa och anv�nda RPM. Du
kan h�mta det fr�nftp.redhat.com
<
ftp://ftp.redhat.com/pub/redhat/code/rpm>.
3.2. RPM-krav
Huvud-kravet f�r att kunna k�ra RPM �r att du har cpio 2.4.2 eller
senare. �ven om det h�r systemet �r avsett att anv�ndas med Linux, s�
skulle det mycket v�l g� att konvertera det till andra Unix-system.
Det har faktiskt kompilerats p� SunOS, Solaris, AIX, Irix, AmigaOS och
andra operativ-system. Vi m�ste dock varna dig, f�r bin�r-paketen som
skapats p� en annan Unix-typ kan inte kompileras.
Dessa �r de minimala kraven f�r att installera RPM-paket. F�r att
skapa RPM-paket fr�n k�llkod beh�ver du allt som normalt kr�vs f�r att
kompilera paket, som gcc, make osv.
4. Anv�nda RPM
I dess enklaste form kan RPM anv�ndas f�r att installera paket:
rpm -i foobar-1.0-1.i386.rpm
Det n�st enklaste kommandot �r f�r att avinstallera ett paket:
rpm -e foobar
Ett av de mest komplicerade, men mycket anv�ndbara kommandona, l�ter
dig installera paket via FTP. Om du �r uppkopplat p� n�tet, och vill
installera ett nytt paket, s� �r allt du beh�ver g�ra 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 fr�ga och/eller installera via FTP.
�ven om dessa kommandon �r enkla, s� kan rpm anv�ndas p� m�nga olika
s�tt, 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 g�r i man-sidan f�r
RPM.
5. Okej, vad kan jag faktiskt g�ra med RPM?
RPM �r ett mycket anv�ndbart verktyg och, som du ser, s� har det m�nga
m�jligheter. Det b�sta s�ttet att f�rst� dem �r att ta en titt p�
n�gra exempel. Jag tog upp installering och avinstallering ovan, s�
h�r kommer n�gra andra exempel:
� L�t oss s�ga att du, av misstag, raderat n�gra filer, men inte �r
s�ker p� vad du har raderat. Om du ville verifiera hela ditt
system, och se efter vad som fattas, s� skulle du skriva:
rpm -Va
� L�t oss s�ga att du hittar en fil som du inte k�nner igen. F�r att
ta reda p� vilket paket den tillh�r, 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. F�r 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 n�gra exempel. Mer kreativa exempel kan du komma p� n�r
du har l�rt k�nna RPM b�ttre.
6. Skapa RPM-paket
Att skapa RPM-paket �r ocks� ganska l�tt, speciellt om du kan f�
mjukvaran som du f�rs�ker g�ra ett paket av att kompilera.
Den grundl�ggande proceduren f�r att skapa ett RPM-paket �r som
f�ljer:
� Se till att /etc/rpmrc �r inst�lld f�r ditt system.
� F� k�llkoden som du ska bygga RPM-paketet f�r att kompilera p� ditt
system.
� G�r en patch med de �ndringar du beh�vde g�ra, f�r att f� k�llkoden
att kompilera ordentligt.
� G�r en specifikations-fil f�r paketet.
� Se till s� att allt �r p� sin plats.
� Skapa paketet med hj�lp av RPM
Under normal anv�ndning skapar RPM b�de bin�r- och k�llkods-paket.
6.1. rpmrc-filen
Som det �r nu, s� �r det enda s�ttet att konfigurera RPM via
/etc/rpmrc-filen. Ett exempel ser ut s� h�r:
require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager: Mickeysoft Packaging Account <
[email protected]>
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 g�r att RPM kr�ver (require) att finna en vendor-
rad. Denna kan komma fr�n /etc/rpmrc eller fr�n rubrik-delen (header)
eller spec-filen sj�lv. F�r att sl� av detta, s� kan du �ndra v�rdet
till 0. Detsamma g�ller f�r require_distribution- och require_group-
raderna.
N�sta rad �r distribution-raden. Du kan ange denna h�r, eller senare i
rubrik-delen av spec-filen. N�r du skapar ett RPM-paket f�r en
speciell distribution, s� �r det en god id� att se till att den h�r
raden �r korrekt, �ven om det inte kr�vs. vendor-raden fungerar i
stort sett p� samma s�tt, men kan vara vad som helst (allts� Joe's
Software och Rock Music Emporium).
RPM har nu ocks� st�d f�r att skapa paket p� flera olika arkitekturer.
rpmrc-filen kan inneh�lla flera "optflag"-variabler (optimerings-
flaggor), f�r att kompilera saker, som kr�ver en arkitektur-specifik
flagga under kompileringen. Se senare avsnitt f�r om hur du kan
anv�nda denna varibel.
Ut�ver de ovan n�mnda makrona, s� finns det flera till. Du kan
anv�nda:
rpm --showrc
f�r att ta reda p� hur dina taggar �r satta, och vilka alla
tillg�ngliga flaggor �r.
6.2. Spec-filen
Vi ska b�rja med att diskutera spec-filen. Spec-filer kr�vs, f�r att
du ska kunna skapa ett paket. Spec-filen �r en beskrivning av
mjukvaran, tillsammans med instruktioner f�r hur den ska kompileras,
och en fil-lista �ver alla de bin�r-filer som installeras.
Du b�r ge din spec-fil ett namn, i linje med konventionen. Det ska
vara paket-namn-bindestreck-versions-nummer-bindestreck-utg�vonummer-
punkt-spec.
H�r �r en liten spec-fil (vim-3.0-1.spec): (Det st�r s�, men det
verkar uppenbart att det r�r 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 inneh�ller n�gra standard-f�lt, som du m�ste fylla i. Det
finns n�gra konventioner du m�ste f�lja ocks�. F�lten som m�ste fyllas
i �r de f�ljande:
� Summary: Detta �r en en-rads beskrivning av paketet.
� Name: Detta m�ste vara namn-str�ngen fr�n rpm-filnamnet du har
t�nkt anv�nda
� Version: Detta m�ste vara versions-str�ngen fr�n rpm-filnamnet du
har t�nkt anv�nda.
� Release: Detta �r utg�vo-numret f�r ett paket av samma version
(allts�, om vi skapar ett paket, och uppt�cker n�got mindre fel i
det, s� att vi m�ste skapa om det, s� ska n�sta paket ha utg�vo-
nummer 2).
� Icon: Detta �r namnet p� ikon-filen, f�r anv�ndning med andra h�g-
niv� installerings-verktyg (som Red Hats "glint"). Den m�ste vara
en gif, och finnas i SOURCES-katalogen.
� Source: Denna rad pekar ut den of�rd�rvade k�llkods-filens HEM-
katalog. Den anv�nds om du n�gonsin skulle vilja ha k�llkoden igen,
eller leta efter nya versioner. Konvention: filnamnet i den h�r
raden M�STE matcha filnamnet du har p� ditt eget system (ladda
allts� inte ned k�llkoden och �ndra dess namn). Du kan ocks� ange
mer �n en k�llkodsfil, genom att anv�nda 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, "K�llkodens katalog-tr�d".)
� Patch: Detta �r st�llet d�r du kan hitta patchen, om du skulle
beh�va ladda ned den igen. Konvention: filnamnet h�r m�ste matcha
det du anv�nder n�r du skapar DIN patch. Observera ocks� att du kan
ha flera patch-filer, precis som kan ha flera k�llkods-filer. Du
kan ha n�got 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 upphovsr�tten f�r paketet ser ut. Du
b�r anv�nda n�gonting i stil med GPL, BSD, MIT, public domain,
distribuerbart eller kommersiellt.
� BuildRoot: Denna rad l�ter dig specificera en katalog som "rot" f�r
skapandet och installerandet av nya paket. Du kan anv�nda detta f�r
att hj�lpa dig att testa ditt paket, innan du installerar det p�
din maskin.
� Group: Denna rad anv�nds f�r att tala om f�r h�g-niv�
installerings-program (som Red Hats "glint"), var de ska placera
detta speciellt program i den hierarkiska strukturen. Grupp-tr�det
ser f�r tillf�llet ut ungef�r s� h�r:
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 b�r tas upp
i anslutning till resten av rubrik-delen. Du beh�ver en
"description" per paket och/eller under-paket. Detta �r ett f�lt p�
flera rader, som du ska anv�nda f�r att ge en omfattande
beskrivning av paketet.
6.4. Prep
Detta �r den andra avdelningen i spec-filen. Den anv�nds f�r att g�ra
k�llkoden redo f�r kompilering. H�r ska du g�ra allt som �r n�dv�ndigt
f�r att f� k�llkoden patchad och inst�lld, som den beh�ver vara
konfigurerad f�r att k�ra make.
En sak att observera: Vartenda av dessa avsnitt �r egentligen bara ett
st�lle att k�ra skal-program. Du skulle helt enkelt kunna g�ra ett sh-
skal-program och stoppa in det efter %prep-taggen, f�r att packa upp
och patcha k�llkoden. Vi har dock skapat makron f�r att hj�lpa till
med detta.
Den f�rsta av dessa makron �r %setup-makron. I dess enklaste form
(inga kommando-rads-parametrar), s� packar den helt enkelt upp
k�llkoden och cd-ar till k�llkods-katalogen. Den k�nner ocks� till
f�ljande parametrar:
� -n namn s�tter namnet p� installerings-katalogen till det angivna
namnet. Standarden �r $NAMN-$VERSION. Andra m�jligheter inbegriper
$NAMN, ${NAMN}${VERSION}, eller vad den huvudsakliga tar-filen nu
anv�nder. (Observera att dessa "$"-variabler inte �r riktiga
varibler, som �r tillg�ngliga inom spec-filen. De anv�nds h�r bara
i st�llet f�r exempel p� namn. Du m�ste anv�nda det riktiga namnet
och den riktiga versionen i ditt paket, inte en variabel.)
� -c skapar och cd-ar till den angivna katalogen innan den k�r untar.
� -b # packar upp Source# innan den cd-ar till katalogen (och detta
g�r inte ihop med -c, s� anv�nd det inte). Detta �r bara anv�ndbart
i paket med flera k�llkods-filer.
� -a # packar upp Source# efter att det cd-ar till katalogen.
� -T Denna parameter k�r �ver standard-handlingen, att packa upp
k�llkoden, och kr�ver en -b 0 eller -a 0 f�r att f� den
huvudsakliga k�llkods-filen uppackad. Du beh�ver detta n�r det
finns sekund�ra k�llkodsfiler.
� -D Radera inte katalogen innan uppackningen. Det �r endast
anv�ndbart d�r du har mer �n en konfigurerings-makro. Den ska
endast anv�ndas i konfigurerings-makron efter den f�rsta (men
aldrig i den f�rsta).
N�sta av de tillg�ngliga makrona �r %patch-makron. Denna makro hj�lper
dig att automatisera processen att l�gga till patchar till k�llkoden.
Den k�nner till flera parametrar, vilka r�knas upp nedan:
� # l�gger till Patch# som patch-fil.
� -p # anger antalet kataloger att strippa, f�r patch(1)-kommandot.
� -P Standard-handlingen �r att l�gga till Patch (eller Patch0).
Denna parameter f�rhindrar detta och kr�ver en 0 f�r att f� den
huvudsakliga k�llkods-filen uppackad. Denna parameter �r anv�ndbar
i en andra (eller senare) %patch-makro, vilken kr�ver ett annat
nummer �n den f�rsta makron.
� Du kan ocks� k�ra %patch#, ist�llet f�r att k�ra det riktiga
kommandot: %patch # -P .
Fler makron �n s� b�r du inte beh�va. Efter att du har gjort allt
detta, s� kan du g�ra vilka ytterligare inst�llningar du beh�ver,
genom skal-program av sh-typen. Allt du tar med, fram till %build-
makron (vilken tas upp i n�sta avsnitt) k�rs via sh. Se exemplen ovan
f�r information om vilka sorters saker du kan t�nkas vilja g�ra h�r.
6.5. Build
Det finns egentligen inga makron f�r detta avsnitt. H�r ska du bara
l�gga in de kommandon, som du beh�ver f�r att kompilera mjukvaran,
efter att du har packat upp k�llkoden, patchat den och cd-at till
katalogen. Det h�r �r bara en upps�ttning kommandon som skickas till
sh, s� alla giltiga sh-kommandon fungerar h�r (inklusive kommentarer).
Din aktuella arbets-katalog st�lls i varje avsnitt om till k�llkodens
topp-katalog, gl�m inte det. Du kan cd-a till underkataloger, om det
�r n�dv�ndigt.
6.6. Install
Det finns inga makron h�r, heller. H�r ska du bara stoppa in de
kommandon som �r n�dv�ndiga f�r att installera. Om du har make install
tillg�ngligt, i paketet du skapar, l�gg in det h�r. Om inte, s� kan du
antingen patch makefilen, s� att den har make install och sedan g�ra
en make install h�r, eller s� kan du installera filerna manuellt med
sh-kommandon. Du kan se din aktuella katalog som k�llkodens topp-
katalog.
6.7. installering/avinstallering Valfria skal-program som k�rs f�re
eller efter
Du kan l�gga in skal-program f�re och efter installering och
avinstalleringen, i bin�r-paket. En bra anledning att g�ra detta �r
f�r att g�ra saker som att k�ra ldconfig efter installeringen, eller
radera paket som inneh�ller delade bibliotek (shared libraries).
Makrona f�r alla skal-program �r som f�ljer:
� %pre �r makrot f�r skal-program som k�rs innan installeringen.
� %post �r makrot f�r skal-program som k�rs efter installeringen.
� %preun �r makrot f�r skal-program som k�rs f�re avinstalleringen.
� %postun �r makrot f�r skal-program som k�rs efter avinstalleringen.
Inneh�llet i dessa avsnitt kan vara vilka sh-program som helst, men du
beh�ver inte #!/bin/sh.
6.8. Files
Det h�r �r avsnittet d�r du m�ste r�kna upp filerna till bin�r-
paketet. RPM kan inte p� n�got s�tt veta vilka bin�r-filer som
installeras som ett resultat av make install. Det finns INGET s�tt att
g�ra detta. Vissa har f�reslagit att det skulle k�ra find innan och
efter att paketet installerats. I ett system med flera anv�ndare �r
detta dock oacceptabelt, eftersom andra filer kan skapas, under det
att ett paket skapas, som inte har n�gonting att g�ra med sj�lva
paketet.
Det finns n�gra makron tillg�ngliga f�r att g�ra n�gra speciella
grejer h�r ocks�. De r�knas upp och beskrivs h�r:
� %doc anv�nds f�r att markera dokumentation i k�llkods-paketet, som
du vill installera i en bin�r-installering. Dokumenten kommer
installeras i /usr/doc/$NAMN-$VERSION-$UTG�VA. Du kan r�kna upp
flera dokument p� samma rad med denna makro, eller s� kan du r�kna
upp dem separat, med en makro f�r varje dokument.
� %config anv�nds f�r att markera konfigurerings-filer i ett paket.
Detta inkluderar filer som sendmail.cf, passwd osv. Om du senare
avinstallerar ett paket som inneh�ller konfigurerings-filer, s�
kommer alla of�r�ndrade filer raderas, och de som har �ndrats
kommer flyttas till sina gamla namn, med .rpmsave tillagt till
namnet. Du kan r�kna 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> l�ter dig lista dina filer i en godtyckligt
vald fil, i k�llkodens build-katalog. Det h�r �r trevligt i de fall
d�r du har ett paket som kan skapa sin egen fillista. D� inkluderar
du bara den fillistan h�r, och s� beh�ver du inte sj�lv r�kna upp
filerna.
Det viktigaste att t�nka p� i fillistan �r hur du r�knar upp
kataloger. Om du tar med /urs/bin av misstag, s� kommer ditt bin�r-
paket att inneh�lla varje fil i /usr/bin p� ditt system.
6.9. Bygga paketet
6.9.1. K�llkodens katalog-tr�d
Det f�rsta du beh�ver �r ett korrekt konfigurerar build-katalog-tr�d.
Detta kan du st�lla in med /etc/rpmrc-filen. De flesta anv�nder helt
enkelt /usr/src.
Du kan bli tvungen att skapa f�ljande kataloger i ditt build-tr�d:
� BUILD �r katalogen d�r allt skapande (building) utf�rs av RPM. Du
beh�ver inte utf�ra dina test-byggen p� n�got speciellt st�lle, men
det �r h�r RPM kommer utf�ra sitt byggnads-arbete.
� SOURCES �r katalogen d�r du b�r stoppa in dina ursprungliga
k�llkods-filer (packade med tar) och dina patchar. H�r kommer RPM
leta, som standard.
� SPECS �r katalogen d�r alla spec-filer ska finnas.
� RPMS �r katalogen d�r RPM kommer stoppa de bin�ra RPM-paket som det
byggt.
� SRPMS �r katalogen d�r alla k�llkods-RPM-paket kommer hamna.
6.9.2. Test-bygga
Det f�rsta du antagligen kommer vilja g�ra �r att f� k�llkoden att
kompilera, utan att anv�nda RPM. F�r att g�ra detta, packa upp
k�llkoden, och byt ut katalog-namnet till $NAMN.orig. Packa sedan upp
k�llkoden igen. Anv�nd k�llkoden att kompilera fr�n. G� in i k�llkods-
katalogen och f�lj instruktionerna f�r att kompilera den. Om du m�ste
modifiera saker och ting, s� beh�ver du en patch. S� fort du har
kompilerat det, st�da upp i k�llkods-katalogen. Se till s� att du har
tagit bort alla filer som skapas av configure-programmet. cd-a ut ur
k�llkods-katalogen till dess f�r�ldra-katalog. Sen kan du g�ra n�got i
stil med:
diff -uNr dirname.orig dirname > ../SOURCES/dirname-linux.patch
Detta skapar en patch �t dig, som du kan anv�nda i din spec-fil.
Observera att "linux" i patch-namnet bara �r ett s�tt att identifiera
den. Det �r b�st om du anv�nder n�got mer beskrivande namn, s�som
"config" eller "bugs" f�r att beskriva varf�r du var tvungen att skapa
en patch. Det �r ocks� en god id� att titta p� patch-filerna du ska�
par, innan du anv�nder dem, f�r att se till s� att inga bin�r-filer
kom med av misstag.
6.9.3. Skapa fil-listan
Nu n�r du har k�llkoden som ska kompileras, och vet hur du ska g�ra
det, kompilera och installera den. Titta p� utdatan fr�n
installerings-sekvensen och skapa din fil-lista, som du ska anv�nda i
spec-filen, fr�n den. Vi skapar oftast spec-filen parallellt med dessa
andra steg. Du kan skapa en f�rsta fil-lista och fylla i de enkla
delarna, och sedan fylla i de andra stegen, medan du utf�r dem.
6.9.4. Skapa paketet med RPM
S� fort du har en spec-fil, s� �r du klar att f�rs�ka skapa ditt
paket. Det b�sta s�ttet att g�ra detta, �r med en kommando-rad i stil
med:
rpm -ba foobar-1.0.spec
Det finns ocks� andra alternativ, som �r anv�ndbara med -b-parametern:
� p betyder att endast prep-avsnittet i spec-filen ska k�ras.
� l �r ett list-kollning, som g�r n�gra kontroller p� %files.
� c g�r en prep och kompilerar. Detta �r anv�ndbart n�r du �r os�ker
p� om k�llkoden alls kommer att kompilera. Det kan verka on�digt,
eftersom du helst vill fippla med k�llkoden sj�lv, tills du f�r den
att kompilera, och sedan anv�nda RPM, men n�r du vant dig vid att
anv�nda RPM, s� kommer du hitta tillf�llen d� du f�r anv�ndning f�r
detta.
� i g�r en prep, kompilera och installera.
� b prep, kompilera, installera och bygg endast ett bin�r-paket.
� a skapa allt (b�da k�llkods- och bin�r-paket).
Det finns flera alternativ till -b-parametern. Dessa �r:
� --short-circuit hoppar direkt till ett specifikt steg (kan -->
--endast anv�ndas med c och i).
� --clean raderar byggnades-tr�det n�r det allt �r klart.
� --keep-temps spara alla tempor�ra filer och skal-program, --> --som
skapades i /tmp. Du kan faktiskt se vilka filer som skapades i -->
--/tmp med -v-parametern.
� --test utf�r inga steg p� riktigt, men anv�nder keep-temp.
6.10. Testa det
N�r du har en k�llkods- och en bin�r-rpm f�r ditt paket, s� m�ste du
testa det. Det enklaste och b�sta s�ttet �r att anv�nda en helt annan
maskin �n den du skapade paketet p�. N�r allt kommer omkring s� har
du bara gjort en massa make install p� din egen maskin, s� det borde
vara ganska v�l installerat.
Du kan k�ra rpm -u paketnamn p� paketet du vill testa, men det kan
vara f�rr�diskt, eftersom du, d� du skapade paketet, gjorde en make
install. Om du gl�mde att ta med n�got i fil-listan, s� kommer det
inte bli avinstallerat. Du kommer d� om-installera bin�r-paketet och
ditt system kommer vara komplett igen, men din rpm �r det fortfarande
inte. Kom ih�g, att bara f�r att du k�r rpm -ba paket, s� kommer de
flesta som installerar paketet k�ra rpm -i paket. Se till s� att du
inte g�r n�got i build- och install-avsnitten, som beh�ver g�ras n�r
bin�r-filerna redan �r installerade.
6.11. Vad du ska g�ra med dina nya RPM-paket
S� fort du skapat dina egna RPM-paket (om vi f�ruts�tter att det �r
n�got som inte redan gjorts till RPM-paket), s� kan du dela med dig av
ditt arbete till andra (vilket ocks� f�ruts�tter att det du gjorde ett
RPM-paket av �r fritt distribuerbart). F�r att g�ra 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 g�ra med dina nya
RPM-paket. Vi vill ha alla tillg�ngliga 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�
tillg�ng till dem. Var v�nlig 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 s�ger att det �r
till�tet. Detta inkluderar Netscapes mjukvara, ssh, pgp osv.
7. RPM-skapande f�r flera arkitekturer
RPM kan nu anv�ndas f�r att bygga paket f�r Intel i386, Digital Alpha
som k�r Linux och Sparc. Det har �ven rapporterats att det fungerar p�
SGIs och HPs arbetsstationer. Det finns flera funktioner som g�r det
enkelt att skapa paket p� alla plattformar. Den f�rsta av dessa �r
"optflags"-direktivet i /etc/rpmrc. Det kan anv�ndas f�r att ange
flaggor, vilka anv�nds n�r mjukvara byggs med arkitektur-specifika
v�rden. En annan funktion �r "arch"-makrona i spec-filen. De kan
anv�ndas f�r att utf�ra 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 f�ljande �r delar av spec-filen till "fileutils"-paketet. Det �r
konfigurerat f�r att kunna byggas p� b�de 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 h�r exemplet kan du se hur "optflags"-direktivet anv�nds fr�n
/etc/rpmrc. Beroende p� vilken arkitektur det byggas p�, s� ges det
korrekta v�rdet till RPM_OPT_FLAGS. Du m�ste patcha Makefilen f�r ditt
paket, f�r att anv�nda denna variabel, ist�llet f�r de vanliga
direktiven som kanske anv�nds (som -m486 och -O2). Du kan f� en b�ttre
k�nsla f�r vad som beh�ver g�ras, genom att installera detta k�llkods-
paket och sedan packa upp k�llkoden och unders�ka Makefilen. Ta sedan
en titt p� patchen f�r Makefilen och se vilka �ndringar som m�ste
g�ras.
7.3. Makron
%ifarch-makron �r v�ldigt viktig i allt detta. I de flesta fall
beh�ver du skapa en patch eller tv�, som �r specifika f�r endast en
arkitektur. I det h�r fallet kommer RPM till�ta dig att l�gga till den
patchen till endast en arkitektur.
I exemplet ovan har fileutils en patch f�r 64-bitars maskinter. Denna
ska uppenbarligen endast l�ggas till p� Alpha. S� vi la till en
%ifarch-makro kring 64-bitars-patchen, p� f�ljande s�tt:
%ifarch axp
%patch1 -p1
%endif
Detta ser till s� att patchen inte l�ggs till p� n�gon annan arkitek�
tur �n alpha.
7.4. Utesluta arkitekturer fr�n paket
F�r att du ska kunna underh�lla k�llkods-paket i en katalog, f�r alla
plattformar, s� har vi implementerat m�jligheten att "utesluta" paket
fr�n att byggas p� vissa arkitekturer. Detta �r f�r att du fortfarande
ska kunna g�ra saker som
rpm --rebuild /usr/src/SRPMS/*.rpm
och f� r�tt paket att byggas. Om du fortfarande inte har portat en
applikation till en viss plattform, s� �r allt du beh�ver g�ra att
l�gga till en rad som:
ExcludeArch: axp
till rubrik-delen av spec-filen i k�llkods-paketet. Bygg sedan om
paketet p� plattformen som det ska kunna byggas p�. Du har sedan ett
k�llkods-paket som g�r att bygga p� en Intel, och kan som enkelt kan
hoppas �ver p� en Alpha.
7.5. Avslutning
Att anv�nda RPM f�r att bygga paket f�r flera arkitekturer �r oftast
enklare att g�ra �n att skaffa paketet sj�lvt och bygga det p� b�da
st�llena. Detta blir dock mycket enklare, i det att fler av de "h�rda"
paketen byggs. Som alltid s� �r den b�sta hj�lpen, om du fastnar, d�
du bygger RPM-paket, att titta p� andra, liknande paket.
8. Upphovsr�tt
Detta dokument och dess inneh�ll �r upphovsr�tts-skyddat.
Vidaredistribution av detta dokument �r till�ten, s� l�nge inneh�llet
�r helt och h�llet intakt och utan �ndringar. Med andra ord, du f�r
endast omformatera och trycka om och vidaredistribuera det.