Debian auf der Iomega iConnectcongenio

* Einführung

Die Iomega iConnect ist ein USB-Netzwerkadapter, der verkabelt oder Wireless genutzt werden kann. Sie hat 4 USB-2.0-Ports und ein internes Flash, von dem das Betriebssystem gebootet wird. Leider ist das Product inzwischen von Iomega abgekündigt, genau wie die ähnliche LaCie LaPlug, so dass man sie nur noch aus Lagerbeständen kaufen kann.

Es bietet sich an, auf diesem Gerät ein vollständiges Linux zu installieren. Das gestaltet sich normalerweise etwas schwierig, weil im Normalfall nur vom internen Flash-Speicher gebootet wird. Allerdings hat die congenio eine Lösung dafür: den iConnect-Stick.

Dazu benötigt man lediglich einen geeigneten USB-Stick (die iConnect bootet nicht von allen Sticks, z.B. nicht vom Patriot XPorter XT Rage, außerdem sollte man vorzugsweise SLC-Memory oder einen Stick oder SD-Karte mit Reader mit gutem Wear-Leveling verwenden, z.B. Transcend JetFlash130 4GB (TS4GJF130), Transcend JetFlash185 4GB (TS4GJF185), Integral Endurance 4GB SD card (INSDH4G10-ENDU), AgfaPhoto Professional High Speed SDHC 4GB (EAN 4250255101700)) mit mindestens 1 GByte Kapazität (empfohlen: >= 2 GByte) und unser -> iConnect-USB-Stick-Image (Download-Größe ca. 180 MByte). Dieses lädt man sich herunter und überträgt es folgendermaßen auf einen USB-Stick (der Stick wird hierdurch komplett gelöscht!):

* Mit Linux

Aufruf mit: dd if=iconnect-stick.raw of=/dev/sdX bs=1048576 Wobei X der Laufwerksbuchstabe ist, den der USB-Stick einnimmt. Nach dem Einstecken des Sticks kann man meist in der Ausgabe von: dmesg sehen, welchen Laufwerksbuchstaben er bekommt. Falls er - je nach Distribution - automatisch gemounted wird, muss man ihn vor dem Aufspielen mit: umount /dev/sdX unmounten.

* Mit Windows

Dazu lädt man sich zuerst das Programm -> Rawrite32 o.ä. herunter und brennt damit das Image auf den USB-Stick (diesen muss man im Programm auswählen).

* Vorbereitung der iConnect

  1. Ausstecken der Stromzufuhr zur iConnect und aller angeschlossenen USB-Geräte.
  2. Anschließen des vorbereiteten USB-Sticks (nur diesen!) an die iConnect.
  3. An der Rückseite der iConnect befindet sich eine kleine Öffnung mit der Aufschrift "Reset".
  4. Mit einer Büroklammer o.ä. den hinter diesem Loch befindlichen Taster drücken.
  5. Während der Taster gedrückt gehalten wird, den Strom wieder anschließen.
  6. Abwarten, bis die vordere linke LED aufhört, schnell blau zu blinken (ca. 15s).
  7. Den Taster erst loslassen, wenn die LED rot leuchtet.
  8. Nach wenigen Sekunden beginnen die linke LED rot und die LED über dem USB-Anschluß des USB-Sticks blau zu blinken.
  9. Nun beginnt die iConnect mit der endgültigen Einrichtung des USB-Sticks. Das dauert mindestens einige Minuten - wie lange genau, ist stark abhängig von der Geschwindigkeit des Sticks, denn es werden ca. 600 MByte Daten darauf entpackt.
  10. Nach Abschluss der Einrichtung leuchten alle LEDs über den USB-Ports kurz auf und die iConnect startet neu. Bei manchen Sticks dauert der erste Bootvorgang sehr lange, denn die große Datenmenge macht eventuell eine interne Reorganisation der Daten notwendig (Wear-Leveling des Sticks). In seltenen Fällen kann es notwendig sein, den Strom kurz aus- und wieder einzuschalten.
  11. Nach dem erfolgten Neustart ist die iConnect nach ein paar Sekunden bereit (die linke LED leuchtet blau und blinkt dazu rot).
  12. Der Login kann über Netzwerk per SSH als Benutzer "root" mit dem Passwort "congenio" erfolgen.

