Mini-How-To: BusyBox-httpd als externer Webserver

Spooks

Neuer User
Mitglied seit
6 Jun 2005
Beiträge
59
Punkte für Reaktionen
0
Punkte
6
Hallöchen,
ich möchte eine kleine Website auf meiner Fritz!box hosten und bin grade dabei dazu eine Anleitung für "Dummies" zu schreiben. Jetzt hab ich alles nötige gemacht und die Website läuft und ist von außen zu erreichen. Allerdings nur bis zu einem Neustart.

Ich habe mir dann überlegt, den Aufruf der notwendigen Befehle in der debug.cfg zu machen.

Code:
#Webserver starten und dann virtuelles Interface starten
httpd -p 86 -h /var/media/ftp/uStor01/homepage
ifconfig eth0:1 192.168.178.253 up

Das funktioniert auch, allerdings nur mit dem virtuellen Interface. Der Server an sich wird nicht gestartet.


Könnte das daran liegen, dass zum Zeitpunkt des Serversstartes noch kein USB-Stick gemountet ist? Wie kann ich das umgehen?
Habe vor dem Serverstart schon mal ein ** sleep 20 && ** eingefügt, hilft aber auch nichts.

EDIT: Das fertige HowTo hängt nun an diesem Beitrag.
 

Anhänge

  • Einfacher FritzBox httpd-Server.pdf
    90.5 KB · Aufrufe: 991
Zuletzt bearbeitet:
Vermutlich fehlt dir die "Verbindung" des sleep mit dem Serverstart.
Wie wäre es mit einem:

{ sleep 30 ; httpd -p 86 -h /var/media/ftp/uStor01/homepage ; } &

Jörg
 
Hilft leider nicht, das gleiche Problem besteht weiterhin.
 
Wie wäre es innerhalb einer Schleife mit einer tatsächlichen Prüfung auf das Vorhandensein Deines Heimverzeichnisses? Dann wüßtest Du auch wirklich, ob es bereits gemountet wurde:

Code:
{
HOMEDIR="/var/media/ftp/uStor01/homepage"
while [ ! -d "$HOMEDIR" ]; do sleep 5; done
httpd -p 86 -h "$HOMEDIR"
} &
 
Gelöst !!

Danke, das war's !!

Habe das fertige HowTo an den ersten Beitrag angehängt.
 
Zuletzt bearbeitet:
Schön, daß Du etwas in Form Deines Tutorials zurück gibst. So hat es bei mir auch angefangen hier im Forum: Ich habe etwas beschrieben, zu dessen Realisierung ich vorher Hilfe übers IPPF erhielt.

Erledigt:Idee fürs Tutorial: Anstatt Deiner E-Mail-Adresse oder zusätzlich dazu könntest Du doch die Adresse dieses Themas für Support-Zwecke angeben. Öffentliche Diskussionen sind meistens besser als Privat-Support, weil man sich nicht ständig wiederholen muß. Falls Du das möchtest, lasse ich das Thema offen, ansonsten sag Bescheid, ich schließe es dann.
 
Zuletzt bearbeitet:
Hey,

super, dass man den httpd aus der Busybox jetzt auch für eigene Zwecke nutzten kann. Danke für Arbeit und Idee.

Ich hab nur ne Frage zur konfiguration des httpd.
Man kann ihn ja auch mit dem Parameter -c CONFIGFiILE starten, kennt einer eine Page, wo die Configuration erklärt wird, wie kann ich z.b. das Directorylisting anschalten?
 
@ matze1985

Gute Idee das ganze mit einem configfile zu lösen. Vielleicht hast du ja Lust was dazu zu schreiben. Ich würde das denn in's HowTo integrieren.

Vielleicht können wir ja einen Wiki-Eintrag daraus machen?
 
homepage mit configfile

Hey,

ich habe mir jetzt auf der Grundlage deines Howtos einen Httpd-Server gebaut, den man mit einen configfile steuern kann.

