OpenWRT

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

Einleitung

Achtung: Diese Seite entspricht nicht dem aktuellen Stand der Dinge und sollte bei Gelegenheit überarbeitet werden!

Näheres auf der Diskussionsseite.


OpenWrt ist eine GNU/Linux-Distribution für embedded Geräte und bietet ein voll beschreibbares Dateisystem sowie einen Paketmanager.

Die Vorteile von kleinen embedded Geräten gegenüber PCs sind der geringere Stromverbrauch, der geringere Preis und der minimale Platzbedarf. ALs Nachteile sind die knappen Hardware-Ressourcen zu nennen.

Eine Liste der Dienste, die z.B. auf einem Router laufen könnten:


Installation

Installation von OpenWrt

Grundkonfiguration

Grundkonfiguration von OpenWrt

Erweiterte Einstellungen

Massenspeicher einbinden

Da der Speicher auf den Routern sehr begrenzt ist, lohnt es sich auf Routern die über USB- oder IDE-Controller verfügen, diesen einzubinden und Applikationen darauf zu installieren.

USB

USB Massenspeicher einbinden

IDE

Kernel-Module installieren

ipkg install kmod-ide
ipkg install kmod-ext3

Damit die Module bei einem Neustart geladen werden, müssen sie in /etc/modules aufgenommen werden:

ide-core
pdc202xx_old
ide-detect
ide-disk
jbd
ext3

Nun die Module laden

insmod ide-core
insmod pdc202xx_old
insmod ide-detect
insmod ide-disk
insmod jbd
insmod ext3

In der Datei /proc/partitions sollte nun ein Eintrag für die Festplatte und je einer pro Partition erscheinen.

Partitionen anlegen

Falls auf der Festplatte noch keine Partitionen vorhanden sind benötigt man die Pakete fdisk und e2fsprogs um diese anzulegen:

ipkg install fdisk
ipkg install e2fsprogs
ipkg install swap-utils

Partition anlegen (<device> entspricht dem Eintrag in Zeile 1 von /proc/partitions)

fdisk <device>

ext3

Symbolischen Link für mk2efs anlegen

ln -s /proc/mounts /etc/mtab

Dateisystem erzeugen

mke2fs -j <partition>

Dateisystem einbinden

mount -t ext3 <partition> <mount-point>

swap

Das Paket swap-utils, zum Anlegen und einbinden von swap-Partitionen gibt es im Repository backports/rc5. Um dieses nutzen zu können muss /etc/ipkg.conf um folgende Zeile erweitert werden:

src kamikaze-backports http://downloads.openwrt.org/backports/rc5/

Partition erzeugen

mkswap <partition>

Partition einbinden

swapon <partition>

Automounter

Die neuen Partitionen müssen nun in die Datei /etc/fstab eingetragen werden (Beispiel)

/dev/ide/host0/bus0/target0/lun0/part5  /mnt/part5      ext3    defaults       0 0
/dev/ide/host0/bus0/target0/lun0/part6  /mnt/part6      ext3    defaults       0 0
/dev/ide/host0/bus0/target0/lun0/part7  /mnt/part7      ext3    defaults       0 0
/dev/ide/host0/bus0/target0/lun0/part1  none            swap

und dann benötigt man ein Script /etc/init.d/mount und einen entsprechenden Aufruf (cd /etc/rc.d; ln -s /etc/init.d/mount S20mount), damit die Dateisysteme bei einem Neustart automatisch eingebunden werden:

#!/bin/sh
 
if [ -f /etc/fstab ]; then
       ## switch on swap spaces
       swapspaces=`grep swap /etc/fstab | awk ' { print $1 } ' `
       for i in $swapspaces; do
               echo -n "adding swap space $i... "
               swapon $i
               echo " done."
       done
 
       ## just mount everything else
       echo -n "mounting all filesystems... "
               mount -a
       echo " done."
else
       echo "fstab not found!"
fi

