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 nach dem erfolgreichen übersetzten der Quellen 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

cd /usr/src
wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz
git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
git clone git://git.infradead.org/mtd-utils.git

2.) zlib erstellen

tar xzf zlib-1.2.11.tar.gz
cd /usr/src/zlib-1.2.11
./configure
make
make install
cd /usr/src
rm -r zlib-1.2.11
rm zlib-1.2.11.tar.gz

3.) lzo erstellen

tar xzf lzo-2.10.tar.gz
cd /usr/src/lzo-2.10
./configure
make
make check
make install
cd /usr/src
rm -r lzo-2.10
rm lzo-2.10.tar.gz

4.) e2sfprogs erstellen

cd /usr/src/e2fsprogs
./configure
make
make install
make install-libs
cd /usr/src
rm -r e2fsprogs

5.) Die mtd-utils übersetzen

cd /usr/src/mtd-utils
./autogen.sh
./configure --disable-tests
make
make install

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

Linux: eine einfache und „schöne“ Festplattenfüllanzeige

Ich stelle euch hier mein Script zur Festplattenfüllanzeige meiner Server zur verfügung, da viele meiner Freunde das Script von mir wünschten.

Ich habe das script auf meinen Server in der .bashrc Datei hinterlegt und es zeigt nach dem Login auf den Server, auch via SSH, werden die Fülldaten aller eingebundenen Datenträger angezeigt.

Die Ausgabe des Scriptes enspricht diesem Bild

Die Farben der Rahmen wird bei einer Belegung von 80% nicht mehr grün sondern gelb und ab sowie ab 90% Festplattenfülle in Rot dargestellt.

Die Breite der Darstellung passt sich beim Aufruf automatisch der im Terminalfenster verfügbaren Breite des Fensters an.

Auf meinem CL-25B2 NAS habe dieses Script, anstelle der .bashrc Datei in der Datei /etc/profile.local hinterlegt, so das die Festplattenfüllanzeige bei jedem Login angezeigt wird, nicht nur bei einem bestimmten Benutzer.

Für Verbesserungsvorschläge bin ich immer Dankbar, diese bitte in die Kommentare 😉

#!/bin/bash

# Ausgabe eines Statusbalkens
statusbalken() {
 if [ $# != 1 ]
  then
   exit;
 fi

 used=$(df "$1"|tail -n 1|awk '{print $3}')
 total=$(df "$1"|tail -n 1|awk '{print $2}')

 e=$(printf "\033")
 end="$e[0m"
 COLUMNS=$(tput cols)
 COLUMNS=$((COLUMNS-9))

 PERCENT=$(echo "$used $total 100"|awk '{printf ("%i", $1/$2*$3 )}')
 percent=$(echo "$used $total $COLUMNS"|awk '{printf ("%i", $1/$2*$3 )}')

 COLOR="$e[1;31m"
 if [[ $PERCENT -lt 90 ]] ;then
  COLOR="$e[1;33m"
 fi
 if [[ $PERCENT -lt 80 ]] ;then
  COLOR="$e[1;32m"
 fi

 printf " Disk usage: %s\n ${COLOR}[${end}" "$1"
 for (( i=0; i< percent; i++ ))
 do
  printf "%b" "#"
 done

 for (( i=percent; i<COLUMNS; i++ ))
 do
  printf "%b" "-"
 done
 printf "${COLOR}]${end}%3d%%\n" "$PERCENT"
}

# Laufwerke ermitteln
drives=$(mount|grep -E '^\/'|awk '{print $3}')

for var in $drives
do
 statusbalken "$var"
done

Da im WordPress die Formatierung von Shellscripten immer ungewünscht „angepasst“ wird, zusätzlich hier noch ein Download-Link für das Script.: http://dl.loteks.de/drives.sh

howto – Shellshock auf der NAS

Leider ist auch die Bash-Shell der NAS CL-35B2 vom shellshock betroffen.

Hier meine Anleitung, wie die Bash auf der NAS durch eine neue, selbst compilierte ersetzt werden kann

1.) Bash auf Shelshock Verwundbarkeit testen

curl -k https://shellshocker.net/shellshock_test.sh 2> /dev/null| bash 2> /dev/null

