• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Programm-Pakete mit Abhängigkeiten herunterladen?

A

Anonymous

Gast
Hallo an alle Fans von OpenSuse!

Bei mir hat sich ein kleines Problem aufgetan, was die Offline-Installation von Programmen angeht.

Da ich mehrere PC´s verwende welche nicht alle mit dem Internet in Verbindung sind,
suche ich eine Lösung wie man ein Programmpaket mit allen benötigten Abhängigkeiten herunterladen kann.

Mit folgendem Befehl kann man sich alle Abhängigkeiten eines nicht installierten RPM-Paketes anzeigen lassen:
rpm -qp --requires <Verzeichnis + Paketname>

Meine bisherige Vorgehensweise:
Nach Aufruf mittels oben aufgeführtem Befehl, suchte ich diese Pakete einzeln im Internet heraus und zog sie mir auf den Internet-PC herunter.
Alle Pakete übertrug ich dann mittels Festplatte auf den PC ohne Internetanbindung, somit konnte ich die Programme dort nun nutzen.

Beispiel:
VLC - Mediaplayer (48 Pakete werden angezeigt):
libGL.so.1
libSDL-1.2.so.0
libX11.so.6
libXext.so.6
...
...
...
libz.so.1
libz.so.1(ZLIB_1.2.3.3)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
vlc-noX = 2.0.5-7.11
vlc-qt = 2.0.5-7.11
rpmlib(PayloadIsLzma) <= 4.4.6-1

Nun, wenn man für jedes Programm Handarbeit anwenden muß, so benötigt man eben mal eine ganze Menge an Zeit.


Gibt es da nicht eine Lösung wie man dies etwas automatisieren könnte?
Etwa ein Programm?
Oder etwa per Yast, so das man bei einer Installation die Pakete nur herunter laden lässt?
Oder auch per Zypper-Befehle, bzw. rpm-Befehle?

*** Aber nicht nur die fehlenden Pakete, sondern alle Pakete die nach Befehlseingabe angezeigt werden. ***

Gerne würde ich mich über eine Positive Antwort freuen.

Freundliche Grüße,
Jürgen
 

tomm.fa

Administrator
Teammitglied
Code:
man zypper
oder:
Code:
zypper in --help
hattest du schon aufgerufen? Dort trifft man dann u.a. auf
Code:
zypper in -d Paket

Edit:
Bei genauere Überlegung könnte es aber auch nicht das passende sein.
 
Hallo Astronaut,

Astronaut schrieb:
Bei mir hat sich ein kleines Problem aufgetan, was die Offline-Installation von Programmen angeht.
Man könnte ja einen eigenen Spiegel anlegen.... ;)

Astronaut schrieb:
Da ich mehrere PC´s verwende welche nicht alle mit dem Internet in Verbindung sind,
Willst oder kannst Du die nicht ins Netz bringen?

Astronaut schrieb:
suche ich eine Lösung wie man ein Programmpaket mit allen benötigten Abhängigkeiten herunterladen kann.
Mit folgendem Befehl kann man sich alle Abhängigkeiten eines nicht installierten RPM-Paketes anzeigen lassen:
Code:
rpm -qp --requires <Verzeichnis + Paketname>
Nun, wenn man für jedes Programm Handarbeit anwenden muß, so benötigt man eben mal eine ganze Menge an Zeit.
Das hier:
Code:
for i in $(rpm -qp --requires <Verzeichnis + Paketname> | awk '{print $1}') ;
  do
    zypper in -d $i
