Donnerstag, 2. Oktober 2014

Debian Wheezy auf WD MyBook Live (MBL)

Update: Ich habe inzwischen Debian Jessie auf dem MBL am laufen.

Ich nutze seit über drei Jahren ein MyBook Live 3TB von Western Digital. Im Gegensatz zu anderen NAS Systemen mit (alten) ARM Prozessoren und schwacher S-ATA Anbindung schaffte das MBL als eines der ersten nicht-Atom Plattformen fast 100MBit/s (siehe Review).
Es basiert auf einer PowerPC Architektur (APM82181), läuft mit 800MHz und besitzt 256MB Speicher und ist damit ein wenig schwächer als mein alter AppleTV1. Leider fehlt ein USB-Port, so dass direkte Erweiterungen nicht möglich sind.

Lange  schon schwebt mir vor, das System als Home Server zu verwenden, da ein vollwertiges Debian darauf läuft. Leider ist ein Update der installierten Lenny Version nicht möglich, da es im Upgrade Package keinen angepassten Kernel gibt und das neuere udev nicht mit dem installierten Kernel funktioniert. Nachdem ich mich so bereits aus meinem System ausgesperrt habe, half mir nur die un-Brick Prozedur die hier beschrieben ist. Den ganzen DLNA Kram benötige ich auf dem System nicht, da mein XBMC da allemal besser ist ;). Wichtig ist mir ein stromsparendes, leises System.

Aufgrund der hervorragenden Arbeit von Alex Ryzhov ist es mir gelungen, "mal eben" ein aktuelles Debian Wheezy zu installieren.



Das MBL nutzt einen cleveren Ansatz zur Update-Fehlervermeidung. Die beiden Partitionen /dev/sda1 und /dev/sda2 bilden ein Raid1 (Spiegel). Im Update Fall wird ein Image direkt auf eine der beiden Partitionen kopiert, und nach erfolgreicher Beendigung (Checksum Prüfung stimmt überein) wird die andere Platte im Raid als "dirty" markiert und so nach einem Neustart mit dem nun geupdateten System überschrieben (Raid Rebuild).

Dieser Umstand erlaubt es auch, gefahrlos die hier beschriebene Prozedur auszuführen (Wheezy auf /dev/sda1 installieren) und wenn es nicht mehr gefällt, könnte man über das Raid Rebuild wieder zum bisher gelaufenen WD Image zurückkehren.

Eine serielle Schnittstelle ist nicht erforderlich, allerdings sollte man in der Lage sein, die Platte aus dem Gehäuse auszubauen und in einen Linux Rechner einzuhängen, um so /dev/sda1 zu leeren und ggf. das Raid aus /dev/sda2 wiederherzustellen.

Das Verständnis des Bootvorgangs nahm mir die Angst, bei meinem Versuch etwas irreparabel kaputt zu machen:
  1. Nach dem Einschalten startet das System aus den 512kB Flash den U-Boot Lader
  2. Uboot sucht auf den angeschlossenen Geräten nach dem Boot Script /boot/boot.scr und initialisiert damit die Boot Umgebungsvariablen (Filesystem-Root und BootArgs).
    Auf diese Weise können sämtliche Einstellungen auf der Festplatte abgelegt werden und der Flash bleibt unangetastet.
  3. Das /boot/boot.scr Script verweist normalerweise auf den Kernel (/boot/uImage) und die Hardware Initialisierung (/boot/apollo3g.dtb). Diese Dateien werden in den Speicher gelesen und dann ausgeführt -> Linux startet.
Installationsplatz

Zunächst wird Platz gemacht für das neue System. Die original Plattenaufteilung meines MBL sieht so aus:
parted -l /dev/sda