* Besonderheiten

  • Die iConnect wird durch unser Image so vorbereitet, dass sie fortan automatisch von einem angeschlossenen USB-Stick startet. Dieser kann an jedem USB-Port angesteckt sein. Vorzugsweise schließt man ihn hinten an, denn die Priorität der Ports ist 1 > 2 > 3 > 4, wobei Port 1 der hintere, einzelne Port ist, danach geht es vorne weiter von links (2) bis rechts (4). Falls kein bootfähiger USB-Stick gefunden wird, wird automatisch der interne Flash-Speicher gebootet, dessen Inhalt durch unsere Software nicht verändert wird. Dadurch bleibt die iConnect ohne den USB-Stick weiterhin wie gewohnt funktionsfähig, nur das Booten dauert dann ein bisschen länger als früher.
  • Auf dem USB-Stick ist nach dem ersten Start ein minimales Debian Jessie mit einem speziell für die iConnect angepassten Linux-Kernel installiert, das sich per DHCP auf der LAN-Schnittstelle eine IPv4-Adresse holt (Fallback- bzw. Backup-Adresse ist 192.168.168.168). IPv6 ist ebenfalls möglich. Durch Anpassen der Datei /etc/network/interfaces kann auch das WLAN konfiguriert werden. Mittels hostapd könnte man auch einen WLAN-Access-Point damit bauen.
  • Die Netzwerkschnittstelle der iConnect wird an manchen 100MBit-Switches nicht richtig erkannt, Gigabit-Switches funktionieren einwandfrei.
  • Die LED-Steuerung ist funktionsfähig und wird benutzt, indem unter /lib/udev/rules.d/99-usb-leds.rules ein Skript (/lib/udev/usb-leds.sh) aufgerufen wird, das beim Ein- und Ausstecken die USB-LEDs steuert. Darüber hinaus gibt es ein Skript /etc/init.d/iconnect-leds, welches beim Start und Shutdown die Steuerung übernimmt. Es bewirkt, dass beim Zugriff per SSH die OTB-LED flackert. Außerdem werden auch die GPIO-Tasten via /dev/input/event0 unterstützt. Der SSH Root-Login mit Passwort wurde erlaubt. Um den USB-Stick nicht zu stark zu belasten, wurde in der /etc/sysctl.d/98-swap.conf die Swappiness und die Sync-Rate angepasst. Der Watchdog wurde in /etc/watchdog.conf konfiguriert.

* GNU GPL Obligationen

Wie schon geschrieben, basiert die Software auf -> Debian Linux 10 "Buster". Der Kernel stammt von -> Kernel.org und wurde mit -> diesen Patches angepasst.

Falls jemand den Kernel selbst übersetzen möchte: Die Kernel-Konfiguration ist in der gepatchten Datei ./arch/arm/configs/iconnect_defconfig enthalten bzw. kann unter dem laufenden Kernel aus /proc/config.gz ausgelesen werden. Natürlich lässt sich der Kernel auch auf der iConnect selbst übersetzen, aber das ist sehr langsam. Zum Aufbau eines eigenen Cross-Compilers unter einem beliebigen Linux kann man z.B. -> diese Anleitung verwenden.