Dazu habe ich zuerst das Config File erstellt(ich arbeite mit nano da mit vi zu komisch ist, also wer mit vi arbeitet muss natürlich anstatt nano vi aufrufen ;))
also
Code:
$ nano /var/tmp/flash/httpd-own.conf
und dann halt mit dem Inhalt füllen z.B.
Code:
/:user1:pw1                               #user und pw im Klartext
/:user2:$1$$OabsdAKIQk49i/oLqyFid/        #verschlüsseltes pw2(ausgabe von "httpd -m pw2")

jetzt hätten wir z.B. für das Hauptverzeichnis einen Zugang für 2 Benutzer.
Für weitere Optionen wie z.b. Allow und Deny von IP-Adressen hier schauen:
http://wiki.openwrt.org/OpenWrtDocs/httpd.conf
http://busybox.net/cgi-bin/viewcvs.cgi/tags/busybox_1_5_1/networking/httpd.c?rev=18656&view=markup

dann speichern wir unser Config-File, und damit es nach dem reboot noch da ist führen wir
Code:
modsave
aus.

Das machen wir natürlich nach jeder Veränderung(die gespeichert werden soll) und nach jeder Veränderung müssen wir den httpd dann auch neustarten für unsere homepage(da habe ich bis jetzt noch keine bessere Lösung gefunden als mit ps den httpd mit unseren optionen zu suchen und ihn dann mit kill abzuschießen und wieder neustarten(aufpassen nicht den falschen abschießen))

So jetzt haben wir unser Config-File fertig und machen uns daran, den httpd regelmäßig zu starten.
Da ich den Weg gewählt habe das Config-File nicht durch die Debug.cfg generieren zu lassen, sonden im mod zu speichern ist es besser, habe ich den Start nicht in die Debug.cfg eingetragen sondern in die /tmp/flash/rc.custom welche meines wissens erst nach entpacken des mod ausgeführt wird(Es ist also unser script dann auch ausgepackt, das wäre wahrscheinlich bei der debug.cfg nicht der Fall -> Fehler).

Dieser erstellt man einfach, wenn sie nciht vorhanden ist und bearbeitet sie wie folgt:
erstellen
Code:
nano /var/tmp/flash/rc.custom

und dann das aus dem Howto bekannte einfügen mit der zusatzlichen option -c config-File:
Code:
#Webserver starten wenn Verzeichnis existiert.
#Schleife sucht im abstand von 5 Sekunden nach HOMEDIR
{
HOMEDIR="/var/media/ftp/uStor01/homepage"
while [ ! -d "$HOMEDIR" ]; do sleep 5; done
httpd -p 86 -h "$HOMEDIR" -c "/var/tmp/flash/httpd-own.conf"
} &
#Virtuelles Interface starten
ifconfig eth0:1 192.168.178.253 up
speichern und mit
Code:
modsave
reboot-sicher machen.
Das wars dann eigentlich auch schon :)

Vielleicht kennt einer von euch sich noch etwas bessern mit der config des httpd der Busybox aus?
Weiß z.b. jemand wie man das DirectoryListing aktivieren kann? Diese Option habe ich nicht gesehen.
 
matze1985 schrieb:
Vielleicht kennt einer von euch sich noch etwas bessern mit der config des httpd der Busybox aus?
Weiß z.b. jemand wie man das DirectoryListing aktivieren kann? Diese Option habe ich nicht gesehen.
Such bei Google nach busybox, dann findest Du dort auch genauere Informaitonen zu den Programmen,

Ansonsten darf man nicht vergessen, daß die Busybox darauf angestimmt ist, einiges an Funktionen auf kleinem Raum zu bieten. Sie hat daher weniger Funktionen als die großen Programme. Man kann also nicht alle Funktionen erwarten, die man vom Apache kennt.
 
