Re: apt-ftparchive - getrennte Packages-Dateien für amd64 und i386
Tobi:
>Hallo!
>apt-ftparchive bringt mich noch zur Verzweiflung. Ich möchte damit eine
>Repository-Struktur verwenden, die aussieht, wie im unten stehenden
>Beispiel.
>Leider klappt das so nicht.
>Folgendes habe ich versucht:
>[...]
>Tree "dists/etch" {
> Sections "base addons";
> Architectures "amd64 i386";
>};
>BinDirectory "pool-etch/binary/base" {
> Packages "dists/etch/base/binary-i386/Packages";
> Contents "dists/etch/Contents-i386"
> SrcPackages ""dists/etch/base/source/Sources";"
>};
>BinDirectory "pool-etch/binary/base" {
> Packages "dists/etch/base/binary-amd64/Packages";
> Contents "dists/etch/Contents-amd64"
>};
>[...]
Und diese Struktur soll sich ergeben:
>dists/
> etch/
> addons/
> binary-i386/
> Packages
> binary-amd64/
> Packages
> source/
> Sources
> base/
> binary-i386/
> Packages
> binary-amd64/
> Packages
> source/
> Sources
> sid/
> addons/
> binary-i386/
> Packages
> binary-amd64/
> Packages
> source/
> Sources
> base/
> binary-i386/
> Packages
> binary-amd64/
> Packages
> source/
> Sources
>pool-etch/
> binary/
> addons/
> *._i386.deb
> *._amd.deb
> base
> *._i386.deb
> *._amd.deb
> source/
> addons/
> *.dsc
> base/
> *.dsc
>pool-sid/
> binary/
> addons/
> *._i386.deb
> *._amd.deb
> base/
> *._i386.deb
> *._amd.deb
> source/
> addons/
> *.dsc
> base/
> *.dsc
>Hat jemand eine Idee, wie ich apt-ftparchive dazu bringe, amd64 und
>i386-Pakete in getrennte Packages-Dateien pro Sektion zu schreiben,
>obwohl diese im selben pool-Verzeichnis liegen?
Ich fürchte, das geht nur auf folgende, etwas umständliche Weise:
Du musst apt-ftparchive für jedes einzelne Paket mitteilen, zu
welcher Kombinationen (Distribution, Section, Architecture) es
gehört. (Ich schreibe mit Absicht »Kombination/en/«, also
Mehrzahl, weil Pakete mit Architecture = all zu allen
Architectures gehören, und weil Pakete auch zu mehreren
Distributions gehören können.)
Jedenfalls geht das so:
apt-ftparchive erwartet dann zu jeder Kombination (Distribution,
Section, Architecture) eine Filelist- bzw. Sourcefilelist-Datei,
in der die Pfade zu den Paketdateien im Repository stehen, also
in Deinem Falle beispielsweise
./pool-etch/binary/base/c/clamav/libclamav-dev_0.90.1-3etch3_i386.deb
Für Sourcefilelists sieht das dann ähnlich aus, nur dass die in
ihnen aufgelisteten Dateien dann nicht *.deb sondern *.dsc
heißen.
Desweiteren muss Du apt-ftparchive natürlich mitteilen, wie die
einzelnen Filelist- bzw. Sourcefilelist-Dateien heißen und in
welchem Verzeichnis sie stehen:
In welchem Verzeichnis?
Dir::FileListDir "/Pfad/zu/Filelists/";
Wie wird aus (Distribution, Section, Architecture) der Name der
Filelist- bzw. Sourcefilelist-Datei bestimmt?
TreeDefault
{
FileList "binary $(DIST) $(SECTION) $(ARCH)";
SourceFileList "source $(DIST) $(SECTION)";
};
Daraus setzt apt-ftparchive dann für etch die Pfade
/Pfad/zu/Filelists/binary dists/etch base amd64
/Pfad/zu/Filelists/binary dists/etch addons amd64
/Pfad/zu/Filelists/binary dists/etch base i386
/Pfad/zu/Filelists/binary dists/etch addons i386
und
/Pfad/zu/Filelists/source dists/etch base
/Pfad/zu/Filelists/source dists/etch addons
und für sid die Pfade
/Pfad/zu/Filelists/binary dists/sid base amd64
/Pfad/zu/Filelists/binary dists/sid addons amd64
/Pfad/zu/Filelists/binary dists/sid base i386
/Pfad/zu/Filelists/binary dists/sid addons i386
und
/Pfad/zu/Filelists/source dists/sid base
/Pfad/zu/Filelists/source dists/sid addons
zusammen.
Ich würde Dir empfehlen, bei Deinem Tree nicht
>Tree "dists/etch" {
> ...
>};
zu schreiben sondern
>Tree "etch" {
> ...
>};
damit Du in
/Pfad/zu/Filelists/binary dists/etch base amd64
/Pfad/zu/Filelists/binary dists/etch addons amd64
/Pfad/zu/Filelists/binary dists/etch base i386
/Pfad/zu/Filelists/binary dists/etch addons i386
/Pfad/zu/Filelists/source dists/etch base
/Pfad/zu/Filelists/source dists/etch addons
^
diese Schrägstriche loswirst --+
so dass die Filelist-Dateien dann so heißen:
/Pfad/zu/Filelists/binary etch base amd64
/Pfad/zu/Filelists/binary etch addons amd64
/Pfad/zu/Filelists/binary etch base i386
/Pfad/zu/Filelists/binary etch addons i386
/Pfad/zu/Filelists/source etch base
/Pfad/zu/Filelists/source etch addons
(Analog für sid.)
Also könnte Deine Generate-Konfiguration dann so aussehen:
Dir
{
// Hinweis: apt-ftparchive aus Sarge schreibt offenbar
// nur dann relative "filename:"-Attribute in die Dateien
// Packages, wenn Dir::ArchiveDir ein relativer Pfad ist.
ArchiveDir ".";
FileListDir "/Pfad/zu/Filelists/";
};
TreeDefault
{
Directory "pool-$(DIST)/";
SrcDirectory "pool-$(DIST)/";
Packages "dists/$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
Sources "dists/$(DIST)/$(SECTION)/source/Sources";
Contents "dists/$(DIST)/Contents-$(ARCH)";
FileList "binary $(DIST) $(SECTION) $(ARCH)";
SourceFileList "source $(DIST) $(SECTION)";
};
Tree "etch"
{
Sections "base addons";
Architectures "amd64 i386 source";
// Beachte, dass das Architecture source speziell behandelt
// wird: Es wird kein Verzeichnis binary-source neben
// binary-amd64 und binary-i386 erzeugt, sondern
// apt-ftparchive erkennt, dass Du hier auch Source-Pakete
// einordnen willst.
};
Tree "sid"
{
Sections "base addons";
Architectures "amd64 i386 source";
// Beachte, dass das Architecture source speziell behandelt
// wird: Es wird kein Verzeichnis binary-source neben
// binary-amd64 und binary-i386 erzeugt, sondern
// apt-ftparchive erkennt, dass Du hier auch Source-Pakete
// einordnen willst.
};
Was jetzt noch umständlich ist, ist, dass Du die diese Filelist-
und Sourcefilelist-Dateien selbst füllen musst. Beispielsweise
so (sh-Skript):
Für die Binärpakete:
Durchsuche die Paketpools nach Binärdateien:
for distribution in etch sid
do
for section in addons base
do
apt-ftparchive packages pool-"$distribution"/binary/"$section" \
>"$distribution $section".Packages
done
done
In den so erzeugten Paket-Index-Dateien
{etch,sid}" "{addons,base}.Packages
findet sich dann zu jedem Paket ein Datensatz (mit einer leeren
Zeile vom folgenden abgetrennt (siehe Debian-Policy)), der u.a.
die Datenfelder
Package: clamav-base
Version: 0.90.1-3etch3
Architecture: all
Filename: ./pool/c/clamav/clamav-base_0.90.1-3etch3_all.deb
(Beipiel eines architecture-unabhängigen Pakets) oder
Package: clamav
Version: 0.90.1-3etch3
Architecture: i386
Filename: ./pool/c/clamav/clamav_0.90.1-3etch3_i386.deb
(Beipiel eines I386-Pakets) enthält.
Jeden dieser Datensätze in der Datei "etch addons.Packages" musst Du nun
folgendermaßen auswerten:
Füge den Filename-Wert der entsprechenden Filelist-Datei hinzu,
und zwar,
falls Architecture = i386,
der Datei /Pfad/zu/Filelists/binary etch addons i386,
falls Architecture = amd64,
der Datei /Pfad/zu/Filelists/binary etch addons amd64,
falls Architecture = all,
der Datei /Pfad/zu/Filelists/binary etch addons i386
*und* der Datei /Pfad/zu/Filelists/binary etch addons amd64,
also *beiden* Filelist-Dateien.
Entsprechend musst Du dann auch die Datei "etch base.Packages"
und die entsprechenden für sid durcharbeiten, indem Du die
Filename-Werte den Dateien /Pfad/zu/Filelists/binary * * *
hinzufügst.
Für die Source-Pakete sieht die Sache nochmal anders aus:
mit
$ apt-ftparchive sources pool-"$distribution"/source/"$section" \
> "$distribution $section.Sources"
kannst Du die Source-Index-Dateien erzeugen. Allerdings haben
die Datensätze kein Datenfeld Filename sondern Directory und
Files. Diese beiden geben an, in welchem Verzeichnis und wie
benannt die Paketdateien *.dsc, *.orig.tar.gz und *.diff.gz
liegen. Setze daraus den Pfad für die Datei *.dsc zusammen und
schreibe den in die Sourcefilelist-Datei
"source $distribution $section".
Jetzt sieht man auch, dass es für Source-Repositories keine gute
Idee ist, die verschiedenen Distributions auseinander zuhalten:
Es kann durchaus sein, dass zwei Distributions dieselbe
Upstream-Version eines Paketes verwenden, d.h. die Datei
*.orig.tar.gz ist dieselbe. Damit man sie nur einmal speichern
muss, empfiehlt es sich, nur *einen gemeinsamen* Source-Pool zu
halten.
Fazit von dem Ganzen: Es ist leider nicht einfach. Vielleicht
ist es besser, Du schaust Dir mal das Paket debian-cd an. Es
enthält ein Skript-Programm, das mit apt-ftparchive generate
arbeitet.
--
Bitte in die Adressierung auch meinen |Please put my full name also into
Vor- u. Nachnamen stellen z.B. |the recipient like
Friedhelm Waitzmann <xxx@example>, (Friedhelm Waitzmann) xxx@example,
"Waitzmann, Friedhelm" <xxx@example>
Reply to: