Skip to content

Was macht eigentlich: Nibbler?

22. September 2009

Der, Anfang des Jahres aufgebaute, Homeserver Nibbler hat sich gut in die Gruppe integriert und ist stets hilfsbereit.

NibblerDas, oder so ähnlich, hätte auf seinem Zeugnis gestanden. Anfang des Jahres habe ich den Homeserver „nibbler“ aufgebaut (siehe hier, hier, hier, hier auch und hier) über den ich hier kurz ein Fazit abgeben möchte. In den letzten Monaten habe ich mal mehr und mal weniger an der Kiste herumgebastelt. FreeBSD als Betriebssystem fühlt sich sehr angenehm an und ich werde in nächster Zeit wohl auf kein anderes OS setzen. Es ist klar strukturiert, einfach zu administrieren und macht mir irgendwie mehr Spaß als der Ubuntu Server und der SuSE Enterprise Server.

Neben seinem eigentlichen Zweck, als redundantes Behältnis für meine Daten zu dienen, erfüllt Nibbler jetzt noch weitere nützliche Zwecke. Er dient als Datenzuspieler für die Plex Installation im Wohnzimmer. Plex läuft meinem MacBookPro, welches am TV via HDMI angeschlossen ist und greift über einen AFP Share auf den Server zu. Full-HD Inhalte jeglicher Art werden ohne Probleme abgespielt, die sich Plex über eine 1Gbit Leitung vom Server holt. Ich kann Plex an dieser Stelle uneingeschränkt empfehlen. In einem späteren Post über mein Heimkino werde ich noch einige Worte darüber verlieren.

Weiterhin dient der Server noch als OpenVPN Server mit dem ich von überall aus in mein heimisches Netzwerk komme und in unsicheren WLANs auch ungestört surfen kann. Praktisch ist der auch somit einfache Zugriff auf meine TimeCapsule. Einziger Wermutstropfen ist die langsame Internetverbindung zu Hause, was das Kopieren von größeren Dateien über das VPN eigentlich unmöglich macht. Zum Surfen reicht es aber noch aus.

Der Stromverbrauch liegt im Schnitt bei ca. 60W. Unter Volllast zeigt mir das Messgerät meist 80W – 100W an. Damit ich immer auf dem Laufenden bin, was auf dem Server passiert setze ich Munin ein. Ein nettes Tool was mir die verschiedensten Parameter als Graphen darstellt. Weiterhin berichtet mir Nibbler über Twitter, ob bei den regelmäßigen Portaudit Checks Probleme aufgetreten sind. Alles in allem bin ich sehr zufrieden.

Habt ihr einen Homeserver? Wofür setzt ihr ihn ein?

GWT 1.7, Hosted Mode und Snow Leopard

3. September 2009
tags: , ,

Ich hatte bereits Anfang des Jahres versucht mit Google’s GWT 1.5 und unter Mac OS X Leopard den Hosted Mode zum Laufen zu bringen, jedoch ohne Erfolg. Es scheiterte immer daran, dass der Hosted Mode von GWT Java 1.5 voraussetzt. Jedoch ist Java 1.5 für ein Java 1.6 Projekt keine Option. Mit GWT 1.7 hoffte ich auf Besserung, doch was sprang mir heute ins Gesicht?

„You must use a Java 1.5 runtime to use GWT Hosted Mode on Mac OS X.“

Nun ja, mit Snow Leopard wird Java 1.6 ausgeliefert. Auch wenn in Eclipse zusätzlich Java Version 1.5 angezeigt wird, sollte man sich davon nicht täuschen lassen. Das sind Symlinks auf Java 1.6. Im Issue Tracker von GWT wird dieses Problem beschrieben und auch Quick Hacks zum Besten gegeben. Zusammenfassend gebe ich hier mal eine kleine Anleitung die auf einem Blogeintrag im Lombardi Development Blog basiert. Das Schöne ist, dass kein Nachinstallieren von Java 5 nötig ist.

