NAME¶
Emdebian::Grip - internes Emdebian-Modul fuer Emdebian-Grip-Depots
Beschreibung¶
Es ist lohnenswert mit "reprepro" (1) vertraut zu sein, wenn mit
diesem Modul gearbeitet wird.
Emdebian::Grip stellt Depotverwaltungs-Unterstuetzung fuer die
em_autogrip-Skripte zur Verfuegung, um eine Dreiwege-Depot-Hierarchie
fuer Emdebian-Grip bereitzustellen, einschliesslich Unterstuetzung fuer
Paketmigration von Unstable nach Testing.
Wenn zu Beginn nur "Unstable" betrachtet wird, ist die Hierarchie wie
folgt:
Debian-Unstable wird unter Benutzung von
${base}${filter_name}/conf/pkglist gefiltert, was wiederum auf der
Ausgabe von Xdpkg --get-selectionsX basiert. Nur Pakete, die derzeit auf
Maschinen installiert sind, auf denen Emdebian-Grip laeuft werden der
XpkglistX hinzugefuegt. "reprepro" aktualisiert dann
${filter_name} vom ausgewaehlten Debian-Spiegel, waehrend es nur die
Binaer- und Quellpakete laedt, die in XpkglistX angegeben sind, um einen
teilweise lokalen Spiegel fuer die Liste der unterstuetzten Architekturen zu
erstellen.
Grip-Unstable wurde von dem gefilterten Spiegel durch einen kombinierten Prozess
der Konvertierung des Quellpakets und anschliessendem Identifizieren der
fehlenden Binaerpakete von der XpkglistX erstellt. Waehrend des
"Emgrip"-Prozesses werden Emdebian-TDebs erstellt, die in das
Locale-Depot eingefuegt werden:
Locale ist ein sehr spezialisiertes Depot, das nur fuer Debian-Quellpakete und
Emdebian-TDebs entworfen wurde, die von der Locale-Wurzel organisiert werden,
z.B. ist die en_GB-Unterstuetzung in der Komponente
en. Waehrend Debian
drei Komponenten hat (
main,
contrib und
non-free), hat
das
Locale-Depot 19 Komponenten (einschliesslich XmainX fuer
Quellpakete). Im Locale-Pool sind Pakete ueber Komponenten organisiert,
waehrend "Apt"-Pakete im Filter oder Grip-Depot unter
pool/main/a/apt im Locale-Depot sind, die
en-TDebs sind in
pool/en/a/apt/ und die franzoesischen unter
pool/fr/a/apt/ etc.
Die Liste der Locale-Wurzeln, die vom Locale-Depot unterstuetzt werden, wird
von
&get_locale_roots zurueckgegeben. Es ist Teil des Moduls
"Debian::Packages::Compare". Um weitere Informationen ueber
Locale-Wurzeln zu erhalten, lesen Sie
<
http://www.emdebian.org/emdebian/langupdate.html>
Soweit es Testing betrifft, funktioniert die Hierarchie auf einem aehnlichen Weg
wie bei Debian, aber mit zusaetzlicher Unterstuetzung fuer Depots, die
gestartet werden, nachdem Pakete in Debian-Testing migriert wurden und eine
neuere Version in Debian-Unstable existiert.
Beachten Sie, dass das Testing-Depot in vielen Faellen Daten benoetigt, um
manuell eingerichtet zu werden - durch Bearbeiten von Xconf/distributionsX
fuer jedes Depot. Die aktuelle Emdebian-Konfigurationsdateien werden ihren Weg
in das Debian-Wiki zu gegebener Zeit finden.
Mit einem voll ausgefuellten Debian-Unstable, Grip-Unstable und Locale-Unstable
kann
&grip_britney dann Pakete in Grip-Testing unter Benutzung der
von den Befehlen "Debian::Packages::Compare" und "reprepro
copysrc"in
&get_britney_list implementierten Kriterien
migrieren. Die meisten, wenn nicht alle Grip-Depots werden zu einer Zeit
anfangen, wenn einige Debian-Pakete bereits nach Testing migriert sind und
eine neuere Version nach Unstable hochgeladen wurde.
"Emdebian::Grip" beinhaltet ausserdem
catch-up-Unterstuetzung
per
&migrate_missing, das relevante Pakete von Debian-Testing
beinhaltet, als ob diese Version direkt nach Grip-Testing hochladen worden
waere (was tatsaechlich dem entspricht, was geschieht).
Der
emgrip-Prozess kann
eine spuerbare Zeit dauern - denkbar sind
viele Stunden, nicht Minuten - prinzipiell aufgrund des Mehraufwands fuer das
Generieren der TDebs einzeln, pro Quelle, pro Locale und pro Architektur. Um
eine vollstaendige Unstable- und Testing-Zusammenstellung zu erstellen ist
voraussichtlich ein Tag oder mehr noetig, aber es ist meistens automatisiert.
Die Probleme, die verbleiben, beziehen sich auf Abhaengigkeitsthemen. Die
Funktion
&edos in "Emdebian::Grip" hat Probleme beim
Versuch, die Loesung fuer Abhaengigkeitsprobleme zu berechnen, die von
"edos-debcheck" identifiziert wurden und den Problemen, die
teilweise akut werden, wenn das Depot selbst zu Beginn in keinem guten Zustand
ist. Deshalb wird
&edos nicht automatisch von aktuellen Werkzeugen
ausgefuehrt. Das Depot muss vollstaendig aktuell sein und alle relevanten
Pakete muessen im Filter und in Grip exisitieren bevor
&edos-Unterstuetzung genutzt wird. Benutzen Sie am Anfang direkt
"edos-debcheck", um die Hauptprobleme zu erkennen:
edos-debcheck -explain -failures < ${base}${grip_name}/dists/sid/main/binary-i386/Packages
Pakete, die
NICHT VERFUeGBAR sind, muessen gegebenenfalls als Quell- oder
Binaerpakete gegrippt werden, es ist aber bei der korrekten Interpretation der
"edos-debcheck"-Ausgabe Vorsicht geboten, um den richtigen Verweis
in der Kette zu erkennen.
Es existieren zwei Hauptprobleme bei der Automatisierung dieses Prozesses, lesen
Sie "em_autogrip" (1) um genaue Informationen zu erhalten, aber es
genuegt hier zu sagen, dass Pakete, wenn sie in Debian-Unstable existieren, in
der Liste der
NICHT VERFUeGBAREN Pakete erscheinen, wo die korrekte
Aktion das Loeschen der Pakete ist, die von dem nicht verfuegbaren Paket
abhaengen. Diese Themen werden innerhalb Debian diskutiert.
Copyright und Lizenz¶
Copyright (C) 2007-2009 Neil Williams <codehelp@debian.org>
Dieses Paket ist freie Software; Sie koennen es unter den Bedingungen der
XGNU General Public LicenseX, wie sie von der XFree Software FoundationX
entweder in Version 3 der Lizenz oder (optional) in einer spaeteren Version
veroeffentlicht wurde, weiterverteilen und/oder veraendern.
Dieses Programm wird inder Hoffnung verteilt, dass es nuetzlich sein wird,
aber OHNE JEGLICHE GEWAeHRLEISTUNG, auch ohne die inbegriffene
Gewaehrleistung von MARKTGAeNGIGKEIT und EIGNUNG FUeR EINEN SPEZIELLEN ZWECK.
Lesen Sie die XGNU General Public LicenseX, um weitere Einzelheiten zu
erhalten.
Sie sollten mit diesem Programm eine Kopie der XGNU General Public License
erhalten haben. Falls nicht, lesen Sie <http://www.gnu.org/licenses/>.
Beispiel¶
use strict;
use warnings;
use Emdebian::Grip;
use Debian::Packages::Compare;
use vars qw/ $filter_name $grip_name $suite $base $verbose
$noskip @archlist @locroots @lines $line %pkg @filter $have
%debianunstable %gripunstable %tdebunstable /;
my $mirror='http://ftp.uk.debian.org/debian'; # Standard
$filter_name = 'filter';
$grip_name = 'grip';
$suite = "unstable"; # zuerst
$base = '/opt/reprepro/';
$verbose = 0;
&set_base($base);
&set_repo_names ($filter_name, $grip_name);
my $a = &get_archlist ($suite, $filter_name);
@archlist = (not defined $a or not @$a) ?
qw/i386 amd64 arm armel powerpc mips mipsel/ : @$a;
my $l = &get_locale_roots ($suite, 'locale');
@locroots = (not defined $l or not @$l) ? qw/ af am ang ar as ast az be bg
bn br bs ca cs cy da de dz el en eo es et eu fa fi fr ga gl gu he hi hr
hu hy ia id io is it ja ka kn km ko ku ky lg li lt lv mai mg mi mk ml mn mr
ms nb ne nl nn no ns nso oc or pa pl ps pt rm ro ru rw si sk sl sq sr sv
ta te th tk tl tr tt ug uk ur uz vi wa wo xh yi zh zu / : @$l;
&setup_repos if ( not -f "${base}${filter_name}/conf/pkglist" );
my $debu = &read_packages ('unstable', $filter_name);
my $gripu = &read_packages ('unstable', $grip_name);
my $tdebu = &read_locale ('unstable', 'locale');
%debianunstable = %$debu if (defined $debu);
%gripunstable = %$gripu if (defined $gripu);
%tdebunstable = %$tdebu if (defined $tdebu);
&update_filter;
&update_repo($verbose);
# mit der Arbeit anfangen
set_repo_names¶
Kopiert den Standard- oder benutzerdefinierten Filter- und Grip-Depotnamen in
das interne Modul.
set_noskip¶
Kopiert die benutzerdefinierte --noskipold-Option in das interne Modul, damit
sie bei Aufruf vom XrepreproX benutzt werden kann.
set_dry_run¶
Konfiguriert einen Testlauf, bei dem externe Befehle ausgegeben statt
ausgefuehrt werden.
print_missing¶
Gibt die Paketliste aus, die in einem einfachen Format von
"Debian::Package::Compare::get_missing_sources" zurueckgegeben wurde
print_build_deps¶
Gibt die Liste aus, die in einem einfachen Format von
"Debian::Package::Compare::get_missing_builddeps" zurueckgegeben
wurde
print_testing_status¶
Stellt eine detaillierte Ausgabe des Status des Testing-Depots fuer Grip zur
Verfuegung, vergleicht Debian-Unstable (Filter) mit Debian-Testing (Filter)
und erkennt, welche Quellpakete in Emdebian-Grip-Testing hinter Debian
stecken.
Diese Liste ist weiterhin unterteilt in die, bei denen die Quellversion von
Debian-Unstable genau die gleiche ist wie die Quellversion in Debian-Testing
(Pakete, die nach Grip-Testing migriert werden muessen) und denen, deren
Version sich von der in Testing unterscheidet.
grip_britney¶
Grip-Version des Britney-Skripts, das Pakete in Debian-Testing migriert. Lesen
Sie "Debian::Packages::Compare" (3), um Einzelheiten der
get_britney_list-Kriterien zu erhalten.
Um es zusaetzlich neuen Depots zu erlauben zu Debian-Paketen aufzuschliessen,
muessen Pakete in Grip-Unstable die bereits Debian-Testing-Paketen voraus
sind, direkt aus Debian-Testing gegrippt werden.
Ausserdem kann dies auftreten, wenn Pakete direkt unter Benutzung von
Xtesting-proposed-updatesX waehrend eines Veroeffentlichungs-Freeze nach
Debian-Testing uebernommen werden.
Beachten Sie, dass Xgrip_britneyX nur Pakete migriert, bei denen die Version in
Debian-Unstable der in Debian-Testing entspricht - d.h. bei denen eine
Migration bereits in Debian erfolgt ist. Pakete, die ueber
Xtesting-proposed-updatesX ankommen oder in Testing migriert wurden bevor das
Grip-Depot gestartet wurde und die nun eine neuere Version in Unstable haben,
koennen unter Benutzung von Xmigrate_missingX migriert werden.
Falls Sie
grip_britney und
migrate_missing zusammen ausfuehren,
starten Sie zuerst Xgrip_britneyX und laden Sie saemtliche Daten unter
Benutzung von
read_packages erneut, bevor Sie versuchen
migrate_missing auszufuehren. Lesen Sie
migrate_missing, um
weitere Informationen zu erhalten.
migrate_missing¶
Resultat von Xgrip_britneyX, das den Prozess vervollstaendigt, indem es Pakete,
die eine andere Version in Debian-Unstable haben, in Testing einfuegt.
Fehlende Pakete werden in Testing unter Benuzung von
grip_source und
grip_binary eingefuegt, als ob sie direkt in Testing hochgeladen
wuerden (was tatsaechlich dem entspricht, was geschieht). Das heisst, dass
migrate_missing das Paket in Testing nur so lange verarbeitet, wie es
die neuere Version, die nach Unstable ging, bearbeitet. Abhaengig von der
Anzahl der betroffenen Pakete,
kann Xmigrate_missingX viel laenger
brauchen, als Xgrip_britneyX, aber es sollte seltener noetig sein,
sobald das Depot vollstaendig ist.
EDOS¶
Auf dieser Stufe nur ein Rahmenkonzept. Diese Funktion muss eventuell die
Ergebnisse durch Architektur und Depot zusammentragen und versuchen eine
Loesung aufzuzeigen.
Lesen Sie "em_autogrip" (1), um etwas ueber Probleme mit der
Edos-Rekursion zu erfahren.
In X$mode eq 'edos'X werden die Pruefdaten einfach fuer jeden Filter und jedes
Grip-Depot ausgegeben.
clean_incoming¶
Unregelmaessig waehrend laengeren Ausfuehrungen aufrufen.
cleanup¶
Nur vor dem Beenden aufrufen
update_filter¶
Der Filter in der XFilterListX fuellen, so dass automatische Aktualisierungen
verarbeitet werden koennen X ohne einen filter wird das vollstaendige Archiv
hinzugefuegt. Aktualisieren nimmt jedoch eine spuerbare Zeit in Anspruch.
Rufen Sie es daher nur auf, falls noetig.
extend_filter¶
Paket(e) zur Filterliste hinzufuegen, eine durch Leerzeichen getrennte Liste ist
hinnehmbar.
update_repo¶
Sobald der XpkglistX-Filter korrekt ist, rufen Sie Reprepro auf, um die
aktualisierten Pakete abzufragen.
incoming_locale¶
Prueft das Eingangsverzeichnis auf Emdebian-TDebs und fuegt sie in Reprepro ein.
Bis die X.tdebX-Erweiterung unterstuetzt wird, muss Reprepro ueberredet werden
solchen Dateien die Benutzung der Option "--ignore=extension" zu
erlauben.
Unter all den erwarteten
Fehlernachrichten werden einige nuetzliche
Ausgaben von Reprepro an "STDERR" geschickt, wenn TDebs behandelt
werden, so dass Fehler nicht an
/dev/null gesandt werden.
check_dirs¶
Prueft, ob kritische Verzeichnisse in der Dreiwege-Depothierarchie existieren
und erstellt die fehlenden.
setup_repos¶
Beachten Sie: Falls Sie Ihr eigenes Depot einrichten, denken Sie daran, dass es
viel Zeit kostet, den XContents:X-Bezeichner in Reprepro waehrend jeder
Operation auf dem Depot einzufuegen. Inhalte sind nicht durch
"setup_repos" eingeschaltet und es ist dringend empfohlen, dass sie
nicht bei spaeteren Aenderungen erneut eingeschaltet werden.
Es muss entschieden werden, ob dies mit mehreren Suites bewaeltigt wird oder nur
Xsuite=unstableX erzwungen wird.
Locale wird gemeinsam mit Crush benutzt. Es ist nicht besonders leicht eine neue
Locale-Wurzel hinzuzufuegen, wenn gleichzeitig die Skripte und Depots
geaendert werden muessen.
Benoetigte Reprepro-Daten (braucht Konfigurationsunterstuetzung): Diese Dateien,
die fuer fertige Reprepro-Depots erstellt werden muessen, werden auch
"SignWith: 0x97BB3B58" benoetigen, ausser Stable, das manuell
signiert sein sollte, um die Sicherheitsluecke zwischen Grip und Debian zu
ueberbruecken.
convert_prefix¶
Debian-Depots benutzen die Index-Eigenschaft des Quellpaketnamens im Pfad zum
Paketverzeichnis unterhalb des Pools, um die Anzahl der Listen pro Verzeichnis
auf einer verwaltbaren Stufe zu halten. Eine Ausnahme bilden Quellpakete, die
mit X"lib" beginnen, weil dort so viele sind, dass der Abschnitt
X"l"X zu gross wuerde. Waehrend X"l"X bleibt, wird jedes
Quellpaket, das mit X"lib"X beginnt, unter eine getrennte
Zusammenstellung von Verzeichnissen abgelegt, die die ersten vier Buchstaben
anstelle von nur X"l"X benutzen, z.B. wird "libaa" unter
"pool/main/liba/libaa/" gefunden und "libfoo" unter
"pool/main/libf/libfoo/", aber "limpet" wuerde unter
"pool/main/l/limpet/" liegen.
Convert_prefix ist eine Schnellfunktion, um das korrekte Praefix unter
diesen Regeln festzulegen.
grip_source¶
Adapter fuer Emgrip, der ein einzelnes Debian-Quellpaket nimmt, das Binaerpaket
gript, wo der Quellpaketname zum Binaerpaketnamen passt (wegen einer Stoerung
in der Funktionsweise von "Reprepro"), irgendwelche Emdebian-TDebs
generiert, die unveraenderten Quellpakete in Grip einfuegt, die gegripten
Binaerpakete in Grip einfuegt und und jedes generierte Emdebian-TDeb in Locale
einfuegt.
Sobald das Quellpaket verarbeitet wurde, wird
&clean_incoming
ausgefuehrt.
grip_binary¶
Adapter fuer Emgrip, der ein einzelnes Debian-Binaerpaket nimmt und gript,
irgendwelche Emdebian-TDebs generiert, das gegripte Binaerpaket in Grip
einfuegt und irgendwelche generierten Emdebian-TDebs in das Locale einfuegt.
Sobald das Binaerpaket verarbeitet wurde, wird
&clean_incoming
ausgefuehrt.
Komponenten und Abschnitte¶
Jedes Binaerpaket gehoert zu einer "Section", die den Typ oder die
Funktionalitaet des Pakets weitgehend beschreibt. Falls in dem Depot eine
Komponente mit dem gleichen Namen wie die "Section" existiert, wird
das Paket in dieser Komponente abgelegt. Falls der Paketname mit
"-dev" endet oder die "Section" XdevelX ist, wird
zusaetzlich die Komponente "dev" ausgewaehlt. Falls der Paketname
mit "-doc" endet oder der "Abschnitt" "doc" ist,
wird die Komponente "doc" ausgewaehlt. Wenn dort keine passende
Komponente fuer das Grip-Depot konfiguriert ist, wird "main"
benutzt. Abschnittsnamen selbst werden vom Filter-Depot gelesen, d.h. durch
Ueberschreiben von Debians Ftp-Master gesetzt.
switch_component¶
Einzelne Routine, die austueftelt, welche Komponenten fuer welche Abschnitte
benutzt werden sollten.
AUTOR¶
Neil Williams, "<codehelp@debian.org>"
FEHLER¶
Bitte melden Sie alle Fehler oder Anfragen nach Funktionalitaeten auf Englisch
unter Benutzung von "reportbug emdebian-tools" an das
Debian-Fehlerverfolgungssystem.
Bekannte Fehler¶
(Auch oft als ToDo-Liste bekannt)
Der Status der TDebs im Locale-Depot muss geprueft werden, bevor weitere
generiert werden, aber dies bedeutet auch, dass Aenderungen in Emgrip gemacht
werden muessen, so dass TDebs mit einer Befehlszeilenoption uebersprungen
werden koennen. In einer normalen Operation wird das Paket jedoch nur
verarbeitet, weil es veraltet ist, daher muessen die TDebs und andere Dateien
sowieso ersetzt werden.
Bei "Architecture: all" handelt es sich um Pakete, die stetig fuer
mehrere Architekturen weiterverarbeitet werden. Urspruenglich wurde dies
gemacht, weil das Paket Uebersetzungen enthalten konnte, die in Emdebian
architekturabhaengig sein mussten. TDebs sollten jedoch nur von Quellpaketen
generiert werden und dieser Schritt muss wahrscheinlich geklaert werden.
"reprepro" handhabt solche Verdopplung korrekt, es ist nur etwas
gespraechig, wenn es dies handhabt und es summiert sich zu der Zeit hinzu, die
der gesamte Prozess benoetigt.
Ausserdem wird eine allgemeine Uebersichtsfunktion benoetigt, die alle drei
Depots zusammenfasst.