Emdebian::Grip(3) internes Emdebian-Modul fu.r Emdebian-Grip-Depots

Beschreibung

Es ist lohnenswert mit "reprepro" (1) vertraut zu sein, wenn mit diesem Modul gearbeitet wird.

Emdebian::Grip stellt Depotverwaltungs-Unterstu.tzung fu.r die em_autogrip-Skripte zur Verfu.gung, um eine Dreiwege-Depot-Hierarchie fu.r Emdebian-Grip bereitzustellen, einschlieβlich Unterstu.tzung fu.r 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 la.uft werden der XpkglistX hinzugefu.gt. "reprepro" aktualisiert dann ${filter_name} vom ausgewa.hlten Debian-Spiegel, wa.hrend es nur die Bina.r- und Quellpakete la.dt, die in XpkglistX angegeben sind, um einen teilweise lokalen Spiegel fu.r die Liste der unterstu.tzten Architekturen zu erstellen.

Grip-Unstable wurde von dem gefilterten Spiegel durch einen kombinierten Prozess der Konvertierung des Quellpakets und anschlieβendem Identifizieren der fehlenden Bina.rpakete von der XpkglistX erstellt. Wa.hrend des "Emgrip"-Prozesses werden Emdebian-TDebs erstellt, die in das Locale-Depot eingefu.gt werden:

Locale ist ein sehr spezialisiertes Depot, das nur fu.r Debian-Quellpakete und Emdebian-TDebs entworfen wurde, die von der Locale-Wurzel organisiert werden, z.B. ist die en_GB-Unterstu.tzung in der Komponente en. Wa.hrend Debian drei Komponenten hat (main, contrib und non-free), hat das Locale-Depot 19 Komponenten (einschlieβlich XmainX fu.r Quellpakete). Im Locale-Pool sind Pakete u.ber Komponenten organisiert, wa.hrend "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 franzo.sischen unter pool/fr/a/apt/ etc. Die Liste der Locale-Wurzeln, die vom Locale-Depot unterstu.tzt werden, wird von &get_locale_roots zuru.ckgegeben. Es ist Teil des Moduls "Debian::Packages::Compare". Um weitere Informationen u.ber Locale-Wurzeln zu erhalten, lesen Sie <http://www.emdebian.org/emdebian/langupdate.html>

Soweit es Testing betrifft, funktioniert die Hierarchie auf einem a.hnlichen Weg wie bei Debian, aber mit zusa.tzlicher Unterstu.tzung fu.r 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 Fa.llen Daten beno.tigt, um manuell eingerichtet zu werden - durch Bearbeiten von Xconf/distributionsX fu.r jedes Depot. Die aktuelle Emdebian-Konfigurationsdateien werden ihren Weg in das Debian-Wiki zu gegebener Zeit finden.

Mit einem voll ausgefu.llten 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 auβerdem catch-up-Unterstu.tzung per &migrate_missing, das relevante Pakete von Debian-Testing beinhaltet, als ob diese Version direkt nach Grip-Testing hochladen worden wa.re (was tatsa.chlich dem entspricht, was geschieht).

Der emgrip-Prozess kann eine spu.rbare Zeit dauern - denkbar sind viele Stunden, nicht Minuten - prinzipiell aufgrund des Mehraufwands fu.r das Generieren der TDebs einzeln, pro Quelle, pro Locale und pro Architektur. Um eine vollsta.ndige Unstable- und Testing-Zusammenstellung zu erstellen ist voraussichtlich ein Tag oder mehr no.tig, aber es ist meistens automatisiert.

Die Probleme, die verbleiben, beziehen sich auf Abha.ngigkeitsthemen. Die Funktion &edos in "Emdebian::Grip" hat Probleme beim Versuch, die Lo.sung fu.r Abha.ngigkeitsprobleme 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 ausgefu.hrt. Das Depot muss vollsta.ndig aktuell sein und alle relevanten Pakete mu.ssen im Filter und in Grip exisitieren bevor &edos-Unterstu.tzung 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 VERFU.GBAR sind, mu.ssen gegebenenfalls als Quell- oder Bina.rpakete 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 genu.gt hier zu sagen, dass Pakete, wenn sie in Debian-Unstable existieren, in der Liste der NICHT VERFU.GBAREN Pakete erscheinen, wo die korrekte Aktion das Lo.schen der Pakete ist, die von dem nicht verfu.gbaren Paket abha.ngen. Diese Themen werden innerhalb Debian diskutiert.

