wget-Befehl für apt offline über CDs

Du kommst mit der Installation nicht voran oder willst noch was nachfragen? Schau auch in den "Tipps und Tricks"-Bereich.
Antworten
calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

wget-Befehl für apt offline über CDs

Beitrag von calim » 11.04.2005 22:35:51

Hallo!

Ich habe etwas mit den Hinweisen aus http://www.pro-linux.de/news/2004/6756.html gespielt in dem Beschrieben wird wie man eine Packetliste mit apt-get erstellt und dann anderswo über wget runterläd.

Code: Alles auswählen

apt-get --print-uris -y dist-upgrade |
grep "^'" | awk '{ print $1 }' |
sed "s/'//g" > get.lst

wget -c -i get.lst
Dieser Teil klappt wunderbar, auch wenn ich ihn für einzelne Packete modifiziert habe.

Code: Alles auswählen

apt-get --print-uris -y install digikam | grep "^'" | awk '{ print $1 }' | sed "s/'//g" >>getpk.lst
Leider Habe ich Probleme damit auf diese Art und Weise meine Packetlisten zu aktualisieren.
Beschrieben war:

Code: Alles auswählen

apt-get -qq --print-uris update | awk -F\''{ print $2 }' > get.lst
und nachdem ich nach -F\' ein Leerzeichen eingefügt hatte waren auch ein paar Zeilen in der Ausgabedatei. Leider läd wget die Dateien mit dem ursprünglichen Namen (Packages.gz und Release) und nicht wie gewünscht als z.B. ftp.de.debian.org_debian_dists_sarge_non-free_binary-i386_Packages herunter. (Dadurch müßte es ja auch die Dateien immer wieder überschreiben.)

Habe ich da etwas übersehen oder muß ich etwas an den Befehlen ändern? Die Manpages sind eher verwirrend als hilfreich.

Im Voraus vielen Dank!

calim

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 11.04.2005 23:38:39

Hallo calim,
ich würde das so verstehen, dass auf dem Rechner mit "wenig" Bandbreite (aber online) folgendes eingegeben wird:

Code: Alles auswählen

apt-get update
damit die Neuerungen für diesen Rechner "bemerkt" werden.

Dach wird dann die "get.lst"-Liste erstellt, mit der Entsprechung von "apt-get upgrade" bzw. "apt-get dist-upgrade" oder "apt-get install xxx",
um mit diesen Informationen die Packete auf einem Rechner mit "mehr" Bandbreite, die Packete herunterzuladen usw.
Ich würde diese Packete dann installieren - im entsprechenden Verzeichnis:

Code: Alles auswählen

dpkg -i *.deb
Sorry eine Verknüpfung mit "...apt-get update..." und "get.lst" sehe ich in dieser Anleitung nicht - da hätte ich auch im Moment keine Idee zu :wink:

War das verständlich, oder "reden" wir aneinander vorbei?

Gruß fuzzy

Benutzeravatar
Jens-Uwe
Beiträge: 219
Registriert: 23.04.2003 10:27:13
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Jens-Uwe » 12.04.2005 01:02:17

Also,

ich habe zu ISDN-Zeiten auch die Pakete an der Uni geholt, aber das

Code: Alles auswählen

apt-get update
habe ich immer von zu Hause gemacht. Deinem Link nach scheint aber auch das zu umgehen zu sein. Nur mußt du dann zweimal laufen. Zum ersten Mal um die Listen zu holen, und dann nochmal um die Pakete zu holen. Den Aufwand mußt du selbst rechtfertigen.

Das erste Skript habe ich mir nicht angeschaut, aber zum zweiten...du willst doch in der get.lst die URLs der zu holenden Pakete stehen haben, also z.B.:
Das erreiche ich nur, wenn ich folgendes benutze (aber ich kenne mich mit awk arg schlecht aus!)

Code: Alles auswählen

apt-get --print-uris update | awk '{ print $1 }' > get.lst
Das -qq kann man glaube ich in diesem Zusammenhang weg lassen.

