OpenWRT – Installation USB Stick als overlay (rootfs, extroot)

Diese Anleitung ist Teil des Projekts OpenWRT als eierlegende Wollmilchsau.

Als erstes installieren wir OpenWRT „ab Werk“ auf dem Router. Dazu geht man wie folgt vor. Nachdem wir uns über das Webinterface http://192.168.0.1/ mittels des Logins: admin und dem Passwort: admin Zugriff verschafft haben, navigieren wir über System zu Firmware Upgrade. Mit dem OpenWRT Factory Build führen wir das Upgrade durch.

Nach dem Neustart überprüfen wir unsere IP-Adresse die im 192.168.1.0/24 Netz liegen sollte und rufen das Webinterface über http://192.168.1.1/ auf. (Login: root Passwort: toor)

Prinzipiell sind wir nun arbeitsbereit und können mit der weiteren Installation fortfahren.

opkg update
opkg install kmod-usb2 fdisk e2fsprogs block-mount kmod-usb-storage kmod-fs-ext4
insmod ehci-hcd

Als nächstes richten wir den USB-Stick ein:

fdisk /dev/sda

Ich habe mir dabei 2 Partitionen(root und swap) eingerichtet und diese werden nun formatiert:

mkfs.ext4 /dev/sda1 
mkswap /dev/sda3

Damit diese beim booten richtig gemountet werden müssen wir fstab konfigurieren:

uci set fstab.automount=global
uci set fstab.automount.from_fstab=1
uci set fstab.automount.anon_mount=0
uci set fstab.autoswap=global
uci set fstab.autoswap.from_fstab=1
uci set fstab.autoswap.anon_swap=0
uci set fstab.@mount[0]=mount
uci set fstab.@mount[0].device=/dev/sda1
uci set fstab.@mount[0].enabled_fsck=0
uci set fstab.@mount[0].fstype=ext4
uci set fstab.@mount[0].options=rw,relatime,barrier=1,data=ordered
uci set fstab.@mount[0].enabled=1
uci set fstab.@mount[0].is_rootfs=1
uci set fstab.@swap[0]=swap
uci set fstab.@swap[0].device=/dev/sda3
uci set fstab.@swap[0].enabled=1
uci commit fstab

Als nächstes müssen wir dafür sorgen, dass das Rootsystem auf den USB-Stick kopiert wird.

mkdir -p /mnt/sda1
mount /dev/sda1 /mnt/sda1
mkdir -p /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf -
umount /tmp/cproot
umount /mnt/sda1

Nun fehlt uns nur noch ein Reboot, damit der USB Stick als Root-Partition eingebunden wird. Wenn wir alles richtig gemacht haben, dann sollte mount folgendes ausgeben:

root@XXXXXXX:~# mount
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime,size=30852k)
tmpfs on /dev type tmpfs (rw,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,noatime,mode=600)
/dev/sda1 on / type ext4 (rw,sync,relatime,user_xattr,barrier=1,data=ordered)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
none on /proc/bus/usb type usbfs (rw,relatime)