[packman] Benennung von RPM's

Ralf Corsepius corsepiu at faw.uni-ulm.de
Fri Mar 7 07:02:17 CET 2003


Am Don, 2003-03-06 um 11.12 schrieb Hendrik Muhs:
> Hi und herzlich willkommen! :-)
> 
> so, ich beantworte mal die Fragen, so wie ich das sehe.
> 
> Damit spreche ich allerdings nicht für ganz Packman!
> 
> Aber ich denke, die anderen sehen die Sache auch so.
> 
> Am Donnerstag, 6. März 2003 08:11 schrieb Soeren Mindorf:
> > Hi Packman's,
> >
> > ich bin ein neues Mitglied bei Euch und wollte mich kurz mal
> > vorstellen, bevor ich hier mit meiner Fragerei anfange. ;)
> >
> > Also, ich bin 29 Jahre alt und heiße Sören Mindorf.
> > Seit ca. 2 Wochen beschäftige ich mich damit, RPM's für SuSE 8.1 zu
> > bauen, da ich ja gerhe ein paar Progrämmchen veröffenltichne wollte,
> > die es in den neuen Versionen nicht für SuSE 8.1 gibt.
> > In diesem Fall erstmal gnucash und seine Abhängigkeiten. ;)
> > Meine RPM's habe ich früher immer mit checkinstall gebaut, was mir
> > sehr viel Arbeit erspart hatte, doch leider reicht es hier ja nicht,
> > nur das RPM zu bauen, man braucht auch das Source-RPM. Nunja, ran an
> > die Arbeit und viel lesen. Leider habe ich nicht alles verstanden,
> > aber die Pakete sind jetzt gebaut und funktionieren soweit ich das
> > testen konnte.
> >
> > Da ich erst seit gestern bei Euch Mitglied bin, habe ich natürlich
> > auch ein paar Fragen, die ich jetzt gerne stellen möchte. ;)
> >
> > 1.) Meine Pakete heißen alle so in der Art:
> > *-SuSE81-4.i386.rpm
> 
> Wir haben dafür Verzeichnisse(suse/8.1), also ist das SuSE81 nicht notwendig. 
> Ansonsten versuche ich mich weitestgehend an den "SuSE"-Standard zu halten, 
> soll heissen, wenn das Paket ein Update eines bestehenden SuSE-Paketes ist, 
> sollten die Pakete auch genauso heissen und sich quasi nur in der 
> Versionsnummer unterscheiden.
Das ist so nicht ganz richtig. 

Für ein Update muss der Paketname identisch sein und das
$Epoch:$Version-$Release Tripple muss  in RPM-Sinne "grösser" sein als
das von SuSE verwendete.


Ab hier hier wird es schwierig, da RPM-Versionsvergleiche äusserst
kompliziert sind.


Ein Beispiel:

SuSE kommt mit xyz-1.0-123.i586.rpm

1. Nun kommt xyz-2.0 heraus. 

Für einen Update würde ich xyz-2.0-0 (Version: 2.0, Release: 0)
verwenden, da SuSE-RPMs normalerweise Releasenummern > 0 tragen 

Da 0:2.0-0 immer kleiner als 0:2.0-N (mit N > 0) ist, sollte
sichergestellt sein, dass ein SuSE-RPM immer "neuer" ist.  


2. Du stellst fest, dass dein xyz-2.0-0 fehlerhaft ist und ersetzt
werden muss.

Hier würde ich nun nicht Neues_Release := (Altes_Release+1) verwenden,
da sonst ein Konflikt mit einem möglichen zukünftigen SuSE-Paket
entstehen könnte.
(SuSE's xyz-2.0-1.i586.rpm vs. Packman xyz-2.0-1.i586.rpm)

Ein sicherer Weg besteht darin das Release (Genauer: Den Releasestring)
zu verlängern (beachte Releases sind Strings, keine Ziffern), also
Neues_Release := "Altes_Release" . "Irgendwas"
zu verwenden.
z.B.: xyz-2.0-0_1.i586.rpm, 
oder wie von RedHat für RawHide rpms teilweise verwendet:
xyz-2.0-0.1.i586.rpm

Haarig wird die Sache bei rpms die Epochen (Epoch:) verwenden, da
Epochen immer Vorrang vor Release und Version haben.

Hier gilt die Faustregel: 
* Nie Epochen einführen.
* Wenn das zu ersetzende RPM Epochen verwendet, genau die gleiche Epoche
verwenden.

Verschlimmert wird die Sache noch durch eine Änderung in neueren
RPM-Versionen:
In RPM < 4.2 wird "nicht vorhandene Epoche" als "nicht vorhanden"
interpretiert, d.h. Epoch: 0 ist grösser als "Epoch: nicht vorhanden".
In RPM >= 4.2 wird "nicht vorhandene Epoche" als "Epoch: 0"
interpretiert.

[Solange SuSE auf ihrem Steinzeit-RPM-3.0.x verharrt, oder Ihr RPM
entsprechend modifiert, wird das unter SuSE keine Auswirkungen haben]

>  Das ist auch wichtig für Leute wie ich, die apt 
> benutzen.
Das stimmt nur mit Einschränkung: Mittels Pinning lassen sich derartige
Probleme in der Regel umschiffen.

> Bei neuen Paketen ist dir die Namensgebung mehr oder weniger selbst 
> überlassen, sollte sich aber am allgemeinen Standard halten, also 
> %name-%version....
Strenggenommen ist der Dateiname irrelevant. Worauf es ankommt, sind die
innerhalb eines RPMs enthaltenen Einträge.
 
> >
> > Ist das so in Ordung oder muß ich die ganzen Pakete neubauen?
> >
> > 2.) Wenn ja, soll ich dann den Zusatz SuSE81 weglassen?
> 
> ja, siehe oben
ACK, ein Release "SuSE81-[0-9]?" ist immer grosser/neuer als ein RPM mit
Release "[0-9]?". Dein Release: SuSE81-* verhindert somit einen Upgrade
auf ein offizielles SuSE-RPM.

> >
> > 3.) Stimmt das mit i386, oder soll ich da lieber i586 draus machen?
> > Wenn ja, wo stelle ich das ein?
> 
> Benutze bei rpm:
> 
> --target=i586
> 
> oder halt i686, je nachdem was du machen willst.

Nun, es macht genau das was Du willst, streng genommen ist es aber nicht
richtig. 

<pedantic>
Eigentlich richtig wären --target=i586-suse-linux,
--target=i586-suse-linux-gnu oder --target=i586-pc-linux-gnu

Doch weder SuSE's rpm noch die rpm-Versionen anderer Distris können
damit umgehen.

Dieses Problem und die Folgen bekommt man im Normalfall erst zu Gesicht,
wenn man versucht Cross-RPMS (RPMS für einen anderen Vendor oder eine
zum Build-Host inkompatible Architektur zu erstellen [1]

(Manfred, hast Du mal versucht ppc rpms auf einem iX86 und/oder
umgekehrt zu erzeugen)

</pedantic>

Ralf

[1] Manfred, hast Du mal versucht ppc-suse-linux rpms auf einem
i386-suse-linux System und/oder umgekehrt zu erzeugen? 

i386-pc-cygwin oder sun-sparc-solaris rpms auf i386-redhat-linux System
mit rpm-4.[01] zu erzeugen, braucht es heftige Klimmzüge, mit SuSE-6|7
hatte es mal eine zeitlang funktioniert, mit dem rpm von 8.1 habe ich es
nicht mehr geschafft und schliesslich aufgegeben.






More information about the Packman mailing list