Dein Problem ist jetzt aber die Ausgabe der zu holenden Dateien durch wget. Wenn in get.lst nur eine URL stünde, wäre

Code: Alles auswählen

wget -i get.lst -O /var/cache/apt/DEINE_SPEZIELLE_PAKETLISTE.GZ
dein Freund.

Ist immernoch nicht fertig, aber vielleicht ein Denkanstoß.
Die geholten Pakete würde ich übrigens dringend nach /var/cache/apt/archives/ kopieren, denn nur dort kannst du sie mit apt installieren. Laß das mit dpkg für ein update lieber!!

HTH, Jens-Uwe

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 12.04.2005 07:36:21

Hallo!

Wie gesagt, das mit dem Packete holen hat ganz gut funktioniert. Ich habe die Packete dann nach /var/cache/apt/archives kopiert und konnte die dann auch mit apt installieren ohne das der Rechner was aus dem Netz holen wollte.(stimmt, ich habe hier nur 56k und hole mir die Packete an der Uni, bin ja sowieso jeden Tag da)

Ich habe mir natürlich zwei unterschiedliche Dateien zum Packete-holen und Liste-holen gabacht :wink: . Dabei habe ich den Befehl:

Code: Alles auswählen

apt-get -qq --print-uris update | awk -F\' '{ print $2 }' > getlst.txt
eingesetzt der mir dann auch eine schöne URL-Liste in die Datei geschrieben hat.

Code: Alles auswählen

http://security.debian.org/dists/testing/updates/main/binary-i386/Packages.gz
http://security.debian.org/dists/testing/updates/main/binary-i386/Release
http://security.debian.org/dists/testing/updates/contrib/binary-i386/Packages.gz
http://security.debian.org/dists/testing/updates/contrib/binary-i386/Release
http://security.debian.org/dists/testing/updates/non-free/binary-i386/Packages.gz
...
Wenn ich jetzt natürlich mit wget die Dateien holen will versucht er natürlich immer wieder die Dateien zu überschreiben. Auf den Servern habe die ja auch die gleichen Namen, liegen nur in unterschiedlichen Verzeichnissen. Deshalb habe ich mal in meinem /var/lib/apt/lists nachgeschau un da liegen die alle in der Form:

security.debian.org_dists_testing_updates_contrib_binary-i386_Packages
security.debian.org_dists_testing_updates_contrib_binary-i386_Release
security.debian.org_dists_testing_updates_main_binary-i386_Packages
security.debian.org_dists_testing_updates_main_binary-i386_Release
...

vor. Demnach sollte, wie ich das verstehe, wget nicht nur die Dateien runterladen sondern auch noch entsprechend umbenennen (die Namen entsprechen offenbar den URLs nur das Unterstriche statt den / drin sind). Es ist mir aber ein Rätsel wie das gehen könnte. Wahrscheinlich muß ich dann doch mal eine etwas längere Onlinezeit in den Listendownload ivestieren. :?

Grüße

calim

PS: Eben habe ich noch bemerkt das der Bsp-Dateiname in meinem obrigen Posting vom Forum offenbar als Link interpretiert wurde. Vielleicht funtioniert es ja einfach wenn ich die / in meiner Listendatei durch _ ersetze?.? Mal ausprobieren...

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 12.04.2005 07:52:48

Hallo Jens-Uwe,
Jens-Uwe hat geschrieben: Die geholten Pakete würde ich übrigens dringend nach /var/cache/apt/archives/ kopieren, denn nur dort kannst du sie mit apt installieren. Laß das mit dpkg für ein update lieber!!
...die "dpkg -i *.deb"-Version mag nicht so elegant sein, aber für falsch halte ich dieses nicht, die dann installierte Packete sind dann auch über "dpkg -l" zu finden etc.
http://debiananwenderhandbuch.de/dpkg.html
Habe ich einen Denkfehler oder hast Du ein Gegenbeispiel?