Copyright und Lizenz

 Copyright (C) 2007-2009  Neil Williams <[email protected]>
 Dieses Paket ist freie Software; Sie ko.nnen 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 spa.teren Version
 vero.ffentlicht wurde, weiterverteilen und/oder vera.ndern.
 Dieses Programm wird inder Hoffnung verteilt, dass es nu.tzlich sein wird,
 aber OHNE JEGLICHE GEWA.HRLEISTUNG, auch ohne die inbegriffene
 Gewa.hrleistung von MARKTGA.NGIGKEIT und EIGNUNG FU.R 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 ausgefu.hrt werden.

print_missing

Gibt die Paketliste aus, die in einem einfachen Format von "Debian::Package::Compare::get_missing_sources" zuru.ckgegeben wurde

print_build_deps

Gibt die Liste aus, die in einem einfachen Format von "Debian::Package::Compare::get_missing_builddeps" zuru.ckgegeben wurde

print_testing_status

Stellt eine detaillierte Ausgabe des Status des Testing-Depots fu.r Grip zur Verfu.gung, 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 mu.ssen) 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 zusa.tzlich neuen Depots zu erlauben zu Debian-Paketen aufzuschlieβen, mu.ssen Pakete in Grip-Unstable die bereits Debian-Testing-Paketen voraus sind, direkt aus Debian-Testing gegrippt werden.

Auβerdem kann dies auftreten, wenn Pakete direkt unter Benutzung von Xtesting-proposed-updatesX wa.hrend eines Vero.ffentlichungs-Freeze nach Debian-Testing u.bernommen 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 u.ber Xtesting-proposed-updatesX ankommen oder in Testing migriert wurden bevor das Grip-Depot gestartet wurde und die nun eine neuere Version in Unstable haben, ko.nnen unter Benutzung von Xmigrate_missingX migriert werden.

Falls Sie grip_britney und migrate_missing zusammen ausfu.hren, starten Sie zuerst Xgrip_britneyX und laden Sie sa.mtliche Daten unter Benutzung von read_packages erneut, bevor Sie versuchen migrate_missing auszufu.hren. Lesen Sie migrate_missing, um weitere Informationen zu erhalten.

migrate_missing

Resultat von Xgrip_britneyX, das den Prozess vervollsta.ndigt, indem es Pakete, die eine andere Version in Debian-Unstable haben, in Testing einfu.gt.

Fehlende Pakete werden in Testing unter Benuzung von grip_source und grip_binary eingefu.gt, als ob sie direkt in Testing hochgeladen wu.rden (was tatsa.chlich dem entspricht, was geschieht). Das heiβt, dass migrate_missing das Paket in Testing nur so lange verarbeitet, wie es die neuere Version, die nach Unstable ging, bearbeitet. Abha.ngig von der Anzahl der betroffenen Pakete, kann Xmigrate_missingX viel la.nger brauchen, als Xgrip_britneyX, aber es sollte seltener no.tig sein, sobald das Depot vollsta.ndig ist.

EDOS

Auf dieser Stufe nur ein Rahmenkonzept. Diese Funktion muss eventuell die Ergebnisse durch Architektur und Depot zusammentragen und versuchen eine Lo.sung aufzuzeigen.

Lesen Sie "em_autogrip" (1), um etwas u.ber Probleme mit der Edos-Rekursion zu erfahren.

In X$mode eq 'edos'X werden die Pru.fdaten einfach fu.r jeden Filter und jedes Grip-Depot ausgegeben.

clean_incoming

Unregelma.βig wa.hrend la.ngeren Ausfu.hrungen aufrufen.

cleanup

Nur vor dem Beenden aufrufen

update_filter

Der Filter in der XFilterListX fu.llen, so dass automatische Aktualisierungen verarbeitet werden ko.nnen X ohne einen filter wird das vollsta.ndige Archiv hinzugefu.gt. Aktualisieren nimmt jedoch eine spu.rbare Zeit in Anspruch. Rufen Sie es daher nur auf, falls no.tig.

extend_filter

Paket(e) zur Filterliste hinzufu.gen, 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

Pru.ft das Eingangsverzeichnis auf Emdebian-TDebs und fu.gt sie in Reprepro ein.

Bis die X.tdebX-Erweiterung unterstu.tzt wird, muss Reprepro u.berredet werden solchen Dateien die Benutzung der Option "--ignore=extension" zu erlauben.

Unter all den erwarteten Fehlernachrichten werden einige nu.tzliche Ausgaben von Reprepro an "STDERR" geschickt, wenn TDebs behandelt werden, so dass Fehler nicht an /dev/null gesandt werden.

