mtd-utils für NAND Sicherung übersetzen

Es gibt im Netz viele Anleitungen zum Übersetzen der mtd-utils. Leider ist keine Einziger von mir aufgefundener Artikel auf meine Anforderungen zugeschnitten. Die meisten Anleitungen sind für sehr alte Versionen der mtd-utils verfasst, so das sie zum Beispiel davon ausgehen das kein ./configure Script für diese Software existiert oder die Anleitungen beziehen sich auf die besonderheiten des Cross-Compilings und lassen alles andere weg.

Hier ist meine Anleitung für das übersetzen der mtd-utils auf der NAS CL-35B2. Diese Anleitung wird benötigt um die Werkzeuge nanddump und nandwrite zu erhalten welche für ein Backup und Restore der NAS benötigt werden.

Die Anleitung kann direkt nach dem vorbereiten eines Buildsystems für die CL-35B2, und einem chroot in das Buildysystem, verwendet werden.

Die Bibliotheken werden direkt in das Buildsystem geschrieben und ich verwende das Paketmanagement nicht da es sich nur um das Buildsystem handelt, welches sowieso wieder gelöscht wird. Sollte Dein Buildsystem Dauerhaft bestehen sollen empfehle ich Dir rpm-Pakete entsprechend dieser Anleitung zu erstellen.

1.) Vorbereitungen und Download der Sourcecodes

2.) zlib erstellen

3.) lzo erstellen

4.) e2sfprogs erstellen

5.) Die mtd-utils übersetzen

nach der Installation sind folgende Werkzeuge zusätzlich verfügbar.:

ToolNutzen
ubiupdatevol
ubimkvol
ubirmvol
ubicrc32
ubinfo Ausgabe von Informationen zum NAND Speicher und zur Partitionierung und zu den Details einer UBI-Partition
ubiattach
ubidetach
ubinize
ubiformat
ubirename
mtdinfoAusgabe von Informationen zum NAND Speicher und zur Partitionierung und zu den Details einer MTD-Partition
ubirsvol
ubiblock
ftl_format
doc_loadbios
ftl_check
mtd_debug
docfdisk
serve_image
recv_image
flash_erase
flash_lock
flash_unlock
flash_otp_info
flash_otp_dump
flash_otp_lock
flash_otp_write
flashcp
mtdpart Partitionierungswerkzeug für einen NAND Speicher
nanddump Export des Inhalts einer NAND-Partition
nandwrite zurückschreiben einer Sicherung in den NAND Speicher
nandtest
nftldump
nftl_format
rfddump
rfdformat
mkfs.ubifs
mkfs.jffs2
jffs2dump
jffs2reader
sumtool
Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

Linux Buildsystem auf der NAS erstellen (fedora Core12)

Auf meiner NAS CL-35B2 benötige ich ein Buildsystem um einige Dienste zu aktualisieren. (und vermutete Sicherheitslücken zu schließen)

Um ein Build System zu installieren reicht der Speicherplatz der NAS, der NAND ist nur 200MB groß, nicht aus. Ich habe einen 4GB USB Stick angeschlossen, der als /dev/sdc auftaucht.

Nach dem Partitionieren via cfdisk bleiben 3GB für meine chroot-Umgebung und 1GB für den Swap.

Die Pakete sind der URL http://ftp.linux.org.uk/pub/linux/arm/fedora/pub/fedora/linux/releases/12/Everything/arm/os/Packages/ entnommen, ich habe einen vollständigen Mirror unter http://fc12.arm.loteks.de/ angelegt.

1.) Initialisiere die RPM Datenbank

2.) Das Basesystem

3.) Die Bash installieren

Da es noch keine lokale gibt erscheint jetzt die Fehlermeldung:

3.) Coreutils

4.) Findutils, flex, e2fsprogs, diffutils

5.) libtool, autoconf, automake, gcc, sed, binutils, Perl

6.) rpm, bzip2, curl, elfutils

7.) Development Pakete & awk

Installierte RPM Pakete anzeigen Lassen:

Zu welchem RPM Paket gehört die Datei?

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

FANTEC CL-35B2 Zeitzonen korrigieren

Die voreingestellte Zeitzone auf der NAS CL-35B2 von fantec ist MST, die US Mountain Standard Time (-8 MEZ). Da mich alles was nicht meiner Lokalen, Berliner, Zeit entspricht irritiert habe ich auch im Fedora Core 12 des CL-35B2 die Berliner Zeit konfiguriert.