Gruß fuzzy

Benutzeravatar
Jens-Uwe
Beiträge: 219
Registriert: 23.04.2003 10:27:13
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Jens-Uwe » 12.04.2005 10:51:43

Hall fuzzy,

ich spreche in diesem Zusammanhang davon, dass apt für ein update, als z.B.

Code: Alles auswählen

apt-get update
apt-get dist-upgrade
die eindeutig bessere Wahl ist, weil es die Abhängikeiten von Paketen auflöst. (Wichtig: Es gibt einen Unterschied zwischen apt-get upgrade und apt-get dist-upgrade!! -> man apt-get)

Für ein beliebiges Paket zeigt dir

Code: Alles auswählen

dpkg --info *.deb
die Abhängigkeiten bzw. Konflikte des jeweiligen Paketes an.

Wenn ich vor mir ein Paket mit samt seinen Abhänigkeiten liegen hätte (weder das Paket noch dessen Abhängigkeiten sind installiert), und ich installiere das Paket mit

Code: Alles auswählen

dpkg -i Paket.deb
würde dieser Versuch fehlschlagen, weil die Abhängigkeiten nicht erfüllt sind. Installiere ich allerdings das Paket mit

Code: Alles auswählen

apt-get install Paket.deb
würde apt versuchen die notwendigen Pakete mit zu installieren. Liegen das Paket und dessen Abhängigkeiten in /var/cache/apt/archives/ findet apt sie dort, liegen sie woanders würde apt versuchen sie laut sources.list zu holen.

aptitude würde noch einen Schritt weiter gehen und dir auch noch die recommended Pakete installieren, falls du das wolltest.
die "dpkg -i *.deb"-Version mag nicht so elegant sein, aber für falsch halte ich dieses nicht, die dann installierte Packete sind dann auch über "dpkg -l" zu finden etc.
OK, viele Wege führen nach Rom. Es ist nicht falsch! Wenn du es gewöhnt bist mit dpkg zu arbeiten, habe ich nichts dagegen. Nur denke ich, dass die apt-get Variante die bessere Lösung ist. Sorry.

Zurück zu calim:
Demnach sollte, wie ich das verstehe, wget nicht nur die Dateien runterladen sondern auch noch entsprechend umbenennen (die Namen entsprechen offenbar den URLs nur das Unterstriche statt den / drin sind). Es ist mir aber ein Rätsel wie das gehen könnte.
Entweder durch ein neues Skript, dessen aussehen mir sich jetzt nicht erschließt, oder nochmal man wget anschauen.
Vielleicht funtioniert es ja einfach wenn ich die / in meiner Listendatei durch _ ersetze?
Nein. Dann versucht wget etwas zu holen, was nicht existiert. Das war nur eine Interpretation durch das vorangestellte ftp.de.debian.org...

Wieviel Paket-Dateien stehen denn in deiner get.lst nach deinem

Code: Alles auswählen

apt-get -qq --print-uris update | awk -F\''{ print $2 }' > get.lst
?

Jens-Uwe

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 12.04.2005 12:06:24

Hallo Jens-Uwe,
ich meinte den "dpkg -i *.deb" Befehl nur im Zusammenhang mit den "*.deb"-Packeten die mit der "get.lst" heruntergeladen werden... und bezog dieses auf den Link -bzw. diesen Zusammenhang:
http://www.pro-linux.de/news/2004/6756.html
Es werden dann ja nur Packete heruntergeladen, die zum jeweiligen System passen "/etc/apt/sources.lst" bzw. nach Installation oder Aktualiesierung von Packeten, und den jeweiligen Abhängigkeiten...

Wie weit man dann "apt-get upgrade" oder "apt-get dist-upgade" verwenden möchte ist natürlich "Geschmackssache" das ist klar und er Unterschied ist mir auch klar :wink:

Gruß fuzzy