Die Validierung, ob Java 1.5 vorhanden ist, geschieht in der BootStrapPlatform.class, speziell in der Methode isJava5(). Diese wird nun überschrieben, sodass sie immer „true“ zurückgibt. Dafür wird im GWT Projekt ebenfalls die Klasse BootStrapPlatform angelegt. Dabei ist zu beachten, auch das Paket beizubehalten (com.google.gwt.dev). Nun wird der Quellcode der Klasse aus der gwt-dev-mac.jar kopiert und ändert die Methode isJava5() so, dass sie immer „true“ zurückgibt. Anschließend wird in der Run Configuration des Projektes der VM das Argument „-d32“ mitgegeben. Nun sollte der Hosted Mode unter Mac OS X Snow Leopard mit Java 1.6 laufen.

Ubuntu Netbook Remix unter VirtualBox

27. August 2009

Ubuntu Netbook Remix Bootscreen

Ich hatte vor dem Kauf meines Netbooks mal ein Auge auf verfügbare Distributionen die auf Netbooks ausgelegt sind angeschaut. Als erstes kam da Ubuntu Netbook Remix (UNR) auf den Plan. Also VirtualBox angeworfen, UNR runtergeladen und erstmal festgestellt, dass UNR als *.img Datei daherkommt um von Flash geladen zu werden, und in VirtualBox nicht eingebunden werden kann. Naja, eine kurze Suche brachte die Lösung.

Erstmal aus dem IMG ein VDI von dem gebootet werden kann erstellen:
VBoxManage convertfromraw ubuntu-9.04-netbook-remix-i386.img ubuntu-netbook-live.vdi

Dann eine Festplatte erstellen auf der genügend Platz ist:
VBoxManage createhd -filename ubuntu-netbook-hd.vdi -size 8000 -register

Als nächstes in VirtualBox eine VM erstellen, die als Primary Master die Live VDI hat (ubuntu-netbook-live.vdi) und als Primary Slave die ’normale‘ HD (ubuntu-netbook-hd.vdi). Beim booten der VM wird dann auf den Slave installiert. Ich habe dazu eine Partition auf dem Slave mit ext4, und eine swap erstellt.

Das war es auch schon.

Den Server zwitschern lassen

21. April 2009

Für ein Uni Projekt muss ich einen rechenintensiven Prozess laufen lassen. Und damit der nicht stundenlang mein MacBook mit 100% CPU blockiert hab ich den auf meinem allseits bekannten Homeserver angeschmissen. Der Prozess läuft jetzt schon seit gut 50 Stunden und noch kein Ende in Sicht. Damit ich nun nicht alle paar Stunden auf den Server gucken muss um zu sehen ob die Berechnungen fertig sind, hab ich mir ein kleines Shell Skript geschrieben, dass mir einen Tweet schickt, sobald alles fertig ist.

#!/usr/local/bin/bash
process="foo"
user="you"
password="your_password"
message="@$user $process is done!"
twitter_url="http://twitter.com/statuses/update.xml"

num_procs=`ps ax | grep $process | grep -v grep | wc -l`
if [ $num_procs -eq 0 ]; then
  curl --basic --user "$user:$password" \\
       --data status="$message" $twitter_url -o /dev/null
fi

Kurz zur Erklärung: num_procs enthält die Anzahl der Prozesse in denen im Aufrufbefehl der Inhalt von process vorkommt. Ist die Anzahl 0 wird curl benutzt um mit der Twitter API einen Tweet über basic authentication (--basic) und im Klartext (--data) abzuschicken. Die Logindaten sind dabei in user und password einzutragen.

Das Skript dann noch in die cron eintragen und fertig.

Geocaching und seine Folgen

24. März 2009

Es musste ja so kommen. Kaum entdecke ich etwas neues für mich werde ich euphorisch. Ich hatte schon früher vom Geocaching gehört. Letzte Woche erzählte mir ein Kollege von seinen Abenteuern und dann war es um mich geschehen. Ich meldete mich umgehend bei geocaching.com an um zu erfahren wo in meiner Nähe Schätze versteckt sind. Und das sind erstaunlich viele. Also zog ich am Wochenende mit Freunden und dem iPhone als GPS Empfänger los um ein paar Schätze zu bergen und mich in die Liste der Finder einzutragen.

In Gebieten mit vielen Bäumen, wo das iPhone keine „direkte Sichtverbindung“ zum Firmament hatte war der Empfang eher spärlich und der blaue Punkte wanderte im Umkreis von 50 Metern auf der Karte herum. Suboptimal. Zurück zu Hause war dann eigentlich schon klar was passieren würde. Ich schaute mir etliche GPS Empfänger an. Ich landete relativ schnell bei Garmin und mir entging natürlich auch nicht der Wink mit dem Marketing-Zaunpfahl „Geocaching-ready“ bei fast allen Geräten. So weit so gut.

