Wiki:help/howtos/common/busybox_httpd

Howtos: Allgemeines

  1. Rechner im Netz herunterfahren
    1. Voraussetzungen
    2. Konfiguration der Fritzbox
    3. Konfiguration des herunterzufahrenden Linux-Rechners
    4. Konfiguration des herunterzufahrenden Windows-Rechners (getestet unter …
    5. Bemerkungen
  2. Sonstige Infos für Newbie's
    1. Wie könnte mein nächstes Image aussehen:
    2. Sonstige Fragen
    3. Linux-Befehle (Zielgruppe Newbies)
  3. Was mache ich, wenn sich meine Box nicht Freetzen lässt
    1. FAQ's lesen und Tickets durchsuchen
    2. Suchfunktion des IPPF benutzen
    3. Einen neuen Thread im IPPF eröffnen
  4. Wie baue ich meinen ersten trunk ?
    1. Beschreibung für ein Trunk-Image inkl. Samba und VSFTP
    2. Trunk-Image bauen
    3. Image für einen Speedport bauen
  5. Wake on Lan (WoL) mit der Fritzbox
    1. Möglichkeiten der Nutzung von WoL
    2. Callmonitor
    3. Shellscripte
  6. Swap-File anlegen
    1. Was ist ein Swap-File, und wofür brauche ich es?
    2. Wie lege ich es an?
  7. Installation
    1. Virtuelles Linux: Freetz-Linux für VMware-Player
    2. Vorbereitung
    3. Durchführung mit Windows OS
    4. Durchführung mit Linux OS
    5. coLinux / andLinux / speedLinux
    6. Cygwin
    7. Mac OS X
  8. Aktualisierung
  9. Fehlerbehebung
  10. Manuelles einspielen des Images
  11. Weiterführende Links
  12. Erste Schritte mit Freetz
    1. Fragen im Vorfeld
    2. Wie muß ich meinen PC einstellen damit ich ein Image bauen kann?
    3. Wie baue ich mein erstes eigenes Image (Minimal-Image)
    4. Der Flashvorgang
    5. Weiterführende Links
  13. External
  14. Konfiguration
  15. Auswahl
  16. Installation
  17. Automatisches starten/stoppen von Diensten
  18. Firmware-build-Prozess und Update
  19. Benutzer dauerhaft in der passwd speichern
    1. Beschreibung (Freetz-1.2.x)
    2. Beschreibung (Freetz-1.1.x)
  20. Kleiner Webserver mit BusyBox
    1. Weiterführende Links
  21. Konfiguration
    1. General
    2. Brandings
    3. Mod
  22. Freetz Linux
    1. Freetz Linux unter VirtualBox
    2. Freetz Linux unter VMWare
    3. Freetz Linux unter Virtual PC

Kleiner Webserver mit BusyBox

BusyBox enthält einen kleinen Webserver, den man z.B. so starten kann:

httpd -P /var/run/port90.pid -p 90 -c /mod/etc/webcfg.conf -h /var/media/ftp/irgendwo/htdocs/ -r "Port 90"

Diese Zeile startet den Webserver auf Port 90, d.h. um ihn zu erreichen, benutzt man http://fritz.box:90. Wenn man in /var/media/ftp/irgendwo/htdocs/ eine Datei namens index.html abgelegt hat, wird diese angezeigt.

Der Inhalt von Verzeichnissen wird nicht automatisch angezeigt. Dafür kann man ein CGI-Skript mit dem Namen index.cgi im Unterverzeichnis cgi-bin anlegen, im Beispiel also /var/media/ftp/irgendwo/htdocs/cgi-bin/index.cgi.

#!/bin/sh

# standardkonformen HTTP-Header erzeugen
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" 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>
      $(
        # alle Fehler ins Nirvana umleiten
        exec 2>/dev/null
        # Datumsformat 1 zum Finden in der Verzeichnisliste
        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}"
        # langer Ersetzungsausdruck (daher separat), der eine Tabellenzeile
        # generiert
        replace="<tr><td><tt><a href=\"\3\">\3<\/a><\/tt><\/td><td><tt>\&nbsp;\&nbsp;\2<\/tt><\/td><td align=right><tt>\&nbsp;\&nbsp;\1<\/tt><\/td><\/tr>"
        # Datumsformat 2 zum Separieren eines führenden Leerzeichens bei der
        # Tageszahl (muß durch festes HTML-Leerzeichen &nbsp; ersetzt werden)
        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})"
        busybox ls -lLep ../${QUERY_STRING} |
          # im Wurzelverzeichnis "cgi-bin" herausfiltern
          ([ "$QUERY_STRING" == "/" ] && grep -v 'cgi-bin' || cat) |
          # Zeilen numerieren, damit Reihenfolge innerhalb der beiden Gruppen
          # (Verzeichnisse und der Rest) später erhalten bleibt beim Sortieren
          awk '{printf("%5d %s\n", NR,$0)}' |
          # "X" vor Verzeichnisse setzen, "Y" vor den Rest ("X" < "Y")
          sed -r 's/^([0-9 ]+ d)/X \1/' |
          sed -r 's/^([0-9 ]+)/Y \1/' |
          # Sortieren bewirkt Gruppierung der Einträge
          sort |
          # Sortierhilfen + nicht benötigte Spalten löschen
          sed -r 's/^([^ ]+ +){6}(.*)/\2/' |
          # Dateigrößen für Verzeichnisse durch "---" ersetzen
          sed -r 's/^[0-9]+(.*)\/$/---\1/' |
          # eine Tabellenzeile je Verzeichniseintrag erzeugen
          sed -r "s/^([-0-9, ]+) ($date_format1) +(.*)$/$replace/" |
          # Sonderfall führendes Leerzeichen bei Tageszahl im Datum
          sed -r "s/$date_format2/\1\&nbsp;\2/"
      )
    </table>
  </body>
</html>
EOF

Der BusyBox-httpd kann auch PHP-Skripte ausführen, wenn man das PHP-Package installiert hat. Dazu muss man in /mod/etc/webcfg.conf eine neue Zeile einfügen:

*.php:/usr/bin/php-cgi

Damit index.php-Dateien verarbeitet werden, kann man beim index.cgi-Skript nach der ersten Zeile folgende Zeilen einfügen:

if test -s "../${QUERY_STRING}/index.php" ; then
  echo -e "Status: 302 Found\r"
  echo -e "Location: index.php\r"
  exit 0
fi