[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Wie ist die Ausgabe von apt-get --print-uris -qq -y install paketname zu interpretieren?



Niels Stargardt:
>ich habe nicht ganz verstanden, was Du eigentlich vor hast. Wenn
>Du die URLS benötigst um die Dateien bei einem anderen Rechner
>herunterzuladen [...]

Ich habe vor, die Dateien bei einem anderen Rechner
herunterzuladen und auf CD zu brennen, damit ich sie zur
Verfügung habe, falls ich sie mal bei mir installieren möchte.

>[...] solltest Du folgende Seite lesen
>http://debiananwenderhandbuch.de/apt-offline.html

Habe ich; nur taugt das nicht aus folgendem Grund: Dort wird
apt-get --print-uris dist-upgrade verwendet. dist-upgrade (wie
upgrade) erneuert nur Pakete, die bereits installiert sind, und
installiert Pakete, die gebraucht werden, um noch offene
Abhängigkeiten erneuerter Pakete zu befriedigen. Ich möchte
jedoch etwas anderes: Ich möchte alle Pakete, die auf dem
offiziellen CD-Satz zu finden sind, aktuell halten, gleichgültig,
ob ich sie installiert habe oder nicht.

Im Folgenden sei Rechner A der Rechner bei mir ohne
Netzanschluss, der auf einen CD-Satz angewiesen ist, und Rechner
B der mit Netzzugang. Auf ihm ist Ubuntu installiert; außerdem
bin ich dort nicht Systemadministrator, d.h. ich habe keinen
Einfluss darauf, welche Pakete dort installiert sind und in
welcher Version sie das sind.

Beispiel: Sei Paket B eines, das auf Empfehlung eines
Debian-Security-Advisory auf neueste Version zu bringen ist.
Dabei bestehe eine Abhängigkeit von einem Paket A.

Führe ich auf Rechner B

   apt-get -qq -y --print-uris install B

aus, bekomme ich zwei URIs: Das für die neueste Version von Paket
B und das für Paket A, obwohl ich A ja gar nicht herunterladen
muss, weil es nicht neu ist.

Also behelfe ich mir folgendermaßen: Auf Rechner A erzeuge ich
mir eine Datei verfuegbare.Packages:

apt-cache dumpavail >verfuegbare.Packages

Diese Datei transportiere ich mit einem Wechselmedium auf Rechner
B, und erzeuge mit ihr (umbenannt in Packages) ein
Pseudopaketarchiv ("pseudo" deshalb, weil in ihm nur die
Paketindexdatei vorhanden ist, nicht aber die Pakete selbst):

pseudoarchiv/
   sarge/
      unknown/
         binary-i386/
            Packages

Dieses melde ich auf Rechner B in einer Datei sources.list an:

deb file:/home/friedhlm/Debian-Update/pseudoarchiv sarge unknown
deb http://ftp.uni-stuttgart.de/debian sarge main contrib non-free
deb http://ftp-stud.fht-esslingen.de/debian sarge main contrib non-free
deb http://ftp.de.debian.org/debian sarge main contrib non-free
deb http://ftp2.de.debian.org/debian sarge main contrib non-free
deb http://ftp.de.debian.org/debian sarge-proposed-updates main contrib non-free
deb http://ftp2.de.debian.org/debian sarge-proposed-updates main contrib non-free
deb http://security.debian.org/ sarge/updates main contrib non-free

Der Effekt ist nun, dass

apt-get -qq -y --print-uris install B

als URI für Paket B eine Zeile ausgibt:

'http://security.debian.org/...' B_4.5.6_i386.deb 6789 012abcdef...

und für Paket A:

'file:/home/friedhlm/...' A_1.2.3_i386.deb 12345 abcdef012...

Weil in der sources.list die Zeile

deb file:/home/friedhlm/...

am Anfang steht, wird dieses Pseudoarchiv allen weiteren
Paketquellen vorgezogen, und alle mit file:/... beginnenden URIs
lassen erkennen, dass es sich dabei um Pakete handelt, die auf
Rechner A auf einem der CDs verfügbar sind, und deshalb nicht aus
dem Netz geladen werden müssen.

Also kann ich diese Print-Uris-Ausgabe filtern, so dass die
Zeilen übrigbleiben, die sich auf einen der in der sources.list
angegebenen HTTP-Server beziehen, und anschließend mit wget diese
Pakete herunterladen.

Im Prinzip beantwortet das Anwenderhandbuch meine Frage ja schon:
Der Vorschlag

   awk '{print "wget -O " $2 " " $1}' < uris > /medium/wget-script
   [...]
   sh -x ./wget-script

zeigt, dass der Inhalt der AWK-Variablen $1 das URL in für das
Shell quotierter Form sein muss. Dokumentiert gefunden habe ich
das allerdings nirgendwo. Und folgende Frage ist noch offen: Ist
garantiert, dass keines dieser URIs white Space - genauer:
AWK-Field-Separator-Zeichen - enthält? Denn wenn doch white Space
enhalten wäre, würde der AWK-Aufruf das URI und den lokalen Namen
nicht richtig erkennen.
-- 
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: