Tipp: Webserver und Filebrowser Minimallösung ohne Apache

_ub_

Neuer User
Mitglied seit
8 Jan 2005
Beiträge
69
Punkte für Reaktionen
0
Punkte
0
manchmal möchte man "schnell mal" im Browser eine Datei auf der FBF oder einer USB-Platte suchen, oder einfach eine bestimmte Datei permanent via http zugänglich machen.

Ich habe mal die verschiedenen threads zum Thema durchforstet (insbes [thread=145922]diesen[/thread] mit Beiträgen von kriegaex, Spooks und matze1985), und eine simple Minimal-Lösung zusammengestellt. Hierfür gleich einen Apache installieren ist ja ein ziemlicher Overkill... schließlich bringt die busybox einen schlanken httpd mit.

Am einfachsten wäre ja, man könnte einen der 3 Webserver nutzen, die schon auf der FBF laufen (AVM, freetz, WOL). Aber das scheint komplizierter. (Frage an die wahren Experten: wer kennt sich damit besser aus, wer kann dazu einen Tipp geben?)

Also starten wir in drei einfachen Schritten unseren eigenen httpd an einem eigenen Port (zB 86), das ist auch nicht so schwer.

Dazu erzeugen wir als Erstes zunächst ein cgi-bin Verzeichnis und Alexander Kriegischs CGI-Skript (von mir leicht vereinfacht, war unschön mit FF3.5), mit dem man komfortabel durch das Dateisystem der FBF browsen kann:

Code:
# CGI-Verzeichnis anlegen:
mkdir /var/media/ftp/uStor01/cgi-bin/

# CGI-Datei erzeugen:
cat > /var/media/ftp/uStor01/cgi-bin/index.cgi << EOF
#!/bin/sh

echo -en "Content-Type: text/html\r\n\r\n"
cat << EOF
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Index of ${QUERY_STRING}</title>
    <style type="text/css"></style>
  </head>
  <body style="font-family:monospace">
    <h2>Index of ${QUERY_STRING}</h2>
    <table cellspacing="2" border="0">
      <tr align="left"><th>Name</th><th>&nbsp;&nbsp;Last modified</th><th>&nbsp;&nbsp;Size</th></tr>
      <tr><td colspan="3"><hr></td></tr>
      <tr><td>$([ "$QUERY_STRING" == "/" ] || echo '<a href="..">..</a>')</td></tr>
      $(
        exec 2>/dev/null
        date_format1="[A-Z][a-z]{2} [A-Z][a-z]{2} [ 123][0-9] [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4}"
        replace="<tr><td><a href='\3'>\3<\/a><\/td><td>\&nbsp;\&nbsp;\2<\/td><td align=right>\&nbsp;\&nbsp;\1<\/td><\/tr>"
        date_format2="([A-Z][a-z]{2} [A-Z][a-z]{2} ) ([0-9] [0-9]{2}:[0-9]{2}:[0-9]{2} [0-9]{4})"
        ls -lLep ../${QUERY_STRING} \
          | ([ "$QUERY_STRING" == "/" ] && grep -v 'lost+found' || cat) \
          | awk '{printf("%5d %s\n", NR,$0)}' \
          | sed -r 's/^([0-9 ]+ d)/X \1/' \
          | sed -r 's/^([0-9 ]+)/Y \1/' \
          | sort \
          | sed -r 's/^([^ ]+ +){6}(.*)/\2/' \
          | sed -r 's/^[0-9]+(.*)\/$/---\1/' \
          | sed -r "s/^([-0-9, ]+) ($date_format1) +(.*)$/$replace/" \
          | sed -r "s/$date_format2/\1\&nbsp;\2/"
      )
    </table>
  </body>
</html>

EOF

# CGI-Skripte muß man ausführbar machen:
chmod +x /var/media/ftp/uStor01/cgi-bin/index.cgi

Als Zweites legen wir eine leere Konfigurationsdatei an, in die wir später noch für unseren httpd Passwörter nachtragen können (wie das geht, beschreibt matze1985 [post=927639]hier[/post]).

Code:
echo > /var/tmp/flash/httpd-own.conf

Zuletzt legen wir nun ein Startskript an, das unseren httpd bei jedem Booten der FBF automatisch startet. Dazu kopieren wir dieses Startskript von Alexander Kriegisch im Freetz-Webinterface in das Textfeld bei Einstellungen - Freetz: rc.custom, und klicken auf "Übernehmen":

Code:
#Webserver starten wenn Verzeichnis existiert.
#Schleife sucht im abstand von 5 Sekunden nach HOMEDIR
{
HOMEDIR="/var/media/ftp/uStor01"
while [ ! -d "$HOMEDIR" ]; do sleep 5; done
httpd -p 86 -h "$HOMEDIR" -c "/var/tmp/flash/httpd-own.conf"
} &

Wenn die USB-Platte schon gemounted ist, können wir das Startskript und damit den Webserver jetzt testweise einmal starten (oder einfach rebooten, das sollte ja auch gehen):
Code:
/var/tmp/flash/rc.custom

Dann sollte unser Webserver im LAN vom Browser aus schon zu erreichen sein, unter
Code:
http://fritz.box:86

Wer so einen rudimentären Webserver ans Internet freigeben möchte, sollte wissen, was er tut... mehr steht mit entsprechender Diskussion dazu zB [post=1210888]hier[/post], aber ich empfehle es nicht.

Viel Spaß damit!
Ulf
 
Zuletzt bearbeitet:
Alles schön und gut, aber bitte diese ewige Schleife begrenzen:
Code:
while [ ! -d "$HOMEDIR" ]; do sleep 5; done
Sonst werden wir hier wieder sehr lange nach der Ursache für Zombies wegen einer nicht durchgelaufenen rc.S suchen. Bau doch da ein Zähler ein, der irgednwann mal aus der Schleife aussteigt.

MfG
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.