← Back to team overview

sslug-teknik team mailing list archive

Re: Byg min egen RPM

 

Klavs Klavsen wrote:
> 
> Jeg kunne godt tænke mig at lave min egen RPM af vores bl.a. proftpd og
> openssh - så de bliver installeret præcis som jeg ønsker det og med de
> konfig filer vi bruger..

Her er omtrent hvad jeg selv gør når jeg har ændringer til
standard pakker (eksemplet forudsætter RedHat el.lign.):

1. download den relevante source rpm: wget eksempel-1.0-1.src.rpm

2. installer den: rpm -ivh eksempel-1.0-1.src.rpm

3. lad RPM køre "prep"-scriptet, så vi får installeret
   kildeteksterne, etc. under /usr/src/redhat/BUILD/eksempel-1.0:
   cd /usr/src/redhat/SPECS ; rpm -bp eksempel.spec

4. Skift til BUILD-directoriet, og tag en kopi af sourcen:
   cd ../BUILD ; cp -a eksempel-1.0 eksempel-1.0-orig
   (vi får brug for dette senere!)

5. Pil ved sourcen, så den svarer til ens. behov:
   cd eksempel-1.0 ; vi eksempel.c
   (redigere, tilføje nye filer, osv. Men kør _ikke_ make endnu !)

6. Tag kopi af sourcen med ændringerne i:
   cp -a ../eksempel-1.0 ../eksempel-1.0-new

7. Test ændringerne:
   ./configure ; make
   (eller hvad der nu står i spec-filens %build sektion)
   Hvis noget går galt, kan man nu gøre følgende:
   cd .. ; rm -rf eksempel-1.0 ; cp -a eksempel-1.0-orig eksempel-1.0
   og gå til trin 5 igen, ellers fortsætter vi videre.

8. Dan en diff-fil ud fra ændringerne:
   cd .. ; diff -urN eksempel-1.0-orig eksempel-1.0-new
>../SOURCES/patch1
  
9. Tilføj denne patch til spec-filen:
   cd ../SPECS ; vi eksempel.spec
   Man tilføjer f.eks. følgende i den øverste sektion af spec-filen:
   patch117: patch1
   Og følgende tilføjes nederst i %prep sektionen:
   %patch117 -p1
   Husk at ændre f.eks. "Release: 1" til "Release: 1ktk" i
   spec-filen, samt tilføj noget passende til %changelog-sektionen.
   Det er godt at man kan se på release-nummeret at det er en
modificeret
   pakke, samt at man kan se i changeloggen hvad man har gjort.
   Hvis der er tilføjet filer, skal man også tilføje dem til
   %files sektionen. Osv.

10. Test spec-filen:
    rpm -ba eksempel.spec

11. Test resultatet af ovenstående:
    cd ../RPMS/i386 ; rpm -Uvh eksempel-1.0-1ktk.i386.rpm

Hvis alt gik godt, så har man nu både en source rpm og en
binær rpm fil, med ens ændringer i. Ovenstående er, mener jeg,
den Rette Metode (tm) til modificering af rpm-pakker :-)

Jeg benytter ihvertfald selv metoden til både linux-kernen, XFree86
og hvad jeg ellers har egne patches til. En af fordelene er
at når der kommer en ny version fra f.eks. RedHat af den originale
pakke, så graver man sig egen source-rpm frem, flytter patchen
over i den nye pakke , og genbygger. Forholdsvis smertefrit, som
regel, og ellers har man i spec-filen og patchen den fulde
dokumentation  af, hvad man egentlig gjorde for at komme fra
den originale pakke til den modificerede.

> Dette er imidlertigt - møgbesværligt for mig at lave.. da f.ex. openssh
> også kræver kompileret openssl bibliotek under kompilationen.. og dette
> ønsker jeg ikke at installere på vores maskiner..

Hvad mener du her ? 

> Det jeg gerne så, var at jeg kunne lave et bibliotek med de kompilerede
> filer, deres man-sider, sshd_config og lign. config filer og skrive et
> lille shell installationsscript.. kan dette gøres ved bare at skrive de
> rigtige ting i .spec filen og så en rpm -b pakke-1.spec ?

Det lyder som et shortcut, hvor man mister nogle af fordelene
ved rpm. Det kan være ganske nyttigt at man _ved_ at _alle_
originale kildetekster, samt _alle_ ens ændringer (som genbrugbare
patches) ligger i f.eks. eksempel-1.0-1ktk.src.rpm.

Erling Jacobsen
-- 
Answer a fool according to his folly, lest he be wise in his own
conceit.
		-- Proverbs, 26:5

Follow ups

References