# Dateiliste fürs mergen

## fragcollector

Gibt es eine Möglichkeit eine Liste aller Dateien zu erstellen die beim mergen runtergeladen werden müssen (und zwar in der Form von Download-URLs)? Mein Rechner hängt nämlich nicht direkt am Internet und muß deshalb alle Dateien einzelnd runterladen. Das sieht dann ungefähr so aus:

Ich will irgendein Paket mergen, und tippe "emerge paketname". emerge will die erste nötige Datei runterladen, findet aber keinen Weg nach draußen und bricht ab. Immerhin sehe ich die URL, die schreib ich in eine Datei. Jeden Tag wenn ich in der Uni bin lad ich die aufgeschriebenen Dateien runter und trag sie auf meiner ZIP-Diskette heim, schmeiß sie nach /usr/portage/distfiles und probiers nochmal. Meistens fehlt dann gleich die nächste Datei. So hab ich z.B. fürs xfree eine halbe Woche gebraucht, für Mozilla nochmal so lang, die Kompilierei war in beiden Fällen aber schön schnell erledigt.

Gibts da irgendwie eine Möglichkeit daß emerge einfach die komplette Liste aller von diesem Paket (und allen Abhängigkeiten) benötigten Dateien ausgibt, dann könnte ich die Sache doch sehr verkürzen. Es muß irgendwie gehen, schließlich stecken die Download-URLs ja in den ebuild-Dateien. Ich kann aber überhaupt kein Python, sonst hätte ich mir dieses Feature schon  selber programmiert. Achja, "emerge -p" ist keine Lösung, da es nur die Namen der ebuilds, nicht aber die Dateinamen aller nötigen Files ausgibt (öfters werden noch ein paar Patches benötigt, es ist also nicht einfach 1 Paket=1 downzuloadende Datei).

Ansonsten bin ich mit gentoo ja sehr zufrieden, nur diese Sache stört mich sehr. Ich hoffe jemand kann mir helfen.

----------

## DanRok

Aber sicher geht das   :Very Happy: 

Du machst folgendes:

emerge --pretend yourPackageHere >& benötigtePackages.txt

Mit dem -pretend flag wird nur überprüft welche packages gebraucht werden, es wird aber noch kein emerge ausgeführt. Die ">&" leiten den stdout und stderr in die Datei benötigtePackages.txt um.

----------

## DanRok

Oh, hab gerade den Rest deines Posts gelesen...hätte ich vielleicht mal vorher machen sollen   :Embarassed: 

Najo, aber mit pretend hast Du zumindest schonmal einen Grossteil abgedeckt und meistens reicht das auch. Hab das so schon selbst ein paar mal gemacht, weil ich unter gentoo ebenfalls keinen Internetzugang habe (noch nicht) und meistens waren bei emerge --pretend alle files dabei.

Mit "|&" kannst Du den stdout und stderr auch an ein anderes Programm (nano) weiterleiten. Falls Du noch was nachbearbeiten möchtest.

Wenn Du ">&" verwendest, wird die Datei in die umgeleitet wird noch erstellt, falls diese noch nicht vorhanden ist.

----------

## jay

Noch einfacher gehts, wenn Ihr direkt in die ebuild Datei reinschaut.  Die befinden sich unter usr/portage/kategorie/progamm/programm.ebuild - in den EBuilds steht auch die URL der downzuloadenden Pakete drin.

----------

## fragcollector

 *DanRok wrote:*   

> Oh, hab gerade den Rest deines Posts gelesen...hätte ich vielleicht mal vorher machen sollen  
> 
> 

 

 :Rolling Eyes: 

 *DanRok wrote:*   

> 
> 
> Najo, aber mit pretend hast Du zumindest schonmal einen Grossteil abgedeckt und meistens reicht das auch. Hab das so schon selbst ein paar mal gemacht, weil ich unter gentoo ebenfalls keinen Internetzugang habe (noch nicht) und meistens waren bei emerge --pretend alle files dabei.
> 
> 

 

Meistens, aber eben nicht immer. Und nichts ist lästiger als 10 Files mit 40MB mühsam heimgeschaufelt zu haben nur um dann festzustellen daß eine harmlose kleine Patch-Datei fehlt, die gerade mal 2KB groß wäre. Wie gesagt, bei Software vom Kaliber eines Mozilla brauchts schnell mal ein 20 Files, aber vielleicht nur 10 Pakete.

Mittlerweile ist mir beim Nachdenken doch noch selbst eine mögliche Lösung eingefallen, ohne daß man emerge bzw ebuild antasten müßte. Grundgedanke: Man parst die Ausgabe von emerge -p und erzeugt sich daraus eine Liste der zugehörigen .ebuild-Dateien, dann sourced man jede derselbigen (Sind ja nur Shellscripts) und gibt jeweils die Variable $SRC_URI aus:

```

for i in $EBUILDS_TO_PROCESS; do

  (source $i && echo $SRC_URI) >>filelist

done

```

Dann noch überall ein wget davor, fertig ist das bequeme Download-Skript für die Uni. Nur die URIs der Form mirror://sourceforge/foobar.tar.gz muß man noch gesondert abhandeln. (Dumme Foren-Software, macht alles zu einem anklickbaren Link was nach URL aussieht)

Ich werd das heute abend mal zusammenhacken und austesten. Wenns klappt poste ich es hier.

 *DanRok wrote:*   

> 
> 
> Mit "|&" kannst Du den stdout und stderr auch an ein anderes Programm (nano) weiterleiten. Falls Du noch was nachbearbeiten möchtest.
> 
> Wenn Du ">&" verwendest, wird die Datei in die umgeleitet wird noch erstellt, falls diese noch nicht vorhanden ist.

 

Weiß ich doch. Ich benutze Linux seit Kernel 1.1.13 (ohne jetzt angeben zu wollen) und bin in meinem Bekanntenkreis sowas wie der lokale bash-Guru  :Wink: 

Nachtrag: jay, deinen Post hatte ich noch nicht gesehen als ich zu schreiben begonnen hatte. Zwei Leute, eine Idee.

----------

## fghellar

 *fragcollector wrote:*   

> Gibt es eine Möglichkeit eine Liste aller Dateien zu erstellen die beim mergen runtergeladen werden müssen (und zwar in der Form von Download-URLs)?

 

https://forums.gentoo.org/viewtopic.php?t=5224

----------

## fragcollector

Hey danke, dann kann ich mir die weitere Arbeit an meinem Skript sparen. Ich hoffe doch dieses Skript wird zukünftig standardmäßig der Distribution beiliegen?

Many thanx   :Very Happy:   :Very Happy: 

----------

## fghellar

Man kann doch träumen...  :Wink: 

----------