Was den Entscheidungsfindungsprozess beschleunigte war die Tatsache, dass man anstatt der kommerziellen kostenpflichtigen Karten von Garmin auch freies Kartenmaterial vom OpenStreetMap Projekt benutzen kann. Also hab ich ein GPS Empfänger noch schnell auf die „Things-a-geek-should-have“-Liste geschrieben und mir ein Garmin eTrex Vista HCx schon mal vorab zum Geburtstag geschenkt. Und mit ein bisschen Shoprecherche hab sogar noch 40% Prozent vom Herstellerpreis gespart. Jetzt gilt es abzuwarten bis der Postbote ein Paket vorbeibringt.

Ich kann jedem nur empfehlen Geocaching mal auszuprobieren. Ihr seht nicht nur eure Umgebung aus einem ganz anderen Blickwinkel, es wird euch garantiert der Ehrgeiz packen von einem Ort an dem ein Schatz liegen soll abzuziehen ohne ihn gefunden zu haben. Ich spreche aus Erfahrung.

Home Server Teil 5: Netatalk

17. Februar 2009

Um Dateien bequem und vor allem relativ schnell auf den ZFS pool kopieren zu können habe ich netatalk installiert, was den AFP Dienst für FreeBSD bereitstellt. Dafür installiert man einfach netatalk aus den Ports:

# cd /usr/ports/net/netatalk && make install clean

Dann den AFP Dienst für den Start beim Boot anschalten, in der /etc/rc.conf:

slpd_enable="YES"
netatalk_enable="YES"
atalkd_enable="YES"
papd_enable="NO"
cnid_metad_enable="YES"
afpd_enable="YES"
timelord_enable="NO"

Nach einem Neustart wurde ich dann mit der Fehlermeldung „main: atp_open: Protocol not supported“ konfrontiert. Damit netatalk funktionert muss der FreeBSD Kernel mit einer zusätzlichen Option neu kompiliert werden.

Kernel rekompilieren

Um den Kernel zu kompilieren werden die Sources benötigt: Am schnellsten geht das über sysinstall -> Distribution -> src -> All. Für den Kernel gibt es für jede Architektur eine Konfigurationsdatei. In meinem Fall auf einem 64 Bit System befindet sich die Konfiguration des Standardkernels unter /usr/src/sys/amd64/conf. Um nun den Kernel zu kompilieren wird die Standardkonfiguration GENERIC kopiert und angepasst.

# mkdir /root/kernels
# cd /usr/src/sys/amd64/conf
# cp GENERIC /root/kernels/GENERICMOD
# ln -s /root/kernels/GENERICMOD

Der Konfiguration GENERICMOD wird nun folgender options Eintrag hinzugefügt:

options   NETATALK   # AppleTalk

Bevor ich den Kernel neu kompiliere und installiere, habe ich noch eine Sicherung des aktuellen Kernels angelegt. Für alle Fälle.

# cp -r /boot/kernel /boot/kernel.working

Und nun noch den Kernel kompilieren und installieren:

# cd /usr/src
# make buildkernel KERNCONF=GENERICMOD
# make installkernel KERNCONF=GENERICMOD
# reboot

Der neue Kernel sollte nun beim Booten verwendet worden sein und netatalk dürfte nun auch laufen.

Share für Netatalk konfigurieren

Zu diesem Zeitpunkt sollte der AFP Dienst laufen.

# slptool findsrvs afp
afp://192.168.0.30/?NAME=nibbler&ZONE=,65535

Ja macht er.

Unter /usr/local/etc/AppleVolumes.default werden die Freigabe definiert, die über AFP zugreifbar sein sollen.

/tank tank options:usedot,noadouble,nohex cnidscheme:cdb

Da ich auch ein SVN betreiben werde, ist die option „usedot“ hilfreich, da somit auch .files möglich sind. Der cnidscheme ist zwar der Standardname, verhindert aber unnötige Fehlermeldungen.

