Hätte ich von vornherein die aktuelle Versionen des httpd.fs benutzt, wäre es vermutlich sofort gegangen. So musste Ulli mir aus der Patsche helfen. Dadurch war es allerdings auch lehreich.
Nicht das der geneigte Leser nun meint ich verstünde allzu viel vom Unix das unter dem OS X liegt. Aber mit Ullis Hilfe hat sich ein Zipfelchen des Tuches, das da Benutzeroberfläche heißt, gehoben, und ich konnte einen Blick darunter werfen. Und ich bin gespannt wie es weiter geht, nun, da gforth und Apples Browser Safari sich gut verstehen. An Bernd Paysan an dieser Stelle meine Hochachtung und herzlichen Dank für dieses fundamentale Stück Arbeit - ein web-server in forth.
Tele-Sitzung mit Ulli am 10.05.2008, um den gforth web-server auf einem PowerBook Mac OS X zum Leben zu erwecken. Verständigen konnten wir uns per iChat, Telefon und mail - fast als sein man selbst da.
Vom Terminal aus überprüfen:
PowerBook:~ michael$ cat /Users/michael/public_html/index.html <html> <head><title>Hello Forth-Web</title></head> <body>Hello Forth-Web</body> </html> PowerBook:~ michael$
Ok, das Verzeichnis stimmt. Die Test-Indexdatei liegt richtig, kann entziffert werden.
Netpipes faucet wird gestartet. Hier musste der vollständige Pfad angegeben werden, da sudo nicht überall nachschaut.
PowerBook:~/gforth michael$ sudo /opt/local/bin/faucet 81 --in --out ./httpd.fs Password:
Im browser nun: http://127.0.0.1:81/index.html
Damit wird bei der Rechnereigenen URL
(127.0.0.1) der Port 81 benutzt.
Hier hatte ich einen Tippfehler drin, was zur Fehlermeldung 404 file not found führte: Wer findet den typo? http://127.0.0.1/:81/index.html
Als der weg war gings!
Doch bevor das alles so schön ging, gabs Verwirrung. Ich habe gestaunt was man alles falsch machen kann.
Leicht war es das faucet tool für den Mac zu instalieren.
Quelle: DarwinPorts-1-1.5.0-10.4.dmg
... Downloaded MacPorts base version 1.600 The MacPorts installation is not outdated and so was not updated DEBUG: Setting ownership to root selfupdate done! [PowerBook:~] michael% sudo port install netpipes ...
PowerBook:~/gforth michael$ sudo /opt/local/bin/faucet http --in --out ./httpd.fs faucet: error binding stream socket http (Address already in use) PowerBook:~/gforth michael$
Hm, statt hier faucet http
anzugeben, wurde dann der Port 81 genommen, weil der apple gerade den port 80 nicht her geben wollte - komisch eigentlich. Eigentlich hätte es einfach so gehen sollen:
sudo /opt/local/bin/faucet http --in --out ./httpd.fs
Überlappung mit der Systemsteuerung? - sharing - ja von wem oder was denn? Hm, file sharing und windows sharing mal abgeschaltet – wofür war das überhaupt an gewesen?
Komische Meldung: „Address already in use“ ?? Ja von wem denn? Auch nix in der Aktivitätsanzeigen? Ok, na gut, „alle Prozesse anzeigen“ auswählen statt „meine Prozesse“ hilft dann schon. Und da wars dann auch zu sehen, faucet lief 2x für den root. Aha, ein Prozess war übrig geblieben beim herumprobieren. Und war nicht ordentlich beendet worden - einfach das Terminalfenster zumachen reicht nicht, der Prozess geht trotzdem weiter. Das ctrl-C
um das faucet
zu benden wäre schon nötig gewesen.
Das die Version vom httpd.fs, die mit meinem gforth-0.6.2 vor einiger Zeit mal gekommen war, es so nicht mehr tun wollte, war im nachhinein eigentlich verständlich. Ulli schickte seine neuere Version, die lief dann auch durch. Allerdings mussten auch da Anpassungen vorgenommen werden.
In der älteren Version war das Wort compact-filename
in der Definition vomrework-htmldir
dem gforth nicht (mehr?) bekannt gewesen. In Ullis Version wurde an der Stelle etwas anderes benutzt. Hier gilt es also wirklich Versionsunterschiede in den Paketen zu beachten. So sah die Fehlermeldung aus:
PowerBook:~/gforth michael$ gforth ./httpd.fs in file included from *the terminal*:0 httpd.fs:119: Undefined word htmldir $! htmldir $@ compact-filename htmldir $!len drop ^^^^^^^^^^^^^^^^ Backtrace: $100CDCC throw $10187F0 no.extensions
Außerdem ging es in meiner Version des httpd.fs nicht weiter in der Zeile:
s„ /etc/mime.types“ mime-read
PowerBook:~/gforth michael$ gforth ./httpd.fs in file included from *the terminal*:0 httpd.fs:188: No such file or directory s" /etc/mime.types" mime-read ^^^^^^^^^ Backtrace: $1027D8C throw
Der work around war:
s" /etc/mime.types" ' mime-read catch [IF] 2drop \ no /etc/mime.types found on this machine, \ generating the most important types: s" text/html" transparent: html s" image/gif" transparent: gif s" image/png" transparent: png s" image/jpg" transparent: jpg [THEN]
So dann musste die letzte Zeile im httpd.fs auskommentiert werden, sonst versucht gforth den proxy selbst zu machen. Es soll aber ja das faucet
verwendet werden, so dass der Standard-output und Standard-input des gforth verwendet werden können:
\ proxy auskommentiert; wird per faucet von netpipes gemacht. mk10.05.08 \ include ./proxy.fs
Und damit gings dann. Das ersehnte „Hello Forth-Web“ erschien im browserfenster.
Hier noch ein Test um das httpd.fs zu prüfen:
PowerBook:~/gforth michael$ ./httpd.fs qwert HTTP/1.1 404 Not Found Server: Gforth httpd/0.1 (unix) Connection: close Content-Type: text/html <HTML><HEAD><TITLE>404 Not Found</TITLE></HEAD> <BODY><H1>Not Found</H1> <P>The requested URL <CODE>/nosuchfile</CODE> was not found on this server</P> <HR><ADDRESS>Gforth httpd 0.1</ADDRESS> </BODY></HTML> PowerBook:~/gforth michael$
Der Test, das Kommando ./httpd.fs
direkt auszuführen, gelang dann auch, als das file wie beschreiben abgewandelt worden war. Gforth startete den web-server korrekt. Nach einer Dummyeingabe qwert
gefolgt von zwei Leerzeilen beendete Gforth mit seiner Fehlermeldung seinen web-server so wie es sein sollte, ok.
Und das hier ist auch eine Stelle im httpd.fs die natürlich passend gemacht werden muss: <code> Variable DocumentRoot s„ /Users/michael/publichtml/“ DocumentRoot $! Variable UserDir s„ /Users/michael/publichtml/“ UserDir $! <code>
In das Verzeichnis public_html
kommt das index.html
hin, das angezeigt werden soll, sonst tut sich ja nix. (Das index.thml file im .html-data zu verstecken macht in der Probephase keinen Sinn und wurde nun wieder entfernt.)
So, das wars an Notizen zu dem Event. Möge es nützlich sein.
Michael