posativs Blog

Ameisen

Ich plane ja einen Header in mein Blog einzupflegen; so in etwa wie hier. Allerdings nicht solche alten Bilder, sondern eher etwas ansehnlicheres. Inzwischen bin ich bei bing.com, dem Picture of the Day angelangt.

Lage prüfen

Wir gehen zunächst auf http://bing.de/ und werden auf http://bing.com/?cc=de weitergeleitet, denn wir kommen ja aus Deutschland. Dort sehen wir schon: das ist JavaScript-only. Nicht verzagen, Google fragen: Extract Bing.com Wallpapers. Genau das wollen wir haben. Sieht ziemlich einfach aus:

curl -s 'http://www.bing.com/?cc=de' | grep -oE '\\/fd.+\.jpg'
#  \/fd\/hpk2\/MachuPicchu_DE-DE609064060.jpg

Wenn wir davon die Backslashes entfernen, können wir damit prima auf das aktuelle Tagesbild zugreifen. Spätestens jetzt merkt man aber, dass der Vor und Zurück-Button natürlich auch in JavaScript implementiert ist...

Down Them All

An dieser Stelle war ich dann zunächst etwas ratlos und bin den üblichen Weg über Google gegangen: bing image archive. Gleich der erste Treffer sieht perfekt aus. Auflistung aller Bilder, wahlweise nach Nationen gefiltert, sehr leicht extrahierbar, da die Seitenlogik in PHP realisiert ist, und zwar über einfach zu editierende GET-Befehle.

Via grep lassen sich so einfach die Direktlinks herausfiltern - ausschließlich für DE-Deutschland:

curl -s 'http://www.istartedsomething.com/bingimages/' | grep -oE 'resize\.php\?i=[^.]+_DE[^.]+\.jpg&w=100'
#  resize.php?i=WorldExpo_DE-DE278223030.jpg&w=100
#  resize.php?i=Bratislava_DE-DE736008353.jpg&w=100

Der letzte URL-Parameter gibt an, dass das Bild noch verkleinert werden soll, wird der entfernt, kommen wir an das Originalbild heran. Da sich meine Kentnisse bei den ganzen unix-Tools in Grenzen halten, musste ich zu guter letzt ein kleines Python-Skript zusammenhacken, was alle Bildlinks für August 2009 bis Juli 2010 ausspuckt; natürlich wget-tauglich.

Dann kommt zum Schluss ein nettes wget -i links und schon haben wir über 300 Bilder (ca. 71 MiB) heruntergeladen!

import re
from urllib import urlopen

url = 'http://www.istartedsomething.com/bingimages/?m=%s&y=%s' # month, year

if __name__ == '__main__':

    for t in [(m+1,2010) for m in range(10)] + [(m+1,2009) for m in range(10)]:
        for line in urlopen(url % t):
            m = re.findall("resize\.php\?i=[^.]+_DE[^.]+\.jpg&w=100", line)
            if m:
                print '%s%s' % (url.split('?')[0], m[0].split('&')[0])

Inzwischen wurde mein kleiner vServer freigeschaltet, von dem letztens berichtet habe. Der DNS-Eintrag nach blog.posativ.org löst auch schon zum vServer auf. Darauf läuft jetzt ein Debian Squeeze in der 32-Bit Ausführung.

Server lokal emuliert

Da der Server nun produktiv genutzt wird, brauche ich eine relativ identische Arbeitsumgebung wie auf dem Server und weil dort irgendein „Debian Minimal 6.0“ verwendet wird – ein Eigenbau des Virtualisierers – das ich leider nicht direkt installieren kann, habe ich mich nach der minimalen Installation eines Debian Testing (Netzwerk-Installation) umgeschaut und die auch recht schnell gefunden: Daily build #1 for i386.

Dazu habe ich öfters bei hak5 – nette Serie, gibt's übrigens bei Wuala – gesehen, wie der mit einem Befehl ein OS starten konnte. Da ich bisher immer recht umständlich VirtualBox genutzt habe, habe ich mich mal danach umgesehen. Es handelt sich bei der Virtualisierungssoftware um QEMU: „eine freie virtuelle Maschine, die die komplette Hardware eines Computers emuliert“.