Benutzeravatar
Jens-Uwe
Beiträge: 219
Registriert: 23.04.2003 10:27:13
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Jens-Uwe » 12.04.2005 12:18:57

Ich glaube jetzt habe ich dich verstanden! Sorry, da habe ich an dir vorbei geredet!

Jens-Uwe

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 12.04.2005 12:55:26

Hallo Jens-Uwe,
...kein Problem :wink: bzw. was ist noch unklar oder unglücklich ausgedrückt?

...das wichtigste ist, daß wir "calim" nicht "verwirren :wink:

Gruß fuzzy

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 12.04.2005 14:41:04

Hallo!

Erst mal Danke für das große Engagement!!!
Wie gesagt, daß mit apt-get und dem Packeteholen klappt ja ganz gut. Ich habe einfach mit Synaptik die gewünschten Packete gesucht (damit ich die genauen Packetnamen habe) und die Liste dann mit dem genannten Befehl immer verlängert.
Wenn ich mir die Packetliste für das "update" erstellen lasse bekomme ich eine Datei mit folgendem Inhalt:

Code: Alles auswählen

http://security.debian.org/dists/testing/updates/main/binary-i386/Packages.gz
http://security.debian.org/dists/testing/updates/main/binary-i386/Release
http://security.debian.org/dists/testing/updates/contrib/binary-i386/Packages.gz
http://security.debian.org/dists/testing/updates/contrib/binary-i386/Release
http://security.debian.org/dists/testing/updates/non-free/binary-i386/Packages.gz
http://security.debian.org/dists/testing/updates/non-free/binary-i386/Release
http://non-us.debian.org/debian-non-US/dists/sarge/non-US/main/binary-i386/Packages.gz
http://non-us.debian.org/debian-non-US/dists/sarge/non-US/main/binary-i386/Release
http://non-us.debian.org/debian-non-US/dists/sarge/non-US/contrib/binary-i386/Packages.gz
http://non-us.debian.org/debian-non-US/dists/sarge/non-US/contrib/binary-i386/Release
http://non-us.debian.org/debian-non-US/dists/sarge/non-US/non-free/binary-i386/Packages.gz
http://non-us.debian.org/debian-non-US/dists/sarge/non-US/non-free/binary-i386/Release
http://ftp.de.debian.org/debian/dists/sarge/main/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/sarge/main/binary-i386/Release
http://ftp.de.debian.org/debian/dists/sarge/contrib/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/sarge/contrib/binary-i386/Release
http://ftp.de.debian.org/debian/dists/sarge/non-free/binary-i386/Packages.gz
http://ftp.de.debian.org/debian/dists/sarge/non-free/binary-i386/Release
Es sind also alles Verweise auf Dateien die entweder "Packages.gz" oder "Release" heißen. Und hierbei liegt eben das Problem das die Datei die mit dem Link

Code: Alles auswählen

http://security.debian.org/dists/testing/updates/main/binary-i386/Packages.gz
geholt wird nicht einfach
"Packages.gz"
heißen darf, sondern als "security.debian.org_dists_testing_updates_main_binary-i386_Packages.gz"
gespeichert werden muß. (So stehen die zumindest im Listenverzeichnis.)
Natürlich kann ich auch alle Dateien von Hand einzeln runterziehen und umbenennen aber das ist nicht wirklich elegant, oder? :roll:

Grüße

calim

PS: Mit dpkg habe ich mich noch nicht beschäftigt da ich bisher alles über apt / apt-get ohne Probleme erledigen konnte.

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 12.04.2005 15:57:40

Hallo calim,
ich wüsste nicht wie diese "Packages.gz"-Dateien "behandelt" werden :wink:
Ich würde Dir "erstmal" empfehlen dieses "apt-get update" auf dem Rechner mit geringer internet-Bandbreite zu machen...und danach erst diesen "get.lst"-Tipp anwenden.

