Skip to content

Himbeertörtchen

Ich weiß ja nicht, ob überhaupt jemand den Raspberry Pi für das einsetzt, wofür er eigentlich mal gedacht war, nämlich als Lehr- und Lernwerkzeug zu dienen. ;-)

Ich habe ja schon lange mit dem Gedanken gespielt, mit einen zu holen, und seit es die Revision B mit dem doppelten Speicher für den gleichen Preis gibt, wurde der Drang immer stärker. Schließlich hat es mich nur noch angenervt, dass alle unserer "Server"-Funktionen, die wir im Haus so brauchen - DNS, DHCP, SSH, HTTP, SVN, GIT, ddclient... - von dem niemals dafür gedachten NAS erledigt werden. Das NAS ist vom Prozessor her zwar recht flott, aber hat viel zu wenig RAM. Also musste mal was Neues her.

Meine Gründe für den Pi waren folgende:
  • Klein und trotzdem alles, was ich an Schnittstellen benötige.
  • Überschaubarer Stromverbrauch bei brauchbarer Leistung - ich kann es einfach an den USB-Port des Routers stecken und brauche nicht mal ein eigenes Netzteil dafür. (Jaja, soll man nicht machen, da es im Zweifelsfall auch mal mehr als 500mA ziehen kann, aber ich habe ja jetzt nicht vor, das Ding unter Volllast bei maximaler Übertaktung laufen zu lassen. Außerdem werde ich nichts an die USB-Ports des Pi anschließen, sodass dort auch kein zusätzlicher Stromverbrauch dazu kommt.)
  • Das Vierfache an RAM im Vergleich zum NAS (512M vs 128M).
  • Ich kann mein gewohntes Gentoo drauf laufen lassen.
  • Falls das ganze Projekt aus irgendwelchen Gründen in die Hose gehen sollte, kann man das schnuckelige Teil einfach auch für irgendwas anderes verwenden, und wenn es nur zum Basteln und damit Spielen ist. ;-)
  • ...und nicht zuletzt der Preis von gerade mal 35 Euro inklusive Versand.
Außerdem ist es irgendwie "in", einen Pi im Haus zu haben. ;-)
Bestellt habe ich das gute Stück über den Marktplatz des großen bösen Versenders mit dem A im Namen. Das ging recht schnell und problemlos, nach zwei Tagen hielt ich ihn in den Händen. Gleichzeitig mitbestellt habe ich für 2,90€ ein passendes Micro-USB-Kabel, aber - wie gesagt - kein eigenes Netzteil. (Falls das geplante Setup Fritz -> USB-Kabel -> Pi nicht funktionieren würde, hätte ich von meinem alten Handy für die Übergangszeit auch noch ein 1000mA Netzteil übrig.)

In froher Erwartung der Lieferung hatte ich bereits gestern meine - ebenfalls aus meinem alten Handy stammende - 8GB Micro-SD-Karte in den passende Adapter geschoben und entsprechend partitioniert:

~ # fdisk -l /dev/mmcblk0

Disk /dev/mmcblk0: 8166 MB, 8166309888 bytes, 15949824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0001f275

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 2048 526335 262144 e W95 FAT16 (LBA)
/dev/mmcblk0p2 526336 2623487 1048576 82 Linux swap / Solaris
/dev/mmcblk0p3 2623488 15949823 6663168 83 Linux

Die 1GB-Swap-Partition habe ich bisher praktisch nicht gebraucht, selbst beim Kompilieren größerer Pakete. Ist also wahrscheinlich etwas überdimensioniert. Aber egal, besser zu viel als zu wenig.

Auf die mit ext4 formatierte Linux-Partition habe ich dann ein Gentoo Stage 3 Paket (stage3-armv6j_hardfp-[DATUM].tar.bz2) entpackt und den aktuellen Portage-Tree eingespielt - habe ja noch mehr Rechner mit Gentoo laufen, also kein Problem. Außerdem habe ich mir den Eintrag für root aus meiner Notebook-Version der /etc/shadow geklaut, damit ich mich auch direkt mit dem gewohnten Passwort anmelden kann.