done
funktioniert so noch nicht weil die Abhängigkeiten eben nicht nur aus Dateinamen bestehen :(

Astronaut schrieb:
Oder etwa per Yast, so das man bei einer Installation die Pakete nur herunter laden lässt?
Code:
man zypper
schreibt:
Code:
-d, --download-only
              Only download the packages for later installation.
Wenn man die Manpage gründlich liest, wird bestimmt noch besseres offenbar.

Lieben Gruß aus Hessen
 

tomm.fa

Administrator
Teammitglied
Herz-von-Hessen schrieb:
Astronaut schrieb:
Oder etwa per Yast, so das man bei einer Installation die Pakete nur herunter laden lässt?
Code:
man zypper
schreibt:
Code:
-d, --download-only
              Only download the packages for later installation.
Ist nicht wirklich nützlich/brauchbar.

Grund (u.a. am Beispiel von VLC):
Wenn auf dem Rechner, welcher zum herunterladen der Pakete dienen soll, VLC oder eine der Abhängigkeiten schon installiert ist, dann ist dieser Befehl (auch mit force) ohne Wirkung (daher auch mein Edit). Auch werden nur Abhängigkeiten heruntergeladen, welche auf dem System noch nicht installiert sind. Daher bleibt nur der Weg mit dem lokalen Repo (siehe Hinweis im suseforum.de). Wer viel Zeit, Lust und Können hat, kann sich wahrscheinlich auch irgendein ein Script dafür basteln.
 
Hallo tomm.fa,

tomm.fa schrieb:
Wenn auf dem Rechner, welcher zum herunterladen der Pakete dienen soll, VLC oder eine der Abhängigkeiten schon installiert ist, dann ist dieser Befehl (auch mit force) ohne Wirkung (daher auch mein Edit).
Habe ich auch festgestellt, war aber noch anderweitig beschäftigt
Mal weiter suchen, eventuell kann man mit rpm was hinkriegen.
Code:
herz-von-hessen@openSUSE-Desk:> rpm -q --whatrequires vlc-noX
vlc-codecs-2.0.8a-154.3.x86_64
vlc-qt-2.0.8a-154.3.x86_64
vlc-2.0.8a-154.3.x86_64
So hat man dann wenigstens eine Liste mit Paketnamen die man an Zypper übergeben kann, aber leider ist auch hier, bei bereits installierten Paketen, zypper nicht bereit etwas herunter zu laden und rpm kann wohl nicht "nur downloaden"

@Astronaut
Setze ein minimales, nicht grafisches System auf und lade darüber die Pakete herunter.

Linuxhase
 

zerum

Member
Welche Version von openSUSE ist denn auf dem Rechner installiert der mit dem Internet verbunden ist? Genauer wäre die Version von zypper interessant. Mit zypper-1.8.16 hat der Befehl "search" einige interessante Zusatzoptionen erhalten. Diese Version von zypper ist in openSUSE 12.3 enthalten und dort erst über ein Update auf die letzte Version.

Der Befehl "search" kann ab zypper-1.8.16 auch u.a. --requires. Mit einigen Formatierungsbefehlen werden im Falle vom Paket "vlc" bei mir folgendes Pakete (inklusive Abhängigkeiten) gefunden:

Code:
zypper se --requires vlc | grep ^i | awk -F\| '{ print $2 }'
 libvlc5              
 vlc                  
 vlc-noX              
 vlc-qt

Zum herunterladen der Pakete kann man diesen Befehl dann an zypper weiterreichen (nur Download). Die RPMs liegen dann in den entsprechenden Ordnern unter /var/cache/zypp/packages/.
Code:
zypper in --force -d $(zypper se --requires vlc | grep ^i | awk -F\| '{ print $2 }')
Daten des Repositories laden ...
Installierte Pakete lesen ...
Installation von 'vlc-2.0.8a-154.3.x86_64' aus Repository 'packman' wird erzwungen.
Installation von 'vlc-noX-2.0.8a-154.3.x86_64' aus Repository 'packman' wird erzwungen.
Installation von 'libvlc5-2.0.8a-154.3.x86_64' aus Repository 'packman' wird erzwungen.
Installation von 'vlc-qt-2.0.8a-154.3.x86_64' aus Repository 'packman' wird erzwungen.
Paketabhängigkeiten auflösen ...

Die folgenden Pakete werden erneut installiert:
  libvlc5 vlc vlc-noX vlc-qt 

4 zu installierende Pakete.
Gesamtgröße des Downloads: 7,5 MiB. Nur herunterladen.
Fortfahren? [j/n/?] (j): n
Kannst ja mal versuchen ob es damit bei Dir funktioniert.
 
Hallo zerum,

zerum schrieb:
Zum herunterladen der Pakete kann man diesen Befehl dann an zypper weiterreichen (nur Download). Die RPMs liegen dann in den entsprechenden Ordnern unter /var/cache/zypp/packages/.
Hast Du es denn mal selbst mit einer Software versucht, die, auf dem herunterladenden PC, bereits installiert ist?
Da genau liegt leider das Problem.

Lieben Gruß aus Hessen
 

zerum

Member
Herz-von-Hessen schrieb:
Hast Du es denn mal selbst mit einer Software versucht, die, auf dem herunterladenden PC, bereits installiert ist?
Da genau liegt leider das Problem.
Ja, vlc ist bereits installiert bei mir. Das Problem ist mir bekannt. Das Ganze funktioniert auch nur mit zypper >=1.8.16, wie bereits erwähnt, da dort die neue Option --requires für search existiert. Diese Option fragt einfach die primären Abhängigkeiten eines Pakets ab welche im Paket (bzw. in den Metadaten) hinterlegt sind.

Es wurde auf Grund dieses Bugreports implementiert: https://bugzilla.novell.com/show_bug.cgi?id=802154

Unsicherheiten bleiben natürlich, da die primären requires natürlich wiederum Abhängigkeiten haben könnten die auf dem Rechner ohne Internet wiederum angemeckert werden könnten.

Sollte eine niedrigere Version von zypper installiert sein könnte man versuchen per remove mit der Option -u oder --clean-deps zu schauen welche abhängigen Pakete zusätzlich deinstalliert werden würden (und dann natürlich mit 'n' abbrechen), und diese dann per install, --force und --download-only herunterladen.
 
Oben