Setup unter Arch Linux

Ich liebe das Arch-Wiki: es gibt natürlich auch einen detaillierten Artikel zu QEMU.

Ein Debian Minimal zu erstellen ist ziemlich simpel. Wir holen uns zuerst qemu, dann das Iso und zu guter letzt erstellen wir ein HDD-Image für Debian und booten:

$ sudo pacman -Sy qemu
$ wget http://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/i386/iso-cd/debian-testing-i386-netinst.iso
$ qemu-img create -f qcow2 debian.qcow 2G #  erstellt das hdd-image mit einer Größe von 2 GB (komprimiert)
$ qemu -cdrom debian-testing-i386-netinst.iso -boot d debian.qcow

Wer eine CPU mit VT/V-Technik hat (alle neueren, meine nicht), der kann über qemu-kvm Befehle nativ laufen lassen und erhält somit eine enorme Geschwindigkeitssteigerung. Meine Debian Minimal Installation dauerte schon über eine Stunde + eine weitere für alle Updates :-(

Das installierte Debian Squeeze habe ich nach Wuala geladen: root mit dem Passwort „qq“.

Ports weiterleiten

QEMU hat diverse Möglichkeiten des Netzwerkaufbaus. Standardmäßig ist slirp aktiv, was unter anderem keinen Ping ermöglicht und auch sonst den Host die virtuelle Maschine nicht direkt ansprechen lässt. Das stört mich allerdings nicht allzu sehr, da der vServer remote ja auch nur ein HTTP-Server ist, kann man mittels

qemu debian.qcow -redir tcp:8080::80

den HTTP-Port in der VM auf 8080 lokal umleiten. Das ist zwar nicht die eleganteste Lösung, aber sie reicht für eine testing-Umgebung allemal.

Eine kleine Hetze über KDE 424.07.2010, 17:11 Uhr

Ja, das muss sein. Teilweise ist KDE sowas von absolut sinnfrei konzipiert, das ist die sanft ausgedrückte Variante. Behindert „hat besondere Bedürfnisse“ trifft es aber besser.

Emailverschlüsselung mit KMail ist grundsätzlich schon einmal möglich (hey!), allerdings sollte man es sofort richtig einrichten. Denn sobald es ans Debuggen geht, darf man wieder von vorne anfangen. Denn KMail ist so freundlich, und ermöglicht einem das Debuggen von gpg, indem es einige Zeilen in die .conf bei gpg und dem gpg-agent schreibt. Natürlich wird dabei nicht nach Versionen unterschieden, wer könnte den auf die Idee kommen, dass Software sich ändert? Das wäre ja ein Unding!!1 Tja, Resultat ist, dass man nach dem Haken für Debugging erstmal die configs wieder reparieren und KDE einmal neustarten darf.

Weiter geht's zum Akregator: Das Teil ist wieder ein Paradebeispiel für: „ich kann so viel zusätzlich, aber ein Feedreader bin ich nicht.“ Ich bin der Ansicht, dass zumindest Feeds, die den Feed Validation Service bestanden haben, angezeigt werden sollten. Aber leider ist mir nicht möglich, ca. 10% meiner Feeds nicht zu abonnieren, weil das Teil einfach mal abstürzt. Aber hey, ich kann viel zusätzlich einstellen!

Akonadi-Selbsttest

Akonadi-Server... schon der Name dieser Software klingt nicht gerade vertrauenswürdig. Problem an diesem Teil ist, dass der Personal Information Manager (PIM), also Kontact, in den nächsten Versionen immer mehr darauf aufsetzen wird um Kontakte und später sogar Emails zu speichern. Leider ist das Teil nicht zu konfigurieren, setzt auf eine MySQL-Datenbank auf, erwartet natürlich, dass die Tables schon existieren. Wenn man ein komplett neues Arch Linux installiert und dann direkt die gesamten KDE-Pakete samt Abhängigkeiten, nein dann funktioniert das natürlich nicht out-of-the-box. Das funktioniert nur in ganz wenigen Distributionen fehlerfrei. Und das soll Standard werden? Dazu gibt es außerdem eine schöne Knowledge-Base, die nicht einmal die zehn Fehler von meiner (vanilla) Installation enthält und trotzdem schon sehr lang ist: Akonadi 4.4: Troubleshooting

Wo könnte man die Ressourcen sinnvoller verschwenden? Zum Beispiel bei Konqueror... weder besteht der den acid3 noch ist der halbwegs schnell (selbst Firefox ist 100 Mal schneller, und das will was heißen). Aber viele unwichtige Features stehen bereit... das ist so eines der größten Probleme bei KDE:

Unzählige Zusatzfeatures, aber die Kernfunktion ist fehlerhaft.

Warum ich trotzdem weiterhin KDE nutze? Es gibt a) keine Alternative und b) einige Programme, die den ganzen Mist wieder gut machen: Kate, Dolphin, Kwin, und und und...