Nun lässt sich der ZFS pool schonmal über den Finder mounten (CMD+K): afp://nibbler/tank

Share über Bonjour

Da ich nicht jeden Tag Lust habe über den Finder den pool zu mounten, wäre es ja schön wenn der Home Server direkt im Finder unter Freigaben auftauchen würde. So wie die TimeCapsule auch.

Für FreeBSD habe ich da in den Ports „howl“ und „avahi“ als Bonjour Implementationen gefunden. Ich habe jetzt erstmal zu avahi gegriffen:

cd /usr/ports/avahi && make install clean

Nach der Installation noch in der /etc/rc.conf einschalten:

dbus_enable="YES"
avahi_enable="YES"

Im Ordner /usr/local/etc/avahi/services befinden sich, im XML Format, Definitionen für Dienste die über Bonjour veröffentlich werden sollen. Für AFP (afpd) einfach eine weitere Definition hinzufügen (afpd.service):

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_afpovertcp._tcp</type>
    <port>548</port>
  </service>
  <service>
    <type>_device-info._tcp</type>
    <port>0</port>
    <txt-record>model=Xserve</txt-record>
  </service>
</service-group>

Mit _device-info kann man angeben als was sich der Dienst ausgeben soll. Da macht sich das Icon des Xserve im Finder natürlich recht schick. Interessant wäre irgendwie ein eigenes Icon an diese Stelle zu zaubern. (Das Icon des Xserver austauschen zählt nicht.)

Home Server als Bonjour ShareDas ist eine sehr komfortable Lösung bis jetzt. Die Schreibgeschwindigkeiten bewegen sich mit netatalk im Rahmen von 30-50MB/sec. Das ist zwar nicht Weltklasse, aber wenn man bedenkt, dass ZFS gleichzeitig noch die Paritätsdaten schreibt, bin ich für mehr Sicherheit bereit ein wenig Geschwindigkeit einzubüßen.


Home Server Teil 4: Storage Pool

17. Februar 2009
tags: ,

Da nun alles wie gewünscht läuft, habe ich nach dem ZFSQuickStartGuide und ZFSTuningGuide für FreeBSD ZFS startklar gemacht.

Dann den raidz Pool aus den drei 1TB Platten gemacht:

# zpool create tank raidz ad6 ad8 ad12

Jetzt werden die Daten auf zwei von den drei Platten abgelegt, und die Paritätsdaten für das RAID auf der dritten Platte. Somit bleiben von den insgesamt 2,72TB effektiv 1,8TB übrig.

Die Filesystems:

# zfs create tank/backup
# zfs create tank/backup/timecapsule
# zfs set reservation=500GB tank/backup/timecapsule
# zfs set atime=off tank

Durch die Reservierung von 500GB auf dem Dateisystem „timecapsule“ bleiben dem Elterndateisystem „tank“ noch 1,3TB zugesicherter Speicherplatz übrig. Dies bedeutet, dass im „df -h“ „tank“ mit 1,3TB verfügbarem Platz angezeigt wird, als auch für dessen Kinder, und für „timecapsule“ 1,8TB. Das Property „atime“ habe ich erstmal für den gesamten pool abgeschaltet, da es nach ZFS Admin Guide unnötige Schreibzyklen verhindert und somit zu, wenn auch minimalen, Performanceverbessungen kommen kann.

Ja wie man an der Länge dieses Beitrags sieht, ist der Administrationsaufwand für einen ZFS pool nicht sonderlich hoch.

Bei einem ersten schnellem Test, habe ich per scp Dateien auf den pool kopiert. Bei einem 1GBit Netzwerk hatte ich mit ca. 60MB/sec gerechnet. Raus kam aber 10-20 MB/sec. Die erste Ernüchterung. Über NFS ging es auch nicht sonderlich schneller (zwischen 10 und 30 MB/sec). Im Netzwerkbenchmark mit iperf kam ich auf 740Mbit/1000Mbit und einer theoretischen Übertragungsrate von 89MB/sec. Da ich hier im Netzwerk eigentlich nur Macs habe habe ich mich entschieden es dann noch mit AFP zu versuchen. Doch dazu mehr im nächsten Beitrag.

Den aktuellen Netzwerktraffic kann man sich unter FreeBSD übrigens mit

# systat -ifstat 1

anzeigen lassen.

Links: