OpenWrt: Upgrade (Sysupgrade)

Update 14.01.2014: Anpassungen an OpenWrt Barrier Breaker (trunk) und Copy-Paste Befehlsliste zum schnellen Updaten mit den wichtigsten Paketen (Module, Webinterface, Services).

Es gibt verschiedene Methoden, einen OpenWrt-Router auf den neuesten Stand zu bringen. Hier wird der Weg über die Weboberfläche (Luci) beschrieben. Bei einem Upgrade von OpenWrt gehen alle installierten Anwendungen verloren. Immerhin gibt es die Möglichkeit die wichtigen Konfigurationsdateien zu sichern.

Siehe auch:

Vorbereitung

Bevor die neue Firmware "geflasht" wird, sollten die eigenen Konfigurationsdateien gesichert werden. Dazu erstellt man entweder direkt unter /etc/sysupgrade.conf eine Liste der Dateien oder Verzeichnisse, die zu sichern sind oder gibt diese Liste via Webinterface System > Backup / Flash firmware > Configuration ein.

/etc/openvpn/
/etc/samba
/etc/mpd.conf
/etc/dropbear
/etc/crontabs
/etc/init.d/mpd
/etc/group
/etc/passwd
/etc/shadow
#/usr/bin/sambauseradd.sh
/usr/bin/usergroupadd.sh
/usr/bin/getdynip.sh
# User
# ACHTUNG: Wenn /home gross ist, dieses lieber nicht aktivieren und 
# selber auf eine angeschlossene HD sichern.
#/home
# Administrator
#/root/dyndns
#/root/getdynip.lft

Das mit dem Sichern dieser Dateien wird auch /etc/config gesichert. Der Router kann nach einer Neuinstallation darum sehr schnell wieder auf seine wichtigsten Funktionen zurück gesetzt werden. Man braucht dann lediglich noch die fehlenden Packete nach zu installieren und hat wieder seine gewohnte Installation.

Upgrade

Man holt sich: http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wdr3600-v1-squashfs-sysupgrade.bin (http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin) oder die entsprechende Datei für den eigenen Router unter http://downloads.openwrt.org/snapshots/trunk/. Für das Upgrade muss die Version mit der Endung squashfs-sysupgrade.bin verwendet werden.

Anschliessend wird die Datei via Webinterface (siehe Bild) auf den Router geladen und das Upgrade gestartet.

Root-Filesystem, Webinterface, installierte Applikationen: alles weg?

Nach dem Neustart des Systems wird die WLAN-Verbindung wieder hergestellt und die Route ins Internet etabliert. Aber nach dem Upgrade wird man auch feststellen, dass sich die Weboberfläche (Luci) nicht mehr aufrufen lässt, denn Luci fehlt in den trunk-Versionen. Eine Verbindung mittels ssh (und dem hinterlegten Schlüssel) auf die gewohnte IP-Nummer funktioniert weiterhin.

Eine Übersicht über das Filesystem zeigt: Das erweiterte Filesystem ist nicht mehr vorhanden.

# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    5.1M    456.0K      4.6M   9% /
/dev/root                 1.8M      1.8M         0 100% /rom
tmpfs                    61.7M     92.0K     61.6M   0% /tmp
tmpfs                   512.0K         0    512.0K   0% /dev
/dev/mtdblock3            5.1M    456.0K      4.6M   9% /overlay
overlayfs:/overlay        5.1M    456.0K      4.6M   9% /

Nachinstallation

Nun muss gemäss Kapitel "Vor jeder weiteren Installation: Das root-Filesystem vergrössern" auf dieser Seite vorgegangen werden. Emüssen folgende Befehle ausgeführt werden (Kopieren und Einfügen in der Shell):

Updates der notwendigsten Kernelmodule

opkg update
opkg install block-mount kmod-usb-core kmod-usb2 kmod-usb-ohci kmod-usb-storage
opkg install kmod-fs-ext4 kmod-fs-vfat kmod-fs-ntfs
opkg install kmod-usb-storage-extras
opkg install usbutils
opkg install e2fsprogs

Nach der Installation aller dieser Pakete für BARRIER BREAKER (Bleeding Edge, r39424) sehen die Platzverhältnisse so aus:

root@hades:~# df -h
Filesystem                Size      Used Available Use% Mounted on
rootfs                    5.1M      1.5M      3.5M  31% /
/dev/root                 1.8M      1.8M         0 100% /rom
tmpfs                    61.7M    564.0K     61.2M   1% /tmp
/dev/mtdblock3            5.1M      1.5M      3.5M  31% /overlay
overlayfs:/overlay        5.1M      1.5M      3.5M  31% /
tmpfs                   512.0K         0    512.0K   0% /dev

Ein Neustart wird empfohlen: reboot; exit

Nun stellt sich die Frage: Soll das Webinterface und weitere Kernelmodule ebenfalls in den Flashspeicher installiert werden? Der Vorteil: Auch ohne angeschlossenen USB-Stick für das erweiterte root-FS '/' kann der Router betrieben werden:

opkg install luci-mod-admin-full luci-theme-openwrt uhttpd libiwinfo-lua
opkg install kmod-nls-cp850 kmod-nls-cp437 kmod-nls-cp850
opkg install kmod-nls-cp852 kmod-nls-iso8859-1 kmod-nls-utf8

