OpenWRT
Inhaltsverzeichnis
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:
- SSH
- FTP
- NFS
- Samba
- WLAN mit WPA
- DNS
- DHCP
- NTP-Client
- sowie ein abgespeckter HTTP-Server
Installation
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
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