Firmware und aktuellen Kernel nehme ich nicht aus den Gentoo-Sources, sondern vorkomiliert vom Raspberry Pi Projekt: git clone --depth 1 git://github.com/raspberrypi/firmware/. Alles unter firmware/boot kommt dann auf die FAT16-Partition, die Kernel-Module an die richtige Stelle in /mnt/gentoo/lib/modules/[KERNEL-VERSON]/. (Nach dem ersten Booten sollte man nicht vergessen, ein depmod auszuführen, damit die Module auch anständig gefunden werden können.)

Entsprechend der Partitionierung sieht auch die /etc/fstab aus:

~ # cat /etc/fstab
/dev/mmcblk0p3 / ext4 noatime 0 1
/dev/mmcblk0p1 /boot auto noatime 0 2
/dev/mmcblk0p2 none swap sw 0 0

Ein paar Boot-Optionen müssen auch noch gesetzt werden. Damit es während des Kompilierens etwas schneller geht, habe ich mich für ein leichtes Overclocking entschieden und - da das Teil später eh "headless" laufen wird - den Speicher für die GPU auf das Minimum von 16M gestellt:

~ # cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p3 rootfstype=ext4 elevator=deadline gpu_mem=16 rootwait

~ # cat /boot/config.txt
arm_freq=800
core_freq=300
sdram_freq=400
over_voltage=0
gpu_mem=16

Damit das Portage weiß, was es tun soll, habe ich die /etc/profile/make.conf nach /etc/make.conf gelinkt und folgendermaßen angepasst:

~ # cat /etc/make.conf

CFLAGS="-O2 -pipe -march=armv6j -mfpu=vfp -mfloat-abi=hard"
CXXFLAGS="${CFLAGS}"
CHOST="armv6j-hardfloat-linux-gnueabi"

FEATURES="ccache"
CCACHE_SIZE="1G"
USE="bindist"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"

(Achtung, wer ein anderes Profil benutzten möchte, sollte diesen Schritt nach dem ersten Booten machen. In meinem Stage3 war bereits default/linux/arm/13.0/armv6j eingestellt, das reicht mir völlig aus, deswegen benutzte ich dieses weiter.)

Ein wenig Lokalisierung muss auch noch sein:

~ # l /etc/localtime
lrwxrwxrwx 1 root root 35 Feb 1 13:18 /etc/localtime -> ../usr/share/zoneinfo/Europe/Berlin

~ # cat /etc/timezone
Europe/Berlin


(Außerdem sollte man nach dem ersten Booten nicht vergessen, eine lokale zu setzen:

~ # cat /etc/locale.gen
en_US.UTF-8 UTF-8

...und diese mit locale-gen und eselect locale set en_US.utf8 auch zu aktivieren. (Normalerweise würde ich das ja jetzt sofort in einem chroot machen, aber da wir hier ja mit für ARM kompilierten Programmen arbeiten, würden meine Intel/AMD-Systeme ziemlich blöde gucken... ;-))

So weit, so gut. An dieser Stelle müssen wir uns erst mal gedulden, denn der Postbote kommt Samstags offenbar besonders spät, wenn er Pakete dabei hat. Das macht der sicher nicht aus Boshaftigkeit, aber blöd ist es trotzdem. ;-)

Das erste Auspacken ist ja schon fast etwas enttäuschend: Der ganze Pi hat ja gerade mal so die Grundfläche einer Kreditkarte, nur die Aufbauten (LAN, USB HDMI) ragen entsprechend über die sehr übersichtliche Platine heraus. Von der CPU/GPU ist nichts zu sehen, da klebt der RAM-Chip oben drauf. Der einzige andere Chip ist der für's Netzwerk, ansonsten sieht man ein paar LED, einige wenige Widerstände und etwas, was vom Aufbau wie ein Spannungswandler aussieht - wahrscheinlich auch zur Stabilisierung gedacht, denn viele billige Handy-Netzteile glätten die Spannung ja nicht.

