CURL Downloader
Große Downloads mit cURL
Unsere kleine Schnecke eignet sich natürlich auch wunderbar dafür, Daten aus dem Netz zu saugen, auch wenn wir mal nicht an einem Rechner sitzen. Große Files werden dann einfach über nacht von der kleinen Box selbständig gezogen und das verbraucht natürlich deutlich weniger Strom, als wenn wir das an unserer big Machine erledigen.
Gerade ist beispielsweise das neue Debian Etch 4.0 erschienen. Diese Distribution kann man entweder auf über 20 CDs aus dem Netz saugen oder auch wahlweise als eine DVD Ausgabe, die sich über satte drei Scheiben erstreckt und schonmal ein Downloadvolumen von rund 12GB hat.
Ein einfaches wget stößt dann schon bei 2GB an seine Grenzen. Dann muss einfach etwas mächtigeres her. Hierfür bietet sich das Kommandozeilen-Tool Curl [1] an, das auch mehrere Jobs hintereinander erledigen kann.
Leider gibt es für die Slug selbst keine fertige Version, sodass wir hier selbst Hand anlegen müssen. Aber auch dies soll uns nicht davor abschrecken, das Tool einzusetzen.
Als erstes müssen wir die Build-Tools der Slug installieren (falls noch nicht geschehen):
ipkg install optware-devel
Zuerst modifizieren wir die /etc/profile, damit wir einen sauberen Kompile hinbekommen:
vi /etc/profile
Ergänzt dann folgende Zeilen und speichert die Datei ab:
export PATH=$PATH:/opt/bin:/opt/sbin:/opt/usr/bin:/opt/usr/sbin:.
export LD_LIBRARY_PATH=/opt/lib
Meldet Euch erstmal aus Eurer Slug ab und dann wieder an, damit die Suchpfade übernommen werden.
Jetzt legen wir ein Arbeitsverzeichnis an:
mkdir work
und wechseln gleich dort hin:
cd work
Nun saugen wir uns den Quellcode (noch mit wget):
wget http://curl.haxx.se/download/curl-7.16.2.tar.gz
Nun packen wir den Code aus:
tar -zvxf curl-7.16.2.tar.gz
Daraufhin entsteht ein neues Verzeichnis in das wir gleich wechseln:
cd curl-7.16.2
Und schon können wir loslegen:
./configure --prefix=/opt
Das bereitet uns den Quellcode vor und stellt sicher, dass alle Files in den Standardpfad für neue Anwendungen der NSLU2 landen. Da unsere Schnecke nicht die schnellste ist, kann das durchaus eine Weile dauern, bis das Konfigurationsscript durch ist.
Der Kompile wird dann mit einem
make
angestoßen. Auch das wird sich einwenig hinziehen. Danach installiert Ihr alles mit einem
make install
Nun können wir uns als root abmelden und melden uns als ein normaler User wieder an. Danach starten wir einen Testdownload, der beispielsweise so aussehen kann:
curl -C - -O http://laotzu.acc.umu.se/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso
Weitere Links werden einfach mit einem weiteren -O angehängt, dann arbeitet Curl die Downloads der Reihe nach ab.
Jetzt haben wir natürlich noch das Problem, dass beim Ausloggen aus der telnet- oder ssh- Session der curl-Prozess wieder abbricht. Um das zu verhindern, müssen wir den Prozess abkoppeln. Das erledigen wir einfach, indem wir den Befehl nohup (no hangup) vor unserem curl - Befehl stellen. Allerdings schreibt uns der nohup Befehl den kompletten Statistik- Output in eine Log-Datei (nohup.out). Das macht vielleicht bei Programmen Sinn, bei denen wir auf eine spezielle Anzeige warten (beim Kompilieren oder einen Virenscann etc.) . Bei einer Downloadstatistik bekommen wir mal schnell ein paar MB zusammen, was wir nicht unbedingt haben wollen. Also stellen wir noch hinter den curl- Befehl den Parameter --silent . Somit sieht der komplette Befehl wie folgt aus:
nohup curl -C - -O http://laotzu.acc.umu.se/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso --silent
Zum Test können wir uns nach dem Start des Downloads ausloggen und als anderer User (root) einloggen. Dort kontrollieren wir mittels htop ob der Prozess noch läuft:
Perfekt! Hier sehen wir, dass curl ganz oben munter werkelt und ordentlich CPU Last verursacht. Das lag allerdings in meinem Beispiel nur daran, dass ich den --silent Mode nicht verwendete und dabei noch kräftig in die Log-Datei geschrieben wurde. Normal benötigt der curl bei solch einer Tätigkeit um die 15% CPU Last.
Alternativ kann man natürlich auch den curl zeitgesteuert loslafen lassen. Dazu legt den Befehl (ohne nohup) in ein bash-script und ruft diesen über einen cron-job zur gewünschten Zeit auf. So kann der große Download auch mitten in der Nacht loslegen, wenn ihr die volle Bandbreite Eurer Internet-Verbindung eh nicht benötigt.