Das man nicht alles Funktionen bekommt hab ich mir gedacht, es soll ja auch nur ein kleiner http-Server sein, so viel Leistung hat die box ja nun auch nicht.
Aber für den Anfang es ja schonmal nicht schlecht, was sie kann(allow, deny, mime und user hab ich gesehen), ich habe leider bis jetzt noch nicht mehr bei google gefunden, aber vielleicht wird da ja noch. Das DirectoryListing wäre auch das einzige was mir im Moment noch fehlen würde.
 
Bau Dir doch einfach selbst eines. Kleines Shell-Skript sollte genügen.
 
hmmm, ist ne gute idee, hab aber keine Ahnung wie :)
 
Verzeichnis-Lister für BusyBox httpd

In etwa so, das habe ich gerade mal aus eigener Neugierde gehackt:
Code:
#!/bin/sh

echo -en "Content-Type: text/html\r\n\r\n"
cat << EOF
<html>
  <head>
    <title>Simple directory lister</title>
  </head>
  <body>
    <h2>${QUERY_STRING}</h2>
    $(date)<p>
    <pre>$(
    exec 2>/dev/null
    [ "$QUERY_STRING" == "/" ] || echo '<a href="..">..</a>'
    ls -A1 ../${QUERY_STRING} | grep -Ev '^cgi-bin$' | sed -r 's/(.*)/<a href="\1">\1<\/a>/'
    )</pre>
  </body>
</html>
EOF

Das Skript speicherst Du (mit Unix-Zeilenenden, also LF) in Deinem Web-Home unter cgi-bin/index.cgi und machst es mit chmod +x ausführbar. Httpd sucht automatisch nach cgi-bin/index.cgi, wenn eine Verzeichnis-URL angegeben wird und index.html in dem Verzeichnis nicht existiert.

Man könnte noch einiges verbessern, ich wollte nur zeigen, wie es grundsätzlich geht. Verzeichnisse werden nicht nach oben sortiert oder besonders gekennzeichnet, sie fallen meistens durch das Fehlen von Dateiendungen auf. Im Basisverzeichnis werden immerhin die Einträge ".." und "cgi-bin" herausgefiltert, wobei letzterer sowieso mit einem Verboten-Fehler quittiert würde beim Anklicken. Die H2-Überschrift könnte man noch so umgestalten, daß man auf jeden Verzeichnis-Bestandteil klicken und ihn als Direktnavigation zum entsprechenden übergeordneten Verzeichnis verwenden könnte.

Kleiner Tip bzw. Warnung: Unter httpd ist es für ein CGI-Skript kein Problem, aus seinem Verzeichnis auszubrechen. Jails o.ä gibt es nicht, das ist recht praktisch manchmal. Man muß aber aufpassen. Wenn Du z.B. im Web-Home einen Symlink "root -> /" anlegst, kannst Du einfach über Klicken auf "root" plötzlich bequem im ganzen Dateisystem der Box browsen. Das könnte ich sogar mal als Bequemlichkeits-Feature in die Rudi-Shell einbauen, aber das ist ein anderes Thema. Probier's einfach mal. Viel Spaß damit.

P.S.: Den Zeitstempel habe ich nur eingebaut, damit Du beim Experimentieren siehst, daß die Inhalte aktuell geholt werden und nicht aus dem Browser-Cache. Hat mir auch geholfen.

Update: Anbei zwei kleine Screenshots.
Update 2: Content-Type-Header hinzugefügt, siehe Erläuterung weiter unten.
 

Anhänge

  • dirlist1.gif
    dirlist1.gif
    1.7 KB · Aufrufe: 114
  • dirlist2.gif
    dirlist2.gif
    3.3 KB · Aufrufe: 108
Zuletzt bearbeitet:
super, vielen Dank für die Hilfe, ich werde es nachher gleich mal ausprobieren und dann vieleicht mal schauen, ob ich noch was verbessern kann.
Vielen Dank, ich muss nochmal sagen, du leistes einfach super support!!!!

