Unterschiedliche Paketgroessen bei kompilieren in /usr/ports, make package

turrican

Well-Known Member
Hallo zusammen,

hab die Tage ein wenig mit FreeBSD 12.2 in den /usr/ports rumkompiliert, dabei fiel mir auf, dass beim bauen desselben Pakets (hier getestet mit LibreOffice) nie die selben Paketgroessen rauskommen, die Paketgroessen unterscheiden sich immer um ein paar Tausend Bytes, selbst wenn man das kompilieren skriptet.

Beispiel:

114956936, libreoffice-7.0.3.1_2.txz
114943292, libreoffice-7.0.3.1_2.txz
114947268, libreoffice-7.0.3.1_2.txz
114946332, libreoffice-7.0.3.1_2.txz

Was hab ich denn da übersehen - oder soll das so?

Dachte, das gebaute Paket sollte immer gleich gross sein, solang sich dazwischen nichts an den Rahmenbedingungen und den Optionen ändert?



turrican
 
Ich weiß nicht, ob es mit Deinem "Problem" im Zusammenhang steht. Aber generell hat man heutzutage häufig ein Problem ein Build 1:1 zu reproduzieren. Sprich: Wenn sich an den Quellen nix geändert hat dann auch bei jedem Build dann wirklich ein identisches Ergebnis zu bekommen.
Es gibt verschiedene Gründe, warum Builds nicht reproduzierbar sind. Häufig sind es z.B. irgendwelche Zeitstempel die in Dateien gespeichert werden. Oder in welcher Reihenfolge Dateien kompiliert wurden (insbesondere bei MultiCPU ist das ja nicht immer klar).

Es gibt aber auch ganz klar den Trend Builds reproduzierbar zu machen. Weil es jedem erlaubt relativ einfach zu überprüfen, ob ein Binärpaket dem Quellcode entspricht oder nicht. Man braucht es nämlich nur selbst zu kompilieren und dann zu vergleichen.

siehe dazu auch:
 
Na, ein Problem ist das für mich jetzt eigentlich nicht, aber ... kam mir halt komisch vor, dass da nie das gleiche rauskommt; macht es ja dann schwierig, z.B. mittels Hashwert Builds zu vergleichen oder Authentizität zu prüfen (wie du ja auch meintest).

Macht die Build-Reihenfolge und Multicore so viel aus - hätt ich anfänglich gar nicht gedacht, würde sich aber für mich erstmal plausibel anhören;
 
Ich glaube es liegt an der xz-Kompression der Pakete. Denn xz nutzt LZMA [1] als Kompressionsalgorithmus und der maximal erreichte Kompressionsfaktor hängt stark von der Reihenfolge ab, in der die Daten eingegeben werden. Wenn pkg create das Paket erstellt, wird es die Dateien wahrscheinlich in der Reihenfolge packen, in der sie aus fts() rausfallen und nicht nocht extra sortieren. Dabei ist die Reihenfolge zufällig, bzw. sie hängt von den Eigenschaften des zugrundeliegenden Dateisystems ab.

Du könntest die Pakete einmal mit unxz dekomprimieren. Wenn ich Recht habe, müssten sie hinterher gleich groß sein.
 
Zurück
Oben