Da ich in den letzten Tagen sehr viele neue externe Module für meine Blogsoftware implementiert habe, bin ich immer häufiger auf das Problem gestoßen, dass Bibliotheken, wenn sie lokal installiert sind, nicht unbedingt fehlerfrei implementiert sind und deshalb die Pfad-Variable weitergesucht wird, bis der Interpreter bei meiner globalen Installation unter /usr angelangt ist und dann dieses Paket nimmt.

Da auf dem FTP-Server aber nicht jene Module global installiert sind, gibt es häufiger Überraschungen, dass mal wieder ein Modul nicht funktioniert. Das ganze zu Debuggen wird immer zeitaufwendiger...

pkgsrc

Meine Idee ist, dass man ja Software an ein bestimmten Pfad gebunden kompilieren kann (per --prefix=/usr) und es vielleicht ganz nützlich ist, sich nochmal innerhalb des eigenen Nutzerverzeichnisses ein root aka / zu bauen, auf dem ich als normaler Nutzer auch "root"-Rechte habe. pkgsrc ist solch ein nützliches Tool.

pkgsrc eine Paketverwaltung, ursprünglich von NetBSD, inzwischen aber für zahlreiche andere Plattformen portiert, die sowohl als grundständige Paketverwaltung z.B. in Verbindung mit apt-get oder eben als lokale Paketverwaltung mit normalen Rechten arbeitet. Dabei werden Abhängigkeiten automatisch gelöst und Software fast so komfortabel wie bei apt-get oder pacman heruntergeladen und installiert.

Derzeit umfasst das Repository 9154 Pakete, die hier gelistet sind. Pakete können dabei vorkompiliert (Binärpakete) oder von Source installiert werden.
Die Pakete werden dabei ähnlich wie in einem Rolling-Release-System ständig aktualisiert, allerdings gibt es die Möglichkeit, einen Software-Freeze zu installieren, ähnlich wie bei Debian oder Ubuntu, wo nur noch Sicherheitsaktualisierungen nachgefliefert werden.

Alternativen

Auf meiner Recherche bin ich erstmal am englischen Wikipedia-Eintrag zur Paketverwaltung hängen geblieben, und habe das als Ausgangspunkt für meine Recherche genommen.

Viele weitere Alternativen zu pkgsrc habe ich aber nicht gefunden:

Beispiel: Installation von Python im Home-Verzeichnis

Bei der Installation habe ich mich für die Pfade ~/pkgsrc als Wurzelverzeichnis und ~/net als Installationsverzeichnis für die pkgsrc-Komponenten (Repository usw.) entschieden.

Installation von pkgsrc

pkgsrc kann über einen Tar-Ball oder über CVS bezogen werden. Ich habe mich für CVS mit den aktuellsten Software-Releases entschieden:

$ cd ~
$ env CVS_RSH=ssh cvs -d anoncvs@anoncvs.NetBSD.org:/cvsroot checkout net

#resultiert in ca. 650 MiB Daten

