OpenWRT
aus PUG, der Penguin User Group
K (hat Benutzer:Laurence:ASUS WL-HDD nach OpenWRT verschoben) |
K (Images entfernt) |
||
| (Der Versionsvergleich bezieht 28 dazwischenliegende Versionen mit ein.) | |||
| Zeile 1: | Zeile 1: | ||
| - | + | =Einleitung= | |
| - | + | ||
| - | + | {{Überarbeiten}} | |
| - | [ | + | OpenWrt ist eine GNU/Linux-Distribution für [http://wiki.openwrt.org/toh/start embedded Geräte] und bietet ein voll beschreibbares Dateisystem sowie einen Paketmanager. |
| - | + | ||
| - | + | * [http://wiki.openwrt.org/de/doc/howto/user.beginner Leitfaden für Anfänger] | |
| - | + | 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|SSH]] | |
| - | + | ||
| - | * SSH | + | |
* FTP | * FTP | ||
* NFS | * NFS | ||
| - | * Samba | + | * [[#Samba|Samba]] |
* WLAN mit WPA | * WLAN mit WPA | ||
* DNS | * DNS | ||
* DHCP | * DHCP | ||
| - | * NTP | + | * [[#NTP-Client|NTP-Client]] |
* sowie ein abgespeckter HTTP-Server | * sowie ein abgespeckter HTTP-Server | ||
| - | == | + | = Installation = |
| - | Da es | + | [http://wiki.openwrt.org/de/doc/howto/generic.flashing Installation von OpenWrt] |
| + | |||
| + | = Grundkonfiguration = | ||
| + | [http://wiki.openwrt.org/de/doc/howto/basic.config 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 === | ||
| + | [http://wiki.openwrt.org/doc/howto/usb.storage 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 <tt>/etc/modules</tt> 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 <tt>/proc/partitions</tt> 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 <tt>fdisk</tt> und <tt>e2fsprogs</tt> um diese anzulegen: | ||
| + | ipkg install fdisk | ||
| + | ipkg install e2fsprogs | ||
| + | ipkg install swap-utils | ||
| + | |||
| + | Partition anlegen (<tt><device></tt> entspricht dem Eintrag in Zeile 1 von <tt>/proc/partitions</tt>) | ||
| + | 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 <tt>swap-utils</tt>, zum Anlegen und einbinden von swap-Partitionen gibt es im Repository <tt>backports/rc5</tt>. Um dieses nutzen zu können muss <tt>/etc/ipkg.conf</tt> 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 <tt>/etc/fstab</tt> 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 <tt>/etc/init.d/mount</tt> 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 === | ||
| + | [http://wiki.openwrt.org/doc/techref/opkg opkg] Der neue Speicherplatz muss nun in <tt>/etc/ipkg.conf</tt> eingerichtet werden | ||
| + | dest <name> <mount-point> | ||
| + | |||
| + | Damit die entsprechenden Dateien auch gefunden werden können, müssen die Variablen <tt>PATH</tt> und <tt>LD_LIBRARY_PATH</tt> in der Datei <tt>/etc/profile</tt> entsprechend erweitert werden und ein symbolischer Link für das Verzeichnis <tt>/etc</tt> 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 <tt>root</tt>. Die Multi-User-Fähigkeit lässt sich jedoch ganz leicht wieder einrichten: | ||
| + | * Die [http://wiki.openwrt.org/doc/howto/build Firmware selber kompilieren] und bei BusyBox <tt>su</tt> und <tt>adduser</tt> zusätzlich auswählen | ||
| + | * <tt>loginutils</tt> installieren | ||
| + | * Zusätzliche User per Hand in <tt>/etc/passwd</tt> eintragen, Passwort mit <tt>passwd</tt> setzen und <tt>sudo</tt> 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 <tt>/etc/TZ</tt> 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 <tt>/etc/hosts</tt> 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 <tt>httpd</tt> 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 <tt>/etc/httpd.conf</tt> einstellen. | ||
| - | + | ===lighttpd=== | |
| + | Etwas komfortabler und umfangreicher ist da das Paket '''<tt>lighttpd</tt>''': | ||
| - | + | ====SSL==== | |
| + | Der <tt>lighttpd</tt> 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 <tt>/etc/lighttpd.conf</tt> einschalten: | |
| + | ssl.engine = "enable" | ||
| + | ssl.pemfile = "/etc/ssl/certs/server.pem" | ||
| + | server.port = 443 | ||
| - | + | und den <tt>lighttpd</tt> neu starten | |
| + | /etc/init.d/S70lighttpd stop | ||
| + | /etc/init.d/S70lighttpd start | ||
| - | + | ====Authentifizierung mit htpasswd==== | |
| + | Modul installieren: | ||
| + | ipkg install lighttpd-mod-auth | ||
| + | <tt>passwd</tt>-Datei anlegen (kann auch auf einem PC erfolgen): | ||
| + | htpasswd -c lighttpd.user <benutzer> | ||
| + | cp lighttpd.user /etc | ||
| - | == | + | <tt>/etc/lighttpd.conf</tt> 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 <tt>lighttpd</tt> neu starten | |
| - | + | /etc/init.d/S70lighttpd stop | |
| - | + | /etc/init.d/S70lighttpd start | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | |||
| - | + | =Links= | |
| - | + | * [http://openwrt.org/ OpenWrt-Website] | |
| - | + | * [http://wiki.openwrt.org/toh/start Liste der unterstützten Hardware] | |
| - | + | * [http://wiki.openwrt.org/de/doc/howto/user.beginner OpenWrt - Erste Schritte] | |
| - | + | * [http://i18n.luci.subsignal.org/de/ LuCI: deutsche Übersetzung] | |
| - | + | * [http://www.ipkg.be Tracker für inoffizielle Pakete] | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
[[Category:Linux]] | [[Category:Linux]] | ||
Aktuelle Version vom 07:59, 8. Feb. 2012
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