Eventuell findest Du hier mehr:
http://www.debian.org/doc/manuals/apt-h ... l#contents
http://qref.sourceforge.net/Debian/refe ... ge.de.html
http://debiananwenderhandbuch.de/apt.html
http://debiananwenderhandbuch.de/dpkg.html

Gruß fuzzy

Benutzeravatar
Jens-Uwe
Beiträge: 219
Registriert: 23.04.2003 10:27:13
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Jens-Uwe » 12.04.2005 16:57:10

Also,
vorausgesetzt, dass du deine sources.list nicht änderst, könnte ich mir folgendes vorgehen vorstellen (UNGETESTET!!!):
Eine Datei für deine Debian-Paketen (z.B. Paket.lst) erstellen, eine Datei für die Listen erstellen (List.lst).
Die List.lst könnte z.B. so aussehen:

Code: Alles auswählen

'ftp://ftp.nerim.net/debian-marillat/dists/unstable/main/binary-amd64/Packages.gz'
'ftp://ftp.nerim.net/debian-marillat/dists/unstable/main/binary-amd64/Release'
'ftp://ftp.nerim.net/debian-marillat/dists/unstable/main/source/Sources.gz'
'ftp://ftp.nerim.net/debian-marillat/dists/unstable/main/source/Release'
'http://cyberspace.ucla.edu/marillat/dists/unstable/main/binary-amd64/Packages.gz'
'http://cyberspace.ucla.edu/marillat/dists/unstable/main/binary-amd64/Release'
'http://debian-amd64.alioth.debian.org/pure64/dists/sid/main/binary-amd64/Packages.gz'
'http://debian-amd64.alioth.debian.org/pure64/dists/sid/main/binary-amd64/Release'
'http://debian-amd64.alioth.debian.org/pure64/dists/sid/contrib/binary-amd64/Packages.gz'
'http://debian-amd64.alioth.debian.org/pure64/dists/sid/contrib/binary-amd64/Release'
.
.
.
Wenn du nun einmal händisch die Datei wie folgt für jede Zeile abänderst:

Code: Alles auswählen