check_dirs

Pru.ft, 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 wa.hrend jeder Operation auf dem Depot einzufu.gen. Inhalte sind nicht durch "setup_repos" eingeschaltet und es ist dringend empfohlen, dass sie nicht bei spa.teren A.nderungen erneut eingeschaltet werden.

Es muss entschieden werden, ob dies mit mehreren Suites bewa.ltigt wird oder nur Xsuite=unstableX erzwungen wird.

Locale wird gemeinsam mit Crush benutzt. Es ist nicht besonders leicht eine neue Locale-Wurzel hinzuzufu.gen, wenn gleichzeitig die Skripte und Depots gea.ndert werden mu.ssen.

Beno.tigte Reprepro-Daten (braucht Konfigurationsunterstu.tzung): Diese Dateien, die fu.r fertige Reprepro-Depots erstellt werden mu.ssen, werden auch "SignWith: 0x97BB3B58" beno.tigen, auβer Stable, das manuell signiert sein sollte, um die Sicherheitslu.cke zwischen Grip und Debian zu u.berbru.cken.

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 groβ wu.rde. Wa.hrend 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" wu.rde unter "pool/main/l/limpet/" liegen.

Convert_prefix ist eine Schnellfunktion, um das korrekte Pra.fix unter diesen Regeln festzulegen.

grip_source

Adapter fu.r Emgrip, der ein einzelnes Debian-Quellpaket nimmt, das Bina.rpaket gript, wo der Quellpaketname zum Bina.rpaketnamen passt (wegen einer Sto.rung in der Funktionsweise von "Reprepro"), irgendwelche Emdebian-TDebs generiert, die unvera.nderten Quellpakete in Grip einfu.gt, die gegripten Bina.rpakete in Grip einfu.gt und und jedes generierte Emdebian-TDeb in Locale einfu.gt.

Sobald das Quellpaket verarbeitet wurde, wird &clean_incoming ausgefu.hrt.

grip_binary

Adapter fu.r Emgrip, der ein einzelnes Debian-Bina.rpaket nimmt und gript, irgendwelche Emdebian-TDebs generiert, das gegripte Bina.rpaket in Grip einfu.gt und irgendwelche generierten Emdebian-TDebs in das Locale einfu.gt.

Sobald das Bina.rpaket verarbeitet wurde, wird &clean_incoming ausgefu.hrt.

Komponenten und Abschnitte

Jedes Bina.rpaket geho.rt zu einer "Section", die den Typ oder die Funktionalita.t 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 zusa.tzlich die Komponente "dev" ausgewa.hlt. Falls der Paketname mit "-doc" endet oder der "Abschnitt" "doc" ist, wird die Komponente "doc" ausgewa.hlt. Wenn dort keine passende Komponente fu.r das Grip-Depot konfiguriert ist, wird "main" benutzt. Abschnittsnamen selbst werden vom Filter-Depot gelesen, d.h. durch U.berschreiben von Debians Ftp-Master gesetzt.

switch_component

Einzelne Routine, die austu.ftelt, welche Komponenten fu.r welche Abschnitte benutzt werden sollten.

AUTOR

Neil Williams, "<[email protected]>"

FEHLER

Bitte melden Sie alle Fehler oder Anfragen nach Funktionalita.ten 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 gepru.ft werden, bevor weitere generiert werden, aber dies bedeutet auch, dass A.nderungen in Emgrip gemacht werden mu.ssen, so dass TDebs mit einer Befehlszeilenoption u.bersprungen werden ko.nnen. In einer normalen Operation wird das Paket jedoch nur verarbeitet, weil es veraltet ist, daher mu.ssen die TDebs und andere Dateien sowieso ersetzt werden.

Bei "Architecture: all" handelt es sich um Pakete, die stetig fu.r mehrere Architekturen weiterverarbeitet werden. Urspru.nglich wurde dies gemacht, weil das Paket U.bersetzungen enthalten konnte, die in Emdebian architekturabha.ngig sein mussten. TDebs sollten jedoch nur von Quellpaketen generiert werden und dieser Schritt muss wahrscheinlich gekla.rt werden. "reprepro" handhabt solche Verdopplung korrekt, es ist nur etwas gespra.chig, wenn es dies handhabt und es summiert sich zu der Zeit hinzu, die der gesamte Prozess beno.tigt.

Auβerdem wird eine allgemeine U.bersichtsfunktion beno.tigt, die alle drei Depots zusammenfasst.