Hardwarespezifische Anmerkung: Bei meiner nslu2 entsteht eine race condition, es wird versucht, auf usb zuzugreifen, bevor verfügbar. Ein "sleep 5" vor diesem script schafft dann Abhilfe, 5 Sekunden sollten ausreichen. Ich habe die mounts auch stattdessen im custom-user-startup (S90) eingetragen, dies sollte allerdings egal sein, da der Prozess, der die Usb Hardware zur Verfügung stellt scheinbar parallel zu dieser Sequenz abgearbeitet wird. (axm)

opkg einrichten

opkg Der neue Speicherplatz muss nun in /etc/ipkg.conf eingerichtet werden

dest <name> <mount-point>

Damit die entsprechenden Dateien auch gefunden werden können, müssen die Variablen PATH und LD_LIBRARY_PATH in der Datei /etc/profile entsprechend erweitert werden und ein symbolischer Link für das Verzeichnis /etc auf dem neuen Speicherplatz eingerichtet werden:

ln -s /etc <mount-point>/etc

Nun kann man Pakete dorthin installieren:

ipkg -d <name> install <paket>


Mehrere Benutzer

Wegen der knappen Ressourcen ist standardmäßig nur ein Benutzer eingerichtet, der User root. Die Multi-User-Fähigkeit lässt sich jedoch ganz leicht wieder einrichten:

  • Die Firmware selber kompilieren und bei BusyBox su und adduser zusätzlich auswählen
  • loginutils installieren
  • Zusätzliche User per Hand in /etc/passwd eintragen, Passwort mit passwd setzen und sudo benutzen

Pakete

Eine Suchmaschine für offizielle Pakete, backports und Pakete aus third party ipkg repositories gibt es unter http://www.ipkg.be/

NTP-Client

Als erstes empfielt es sich einen NTP-Client zu installieren, um die Zeit auf dem Router aktuell zu halten:

ipkg install ntpclient

Zeitzone für Mitteleuropa (inkl. Sommerzeit/Winterzeit) in /etc/TZ eintragen:

CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00

Cronjob erstellen für die Aktualisierung:

ntpclient -c 1 -s -h de.pool.ntp.org

Samba

Samba installieren, Freigaben und Benutzer einrichten:

ipkg install samba
vi /etc/samba/smb.conf
smbpasswd -a <username>

IP-Adresse und Hostname des Routers in /etc/hosts eintragen und Samba starten:

/etc/init.d/samba start

Wenn es funktioniert, Start-Script umbenennen, damit Samba beim Systemstart gestartet wird:

mv /etc/init.d/samba /etc/init.d/S70samba

HTTP-Server

httpd

Um einfache HTML-Seiten darzustellen, genügt es den mitgelieferten httpd auf einem beliebigen Port mit beliebigem Root-Verzeichnis zu starten:

httpd -p <port> -h <verzeichnis> -r OpenWrt

Sogar eine minimale Authentifizierung lässt sich in /etc/httpd.conf einstellen.

lighttpd

Etwas komfortabler und umfangreicher ist da das Paket lighttpd:

SSL

Der lighttpd verfügt auch über SSL Support. Dazu muss man ein SSL-Zertifikat erstellen:

ipkg install openssl-util
cd /etc/ssl/certs/
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

SSL in /etc/lighttpd.conf einschalten:

ssl.engine   = "enable"
ssl.pemfile  = "/etc/ssl/certs/server.pem"
server.port  = 443

und den lighttpd neu starten

/etc/init.d/S70lighttpd stop
/etc/init.d/S70lighttpd start

Authentifizierung mit htpasswd

Modul installieren:

ipkg install lighttpd-mod-auth

passwd-Datei anlegen (kann auch auf einem PC erfolgen):

htpasswd -c lighttpd.user <benutzer>
cp lighttpd.user /etc

/etc/lighttpd.conf anpassen:

server.modules = (
                  "mod_auth"
	          )
auth.backend                   = "htpasswd"
auth.backend.htpasswd.userfile = "/etc/lighttpd.user"
auth.require                   = ( "<verzeichnis>" =>
                                  (
                                  "method"  => "basic",
                                  "realm"   => "<beliebiger name>",
                                  "require" => "valid-user"
                                  )
                                 )

und den lighttpd neu starten

/etc/init.d/S70lighttpd stop
/etc/init.d/S70lighttpd start


Links