Sollte bei einem der Tests die Meldung „VULNERABLE“ erscheinen, sollte die „Bash“ mit dieser Anleitung aktualisiert werden.
Sollten alle Tests „not vulnerable“ ausgeben ist diese Anleitung nicht interessant für Sie.
Ein Mirror des Scriptes ist unter der URL http://dl.loteks.de/shellshock_test.sh zu finden.

1.) Build Umgebung erstellen

Leider enthält die NAS CL-35B2 keine installierte Build-Umgebung. Von den 195MB Speicherplatz sind nur noch ca 40 frei, der Speicherplatz auf der NAS ist einfach zu klein um GCC und make zu installieren.

Ich habe einen USB stick angeschlossen, der sich als /dev/sdc meldet. (herauszufinden via dmesg)
via cfdisk habe ich auf diesem USB Stick zwei Partitionen angelegt, zuerst eine ein Gigabyte Swap Partition und im Anschluss den Rest als Linux Partition.

Im Anschluss den swap Speicher Partitionieren und aktivieren:

mkswap /dev/sdc1
swapon /dev/sdc1

Das Dateisystem auf /dev/sdc2 erstellen und Das Laufwerk Mounten:

mkfs.ext2 /dev/sdc2
mount /dev/sdc2 /mnt

Anschließend die RPM Pakete der Verwendeten Linux Distribution herunterladen. Bei der Fantec CL-35B2 ist es leider noch Fedora ARM 12, welches ein wenig betagt ist. Ich habe unter http://dl.loteks.de/fedora12arm_rpms.tar.gz (größe 119 MB) ein Paket mit den, für das Compilieren der Bash notwendigen rpm-Paketen abgelegt.