$ ls net/
archivers/   comms/       doc/          geography/    Makefile     net/        README      textproc/
audio/       converters/  editors/      graphics/     math/        news/       regress/    time/
benchmarks/  cross/       emulators/    ham/          mbone/       packages/   security/   wm/
biology/     CVS/         filesystems/  inputmethod/  meta-pkgs/   parallel/   share/      www/
bootstrap/   databases/   finance/      lang/         misc/        pkglocate*  shells/     x11/
cad/         devel/       fonts/        licenses/     mk/          pkgtools/   sysutils/
chat/        distfiles/   games/        mail/         multimedia/  print/      templates/

Als nächstes muss nun unser lokales root eingerichtet werden:

$ ./bootstrap --workdir ~/pkgsrc --prefix ~/pkgsrc/usr --pkgdbdir ~/pkgsrc/var/db \
  --sysconfdir ~/pkgsrc/etc --varbase ~/pkgsrc/var --unprivileged

Das dauert eine Weile und richtet unter ~/pkgsrc etwas ähnliches wie unter / ein. Mit dazu wird eine Abwandlung von make installiert: bmake. Das liegt in ~/pkgsrc/bin/ und dient zum Bauen und Installation der Software.

Da sich unser lokales root noch nicht in unseren Pfad-Variablen befindet, es aber auch nicht von Vorteil ist, gleich alles unter ~/pkgsrc/bin hinzuzufügen, habe ich mir einen Alias geschaffen: alias bmake=~/pkgsrc/bin/bmake

Das war's soweit. Wir haben nun ein lokales root aka / und einen lauffähigen Paketmanager.

Installation von python

Wenn man sich das Verzeichnis-Listing von ~/net oben anschaut, so kann man gut erkennen, dass es eine ähnliche Struktur wie bsw. das Software-Repository von portage hat. Über find . | grep keyword kann relativ komfortabel nach Software gesucht werden.

Python befindet sich in z.B. lang/python26/. Die Installationsroutine ist sehr simpel:

$ cd ~/net/lang/python26
$ bmake
#Abhängigkeiten werden aufgelöst, Pakete lokal kompiliert
$ bmake install

#Cleanup der Sources
$ bmake clean
$ bmake clean-depends

Schon ist python installiert und kann über ~/pkgsrc/usr/bin/python2.6 aufgerufen werden und hat keine externen Module oder Bibliotheken installiert - absolut keine!

Ubuntu auf's SheevaPlug08.01.2010, 20:07 Uhr

Hä, aber da ist doch schon ein Ubuntu drauf, oder?

Ja, das stimmt so.

Allerdings ist das vorinstallierte Ubuntu der schlechteste Ausgangspunkt, den man sich wohl denken könnte:

  • alter, unvollständiger U-Boot Loader
  • alter, langsamer Kernel
  • misskonfiguriertes Ubuntu
  • sehr langsames Filesystem JFFS2

Das Gute ist: Es gibt ein Tool, da macht man quasi zwei Klicks, und schon sind alle genannten Punkte in einem Rutsch erledigt.

Im Schnelldurchlauf

  • SheevaPlug Installer
  • Entpacken und Terminal und ./README.txt öffnen, kurz lesen.
  • "openocd" benötigt (in Ubuntu Quellen). Arch Linux hat es im AUR (openocd-git-libftdi)
  • USB Stick (/mnt/disk) fat32 formatieren (mkfs.msdos) und die Dateien unterhalb von "Installer" nach /mnt/disk/ kopieren
  • sudo php ./runme.php nand und warten (php | php5-cli package wird gefordert)
  • Warten und nach ~5-10 Minuten via "ssh root@192.168.0.123" - pass: nosoup4u

HowTo

Vorbereitungen

Benötigt wird:

  • SheevaPlug Installer (extern)
  • Ubuntu/Debian Linux oder was vergleichbares
    • nativ / virtuell via VirtualBox : Ubuntu 9.10 VDI (user: ubuntu pass: reverse)
      Wichtig: VirtualBox mit USB Unterstützung (also nicht OSE)
  • USB Stick > 200 MB
    Achtung: Muss formatiert werden!
  • SheevaPlug (jetzt wirklich) und das Kabel für die serielle Schnittstelle

