← Back to team overview

sslug-teknik team mailing list archive

Re: Byg min egen RPM

 

Hej Erling,

Tak for den udførlige vejledning :-)

Nu er det sådan at jeg ikke har nogen src.rpm.. så skulle jeg finde en til
openssh.. og proftp..

Jeg har fået lavet en pakke, med rpm -bb som kun består af de binære
filer.. som så installeres de korrekte steder..
openssh f.ex. kræver jo et ssl-dir under kompilationen.. og det ville blive
en for stor .spec fil, for at imødegå dette.. derfor føler jeg det i dette
tilfælde er nemmere bare at
lave en egen kompilation og ligge filerne i mit rpm-pakke dir.. og lave en
rpm fil ud af det..

Jeg har et tilbageværende problem..

Jeg ville godt kunne lave nogle shell-if statements.. såsom at hvis
/etc/ssh/sshd_config findes, skal pakkens sshd_config puttes ind som
/etc/ssh/sshd_config.dist istedet.. kan man gøre det ved at inkludere en
makefil i rpm.pakken - istedet for shell-kommandoer i .spec filen? dem har
jeg nemlig skrevet og de virker ikke når man laver en rpm -i af pakken..

ovenstående metode til at lave .rpm pakker må jeg sige er betydeligt
nemmere.. selvfølgelig kan jeg godt se at når nu man kan få rpm til at
kompilere for sig også, når der kommer en ny kilde-kode version.. så er det
smart.. men det kræver en del mere .spec arbejde.. medmindre jeg under
build, kan nøjes med at skrive de ./configure kommandoer og make kommandoer
jeg udfører ?

/Klavs



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