Auch das braucht Platz (gekürzt auf das rootfs):

root@hades:~# df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    5.1M      2.1M      2.9M  42% /

Die deutsche Weboberfläche und upnp (installiert die notwendingen Packete gleich mit wegen der Abhängigkeiten:

opkg install luci-i18n-german luci-app-firewall luci-app-qos 
opkg install luci-app-upnp luci-app-hd-idle

Nur noch 2.5MB frei:

root@hades:~# df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    5.1M      2.6M      2.5M  51% /

Das reicht erst einmal für die Grundfunktionen. Nun fehlt noch:

/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

Auch den midnight commander? Der Platz reicht noch:

opkg update; opkg install mc

Die glib2 braucht sehr viel Platz:

root@hades:~# df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                    5.1M      4.1M    996.0K  81% /

Wiederherstellung des vergrösserten root-Dateisystems '/'

siehe auch: http://wiki.openwrt.org/doc/howto/extroot

Beim Sysupgrade werden die Konfigurationsdateien in /etc/config beibehalten. Nicht jedoch der Status der init-Dateien (ob sie nach dem Systemstart gestartet werden). Darum muss auch die "alte" fstab erst wieder aktiviert werden. Die Art und Weise, wie OpenWrt die Partition einbindet, hat sich mit der Version Barrier Breaker (trunk) geändert. Die alte fstab ist nicht mehr gültig. Vor dem Erstellen der neuen fstab wird kontrolliert, welche Block-Devices zur Verfügung stehen.

Welches Blockdevice benutzt man? Doch vorher erst die alte fstab sichern. Man kann fast alles übernehmen, ausser einem wichtigen Unterschied. Es gibt zwei Methoden: Pivot Overlay und Pivot Root. Bei der ersteren werden, einfach ausgedrückt, nur die nachinstallierten und geänderten Konfigurationen (und eigene Dateien) kopiert, bei der anderen ist es der gesamte Inhalt des root-fs. Beide funktioniert gleichermassen gut.

Vorbereitung

Das Device und seine uuid findet man mit block detect heraus. Die alten Einstellungen werden gesichert.

mv /etc/config/fstab /etc/config/ftab.bak
block detect > /etc/config/fstab
config 'global'
    option    anon_swap    '0'
    option    anon_mount    '0'
    option    auto_swap    '1'
    option    auto_mount    '1'
    option    delay_root    '0'
    option    check_fs    '0'

config 'mount'
    option    target    '/mnt/sda1'
    option    uuid    'e546f8e0-435f-3623-caf5-64e429fbf98c'
    option    enabled    '0'

Nun zu den zwei Methoden.

Pivot Overlay

Anstelle des Devicenamens /dev/sda1 oder des Dateisystems unter /mnt/sda1 gibt man /overlay an. Anstelle der uuid kann man auch angeben option device '/dev/sda1' . Die Datei /etc/config/fstab abändern in:

config 'mount'
        option  target  '/overlay'
        option  uuid    'c776f8e0-745f-4826-b0fb-64d939eaf94b'
        option  enabled '1'

Alle weiteren Einträge, die erscheinen, wenn noch externe USB-HDs angeschlossen sind, entfernt man aus der fstab. Diese sind "automount". Das System wird nicht richtig hochfahren, wenn sie in der fstab eingetragen werden, aber nicht angeschlossen sind.

Dann wird das /overlay-fs kopiert:

tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -

Pivot Root

In der Datei /etc/config/fstab wird dieser Abschnitt um /sda1 geändert und ergänzt zu:

config mount
        option target /
        option device /dev/sda1
        option fstype ext4
        option options rw,sync
        option enabled 1
        option enabled_fsck 0

Auch hier könnte man statt dem Devicenamen die UUID angeben

Falls noch nicht durchgeführt:

mkdir /mnt/sda1; mount /dev/sda1 /mnt/sda1
cd /
mkdir /tmp/cproot
mount --bind / /tmp/cproot
tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xvf -
sync
umount /mnt/sda1
umount /tmp/cproot

Der Schritt mkfs.ext4 /dev/sda1, der auch bei einer Neuinstallation angebracht ist, fehlt hier, er wird nur bei einer Neuinstallation durchgeführt. Dann sollte aber der aktuelle Inhalt, das alte root-Filesystem in einen Backup-Ordner verschoben werden. Man hat dann auch Zugriff auf alle Dateien der älteren Installation.

Abschluss der Vergrösserung des root-fs

Die neue fstab wird aktiviert.

/etc/init.d/fstab enable
/etc/init.d/fstab start #optional

Dann fehlt nur noch:

reboot; exit

Nach einem Neustart zeigt sich, wie viel Platz man hat. In diesem Fall hier sind auf / noch die root-fs der vorhergehenden OpenWrt-Versionen und die User-Verzeichnisse. Darum sind mehrere 100MB belegt.

df -h /
Filesystem                Size      Used Available Use% Mounted on
rootfs                   14.3G    292.5M     13.3G   2% /

Auch die weiteren Kapitel zum Thema OpenWrt und die Artikel über die Installation von mpd oder minidlna finden Anwendung. Es füht kein Weg an einer beinahen Neuinstallation vorbei. Die Konfigurationen kann man jedoch beibehalten und oder sichern. Am einfachsten geht das via Luci (Webinterface).