edit: bis jetzt hab ich leider nur nen weißen bildschirm, komisch.
Er sagt also nicht mehr, das es die Seiter nicht finden kann, aber den Index baut er nicht auf. hmmm

edit: jetzt hab ich es ein paar mal hin und her kopiert und er zeigt auch den Inhalt an, aber am Ende steht noch EOF an, komisch irgendwie.
 
Zuletzt bearbeitet:
Wenn Du alles so gemacht und 1:1 von mir übernommen hast, geht es. Das tut es ja hier auch.
 
das denke ich mir schon, aber irgendwie finde ich meinen Fehler nicht
naja ich schau mal und berichte dann

edit: komischer Weise sehe ich z.b. im Firefox nur ne weiße seite und im IE das Listing mit EOF am Ende
 
Zuletzt bearbeitet:
Nicht an der falschen Stelle sparen, bitte. Gerade unter UNIX ist es wichtig, daß bei Textdateien und Skripten auch nach der letzten Zeile ein Zeilenvorschub erfolgt. :rolleyes:
 
Danke für den Tipp, jetzt klappt das Directory Listing mit dem IE, komischer Weise mit dem normalen Firefox nicht(nur eine Weiße Seite) hmmmm

Naja ich hab das Script mal etwas ausgebaut, es ist nicht perfekt, aber schon ganz ok. Vielen Dank nochmal für deine Vorarbeit und Mühe.
Screenshots siehe Anhang.
script einfach unter cgi-bin/index.cgi im homepage-dir speichern.

Code:
#!/bin/sh

echo -en "Content-Type: text/html\r\n\r\n"
cat << EOF
<html>
  <head>
    <title>Index of ${QUERY_STRING}</title>
  </head>
  <body>
    <h2>Index of ${QUERY_STRING}</h2>
    <table cellspacing=2 width="100%" border="0">
	<tr><td width="300">Name</td><td width="180">Last modified</td><td width="60">Size</td><td></td></tr>
	<tr><td colspan="4"><hr></td><tr>
	<tr><td colspan="4">$(
	exec 2>/dev/null
        [ "$QUERY_STRING" == "/" ] || echo '<a href="..">..</a>'
	)</td><tr>$(
	
        ls -lLhep ../${QUERY_STRING} | grep -v cgi-bin | grep -e '^d' > temp1.txt #Verzeichnisse
	ls -lLhep ../${QUERY_STRING} | grep -v cgi-bin | grep -ve '^d' > temp2.txt #Datein

	awk '{ #Verzeichnisse anzeigen
	i=index($0,$11)
	name=substr($0,i)
	print "<tr><td><a href=\""name"\">"name"</a></td><td>"$8"-"$7"-"$10" "$9"</td><td>---</td><td></td></tr>"
	}' temp1.txt
	
	awk '{ #Datein anzeigen
	i=index($0,$11)
	name=substr($0,i)
	print "<tr><td><a href=\""name"\">"name"</a></td><td>"$8"-"$7"-"$10" "$9"</td><td>"$5"</td><td></td></tr>"
	}' temp2.txt
	
	rm -rf temp1.txt
	rm -rf temp2.txt
	
        )<tr><td colspan="4"><hr></td><tr>
	</table>
  </body>
</html>
EOF

edit:
Danke an kriegaex, mit dem Content-Type-Header geht es jetzt auch mit dem Firefox!

edit2:
Hab nochmal etwas verbessert, jetzt werden auch datein mit leerzeich richtig angezeigt und nicht abgeschnitten :)

update:
neuer Version ohne temp-Datein gibt es hier
 

Anhänge

  • pic1.JPG
    pic1.JPG
    32.4 KB · Aufrufe: 94
  • pic2.JPG
    pic2.JPG
    25.5 KB · Aufrufe: 63
Zuletzt bearbeitet:
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.