mkdir -pv /mnt/{chroot,rpm}
cd /mnt/
wget http://dl.loteks.de/fedora12arm_rpms.tar.gz
tar xzf fedora12arm_rpms.tar.gz
rpm --install --nodeps --root=/mnt/chroot/ rpm/*.rpm

Nach dieser, sehr sehr lange dauernden Installation (dies dauert auf der NAS mehrere Stunden!) befindet sich die chroot umgebung im Order /mnt/chroot

2.) Bash Quellen bereitstellen

Jetzt brauchen wir die Bash Quellen und Patches in der chroot-Ubgebung:

mkdir -pv /mnt/chroot/usr/src/bash
cd /mnt/chroot/usr/src/bash
wget ftp://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz
tar xzf bash-4.3.tar.gz
wget ftp://ftp.gnu.org/gnu/bash/bash-4.3-patches/ -m -nd
chroot /mnt/chroot/
cd /usr/src/bash/bash-4.3 
for file in ../bash43-0[0-9][0-9] ; do patch -p0 < $file; done

Ab diesem Punkt liegen die Quellen der Bash gepatched im Verzeichnis /mnt/chroot/usr/src/bash-4.3. Das herunter geladene sstrip.c brauchen wir am ende um die Datei „bash“ auf ein der NAS angepasste Größe zu kürzen.
Jetzt können je nach Wunsch beliebige Compiler Flags gesetzt werden und die Configurationsoptionen gesetzt werden.

CHOST="armv6j-hardfloat-linux-gnueabi"
CFLAGS="-Os -march=armv6j -mcpu=arm1136jf-s -mfpu=vfp -mfloat-abi=hard -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
./configure --with-installed-readline
make
strip bash
exit

mit dem „strip bash“ werden alle, für die Ausführung der bash, nicht benötigten teile der elf-Datei entfernt. Die Datei wird von fast 1,5 MB auf unter 840KB reduziert.

3. bash Installieren

cp /mnt/chroot/usr/src/bash/bash-4.3/bash /bin/bash1
/bin/bash1
cp /bin/bash /bin/bash_
cp /bin/bash1 /bin/bash
exit
rm /bin/bash1 /bin/bash_
curl -k https://shellshocker.net/shellshock_test.sh 2> /dev/null| bash 2> /dev/null

CVE-2014-6271 (original shellshock): not vulnerable
CVE-2014-6278 (Florian’s patch): not vulnerable
CVE-2014-7169 (taviso bug): not vulnerable
CVE-2014-//// (exploit 3 on https://shellshocker.net/ ): not vulnerable
CVE-2014-7186 (redir_stack bug): not vulnerable
CVE-2014-7187 (nested loops off by one): not vulnerable

Die Anleitung wurde vom mir zuletzt am 05.10.2014 getestet.
Sollten Irrtümer, Fehler oder Verbesserungen zum Artikel auffallen bitte ich dies mir mit einem Kommentar zu melden.

Besser wäre ein rpm-Paket, ich hoffe die Anleitung demnächst bezüglich rpm-Paket bau erweitern zu können.


Das aus diesem Tutorial entstehende Bash-Binary und RPM-Datei aus dem RPM-Tutorial zur Installation

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.

mkfs.ext4 /dev/sdc1
mount /dev/sdc1 /mnt/

1.) Initialisiere die RPM Datenbank

mkdir -p /mnt/chroot/var/lib/rpm
cd /mnt
wget http://fc12.arm.loteks.de/fedora-release-12-1.fa2.noarch.rpm
rpm --rebuilddb --root=/mnt/chroot
wget http://fc12.arm.loteks.de/A4D647E9.txt
wget http://fc12.arm.loteks.de/DE7F38BD.txt
rpm --root=/mnt/chroot --import A4D647E9.txt
rpm --root=/mnt/chroot --import DE7F38BD.txt
rpm --root=/mnt/chroot -i fedora-release-12-1.fa2.noarch.rpm
rpm --root=/mnt/chroot --import /mnt/chroot/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-12-primary

2.) Das Basesystem

wget http://fc12.arm.loteks.de/basesystem-10.0-3.noarch.rpm
wget http://fc12.arm.loteks.de/setup-2.8.9-1.fc12.noarch.rpm
wget http://fc12.arm.loteks.de/filesystem-2.4.30-2.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i basesystem-10.0-3.noarch.rpm setup-2.8.9-1.fc12.noarch.rpm filesystem-2.4.30-2.fc12.armv5tel.rpm

3.) Die Bash installieren

wget http://fc12.arm.loteks.de/bash-4.0.33-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/glibc-common-2.11-2.fa3.armv5tel.rpm
wget http://fc12.arm.loteks.de/glibc-2.11-2.fa3.armv5tel.rpm
wget http://fc12.arm.loteks.de/libgcc-4.4.2-5.fc12.fa4.armv5tel.rpm
wget http://fc12.arm.loteks.de/nss-softokn-freebl-3.12.4-10.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/ncurses-libs-5.7-3.20090207.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/ncurses-base-5.7-3.20090207.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/tzdata-2009o-2.fc12.noarch.rpm
rpm --root=/mnt/chroot -i bash-4.0.33-1.fc12.armv5tel.rpm glibc-common-2.11-2.fa3.armv5tel.rpm glibc-2.11-2.fa3.armv5tel.rpm libgcc-4.4.2-5.fc12.fa4.armv5tel.rpm nss-softokn-freebl-3.12.4-10.fc12.armv5tel.rpm ncurses-libs-5.7-3.20090207.fc12.armv5tel.rpm ncurses-base-5.7-3.20090207.fc12.armv5tel.rpm tzdata-2009o-2.fc12.noarch.rpm

Da es noch keine lokale gibt erscheint jetzt die Fehlermeldung:

/usr/sbin/build-locale-archive: cannot map archive header: Invalid argument
warning: %post(glibc-common-2.11-2.fa3.armv5tel) scriptlet failed, exit status 1

3.) Coreutils

wget http://fc12.arm.loteks.de/coreutils-7.6-5.fc12.fa1.armv5tel.rpm
wget http://fc12.arm.loteks.de/coreutils-libs-7.6-5.fc12.fa1.armv5tel.rpm
wget http://fc12.arm.loteks.de/info-4.13a-7.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/grep-2.5.3-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libacl-2.2.47-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libattr-2.4.43-4.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libcap-2.16-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/pam-1.1.0-7.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libselinux-2.0.87-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/ncurses-5.7-3.20090207.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/ncurses-base-5.7-3.20090207.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/util-linux-ng-2.16-10.2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/zlib-1.2.3-23.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/audit-libs-2.0.1-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libsepol-2.0.38-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/cracklib-2.8.13-6.armv5tel.rpm
wget http://fc12.arm.loteks.de/cracklib-dicts-2.8.13-6.armv5tel.rpm
wget http://fc12.arm.loteks.de/gzip-1.3.12-11.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/pcre-7.8-3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/less-436-2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/db4-4.7.25-13.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/db4-utils-4.7.25-13.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libblkid-2.16-10.2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/popt-1.13-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libuuid-2.16-10.2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libstdc++-4.4.2-5.fc12.fa4.armv5tel.rpm

rpm --root=/mnt/chroot -i coreutils-7.6-5.fc12.fa1.armv5tel.rpm coreutils-libs-7.6-5.fc12.fa1.armv5tel.rpm info-4.13a-7.fc12.armv5tel.rpm grep-2.5.3-6.fc12.armv5tel.rpm libacl-2.2.47-5.fc12.armv5tel.rpm libattr-2.4.43-4.fc12.armv5tel.rpm libcap-2.16-5.fc12.armv5tel.rpm pam-1.1.0-7.fc12.armv5tel.rpm libselinux-2.0.87-1.fc12.armv5tel.rpm ncurses-5.7-3.20090207.fc12.armv5tel.rpm util-linux-ng-2.16-10.2.fc12.armv5tel.rpm zlib-1.2.3-23.fc12.armv5tel.rpm audit-libs-2.0.1-1.fc12.armv5tel.rpm libsepol-2.0.38-1.fc12.armv5tel.rpm cracklib-2.8.13-6.armv5tel.rpm cracklib-dicts-2.8.13-6.armv5tel.rpm gzip-1.3.12-11.fc12.armv5tel.rpm pcre-7.8-3.fc12.armv5tel.rpm less-436-2.fc12.armv5tel.rpm db4-4.7.25-13.fc12.armv5tel.rpm db4-utils-4.7.25-13.fc12.armv5tel.rpm libblkid-2.16-10.2.fc12.armv5tel.rpm popt-1.13-6.fc12.armv5tel.rpm libuuid-2.16-10.2.fc12.armv5tel.rpm libstdc++-4.4.2-5.fc12.fa4.armv5tel.rpm

4.) Findutils, flex, e2fsprogs, diffutils

wget http://fc12.arm.loteks.de/findutils-4.4.2-4.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i findutils-4.4.2-4.fc12.armv5tel.rpm

wget http://fc12.arm.loteks.de/flex-2.5.35-7.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/m4-1.4.13-4.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i flex-2.5.35-7.fc12.armv5tel.rpm m4-1.4.13-4.fc12.armv5tel.rpm

wget http://fc12.arm.loteks.de/e2fsprogs-1.41.9-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/e2fsprogs-libs-1.41.9-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/e2tools-0.0.16-14.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libcom_err-1.41.9-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libss-1.41.9-5.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i e2tools-0.0.16-14.fc12.armv5tel.rpm e2fsprogs-libs-1.41.9-5.fc12.armv5tel.rpm e2fsprogs-1.41.9-5.fc12.armv5tel.rpm libcom_err-1.41.9-5.fc12.armv5tel.rpm libss-1.41.9-5.fc12.armv5tel.rpm

wget http://fc12.arm.loteks.de/diffutils-2.8.1-25.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i diffutils-2.8.1-25.fc12.armv5tel.rpm

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

wget http://fc12.arm.loteks.de/libtool-2.2.6-15.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/autoconf-2.63-3.fc12.noarch.rpm
wget http://fc12.arm.loteks.de/automake-1.11-3.fc12.noarch.rpm
wget http://fc12.arm.loteks.de/gcc-4.4.2-5.fc12.fa4.armv5tel.rpm
wget http://fc12.arm.loteks.de/sed-4.2.1-4.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/cpp-4.4.2-5.fc12.fa4.armv5tel.rpm
wget http://fc12.arm.loteks.de/binutils-2.19.51.0.14-34.fc12.fa1.armv5tel.rpm
wget http://fc12.arm.loteks.de/glibc-devel-2.11-2.fa3.armv5tel.rpm
wget http://fc12.arm.loteks.de/glibc-headers-2.11-2.fa3.armv5tel.rpm
wget http://fc12.arm.loteks.de/libgomp-4.4.2-5.fc12.fa4.armv5tel.rpm
wget http://fc12.arm.loteks.de/gmp-4.3.1-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/mpfr-2.4.1-3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/perl-Module-Pluggable-3.90-82.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/perl-Pod-Simple-3.07-82.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/perl-Pod-Escapes-1.04-82.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/perl-5.10.0-82.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/perl-libs-5.10.0-82.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/perl-version-0.74-82.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/gdbm-1.8.0-33.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/kernel-headers-2.6.31.5-122.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i kernel-headers-2.6.31.5-122.fc12.armv5tel.rpm perl-5.10.0-82.fc12.armv5tel.rpm perl-libs-5.10.0-82.fc12.armv5tel.rpm perl-version-0.74-82.fc12.armv5tel.rpm gdbm-1.8.0-33.fc12.armv5tel.rpm libtool-2.2.6-15.fc12.armv5tel.rpm autoconf-2.63-3.fc12.noarch.rpm automake-1.11-3.fc12.noarch.rpm gcc-4.4.2-5.fc12.fa4.armv5tel.rpm sed-4.2.1-4.fc12.armv5tel.rpm cpp-4.4.2-5.fc12.fa4.armv5tel.rpm binutils-2.19.51.0.14-34.fc12.fa1.armv5tel.rpm glibc-devel-2.11-2.fa3.armv5tel.rpm glibc-headers-2.11-2.fa3.armv5tel.rpm libgomp-4.4.2-5.fc12.fa4.armv5tel.rpm gmp-4.3.1-5.fc12.armv5tel.rpm mpfr-2.4.1-3.fc12.armv5tel.rpm perl-5.10.0-82.fc12.armv5tel.rpm perl-libs-5.10.0-82.fc12.armv5tel.rpm perl-version-0.74-82.fc12.armv5tel.rpm kernel-headers-2.6.31.5-122.fc12.armv5tel.rpm gdbm-1.8.0-33.fc12.armv5tel.rpm perl-Module-Pluggable-3.90-82.fc12.armv5tel.rpm perl-Pod-Simple-3.07-82.fc12.armv5tel.rpm perl-Pod-Escapes-1.04-82.fc12.armv5tel.rpm

6.) rpm, bzip2, curl, elfutils

wget http://fc12.arm.loteks.de/rpm-4.7.1-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/rpm-libs-4.7.1-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/curl-7.19.6-10.fc12.fa1.armv5tel.rpm
wget http://fc12.arm.loteks.de/libacl-2.2.47-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/bzip2-libs-1.0.5-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/bzip2-devel-1.0.5-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libcap-2.16-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libtdb-1.1.5-2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/elfutils-0.143-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/elfutils-libelf-0.143-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/lua-5.1.4-4.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/file-libs-5.03-9.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/nss-3.12.4-14.fc12.fa1.armv5tel.rpm
wget http://fc12.arm.loteks.de/lzma-libs-4.32.7-3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libselinux-2.0.87-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/lzma-4.32.7-3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/lzma-libs-4.32.7-3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libcurl-7.19.6-10.fc12.fa1.armv5tel.rpm
wget http://fc12.arm.loteks.de/nspr-4.8.2-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/nss-softokn-3.12.4-10.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/nss-util-3.12.4-8.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/elfutils-libs-0.143-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libsqlite3x-20071018-8.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/xz-libs-4.999.9-0.1.beta.20091007git.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/krb5-libs-1.7-8.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libidn-1.9-5.armv5tel.rpm
wget http://fc12.arm.loteks.de/openldap-2.4.18-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libssh2-1.2-2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/readline-6.0-3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/sqlite-3.6.17-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/keyutils-libs-1.2-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/openssl-1.0.0-0.10.beta3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/cyrus-sasl-lib-2.1.23-2.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/ca-certificates-2009-2.fc12.noarch.rpm
rpm --root=/mnt/chroot -i rpm-4.7.1-6.fc12.armv5tel.rpm rpm-libs-4.7.1-6.fc12.armv5tel.rpm curl-7.19.6-10.fc12.fa1.armv5tel.rpm bzip2-libs-1.0.5-6.fc12.armv5tel.rpm bzip2-devel-1.0.5-6.fc12.armv5tel.rpm libtdb-1.1.5-2.fc12.armv5tel.rpm elfutils-0.143-1.fc12.armv5tel.rpm elfutils-libelf-0.143-1.fc12.armv5tel.rpm lua-5.1.4-4.fc12.armv5tel.rpm file-libs-5.03-9.fc12.armv5tel.rpm nss-3.12.4-14.fc12.fa1.armv5tel.rpm lzma-libs-4.32.7-3.fc12.armv5tel.rpm lzma-libs-4.32.7-3.fc12.armv5tel.rpm lzma-4.32.7-3.fc12.armv5tel.rpm libcurl-7.19.6-10.fc12.fa1.armv5tel.rpm nspr-4.8.2-1.fc12.armv5tel.rpm nss-3.12.4-14.fc12.fa1.armv5tel.rpm nss-softokn-3.12.4-10.fc12.armv5tel.rpm nss-util-3.12.4-8.fc12.armv5tel.rpm elfutils-libs-0.143-1.fc12.armv5tel.rpm libsqlite3x-20071018-8.fc12.armv5tel.rpm xz-libs-4.999.9-0.1.beta.20091007git.fc12.armv5tel.rpm krb5-libs-1.7-8.fc12.armv5tel.rpm libidn-1.9-5.armv5tel.rpm openldap-2.4.18-5.fc12.armv5tel.rpm libssh2-1.2-2.fc12.armv5tel.rpm readline-6.0-3.fc12.armv5tel.rpm sqlite-3.6.17-1.fc12.armv5tel.rpm keyutils-libs-1.2-6.fc12.armv5tel.rpm openssl-1.0.0-0.10.beta3.fc12.armv5tel.rpm cyrus-sasl-lib-2.1.23-2.fc12.armv5tel.rpm ca-certificates-2009-2.fc12.noarch.rpm

7.) Development Pakete & awk

wget http://fc12.arm.loteks.de/gawk-3.1.7-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/keyutils-libs-devel-1.2-6.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/krb5-devel-1.7-8.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libcom_err-devel-1.41.9-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libselinux-devel-2.0.87-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/libsepol-devel-2.0.38-1.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/openssl-devel-1.0.0-0.10.beta3.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/pkgconfig-0.23-9.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/zlib-devel-1.2.3-23.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/wget-1.11.4-5.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/make-3.81-18.fc12.armv5tel.rpm
wget http://fc12.arm.loteks.de/pam-devel-1.1.0-7.fc12.armv5tel.rpm
rpm --root=/mnt/chroot -i wget-1.11.4-5.fc12.armv5tel.rpm make-3.81-18.fc12.armv5tel.rpm pam-devel-1.1.0-7.fc12.armv5tel.rpm gawk-3.1.7-1.fc12.armv5tel.rpm keyutils-libs-devel-1.2-6.fc12.armv5tel.rpm krb5-devel-1.7-8.fc12.armv5tel.rpm libcom_err-devel-1.41.9-5.fc12.armv5tel.rpm libselinux-devel-2.0.87-1.fc12.armv5tel.rpm libsepol-devel-2.0.38-1.fc12.armv5tel.rpm openssl-devel-1.0.0-0.10.beta3.fc12.armv5tel.rpm pkgconfig-0.23-9.fc12.armv5tel.rpm zlib-devel-1.2.3-23.fc12.armv5tel.rpm

Installierte RPM Pakete anzeigen Lassen:

rpm -qa

Zu welchem RPM Paket gehört die Datei?

rpm -qf /lib/libm.so.6

Dual NAND für die NAS, eine Überlegung…

Die NAND Chips meiner Fantec CL-35B2 sind viel zu klein… aber ersetzten? ich mag eigentlich ein „Rettungs-System“ haben auf das ich zurückschalten kann wenn ich mist gebaut habe. 😉

Hier mein Entwurf zum NAND-Umschalter!

Dual NAND für die Fantec NAS

Details und Fotos werden folgen.

NAND-Flash Schreibschutzschalter

Um für das NAND-Flash meiner CL-35B2 einen Schreibschutz zu realisieren recht es WP nach „Low“ (Vss) zu ziehen. (Pin 19 nach 13 schließen!)
Dies ist ein Hardware-Schreibschutzschalter wie er bei älteren USB Sticks manchmal umgesetzt wurde.
Es können bei geschlossener Verbindung zwischen WP (Pin 19) und Vss (Pin 13) keine Schreibvorgänge auf dem NAND-Flash ausgelöst werden, der Inhalt des Speichers ist nicht mehr veränderbar.

In der Standartkonfiguration stürzt die fantec CL-25B2 einfach ab, da der Logfiles geschrieben werden sollen. Diesem Absturz kann vorgebeugt werden, indem das Log Verzeichnis als tmpfs in der /etc/fstab konfiguriert wird.
WPschematic

IO0-7 Data Input / Output
CLE Command latch enable 16
ALE Address latch enable 17
CE Chip Enable 9
RE Read Enable 8
WE Write Enable 18
WP Write Protect 19
R/B Ready / Busy 7
Vcc Power Supply 12
Vss Ground 13
NC No Connection

Eine Weitere Anleitung, für einen NAND-Flash Umschalter habe ich hier hinterlegt.

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:

/etc/init.d/ntpd stop

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

cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Zeit mit dem Server der Physikalisch-Technische Bundesanstalt abgleichen.

ntpdate ptbtime1.ptb.de

Zeit in die Hardwareuhr schreiben.

/sbin/hwclock --systohc

Konfiguration für den NTP Dienst schreiben:

echo "server ptbtime1.ptb.de" > /etc/ntp.conf
echo "server ptbtime2.ptb.de" >> /etc/ntp.conf
echo "server ptbtime3.ptb.de" >> /etc/ntp.conf
echo "restrict default ignore" >> /etc/ntp.conf

und den NTP Dienst neu starten:

/etc/init.d/ntpd start

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.:

wget https://loteks.de/wp-content/uploads/2013/06/fantec_CL-35B2_rescue.tar.gz

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

tar xzf fantec_CL-35B2_rescue.tar.gz

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/

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

export disk=/dev/sdc

– Festplatte leeren

dd if=/dev/zero of=$disk bs=512

– Bootcode auf die Platte schreiben (Perl Magic 🙂

perl < print "\x00" x 0x1a4;
print "\x00\x5f\x01\x00";
print "\x00\xdf\x00\x00";
print "\x00\x80\x00\x00";
print "\x00" x (0x1b0 -0x1a4 -12 );
print "\x22\x80\x00\x00";
print "\x22\x00\x00\x00";
print "\x00\x80\x00\x00";
EOF

– Bootblock auf die Platte schreiben

dd if=./resource/stage1.wrapped of="$disk" bs=512 seek=34

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

dd if=./resource/u-boot.wrapped_from-ox820source of="$disk" bs=512 seek=154

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

Netzwerkkonsole für Das UBoot konfigurieren

Um auf einen Das UBoot Bootloader ohne serielles Kabel zugreifen zu können kann Das UBoot als Konsolenserver konfiguriert werden.

Ich gehe hier der Einfachheit halber von meinem eigenen Privaten Netzwerk aus. Mein Router ist unter der Adresse 192.168.1.1 zu erreichen, die „Server“ 192.168.1.2-192.168.1.10 und die bekannten Computer sind zwischen 192.168.1.100-192.168.1.150. Mein Linux Computer, von dem aus meine NAS ansprechen soll ist 192.168.1.111, die NAS ist 192.168.1.7

Im Auf der Shell lässt sich „Das UBoot“ mit fw_setenv, innerhalb von „Das UBoot“ mit setenv konfigurieren. Auf der Shell lautet für die „Das UBoot“ Konfiguration:

setenv serverip 192.168.1.111
setenv ipaddr 192.168.1.7
setenv if_netconsole 'ping $serverip'
setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
setenv preboot 'run if_netconsole start_netconsole'
saveenv

Der Befehl saveenv in der Letzten Zeile sichert die zuvor getätigten Einstellungen, so das bei jedem erneuten Restart der NAS 10 Sekunden lang gewartet wird ob eine Eingabe von 192.168.1.111 erfolgt um den Bootvorgang zu unterbrechen. Auf der Shell lautet der Befehl, wenig überraschend fw_saveenv.

Auf dem Computer brauche ich vor dem Booten nur im Hintergrund via nc auf port 6666 zu lauschen und eine Weitere nc Instanz für die Eingaben zu starten.

nc -l -u -p 6666 &
nc -u 192.168.1.100 6666

Zum beenden der „Chat-Session“ mit der NAS muss, nach [Strg]+c noch über killall nc die lauschende NC Session beendet werden.