Aber nur zum Angucken habe ich das Ding ja nicht gekauft. Also, Karte aus dem Notebook raus und in den Pi eingelegt. Den Monitor angeschlossen, das Netzwerk angeschlossen, das USB-Kabel angeschlossen und in das alte Handy-Netzteil eingestöpselt. Schon begrüßt mich der bunte Test-Bildschirm, gefolgt von den Linux-Boot-Meldungen. (Süß ist übrigens die Himbeere im Kernel statt des üblichen Pinguins.)

Habe ich was vergessen? Ja: Die Tastatur! Gewühlt, gesucht, geflucht... habe ich keine USB-Tastatur im Haus? Schließlich die alte Cherry-Wireless-Tastatur mit Akkus gefüttert. Die benutzte ich eigentlich nicht, weil der Empfänger einen Wackler hat und immer nur die Hälfte der Zeit erkannt wird. Nach zwei, drei Mal einstecken ging auch der und ich konnte mich anmelden.

Als erstes machen wir mal die zwei bis drei Dinge, die ich oben schon erwähnt habe: Module richtig einbinden und Locale setzten.

Dann schalten wir das Netz ein:

~ # cp /etc/init.d/net.lo /etc/init.d/net.eth0
~ # rc-config start net.eth0
~ # rc-update add net.eth0 boot

Ein paar Kleinigkeiten muss man noch einstellen: In der /etc/rc.conf habe ich rc_sys="" gesetzt und in der /etc/inittab habe ich die beiden seriellen Konsolen s0 und s1 auskommentiert. Da der Pi außerdem keine Hardware-Uhr hat, sollte man den hwclock-Dienst gegen swclock austauschen und sobald wie möglich den ntp-client hinzufügen.

Von jetzt an bleibt es eigentlich jedem selber überlassen, was er/sie als nächstes in Angriff nimmt. Ich würde erst mal ssh installieren, damit man von einem anderen Rechner aus Zugang hat. Es ist auch nicht falsch, vorher den Portage Tree zu syncen.

Dann folgt der ganze andere Quatsch, den ich oben schon ganz am Anfang erwähnt hatte. Ich habe eine ganze Menge installiert und erstaunlicher Weise hat sich die Wartezeit einigermaßen in Grenzen gehalten: Etwa einen Tag habe ich gebraucht, bis alles drauf war:

~ # cat /var/lib/portage/world
app-admin/logrotate
app-admin/syslog-ng
app-editors/joe
app-editors/nano
app-misc/screen
app-portage/gentoolkit
dev-util/ccache
dev-vcs/git
dev-vcs/subversion
mail-mta/postfix
media-libs/raspberrypi-userland
net-dns/bind
net-dns/bind-tools
net-dns/ddclient
net-fs/nfs-utils
net-mail/dovecot
net-misc/dhcp
net-misc/ntp
net-misc/telnet-bsd
sys-fs/ddrescue
sys-power/cpufrequtils
sys-process/htop
sys-process/vixie-cron
www-servers/lighttpd

~ # cat /etc/portage/package.use
net-dns/bind dlz -ssl
www-servers/lighttpd php
dev-lang/php cgi mysql calendar curl
sys-devel/gcc mudflap

~ # cat /etc/portage/package.keywords
media-libs/raspberrypi-userland ~arm
=sys-fs/ddrescue-1.17-r1 ~arm

(Die Liste ist natürlich nicht ganz vollständig, denn so witzige Sachen wie dev-lang/php oder auch dev-db/mysql, welche alleine schon ein paar Stunden zum kompilieren benötigt, werden direkt durch das php-Use-Flag vom lighttpd rein geholt.)

So, und jetzt habe ich einen Pi als Server. Früher mussten wir dafür einen ganzen Tower im Betrieb halten, der wahrscheinlich das 20-Fache an Strom gefressen hat. Gut, das NAS war wohl auch schon effektiver, aber das kann dafür jetzt wieder länger schlafen, wenn es nicht gebraucht wird. ;-)

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Noch keine Kommentare

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

Formular-Optionen

Kommentare werden erst nach redaktioneller Prüfung freigeschaltet!