Um die Zeit zu konfigurieren bin ich entsprechend meiner folgenden Dokumentation vorgegangen.:

Zuerst den NTP Client stoppen:

Die Zonen-Datei für Berlin nach /etc/localtime kopieren:

Zeit mit dem Server der Physikalisch-Technische Bundesanstalt abgleichen.

Zeit in die Hardwareuhr schreiben.

Konfiguration für den NTP Dienst schreiben:

und den NTP Dienst neu starten:

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

CL-35B2 Rettungssystem (final)

Dieser Artikel enthält meine lange versprochene Anleitung wie ein Rettungssystem für die fantec CL-35B2 erstellt werden kann. In dieser Anleitung zeige ich wie „auf die Schnelle“ ein bereits fertiges Rettungssystem für die fantec CL-35B2 auf eine Festplatte geschrieben wird um die NAS von dieser Festplatte zu starten. ☺

Leider enthält das Rettungssystem aktuell noch keine Unterstützung für die Netzwerkhardware der NAS. Dies bedeutet das Du dieses Rettungssystem über das TTL Interface der CL-35B2 bedienen musst!
(Alternativ versuche eine USB-Netzwerkkarte, von dem verwendeten Linux Kernel werden einige USB Netzwerkkarten unterstützt.)

Für die Verwendung dieses Rettungssystems benötigst Du eine SATA-Festplatte. Alle Daten auf dieser Festplatte gehen bei der Installation des Rettungssystems verloren.

In der folgenden Download Datei ist ein Installations-Script enthalten, das die beim Aufruf angegebene Festplatte überschreibt. Die auf der Festplatte gespeicherten Daten gehen durch diesen Vorgang unwiederruflich verloren. Im Anschluss wird das RescueSystem für die fantec CL-35B2 auf dieser Festplatte hinterlegt.

Download: fantec Rescue-System

Der Download ist sowohl über den Obenstehenden Link als auch via wget möglich.:

Die im Download enthaltene Datei fantec_CL-35B2_rescue.tar.gz kann mit dem Befehl tar, mit den Optionen „xzf“, entpackt werden.

Das Script wird nach dem entpacken via ./install.sh /dev/sdx aufgerufen, wobei /dev/sdx die Festplatte ist auf welche das Rettungssystem geschrieben werden soll.
(☠Alle auf der Festplatte gespeicherten Daten gehen unwiederruflich verloren!☠)

Ich habe das Linux Image aus den gleichen „Fedora ARM 12″[1] Quellen zusammengestellt, welche von fantec verwendet wurden um das System der fantec CL-35B2 zusammen zu stellen.
In der Distribution, so wie sie im .tar.gz Archive enthalten ist, ist „unnötiger weise“ Samba, SSH und ddclient enthalten da ich dieses Image für Experimente mit einer meiner CL-35B2 verwendet habe.

[1]http://ftp.linux.org.uk/pub/linux/arm/fedora/pub/fedora/linux/releases/12/Everything/arm/os/Packages/

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

Boot CL-35B2 from SATA

Ich habe einen ersten Erfolg erzielt, die CL-35B2 von einer SATA Festplatte zu starten. In der Dokumentation des SOC ist ein folgend erklärter Bootcode angegeben der auf die SATA Festplatte geschrieben werden muss um von der Festplatte zu starten.

Erstellen der Festplatte:
– Welche Festplatte soll überschrieben werden

– Festplatte leeren