Model: ATA WDC WD30EZRS-11J (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system     Name     Flags
 3      15.7MB  528MB   513MB   linux-swap(v1)  primary
 1      528MB   2576MB  2048MB  ext3            primary  raid
 2      2576MB  4624MB  2048MB  ext3            primary  raid
 4      4624MB  3001GB  2996GB  ext4            primary

Ich verwende /dev/sda1 für die Installation meines Debian Wheezy:
mdadm --manage /dev/md0 --fail /dev/sda1
mdadm --manage /dev/md0 --remove /dev/sda1
mkfs.ext3 /dev/sda1
mount /dev/sda1 /mnt/
(Entfernen von /dev/sda1 aus dem Raid und Formatieren mit EXT3)

Bootstrap Debian

Nun stehen auf /mnt 2GB für das neue Debain zur Verfügung, welches ich zum Bootstrap verwende:
cd /tmp
wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.26+squeeze1_all.deb
dpkg -i debootstrap_1.0.26+squeeze1_all.deb
debootstrap --arch powerpc wheezy /mnt http://ftp.debian.org/debian
Anschließend werden ein paar Konfigurationsdaten übernommen...
cat /etc/network/interfaces > /mnt/etc/network/interfaces
cat /etc/resolv.conf > /mnt/etc/resolv.conf
cat /etc/hostname > /mnt/etc/hostname
und die zukünftigen Installationsquellen angepasst
nano /mnt/etc/apt/sources.list

#/etc/apt/sources.list
# Wheezy
deb http://ftp.de.debian.org/debian          wheezy                  main contrib non-free

# Proposed updates
deb http://ftp.de.debian.org/debian          wheezy-proposed-updates main contrib non-free

# Backports
deb http://ftp.de.debian.org/debian          wheezy-backports        main contrib non-free
#deb-src http://ftp.de.debian.org/debian     wheezy-backports        main contrib non-free

# Volatile Updates
deb http://ftp.de.debian.org/debian          wheezy-updates          main contrib non-free

# Security
deb http://ftp.de.debian.org/debian-security wheezy/updates          main contrib non-free
Nun fehlt noch die zukünftige fstab:
nano /mnt/etc/fstab

#/etc/fstab
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0

tmpfs           /tmp             tmpfs  defaults                                0 0
tmpfs           /var/cache/samba tmpfs  defaults                                0 0

/dev/sda1       /                ext3   defaults,noatime,nodiratime,barrier=1   0 0
/dev/sda3       swap             swap   defaults                                0 0
/dev/sda4       /media           ext4   auto,exec,rw,noatime,nodiratime,suid    0 0
Jetzt kann in das neue System gewechselt werden.
cd /mnt/
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
chroot .
Das Bootstrap enthält noch kein SSH:
apt-get update
apt-get install openssh-server bzip2
Nicht vergessen, das root-Passwort zu setzen:
passwd
Es folgt ein kleiner Test, ob SSH im neuen System startet und den root-Benutzer akzeptiert
exit
/etc/init.d/ssh stop
chroot /mnt
/etc/init.d/ssh start
Startet man nun eine SSH-Sitzung, sollte der SSH-Server auc dem chroot antworten ( WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!).
Wenn das neue Root-Passwort akzeptiert wird, hat alles geklappt.

Kernel Installieren

Zum Starten fehlt nun eigentlich nur noch der Kernel.Auf seiner Seite stellt Alex Ryzhov den Kernel-Patch zur Verfügung. Auch ein Image mit dem Kernel 2.6.32.63 gibt es dort.
Die folgenden Dateien habe ich daraus extrahiert und benutze sie in meinem System:
cd /
wget http://loetzimmer.de/boot.tar.bz2
wget http://loetzimmer.de/modules.tar.bz2
tar xfj boot.tar.bz2
tar xfj modules.tar.bz2
rm -f boot.tar.bz2
rm -f modules.tar.bz2
Damit sollte dem Booten ins neue System nichts mehr im Wege stehen
exit
umount /mnt/proc/
umount /mnt/sys/
umount /mnt/dev/
umount /mnt/
reboot
Jetzt heißt es Daumen drücken und wenn alles gut gegangen ist, kann man sich wenige Sekunden später ins neue System einloggen.
Sofern noch Einstellugen zu kopieren sind, kann die alte System Partition /dev/md0 noch gemountet werden.