Durchführung

Der Einfachheit halber beschreibe ich ausschließlich den Weg für Ubuntu (9.*) in VirtualBox, sodass auch Mac- und Windows-User diese Anleitung verfolgen können.

Ich selber habe es mit Arch Linux ebenfalls hinbekommen; mit Debian sollte die Installation auch funktionieren. Man müsste das halt nur adaptieren und für seine Distribution leicht anpassen.

  1. startet Linux und stöpselt das SheevaPlug schon mal auf 'ne Steckdose und verbindet es mit dem seriellem Kabel.

  2. sudo apt-get install minicom libftdi libftdi-dev openocd php5-cli

  3. USB-Stick anstöpseln und via Geräte -> USB-Geräte -> $Modell zum Gast durchleiten.
    Formatieren des Sticks mit fat32:

    $ sudo umount /media/usbstick # falls gemountet
    $ sudo mkfs.msdos /dev/sdb1 # je nach eigenen Geräten
    $ sudo mount /dev/sdb1 /mnt
    
  4. Entpackt sheevaplug-installer-v1.0.tar.gz und geht in das Verzeichnis sheevaplug-installer-v1.0.

  5. $ ubuntu@ubuntu-desktop:~/Downloads$ cd sheevaplug-installer-v1.0/
    $ sudo cp ./installer/* /mnt/
    $ umount /mnt/
    
  6. Nehmt den USB-Stick und steckt ihn ans SheevaPlug.

  7. Nun geht's ans Flashen via JTAG. Es unnötig zu sagen, dass alle Daten auf dem Sheeva werden gelöscht...

    $ sudo ./runme.php nand
    

    [bei wem die runme.php streikt, der kann eine syntaktisch Korrekte hier beziehen]

    Dauert etwas und resultiert in:

    ****   exec(modprobe ftdi_sio vendor=0x9e88 product=0x9e8f)
    ****   Preparing environment variables file ...
    reading uboot/uboot-env/uboot-dflt.txt
    uboot/uboot-env/fw_setenv baudrate 115200
    CRC read error on uboot-env.bin: Success
    [...]
    ****   Burning uboot and environment variables ... This will take few minutes ...
    Open On-Chip Debugger 0.2.0 (2009-07-26-14:56) Release
    $URL: http://svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.2.0/src/openocd.c $
    For bug reports, read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS
    2000 kHz
    jtag_nsrst_delay: 200
    jtag_ntrst_delay: 200
    dcc downloads are enabled
    [...]
    ****        U-boot should be up and running now. Open your console ...
    
  8. Der Prozess dauert einige Minuten, nach Erhalt der letzten Zeile kann dann via minicom der Bootprozess und das Einrichten von Ubuntu verfolgt werden.
    (wenn minicom den Bootprozess unterbricht, einfach in u-boot reset eintippen, dann geht es nochmal los.)

Zugriff via SSH

Nachdem man fertig ist, kann man ein frisches Ubuntu 9.04 auf einem UBIFS mit neuem Kernel und U-Boot betrachten.
Ein LAN-Kabel eingesteckt, einem DHCP Router und man kann sich via ssh in das System einloggen:

$ ssh root@192.168.0.123 # passwort: nosoup4u

SheevaPlug Installer

Der SheevaPlug Installer ist ein sehr nettes Tool. Damit lässt sich zum Beispiel ein tot geflashtes SheevaPlug wiederbeleben.
Totflashen geht, indem man den Bootloader falsch flasht, sodass das Plug nicht einmal mehr die Hardware initialisieren kann. (Erkennbar an der nicht leuchtetenden blauen Lampe)

Dieser Schritt sollte der allererste sein, den man nach Erhalt eines neuen Sheevas tut.

Hinterher haben wir:

  • Das U-Boot 3.4.19 (kann von SD booten)
  • Linux ubuntu 2.6.30.2 #11 PREEMPT Wed Jul 22 19:53:31 MDT 2009 armv5tel GNU/Linux
  • verdammt schnelles Dateisystem UBIFS mit lzo on-the-fly Komprimierung
  • Ubuntu mit korrekt konfigurierter DNS-Auflösung und apt-get

Weiterhin ist es mit diesem Werkzeug möglich, eigene Distributionen einzubinden. Im installer/-Verzeichnis kann der rootfs.tar.gz Tarball mit einem eigenen Distro-Baum ausgetauscht werden.

Auf diesem Weg habe ich selber ein Debian zum Laufen bekommen. Wer das allerdings selber probieren möchte, sollte den vorgefertigten Tarball nutzen. Die aktuelle Build (Anfang Januar) via bootstrap funktionierte bei mir nämlich nicht.

Der Installer bietet auch die Möglichkeit, das Betriebssystem auch auf die SD Flashkarte zu spielen. Denn diese wird mit dem Kernel Update wieder richtig schnell:

Benchmark SDHC Karte Class 4 mit Kernel 2.6.30.2

100 bis 1 GB MB:

== Schreiben via dd bs=1024 count=[100K, 200K, 1M] if=/dev/zero of=/mnt/test.img ==
104857600 bytes (105 MB) copied, 6.31505 s, 16.6 MB/s
209715200 bytes (210 MB) copied, 30.8354 s, 6.8 MB/s
1073741824 bytes (1.1 GB) copied, 221.97 s, 4.8 MB/s

== Lesen via dd if=/mnt/test.img of=/dev/null  ==
104857600 bytes (105 MB) copied, 5.46798 s, 19.2 MB/s
209715200 bytes (210 MB) copied, 10.8675 s, 19.3 MB/s
1073741824 bytes (1.1 GB) copied, 64.4165 s, 16.7 MB/s

/tmp und /var und swap

Da das NAND Flashspeicher ist und dieser bekanntlich eine begrenzte Schreibvorgangsanzahl haben, ist es ratsam, swap, /tmp und /var (sehr häufige Schreib/Lesezyklen) auf eine USB-Festplatte oder auf eine externe (billige) SD Karte umzubiegen oder in den RAM zu speichern.

Das NAND selber kann nämlich nur zwischen 1.000 und 10.000 Schreibzyklen bestehen. Dazu editiert man sich einfach seine /etc/fstab zurecht. Meine sieht z.B. so aus:

USB Festplatte

mone                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0
ubi0:rootfs            /             ubifs     defaults,noatime    0      0
/dev/sda1               /var            jfs       defaults,mode=0755 0 0
/dev/sda6               /home           jfs       defaults,noatime
/dev/sda5               swap    swap    defaults 0 0
/tmp                   /var/tmp      bind      defaults,bind       0      0

RAM (ohne SD/HDD)

nach Arch Mobile Wiki

none                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0
ubi0:rootfs            /             ubifs     defaults,noatime    0      0
tmpfs                  /var/lock     tmpfs     defaults,size=50m,mode=0755 0 0
tmpfs                  /var/log      tmpfs     defaults,size=50m,mode=0755 0 0
tmpfs                  /var/run      tmpfs     defaults,size=50m,mode=0755 0 0
tmpfs                  /tmp          tmpfs     defaults,size=100m,mode=1777 0 0
/tmp                   /var/tmp      bind      defaults,bind       0      0


Viel Spaß mit eurem neuen System!

Gestern habe ich ja schon den ersten Einblick geschildert.

Heute hab ich noch kurz weitergemacht, teils mit erfreuten Ergebnissen, teilweise etwas schlechten.

Ubuntus ARM Repository: ports.ubuntu.com

Nirgends habe ich eine vollständige Liste der möglichen Pakete gefunden. Nirgends.

Daher habe ich einmal apt-get update samt apt-cache pkgnames gemacht und nun eine vollständige Liste aller Pakete, die am 25.12.2009 bereits im Repository waren:

10:32:56::# apt-cache pkgnames
--> http://posativ.org/blog/files/linux/sheevaplug/all-packages.txt

10:35:03::# apt-cache stats
Total package names: 32956 (1318k)
    Normal packages: 25053
    Pure virtual packages: 250
    Single virtual packages: 2200
    Mixed virtual packages: 240
    Missing: 5213

10:35:25::# cat /etc/apt/sources.list
deb http://ports.ubuntu.com jaunty main restricted universe multiverse

Erste Benchmarks vom NAND und einer SDHC Karte

512 MB NAND

  • default Filesystem: JFFS2
  • zlib Kompression
  • 100 MB Testdatei
10:50:40::# dd if=/dev/zero of=/root/test.img bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 9.37936 s, 11.2 MB/s

10:50:59::# dd if=/root/test.img of=/dev/null
204800+0 records in
204800+0 records out
104857600 bytes (105 MB) copied, 0.826774 s, 127 MB/s

Dabei findet eine on-the-fly Kompression und Dekompression statt, die sogar recht effektiv ist: 151 MB physikalisch belegt (Ubuntu), mittels du -sh komme ich allerdings auf 427MB.

Auf 500 MB NAND bei zlib Kompression kann also ca. 1400 MB theoretisch gespeichert werden.

Neben JFFS2 gibt es allerdings noch ein etwas schnelleres Dateisystem: UBIFS. Das hat neben zlib die deutlich performantere Kompression lzo, die dafür allerdings etwas mehr Platz benötigt.

4 Gb SDHC

  • default Filesystem: VFAT
  • 1 GB Testdatei
21:09:23::# dd bs=1024 count=1M if=/dev/zero of=/mnt/file
1073741824 bytes (1.1 GB) copied, 1455.34 s, 738 kB/s

22:05:19::# dd if=/mnt/file of=/dev/null
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 158.693 s, 6.8 MB/s

Also ich habe ja mit ein paar Einbußen gerechnet, aber nicht mit 700 kB/s. Gekauft hab ich eine Class 4 SDHC von Panasonic, mit 20 MB/s Lesen und 9 MB/s Schreiben.

Weil ich kein SD-Kartenlesegerät für USB habe, konnte ich maximal noch vom Sony PRS-505 die Schreib- und Lesegeschwindigkeit testen. Da kam ich beim Schreiben immerhin auf gut 6 MB/s, beim Lesen allerdings auf utopische 200 MB/s.

Dennoch gibt es wohl sehr heftige Probleme beim mitgeliefertem Kernel und SD Karten (anderer Vergleich).

Welches OS denn nun für das SheevaPlug?

Es gibt mehrere Linuxdistributionen, die entweder einen Port für ARM oder generell für Embedded Systems konzipiert sind:

Um nur die aufzuzählen, die mir bisher begegnet sind. Es gibt sicherlich noch mehr.

Da allein schon der Linux Kernel knapp 50 Minuten zum Kompilieren auf dem Plug braucht, fällt Gentoo für mich schon einmal weg. Fedora und Ubuntu sind beides Ports von so schon sehr schwergewichtigen Distributionen. Daher will ich die auch nicht wirklich haben.

Da ich Arch Linux auf dem Desktop verwende und es recht klein ist, liegt es für mich nahe, dieses zu verwenden. Allerdings schaut das Repository noch etwas klein aus und das archmobile.org Projekt ist mehr auf Mobiles fokussiert. Ich werde allerdings Arch Linux on NAND testen!

Alle anderen bis auf Debian sind mir unbekannt. Debian ist sehr populär, daher stelle ich mir auch das Repository recht umfrangreich vor. Aber auch da gibt es natürlich keine Liste mit allen verfügbaren Paketen...

Wie geht's weiter?

U-Boot muss aktualisiert werden für SDHC Boot, dazu der aktuelle Kernel kompiliert werden. UBIFS statt JFFS2 nutzen und dann kommt Arch Linux aufs NAND und Debian auf die SDHC Karte

Wenn das dann geschafft ist, sehe ich weiter.

ältere Beiträge

written by posativ

by-nc-sa