#!/bin/sh
wget 'ftp://ftp.nerim.net/debian-marillat/dists/unstable/main/binary-amd64/Packages.gz' \   
-O ftp.nerim.net_debian-marillat_dists_unstable_main_binary-amd64_Packages
.
.
.
(Anmerkung: der "\" steht dafür, dass die Zeile hier noch nicht zu Ende ist, aber umgebrochen wurde. Du kannst später alles in eine Zeile schreiben, dann brauchst du das "\" nicht.)

Dann noch ein

Code: Alles auswählen

 chmod +x List.lst 
und jetzt mit

Code: Alles auswählen

 sh List.lst 
die Pakete holen, sollten sie eigentlich richtig heißen. Nur noch an der falschen Stelle liegen sie dann.

HTH, Jens-Uwe

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 12.04.2005 18:05:46

Ich werde mir die Links mal anschauen und auch mal sehen ob sich mit dem awk was wegen der Namen machen läßt. Ein Shellscript kann ich leider nicht nehmen da ich an der Uni wget für win benutze aber vielleicht kann ich ja mit awk den "Ausgabenamen" mit in die Liste aufnehmen und mal schauen ob wget den dann als parameter akzeptiert.

Danke schonmal! jetzt habe ich ja erst mal Lesestoff :wink:

calim

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 13.04.2005 09:43:14

Hallo calim,

Code: Alles auswählen

#!/bin/sh 

wget  http://security.debian.org/dists/testing/updates/main/binary-i386/Packages.gz 
gunzip Packages.gz
mv Packages security.debian.org_dists_testing_updates_main_binary-i386_Packages
ob das nun wirklich inhaltlich richtig ist, kann ich Dir leider nicht sagen.
Das sollte die gleiche Datei sein wie in

Code: Alles auswählen

ls -l /var/lib/apt/lists/secu*
...ob Dir das weiterhilft, oder ob da noch einiges fehlt weiß ich nicht :wink:

Gruß fuzzy

[edit]
das sollte auch in einer "List.bat" gehen :wink:
http://unxutils.sourceforge.net/
http://www.microsoft.com/windows/sfu/do ... efault.asp
[/edit]

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 14.04.2005 15:06:44

Hallo!

Ich muß jetzt erst mal eingestehen das ich offenbar doch doof bin. :oops: Die Listen für die Distribution werden sich schätzungsweise vom Namen und der Lokalisation nicht ändern, oder? Also kann man ja ein wenig selber Hand anlegen und sich einmal die Mühe machen nostalgisch zu werden...ich meine sich etwas an DOS zu erinnern. Ich habe jetzt nämlich eine Lösung gefunden (heute Abend sehe ich dann ob es wirklich geklappt hat). Ich habe eine Batch-Datei erstellt (eigentlich ja nichts anderes als das bereits vorgeschlagene Script.

Code: Alles auswählen

wget -c http://security.debian.org/dists/testing/updates/main/binary-i386/Packages.gz
ren Packages.gz security_debian.org_dists_testing_updates_main_binary-i386_Packages.gz
So sehen die Zeilen jetzt aus, d.h. wget holt mir die Packages.gz und ren benennt si dann gleich um. Und so weiter und so fort.... Das alles steckt in einer Datei mit Endung .bat und wird sogar auf Doppelklick im entsprechenden Verzeichnis ausgeführt.
Mal sehen ob das alles jetzt richtig funktioniert....

Viele Grüße

calim

Benutzeravatar
Jens-Uwe
Beiträge: 219
Registriert: 23.04.2003 10:27:13
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von Jens-Uwe » 14.04.2005 16:49:47

Hast du dir eigentlich durchgelesen was ich geschrieben habe? Oder gibt es die Option

Code: Alles auswählen

-O file
       --output-document=file
           The documents will not be written to the appropriate files, but all will be concatenated together and written to
           file.  If file already exists, it will be overwritten.  If the file is -, the documents will be written to stan-
           dard output.  Including this option automatically sets the number of tries to 1. Note that when --output-document
           is specified, --convert-links is ignored.
im wget für Windows nicht?

Jens-Uwe

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 14.04.2005 23:23:58

Die Funktion hatte ich auch versucht aber leider scheint das nur für Logdateien o.ä. zu sein. Bei mir war danach trotzdem nur eine Package.gz auf der Platte statt dem angegebenen Namen. Dafür hat mir wget die Dateien bei mehreren Versuchen nicht überschrieben sondern durchnummeriert.

Grüße

calim

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 15.04.2005 10:35:34

Ich habe mal ausprobiert ob es geht einfach die Dateien nach /var/lib/apt/lists zu kopieren (nachdem dich die .gz Endungen entfernt hatte). Leider kam folgende Fehlermeldung als ich Synaptic aufgerufen habe:
Bild
Mal weiterprobieren....

calim

calim
Beiträge: 43
Registriert: 08.04.2005 11:21:40

Beitrag von calim » 17.04.2005 21:33:56

OK, ich seh's ein. Dann investiere ich eben die viertel Stunde onlinezeit ins Listen laden und hole mir dann die Pakete an der Uni. Das funktioniert und kostet weniger Nerven.

Viele Grüße noch...

calim

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 17.04.2005 22:41:18

Hallo calim,
calim hat geschrieben:OK, ich seh's ein.
:wink: ...sofern Du noch irgendwie auf die Lösung kommst, würde mich die auch interessiern - lange "basteln" wollte ich dafür nicht.

Gruß fuzzy

pugnacity
Beiträge: 187
Registriert: 13.04.2004 15:02:45
Wohnort: Berlin
Kontaktdaten:

Beitrag von pugnacity » 07.11.2005 16:11:20

also ich wäre immer noch an einer lösung interessiert, da ich zu hause imho gänzlich offline bin. :evil: und ich trotzdem gerne nen halbwegs geupdatet system hätte.

Antworten