Linux
FTP on demand


Das kennt man: wenn man von einem etwas weiter entfernten Server (womöglich aus Übersee) eine große Binärdatei holen will, wird die maximale Übertragungsrate nicht mehr richtig ausgenutzt - besonders bei ISDN passiert das schnell. Nun hat man sich keinen ISDN-Anschluß legen lassen, um dem Fernmeldeanbieter das Geld in den Rachen zu werfen, und außerdem benutzen wir das beste Betriebssystem der Welt :-) Und zumindestens Leute, die einen Uni-Zugang haben, und dort ein paar Unix-Befehle loswerden können, können hier tricksen.

Die Theorie

Aber wie? Der Trick besteht darin, daß die Datei nicht sofort und direkt downgeloadet wird, sondern daß man das zunächst den Server an der Uni machen läßt. Nach einiger Zeit holt man sich die gewünschte Datei dann von dort - die Verbindung zum Uniserver ist ja in der Regel so gut, daß die maximale Übertragungsrate voll ausgenutzt wird. UNIX kennt den Befehl nohup, mit dem man Befehle ausführen kann, ohne eingeloggt zu sein - das ist die Voraussetzung. Man kann sich also beim Provider einloggen und folgende Befehlssequenz eingeben:
  provider:# nohup ftp -i ftp.leo.org &
  provider:# exit
  connection closed by foreign host.
  root:# _
Das ganze dauert nicht mehr als ein paar Sekunden, eine Telefoneinheit wurde der guten Sache geopfert.

Allerdings muß man etwas Vorarbeit leisten, denn ftp ist ein interaktives Programm, welches zur Arbeit eine ganze Menge Informationen benötigt (zum Bleistift, was es denn holen soll). Die Interaktivität kann man ihm abgewöhnen, dafür ist die Option "-i" da. Die Informationen muß man trotzdem übergeben, und das kann man, indem man eine Datei .netrc beim Provider hinterlegt, in dem alles das drinsteht, was ftp tun soll. (Gibt man als Option "-n" an, wird diese Datei nicht beachtet!)

So könnte die Datei .netrc aussehen, wenn man sich beispielsweise den Kernel 2.0.7 (immerhin mehr als 5 Megabyte!) vom Server bei LEO.ORG holen will:

provider:~/.netrc
  machine ftp.leo.org
  login anonymous
  password <eigene@email.adresse>
  macdef init
    lcd /usr/src
    cd /pub/comp/os/linux/Linus/v2.0
    bin
    get linux-2.0.7.tar.gz
    close
    quit
So kann man sich für jeden Server einen Eintrag machen. Diese Datei muß vor dem nohup ftp im Heimatverzeichnis beim Provider abgelegt werden. Eine Stunde später kann man sich den Kernel mit Höchstgeschwindigkeit beim Provider abholen. Schön, gell?

Automatisierung

So. Nun wollen wir das automatisieren. Hierzu muß natürlich wieder der cron herhalten, der die datenintensive Übertragung in die billigen Nachtstunden verlegt.

... Aber daran arbeite ich noch - laßt Euch überraschen!


Ich hatte bisher keine Zeit für weitere Forschungen - aber einige Leute haben mir geschrieben.

Uwe Bonnes <bon@elektron.ikp.physik.th-darmstadt.de> schrieb:

Hallo,

zu "FTP on Demand " solltest Du auf "ncftp" verweisen. Ich oeffne mit "nohup
ncftp" das Programm, oeffne den Server, denn ich brauchte, waehle mit
"Tab"-Expansion das File aus, das ich will, starte den Download. Ein CTRL-Z 
und "bg" bringen den Download in den Hintergrund und mich auf die 
Kommandozeile, so das ich den Connect beenden kann. 

Gunnar Larisch <Gunnar.Larisch@lpr.e-technik.tu-muenchen.de> schrieb:

anscheinend hast Du auch ISDN, da Du so schöne Anleitungen geschrieben
hast. Ich hab da paar schöne Skripten, die Dich vielleicht interessieren.

getme <Server> <Dir> <File>
Per cron muss dann noch cronftp gestartet werden. Am nächsten Tag kannst
Du Dir Dein File abholen.

getfrom ist vielleicht auch ganz nützlich.

-----------getme--------------
#!/usr/local/bin/bash

# Parameters: Server Path File(s)

FTPFILE="/tmp/.$UID.ftpjobs"
echo Server : $1
echo Dir    : $2
echo "File   : $3"
echo Jobfile: $FTPFILE

touch $FTPFILE

echo lcd ~/tmp/ftpjobs >>$FTPFILE
echo open $1 >>$FTPFILE
echo user anonymous t8231ah@sunmail.lrz-muenchen.de >>$FTPFILE
echo bin >>$FTPFILE
echo "cd $2" >>$FTPFILE
echo "mget $3" >>$FTPFILE
echo close >>$FTPFILE
-------------------------------

---------getfrom---------------
echo Hole $2 von $1...
echo ftp -i $1 >>~/tmp/ftpjob
echo bin >>~/TMP/ftpjob
echo cd $2 >>~/tmp/ftpjob
-------------------------------

---------cronftp--------------
#!/usr/local/bin/bash
FTPFILE="/tmp/.$UID.ftpjobs"
NEWFTPFILE="/tmp/.bgjob_$UID_$RANDOM"
mkdir ~/tmp/ftpjobs
echo Using $FTPFILE... as $NEWFTPFILE
mv $FTPFILE $NEWFTPFILE
nohup ftp -in >$NEWFTPFILE &
-------------------------------------

Ciao Gunnar

Siggi Thoma <sthoma@twilight.rhein-neckar.de> schrieb:

Hast Du diesbezüglich mal von FTPMAIL gehört? Vielleicht erfüllt das auch den 
gewünschten Zweck und ein bißchen einfacher.

Schreib mal mail an ftpmail@ftp.uni-stuttgart.de 
subject HELP
body:
help
quit


---------------
Dieser Server der da an der Uni läuft ermöglicht es beliebige Dateien
von jedem ftp-archive auf der Welt nach Stuttgart zu holen. Von dort
sendet Dir der FTPMAIL-Server die Datei uuencoded als email zu. Von
Stuttgart aus als EMAIL. Da fällt also nur die
Übertragungsgeschwindigkeit zu Deinem Provider ins Spiel.

Genauere Beschreibungen gibts überall im Netz. Such mal in Yahoo oder
Altavista unter FTPMAIL.

Tschau
Siggi

Copyright © (GPL V 2) 1996 Bernhard Hailer
Last modification: 24-Feb-97 BeH