Zum Übersetzen des gepatchten Kernels mittels eines Cross-Compilers, den man in folgendem Beispiel unter /usr/cross/arm vorinstalliert hat, kann man so vorgehen: cd /home/xyz/linux make ARCH=arm menuconfig make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- dtbs make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- uImage make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- modules make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- firmware make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- headers make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- \ INSTALL_MOD_PATH=.. modules_install make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- \ INSTALL_MOD_PATH=.. firmware_install make ARCH=arm CROSS_COMPILE=/usr/cross/arm/bin/arm-none-eabi- \ INSTALL_HDR_PATH=.. headers_install Das Verfahren zum Finalisieren des USB-Sticks basiert auf dem "Iomega iConnect Imager 2.5.22", der seit der Übernahme von Iomega durch Lenovo nicht mehr zum Download angeboten wird. Normalweise ist es nur mittels Reset-Taster beim Start möglich, eine alternative uBoot-Konfiguration zu wählen, mit der man von einem USB-Stick booten kann (z.B. den iConnect Imager). Mit einem angepassten Imager werden dann beim ersten Start die uBoot-Konfiguration wie gewünscht abgeändert, die Partitionierung modifiziert und die Debian-Dateien entpackt.

* Updates

Von Zeit zu Zeit aktualisieren wir das Image mit neuen Kernel-Versionen (derzeit 5.12.5). Im Image sind drei Archive enthalten, eines trägt den Namen fs-kernel.tar.lzma. Dieses kann man über ein laufendes Linux entpacken. Nach einem Reboot steht die neue Version zur Verfügung. Um das Basis-Debian (derzeit Buster 10.0) zu aktualisieren, kann man wie gewohnt vorgehen: apt-get update apt-get upgrade Es ist auch möglich, mittels "apt-get dist-upgrade" und Umstellung der APT-Quellen von einem älteren Debian 8 "Jessie" in zwei Schritten auf Debian 10 "Buster" zu aktualisieren. Voraussetzung ist nur, dass bereits ein aktueller Kernel ab 5.x installiert ist.

Vorsicht: Seit Kernel-Version 3.9 wird ein komplett unterschiedliches Patch-Set verwendet. Hierbei wird der sogenannte "Flattened Device Tree" verwendet, in dem für die iConnect inzwischen Patches enthalten sind. Dazu ist es allerdings notwendig, in das uImage eine Hardware-Beschreibung aufzunehmen (kirkwood-iconnect.dtb). Die Linux-Build-Skripte tun das normalerweise leider nicht, man wollte dieses Feature nicht für normale Benutzer zu einfach erreichbar gestalten (wirklich!). Es gab dafür vorgeschlagene Patches für die Kconfig und Makefile für ARM, die in unseren Patches enthalten sind. Somit bestehen unsere neuesten Patches nur aus Veränderungen des Linux-Builds und einer entsprechenden .config-Datei.

Aufgrund dieser Änderung haben sich auch die Pfadnamen der LEDs unter /sys/class/leds geändert. Im neuesten Image sind daher auch neue Skripte zur Ansteuerung der LEDs enthalten (/etc/init/iconnect-leds und /lib/udev/rules.d/99-usb-leds.rules bzw. /lib/udev/usb-leds.sh). Wenn man also nur das Kernel-Paket updatet, werden also beim Sprung auf 3.9.x die LEDs nicht wie gewohnt funktionieren. Man kann sich die angesprochenen Skripte nötigenfalls aus fs-config.tar.lzma extrahieren.

Nochmals Vorsicht: Mit Kernel Version 3.16 wurde in den Ethernet-Treiber für den Marvell Armada (mv643xx_eth) ein Feature zur Prüfsummenabladung (TSO) integriert. Diese Integration ist in Kernels ab 3.16 fehlerhaft und führt zu Datenkorruption bei der Netzwerkübertragung. In den ab 28.05.2015 hier bereitgestellten Versionen (spätestens ab Kernel 4.1) ist ein Patch vorhanden, bei den vorherigen Versionen sollte das Feature manuell abgeschaltet werden, z.B. durch Eintragung in /etc/network/interfaces: auto eth0 allow-hotplug eth0 iface eth0 inet dhcp up sleep 5; ethtool -K eth0 tso off Ab Kernel 4.3 ist das Problem behoben und der Patch ist wieder entfallen.

* Haftungsausschluss

Obwohl wir das o.a. Verfahren und unsere Software nach bestem Wissen und Gewissen getestet haben, haften wir nicht für etwaige Schäden.