– Bootcode auf die Platte schreiben (Perl Magic 🙂

– Bootblock auf die Platte schreiben

– das U-Boot auf die Festplatte schreiben (Quellcode folgt!)

Wenn die Festplatte in slot 1 der CL-35B2 eingebaut wird bootet die NAS den U-Boot Bootloader von der Festplatte.
UBoot Dateien

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

CL-35B2: Linux vom USB-Stick

Um die CL-35B2 von einem USB-Stick zu Booten benötige ich die TTL Konsole und auf dem NAS ein funktionsfähiges UBoot. Beim Testen dieses Tutorials hatte ich aus die nach dem letzten Punkt auf den NAND-Speicher geschrieben und dadurch das UBoot überschrieben. !Also! nach dem Booten den NAND Speicher in ruhe lassen. (Ich teste Später noch wie ich die CL-35B2 anderweitig booten kann)

zuerst die beiden neuen mount-Ziele anlegen.
mkdir /mnt/{source,system}

Zum Mounten des root-Systems die Datei /etc/fstab durch die Folgende Zeile ergänzen:
ubi0 /mnt/source ubifs ro,noatime,nodev,noexec 0 0
Das Gerät ubi0, die Systempartition von dem NAS, soll zusätzlich noch unter /mnt/source eingebunden werden. Auf dieses mount-Ziel soll nur lesend zugegriffen werden(ro), es sollen keine Zugriffszeiten gespeichert (noatime) werden devices sollen nicht interpretiert werden (nodev) und ausführbare Dateien nicht ausgeführt werden(noexec).

Anschließend den USB-Stick Partitionieren und Formatieren, mounten und mit rsync das gesamte System kopieren.
cfdisk /dev/sdc
mkfs.ext2 -m 1 /dev/sdc1 -L fc12arm5tel

mount /dev/sdc1 /mnt/system && mount /mnt/source
rsync -aAXv /mnt/source/ /mnt/system/

Jetzt die Festplatten UUID auslesen und die /mnt/system/etc/fstab korrigieren.
blkid /dev/sdc1
vi /mnt/system/etc/fstab

Bei meinem Dateisystem ist die Ausgabe von blkid die folgende:
/dev/sdc1: UUID="06cf0015-40d5-412f-ba18-a464689a154b" TYPE="ext2" LABEL="fc12arm5tel"

somit wird die erste Zeile in der fstab:
UUID=06cf0015-40d5-412f-ba18-a464689a154b / ext2 defaults 1 1

nach dem abbrechen des Startvorgangs über die Serielle Konsole, es muss nur eine Taste beim U-Boot gedrückt werden, gebe ich folgendes an um vom USB Stick zu booten.:
setenv bootargs 'root=/dev/sda1 console=ttyS0,115200 elevator=cfq mac_adr=0x00,0x30,0xe0,0x00,0x00,0x01 mem=128M poweroutage=yes ip=dhcp devfs=only raid=noautodetect'

Anschließend wird der Bootvorgang über die folgende Zeile in vom USB Stick gebootet.
run load_nand boot

Der Linux Kernel wird weiterhin via nboot vom NAND geladen und gestartet, Leider noch ein Linux 2.6.31.
(Der Linux Kernel enthält den Netzwerkkarten Treiber gmac_copro_firmware.sdk300 der scheinbar eine separat erthältliche Firmware benötigt. Dem muss ich noch nachgehen!)

!VORSICHT! BRICK!!!
Beim Schreiben auf das ubi nach dem holen der Partition mit ubiattach /dev/ubi_ctrl -m 0 und mounten der Partition, überschreibt Ihr den UBoot und Brickt die CL-35B2 solltet ihr eine Datei auf den NAND schreiben!
Lasst das Dateisystem auf dem NAND so wie es ist! Beschreibt es nicht!

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

CL-35B2: die U-Boot Umgebung

Als Merkblatt, die Ausgabe der CL-35B2 bis zum U-Boot[1] Bootmanager über die Serielle Konsole.

Setup memory, testing, Image 0
Hdr len: 0x0001AC3C
Hdr CRC: 0x9B812E38
OK

U-Boot 1.1.2 (Oct 28 2011 – 10:57:48)

U-Boot code: 60D00000 -> 60D1AC3C BSS: -> 60D1F2F4
RAM Configuration:
Bank #0: 60000000 128 MB
SRAM Configuration:
64KB at 0x50000000
NAND:256 MiB
*** Warning – bad CRC, using default environment

In: serial
Out: serial
Err: serial
Setting Linux mem= boot arg value
Reading upgrade flag from NAND address 0x01ec0000 : 0
Hit any key to stop autoboot: 2

Und hier die Umgebungsvariablen des U-Boot:

bootcmd=run extinguishled boot_nand
bootdelay=2
baudrate=115200
ethaddr=00:30:e0:00:00:01
ipaddr=192.168.50.100
serverip=192.168.50.59
autoload=n
netmask=255.255.0.0
bootfile=“uImage“
load_nand=nboot 60500000 0 440000
load_nand2=nboot 60500000 0 A40000
lightled=ledfail 1
extinguishled=ledfail 0
boot=bootm 60500000
boot_nand=run load_nand boot || run load_nand2 boot || run lightled
stdin=serial
stdout=serial
stderr=serial
bootargs=root=ubi0:rootfs ubi.mtd=2,512 rootfstype=ubifs console=ttyS0,115200 elevator=cfq mac_adr=0x00,0x30,0xe0,0x00,0x00,0x01 mem=128M poweroutage=yes

Environment size: 579/8188 bytes

[1] Das U-Boot

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

CL-35B2 hacken, Dienste aufräumen sowie SMB und NFS anbieten

Es gibt zwei Wege einen root-Zugang zur CL-35B2 zu erlangen, einen für alte Versionen des Systems und einen für aktuelle Versionen.:

Der klassische Web:
Das root-Passwort ist „toor„!

Der neue Weg wenn der klassische Weg nicht möglich ist:
Lege eine Systemsicherung in der Weboberfläche an. Bearbeite die in der Sicherung enthaltene Datei /etc/shadow in dem Du die Zeile welche mit „admin:“ beginnt in die erste Zeile kopierst, nach dem Du die erste Zeile, welche mit „root:“ beginnt gelöscht hast.
Ändere das „admin:“ in der neuen ersten Zeile in „root:“ Im Anschluss füge die Zip-Datei der Sicherung wieder zusammen und Spiele das Backup auf die CL-35B2 zurück.

Anschließend ist der root-Login via Telnet möglich.

Das erste das ich auf der NAS aktiviere ist der SSH-Dienst, da ich das unverschlüsselte Telnet nicht mag!

Als nächstes ist mir aufgefallen, das jemand in /root/.ssh/authorized_keys einen Key hinterlegt hat. Das mag ich nicht, ich lösche zuerst diese Datei.
Da es kein passwd auf der Box gibt kommt das ändern des Passwortes erst später…

# deaktivieren was nicht laufen soll

# software deinstallieren die wir nicht wollen
# was soll ein Sockproxy auf einer NAS? und ich mag keinen gstreamer auf der NAS
# auserdem lösche ich die NAS Software von fantec

# ACHTUNG !!! Jetzt ist die Netzwerk konfiguration umbenannt worden, korrigieren wir das SOFORT!

Im Anschluss werden die nicht vorhandenen Dienste von der NAS entfernt.:

Jetzt fehlen der NAS alle Dienste die ich persönlich nicht auf meiner NAS sehen möchte.
Jetzt installiere ich mit die grundlegenden Linux Werkzeige lsof, wget, passwd und bzip2

Um auf der NAS Cronjobs ausführen zu können benötige ich eine reihe von zusäztlichen Paketen.:

Jetzt da ich Cronjobs anlegen kann lasse ich mir bei dieser Gelegenheit anzeigen ob jemand aktuell auf dieser CL-35B2 eingeloggt ist. (Ich habe ja ein paar LED’s an der NAS)

… und ein kurzes Shellscript namens countuser.sh das die Anzahl der aktuell eingeloggten benutzer Zählt und die LED setzt.:

Das Script ausführbar machen:

…und ein cronjob für das countuser.sh-Script anlegen.:

# dann die NAS-Box rebooten:

# nur wenn die BOX via SSH zu erreichen ist und ich mich einloggen kann schale ich via:

# Telnet deinstalliere ich via

# zu guter letzt kopiere ich mir noch die bash startdateien in den /root Ordner:
.bash_logout  .bash_profile  .bashrc

ddclient (DynDNS) installieren:

Die Pakete stammen alle aus dem Veralteten Repository auf:

Ergänzung:

Die alten root Passwörter für die CL-25B2, „root“ und „toor“ scheinen in der Aktuellen Firmware nicht mehr verwendet zu werden.

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin

Serielle Konsole (TTL) zur NAS: CL-35B2

CL-35B2 Board Gehäuse-seitig
CL-35B2 Board Gehäuse-seitig

Nach dem Erwerb einer CL-35B2 NAS habe ich es auf Anhieb geschafft mich aus dem Linux auszusperren. ☺
Ich hatte via rpm -e nas-* die NAS Spezifischen Pakete deinstalliert und versäumt die Netzwerk Konfiguration zu Prüfen. (rpm weisst bei der Deinstallation auf die Umbenennung der Netzwerkkonfiguration hin)

Glücklicherweise bietet dieser Router eine sehr gut erreichbare TTL Schnittstelle.:

Die TTL Konsole ist der Anschluss oben rechts, dieser ist mit CON8 bezeichnet.
Die Pinbelegung ist, vom Kontakt 1 (mit dem kleinen Weißen Pfeil!!!) rechts zum Kontakt 4 (Links, Richtung Boardmitte) angegeben:

CL-35B2 Board mit selbst gebasteltem RS232 Wandler...
CL-35B2 Board mit selbst gelötetem RS232 Wandler…

 

Scan to Donate Bitcoin to der_metzger
Did you like this?
Tip der_metzger with Bitcoin