Google Nexus One Review

Nexus One mit Fingerabdrücken und Neoprenhülle

Nexus One mit Fingerabdrücken und NeoprenhülleWie versprochen versuche ich mal meine Eindrücke vom Nexus One in Worte zu fassen. Es geht weniger um harte technische Fakten als um die Frage, was mir im täglichen Betrieb aufgefallen ist.

Wie man sieht, ist das Display in kürzester Zeit voller Fingerabdrücke und Spuren, die aber einfach wieder weggewischt werden können. Man sieht sie auch nur bei ausgeschaltetem Display und für das Foto habe ich noch ein wenig mit dem Blitz nachgeholfen 😉

Display und Touchscreen

Fangen wir mal mit dem Display an. Es ist hell, hochauflösend und gut lesbar. Die Fonts sind so klein noch lesbar, dass man aus schlechten Gewissen seinen Augen gegenüber lieber etwas heranzoomt.

Auf dem Foto rechts bekommt man eine Ahnung von der Auflösung des Bildschirms. Bei dieser Schriftgröße kann man den Text wirklich noch lesen, auch wenn die Augen bluten.

Normalereweise belasse ich die Helligkeit auf der kleinsten Stufe, das genügt für normale Umgebungen (In Büro, Wohnung oder ÖPNV) vollkommen. Draußen ist das Display gut lesbar, wenn man es auf 50 oder 100% Helligkeit regelt. Das praktische Energiesteuerungswidget erlaubt das mit einem Fingertipp.

Im Freien kann man die Spiegelung des Displays höherer Helligkeit ausgleichen – auf Kosten der Akkulaufzeit. Die automatische Helligkeitsregelung war mir unter Android 2.1 zu träge, aber mit Android 2.2 ist sie akzeptabel und ich verwende sie lieber als eine der festen Helligkeitsstufen.

Ok, das Display sieht gut aus, aber wie fässt es sich an? Nunja, der Touchscreen macht mich etwas fertig. Das größte Manko ist, dass genau der Mittelpunkt der berührten Fläche als Berührungspunkt an die Software weiter gegeben wird. Das ist zwar technisch korrekt, aber von der Usability quatsch. Aus der Perspektive des Benutzers sieht es so aus, als ob man einen Punkt weiter oben „berührt“, die Wölbung der Fingerkuppe führt aber dazu, dass man den Screen an einer anderen Stelle berührt als man denkt.

Ich habe das mal auf folgendem Foto illustriert. Die grüne Linie zeigt, wo man als Benutzer den Berührungspunkt erwartet. Die rote Linie zeigt, wo Android den Berührungspunkt registriert.

In der Praxis fühlt es sich so an, als ob man ständig ein Stück zu tief den Bildschirm berührt hat. An diese Unzulänglichkeit kann man sich zwar gewöhnen, aber ich denke die „Tippfehlerrate“ liesse sich senken, wenn Android den physikalischen Berührungspunkt umgerechnet an die Software weitergeben würde. iPhone/iPad-Benutzer wissen, wie sich die korrekte Implementierung des Touchscreen-offsets anfühlt 😉

Weiterhin habe ich den Eindruck dass der Touchscreen manchmal „prellt“ – also eine Berührung als mehrfache Berührungen interpretiert. Das führt speziell in Multitouch-Anwendungen wie google maps zu extremen Sprüngen beim Zoomen oder zu Doppeltipp-Aktionen, die gar nicht gewollt sind. Einen ähnlichen unschönen Effekt konnte ich mit meinem Daumen erzielen, der dank eines Unfalls in der Küche zeitweilig eine Delle an der Kuppe hatte, was zu zwei Berührungspunkten führte. Das ist natürlich wieder so ein Softwareding, Prellen kann man mit Totzeiten unterbinden (z.B. 0.1 Sekunde lang in 0.6cm Umkreis alle Berührungen ignorieren), warum Android das nicht macht, verstehe ich nicht.

Hardwaretasten, Trackball und Usability

Die vier „Hardwaretasten“ an der Unterseite des Displays sind eine Usability-Katastrophe. Tim hat in einer Folge von Mobile Macs gesagt, das wäre ein Medienbruch und dieser Begriff trifft den Nagel auf den Kopf. Man hat es mit einem Touchscreen-Telefon zu tun. Als Anwender erwarte ich, das Gerät vollständig über den Touchscreen bedienen zu können. Es gibt leider ein paar Aktionen, die ausschliesslich über das Kontextmenü erreichbar sind. Beispiel: ich kann in K9Mail die Mail nicht mit einem Button auf dem Screen absenden, sondern muss den Menüknopf drücken und dort „Send Mail“ auswählen.

Als Anwender erwarte ich natürlich, dass es immer mehrere Wege gibt, eine Aktion auszulösen und ich den Weg gehen kann, den ich in einer bestimmten Situation am ehesten erwarte. Daran ist google erstmal nur indirekt schuld. In erster Linie liegt es am Programmierer der jeweiligen Anwendung. Da jedes Android-Gerät über diese Tasten verfügt, denken die Softwareentwickler gar nicht darüber nach und setzen voraus, dass jeder Benutzer selbstverständlich die Hardwaretasten benutzt. Aktionen, die jedoch ausschliesslich auf den Hardwaretasten liegen, bleiben dem Benutzer verborgen.

Die Tasten sind beim Nexus One nicht als physikalische Knöpfe sondern als berührungsempfindliche Felder ausgeführt. Durch das bereits erwähnte Berührungsoffset-Problem des Touchscreens kommt es gelegentlich dazu, dass Tastendrücke nicht ausgewertet werden, weil die Fingerkuppe die Tastfläche zu weit unten berührt. Da man kein mechanisches Feedback hat, ist es unklar, ob die Taste gedrück wurde oder nicht.

Ohne Strengen Usability-Regeln, wie sie z.B. bei Apple herrschen, sehen natürlich alle Anwendungen anders aus und verhalten sich auch anders. Nur ein paar Beispiele: ein Doppeltipp auf den Text führt manchmal zum Vollbildmodus (NewsRob), Textumbruch (Android-Browser) oder zum rein/rauszoomen (Dolphin Browser HD).

Mitunter werden die Hardwaretasten auch unterschiedlich verwendet. So belegt NewsRob die Lauter/Leiser-Tasten per Default so, dass man damit durch die RSS-Artikel skippen kann. Die Zurücktaste führt meist dazu, dass man einen Bildschirm zurück kommt. Manchmal, z.B. bei Spielen kann sie aber auch das Spiel beenden (Jewels, Dolphin Browser bei langem Tastendruck).

Ein besonderer Patzer in sachen Usability ist das Thema Text markieren. Zunächst muss man den Cursor an Anfang oder Ende des zu markierenden Textes bewegen. Mit dem Finger klappt das kaum. Man muss … Trommelwirbel … den Trackball dafür benutzen. Total naheliegend, oder? Dann muss man lange aufs Textfeld drücken, im Kontextmenü „Text auswählen“ antippen und dann das andere Ende des zu markierenden Textes ansteuern. Entweder mit dem Finger, meist jedoch mit dem Trackball. Dann nochmal lange aufs Textfeld drücken und „kopieren“ oder „ausschneiden“ auswählen. Man denke mal an das Gespött, als Apple copy & paste auf dem iPhone eingeführt hat. Immerhin haben die es so hinbekommen, dass man es benutzen kann.

Das Headset ist eigentlich recht gut, man hat Tasten für die Annahme von Gesprächen (play/pause) sowie Next und Previous. Blöderweise wird Lauter / Leiser am Gerät eingestellt und das Telefon ist in dem Fall meist in der Hosentasche oder im Rucksack.

Bildschirmtastatur

Die normale Android-Tastatur ist gerade noch akzeptabel. Man kann mit ihr tippen, aber nicht besonders schnell oder fehlerarm. Ich weiss, dass es Better Keyboard gibt, aber eigentlich will ich eine swype-Tastatur. Leider gibt’s swype noch nicht mit deutschem Wörterbuch, sonst würde ich ohne Bedenken meine Kreditkarte zücken und swype kaufen.

Also muss ich mit der normalen Tastatur leben. Im Querformat kann man damit ganz passabel Texte tippen, im Hochformat lange ich zu oft daneben. Das Wörterbuch ist erstaunlich gut ausgebaut, allerdings gibt es ein nerviges Feature: Die Spacetaste führt dazu, dass das gerade vorgeschlagene Wort angenommen wird. Wenn man ein Wort eintippt, das es nicht im Wörterbuch gibt und dann Space drückt, fügt Android das Wort ein, das es als Alternative vorgeschlagen hat. Plötzlich hat man also völlig sinnfreie Wörter in seinem Text stehen und merkt das im schlimmsten Fall nicht gleich.

Positiv muss man anmerken, dass die Vorschläge recht intelligent sind und man meist schon nach drei eingetippten Buchstaben das entsprechende Wort aus den Vorschlägen auswählen kann. Das beschleunigt das Tippen von Texten ungemein.

Umlaute können nur mit langem Druck auf a, u und o eingegeben werden. Ein Wisch nach oben, wie beim iOS 4 wäre schön. Gibt es Android Keyboards, die das können? Obwohl, ich warte ja auf swype …

Manchmal gibt es Situationen, in denen man Elemtente auf der Seite nicht mehr erreicht, weil die Tastatur darüber liegt – man muss sie erstmal über die „Zurück“-Taste einfahren. Normalerweise kann man einfach die Seite „anfassen“ und nach oben schieben. Das klappt aber mitunter nicht. Ich habe schon sehr oft deswegen geflucht, bis ich bemerkt habe, dass in dieser Situation – Trommelwirbel – der Trackball es ermöglicht, die Seite hochzuscrollen. Schön, warum klappt das nicht mit dem Finger?

Performance

Die Performance des Systems ist gut, meist lässt es sich flüssig bedienen und die Anwendungen starten sehr flott. Nur selten – meist mit vielen Anwendungen im Hintergrund – ruckeln Displayanimationen. Anwendungen selbst sind sehr schnell, der Bildaufbau im Browser hat fast Desktop-Niveau. Mit Android 2.2 ist das ganze noch ein bisschen flotter geworden. Das gelegentliche Ruckeln der Displayanimationen ist aber nicht ganz verschwunden.

Gelegentlich legt das Telefon bei vielen offenen Anwendungen auch eine Gedenksekunde ein. Das ist besonders verwirrend, wenn man gerade den Touchscreen berührt oder eine Hardwaretaste gedrückt hat und nicht weiss, ob der Tastendruck empfangen wurde oder ob das Telefon nur gerade angestrengt loopt. Die kurzen Aussetzer führen dazu, dass man zur Sicherheit nochmal den gleichen Knopf drückt und beide Tastendrücke vom System verarbeitet werden, was oft vom Benutzer nicht gewünscht ist.

Market

Tja, es gibt angeblich über 100.000 Anwendungen im Market, allerdings ist es trotzdem schwer dort etwas vernünftiges zu finden. Das Preisniveau bei bezahlten Anwendungen scheint höher als im Apple AppStore zu sein, allerdings gibt es auch sehr viele „kostenlose“, meist jedoch werbefinanzierte Anwendungen. Oft stößt man dabei auf das in Verruf geratene Admob.

Die Liste der bei mir installierten Anwendungen ist ein extra Artikel wert. Soviel jedoch: ich habe noch keine Anwendung gekauft. Meist aus Geiz, es ist aber auch schwer im Market gute Anwendungen zu finden, weil die Suche nicht nach Userbewertung sortieren kann. Da muss man auf externe Seiten wie AndroidPit zurückgreifen.

Macken

Absolut subjektiv und ohne es näher untersucht zu haben: der 3g Empfang ist gefühlt schlechter als bei meinem Nokia Knochen. Es kann aber auch am schrottigen E+ Netz liegen, aber ich habe öfters EDGE Empfang, wo ich 3G erwarten würde.

Die Verbindungsfreudigkeit zu WLANs ist begrenzt, meist hat mein Notebook noch guten WLAN-Empfang, wo das Nexus One schon auf 3G umschaltet.

Manchmal kann man auf die SD-Karte nicht zugreifen. Das ist sehr nervig. Die Karte ist dann nicht verfügbar und alle Anwendungen, die darauf zugreifen, versagen mehr oder minder elegant. Beispiel Kamera: man kann aus heiterem Himmel keine Fotos / Filme mehr machen. Es gibt aber keine Fehlermeldung, sondern der Druck auf den Aufnahmeknopf wird ignoriert. Erst hinterher merkt man, dass kein Foto / Film gemacht wurde 🙁
Schlimmer ist dieser Fehler jedoch im Zusammenhang mit dem (exzellenten!) RSS-Reader NewsRob: der Speichert Feedinhalte auf der SD-Karte. Wenn die Karte mitten im Feed-Updateprozess versagt, hängt sich das ganze System auf. Man kommt nicht mal mehr an den Lockscreen. Das ist kein Fehler von NewsRob aber extrem nervig.
Die einzige Abhilfe: Telefon ausschalten, Akku raus, Akku rein, einschalten. Nicht gerade eine Aktion, die man öfters durchführen will. Das hatte ich heute vormittag 10 Mal und war entsprechend gut gelaunt. Ich habe dann den Cache von NewsRob auf den internen Speicher des Telefons gelegt und seit dem scheint das Problem nicht mehr aufzutreten.

Multitasking und Akku

Wo beim iPhone das Problem besteht, mehrere Anwendungen parallel laufen zu lassen, besteht bei Android das Problem, die Anwendungen zu beenden. Ja, richtig gelesen. Bei Android soll sich die VM um das Beenden kümmern, nämlich dann, wenn der Speicher knapp wird. Das wäre soweit auch kein Problem, aber manche Anwendungen laden in regelmäßig Daten aus dem Netz nach. Das drückt natürlich die Akkulaufzeit. Gute Kandidaten dafür sind rss-Reader, Twitter-Clients etc. Als Anwender hat man erstmal keinen Überblick, welche Anwendungen noch im Hintergrund Daten transferieren.

Ich habe mir angewöhnt Anwendungen regelmäßig mit einem Taskmanager zu beenden und die poll-Intervalle sehr groß zu setzen oder gleich die Tweets von Hand zu pollen. Leider lädt die offizielle Andoid Twitter App nur die Tweets der letzten Stunde…

Das Multitasking an sich ist jedoch gut und kann wie erwartet eingesetzt werden. Also Feedreader auf, Link im Browser öffnen, Artikel lesen, Twitter-Client öffnen, Artikel posten, zurück zum Feedreader … das klappt soweit sehr gut.

Der morgends frisch aufgeladene Akku ist bei meinem Nutzungsverhalten Abends leer. Das ist natürlich ziemlich ernüchternd. Ich nutze das Telefon auch extrem intensiv, aber auch bei sparsamer Nutzung scheint nicht mehr als 24 Stunden Laufzeit drin zu sein. Ich denke man könnte noch 1/3 mehr Laufzeit mit guter Softwareoptimierung rausholen, aber gegenüber Telefonen wie dem Nokia E71 sieht das Nexus One akkumäßig ziemlich alt aus.

Was ist denn eigentlich gut an Android?

Bisher habe ich eher die Schwachstellen aufgezeigt. Hier ein paar Dinge, die das Telefon wunderbar und unverzichbar machen:

Die mitgelieferte Neoprentasche ist prima. Man kan das Telefon ohne Bedenken in den Rucksack pfeffern oder es einfach mal fallen lassen. Genau das richtige für mich 😉

Die Notifications in Android sind sehr schön gelöst. Die Notifications tauchen mit eine *pling* auf und stören den Workflow nicht. Wenn man Zeit hat, sich darum zu kümmern, zieht man die Icon-Leiste von oben runter und kann einzelne notifications antippen (und die damit verbundene Aktion auslösen) oder alle löschen.

Push-Mail funktioniert ebenfalls sehr gut. Sowohl gmail als auch k9mail (unverzichtbarer imap-Client) melden sich sofort, wenn eine neue Mail eingetroffen ist. Verglichen mit der Nokia-Anwendung funktioniert push-Mail zuverlässiger und schneller.

Die google-Navigation funktioniert sehr gut. Mein Auto-Navi will immer eine exakte Adresse und kennt kaum POIs. Google dagegen gibt sich notfalls mit einem Stichwort zufrieden („Oktoberfest“).

Als Radfahrer in einer fremden Stadt ist die Navigation mit Headset schön. Einfach das Telefon in den Rucksack oder die Hosentasche stecken und sich von der freundlichen Google-Dame leiten lassen. Der GPS-Empfang ist durch den Stoff nicht merklich eingeschränkt.

Die Spracheingabe liefert gute Ergebnisse. Allerdings ist muss man schon ziemlich schmerzbefreit sein, wenn man sie in der Öffentlichkeit nutzt. Es sieht einfach ziemlich dämlich aus, wenn man mitten in München steht und „Englischer Garten, München“ in seinen Tricorder spricht. Meine Freundin ist vor Scham im Boden versunken 😉

Die Kamera macht gute Bilder. Für ein Telefon sogar exzellente. Ich habe nicht das Bedürfnis eine Kompaktkamera dabei zu haben, weil ich den Alltag mit meiner Familie prima mit dem Nexus One festhalten kann. Es gibt Schwächen in extremen Lichtsituationen, aber als immer-dabei Kamera reicht das Telefon locker aus.

Natürlich hat das Nexus One einen gewissen Hackvalue. USB-Kabel ran, SDK installiert und los. Anderes Firmware-Image ausprobieren? Kein Problem…

Fazit

Würde ich so ein Telefon meinen Eltern empfehlen? Nein. Gerade der SD-Karten Fehler und die schlechte Usability sind k.o. Kriterium. Würde ich lieber ein iPhone haben wollen: weiss ich nicht. Immerhin hat Apple eine gut besetzte QA-Abteilung, die Anwendungen auf Herz- und Nieren prüft, bevor sie auf die Menschheit losgelassen werden.
Ich bin nach wie vor unsicher, ob das Telefon ein guter Kauf war. Vielleicht bin ich zu kritisch und als Mac-Anwender zu Usability-fixiert. Allerdings erwarte ich von 415 Euro in meiner Hand, dass sie einfache Tasks vernünftig und zuverlässig erledigen. Das klappt leider nur bedingt.

/etc unter Versionskontrolle mit git

Auf unserem Freifunkserver sind teilweise mehrere Admins am Werk. Damit Änderungen an der Konfiguration nachvollziehbar werden und man auch nach einem halben Jahr weiss, was man eigentlich gemacht hat, steht das Verzeichnis /etc unter Versionskontrolle.

Ich hatte das schon mal auf unserem alten Server mit svn, aber das Hauptproblem war, dass ich immer vergessen habe meine Änderungen zu committen. Folglich sammeln sich über Tage/Wochen/Monate Änderungen an und man weiss gar nicht mehr, was jede einzelne Änderung zu bedeuten hat.

Zum Glück hat mich Wulf vom Berliner Freifunk auf eine super Idee gebacht: man kann das commit-Kommando in der .bash_logout von root unterbringen. Sobald root seine Session beendet hat, passiert folgendes:

  • /etc wurde nicht verändert: es passiert gar nix
  • /etc wurde verändert: es öffnet sich ein Editor, in dem man seine Änderungen kurz beschreiben muss. Nach dem Abspeichern erfolgt automatisch der commit

Prima Sache. In der Praxis gibt es damit aber noch ein kleines Problem: „sudo su -“ berücksichtigt die .bash_logout, „sudo su“ jedoch nicht. Da ich meine Schlampigkeit kenne, habe ich eine Lösung gefunden, die in beiden Fällen funktioniert: ein exit-Trap. Das ganze wird in die .bashrc vom root eingebaut:

# erstmal die letzten 10 commits anzeigen
echo "***************************************************************"
(cd /etc; git log -10 --reversepretty=’format:%cd (%h)%n%s%n’ )
echo "***************************************************************"
 
# exit trap, schlägt beim Logout zu 
function on_exit()
{
  cd /etc/
  git commit -a
}
 
trap on_exit EXIT

Der/die geneigte Leser/in mag hier nach Belieben noch Funktionen ranbauen, die z.B. den diff des letzten commits per Mail versenden 🙂

ssh host-key Prüfung abschalten

Ich habe oft verschiedene WLAN-Router an meinem Rechner. Jeder Router ist auf dem LAN-Port über die gleiche IP zu erreichen (i.d.R. 192.168.1.1), allerdings hat jeder Router einen anderen ssh host-key. Wechsel ich den Router, schlägt die Überprüfung des Keys fehlt, weil unter der gleichen IP plötzlich ein anderer Key presentiert wird. Die Lösung habe ich hier gefunden und sieht so aus:

Host router
        Hostname 192.168.1.1
        StrictHostKeyChecking no
        UserKnownHostsFile=/dev/null
        User root

Geforkte Prozesse mit Netbeans debuggen

Debugging unter Linux/Unix ist ein großer Haufen Mist. Zumindest, wenn man schon mal mit Visual Studio gearbeitet hat. Ich sitze gerade an einem Produkt, dass massiv Prozesse forkt und irgendwo in einem Child steckt ein Bug.

Weil das Erzeugen und das Beenden der Prozesse ziemlich schnell geht, kann man sich nicht an den Prozess attachen, er ist schon lange wieder weg, bevor der Debugger oben ist. Findige Kollegen haben dann soetwas in den Code eingebaut:

  if (getenv("DEBUG_XYZ")) kill (getpid(),SIGSTOP);

Ich muss also eine Umgebungsvariable DEBUG_XYZ setzen, den Master-Prozess neu starten und irgendwann wird der fragliche Prozess als Gestoppt in der Prozessliste stehen, ich kann mich in Ruhe attachen und debuggen.
Die Lösung hat natürlich massive Nachteile: ich muss den Code jedesmal ändern, wenn ich den „Breakpoint“ verschieben will und schlimmstenfalls kommt solcher Code versehentlich ins finale Release.

Es geht ein bisschen besser, wenn man gdb benutzt, der kann nämlich beim Fork entweder dem Parent- oder dem Childprozess folgen:

set follow-fork-mode mode

Wobei mode entweder „child“, „parent“ oder „ask“ ist. Nun will niemand „nativ“ mit dem gdb debuggen, man spannt Netbeans davor. Damit man aber in Netbeans den follow-fork-mode setzen kann, braucht man erstmal eine GDB Debugger Console:

-J-Dgdb.console.window=true

muss unter netbeans_default_options in der netbeans.conf hinzugefügt werden.

Jetzt kann man zumindest das Debugging starten und sich entscheiden, ob man den Childs oder den Parents folgt. „ask“ geht komischerweise nicht. Auch muss man scheinbar den follow-fork-mode bei jedem Start neu setzen.

Das ist immernoch ein riesengroßer Haufen Mist. Aber zumindest habe ich schöne gelbe Gummistifel an. Geht das nicht einfacher? 🙁

Watchdog script to supervise /proc/user_beancounters

I’m in the process of setting up my new server. The services are running inside OpenVZ-Containers. The Problem is, that you don’t know how to setup the resource parameters. You have to walk the way of trial and error, because you don’t how much resources the services consume under productive load.

After migrating some domains, my postfix process died last night because of a lack of pirvvmpages. So I wrote a script that monitors changes in /proc/user_beancounters of every container. The script runs from crontab every 5 minutes and compares UBC failcounter values to the last known values. If there is a difference, a mail is sent to root.

Feel free to re-write the script in your favorite language 😉

#!/bin/sh
# get running VEs
VES=`vzlist -H -o veid`
MAILFILE=/var/run/ubcWatchdog_mail.txt
 
# check every running VE
for VE in $VES; do
  # create file if it does not exist
  NEWFCFILE=/var/run/ubcWatchdog_$VE.new.txt
  OLDFCFILE=/var/run/ubcWatchdog_$VE.txt
  touch $NEWFCFILE
  touch $OLDFCFILE
 
  # save current failcounter
  vzctl exec $VE 'cat /proc/user_beancounters' | cut -b 13-129 | sed 's/ \+/ /g' | awk {'print $6 "\t"  $1'} > $NEWFCFILE
 
  # compare to reference failcounter
  diff -U 0 -d $OLDFCFILE $NEWFCFILE > /dev/null
  if [ $? != 0 ]; then              
    # yepp, something failed
    echo "****************************************" >> $MAILFILE
    echo "UBC fail in VE $VE!" >> $MAILFILE
    diff -U 0 -d $OLDFCFILE $NEWFCFILE | grep "^[+,-][a-z,A-Z,0-9]\+" >> $MAILFILE
    echo "****************************************" >> $MAILFILE
    echo "" >> $MAILFILE
    echo "UBC now:" >> $MAILFILE
    vzctl exec $VE 'cat /proc/user_beancounters' >> $MAILFILE
  fi
 
  # save new failcounter as reference
  mv $NEWFCFILE $OLDFCFILE
done;
 
# send mail to root
if [ -f $MAILFILE ]; then
  mail -s "UBC Fail!" root < $MAILFILE
  rm $MAILFILE
fi

The mail looks like this:

****************************************
UBC fail in VE 20!
-205 kmemsize
+59936 kmemsize
****************************************

And is the result of a fork-bomb that exploded inside VE 20 🙂

dovecot deliver – Fatal: postmaster_address setting not given

It took me an hour to figure out the reason for this message. The only hint is, that there might be special characters like tabs in the config file. But in my case, the reason was the dovecot-postfix package of Ubuntu 9.10.

There are two config-files: /etc/dovecot/dovecot-postfix.conf and /etc/dovecot/dovecot.conf. The header says:

# If there's a file /etc/dovecot/dovecot-postfix.conf, which is part of
# dovecot-postfix package, it will be used instead of dovecot.conf.
 
# Keep in mind that, if that file exist, none of the changes in
# /etc/dovecot/dovecot.conf will have effect on dovecot's configuration.
# In that case you should customize /etc/dovecot/dovecot-postfix.conf.

The problem: dovecot’s deliver command ignores dovecot-postfix.conf and reads it’s config from /etc/dovecot/dovecot.conf 🙁

Ok, how to fix this? Open /etc/postfix/master.cf and specify the configfile using the -c parameter of the deliver-command:

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -c /etc/dovecot/dovecot-postfix.conf -f ${sender} -d ${recipient}

See bug #511295.

pam-ldap: I have no name! (ubuntu)

Ich bin gerade über einen blöden Fehler gestolpert, den ich nicht noch einmal machen möchte… Ich habe an pam und ldap geschraubt und plötzlich konnten Gruppen und User-IDs nicht mehr aufgelöst werden:

groups: cannot find name for group ID 1000
I have no name!@vz10:~$

In einem nahezu identischen System ging es ohne Probleme. Ein Vergleich der beiden /etc-Verzeichnisse hat keine Auffälligkeiten gezeigt. Nachdem ich drauf und dran war, das System wegzuschmeißen und neu aufzusetzen, habe ich doch noch die Lösung gefunden:

/etc/ldap.conf muss für alle User lesbar sein. Ich hatte testweise ein Bind-Password eingetragen und aus diesem Grund die Rechte der Datei eingeschränkt. Ein einfaches

chmod 644 /etc/ldap.conf

hat das Problem gelöst 🙂

Debian Lenny auf einem Rootserver mit Raid-1 und LVM

Das ist ein Update zu meiner alten Anleitung. Der Unterschied zur alten Anleitung:

  • Dieses Mal soll ein Server unter Debian Lenny eingerichtet werden
  • Swap liegt ebenfalls im Raid
  • Der Server soll mit OpenVZ virtualisierte Maschinen hosten
  • Das root-Dateisystem soll ebenfalls im LVM liegen, damit wir beim Backup konsistente Snapshots vom gesamten System machen können

Hier also das Update zu meiner rundum-sorglos copy&paste-Anleitung zur Einrichtung von

Debian Lenny auf einem Rootserver mit Raid-1 und LVM

„Debian Lenny auf einem Rootserver mit Raid-1 und LVM“ weiterlesen

OpenLDAP Replikation mit syncprov

Für einen neuen Server in unserer Rootserver-Kommune brauche ich eine Replik unseres LDAP-Servers. Wie sich herausstellte, ist das ziemlich einfach und in der umfangreichen Dokumentation exzellent erklärt.

Im zu replizierenden LDAP-Server („Provider“) muss man lediglich dafür sorgen, dass das syncprov-Modul in der slapd.conf geladen wird:

modulepath      /usr/lib/ldap
moduleload      back_hdb
moduleload      syncprov

Im Zielserver („Consumer“), wird so eine 1:1 Replikation des Quellservers konfiguriert:

# replication settings
syncrepl rid=001
    provider=ldaps://ldaps.yourdomain.de:636
    type=refreshAndPersist
    searchbase="dc=yourdomain,dc=de"
    schemachecking=on
    type=refreshAndPersist
    retry="60 +"
    bindmethod=simple
    binddn="cn=replicator,dc=yourdomain,dc=de"
    credentials=assword

Natürlich müssen im Quellserver entsprechende Credentials hinterlegt werden. Durch das Keyword refreshAndPersist bleibt die Verbindung dauerhaft bestehen und Änderungen im Quellserver werden sofort auf dem Zielserver repliziert.

Achtung: im Zielserver müssen natürlich die gleichen Schemata geladen sein, wie im Quellserver. Schaut euch also die Include-Section entsprechend an, sonst hagelt es Fehler.

Mit dieser Methode kann man den LDAP-Server super-komfortabel umziehen, einfach Replikation einschalten, DNS-umschwenken und dann die Replikation auf dem Zielserver ausschalten.

DynDNS mit dem Alice Modem 1121 WLAN

Das Alice Modem 1121 WLAN bzw. TV hat eine recht spartanische Administrationsoberfläche. Man kann wirklich nur das Nötigste einstellen, eine Möglichkeite den beliebten DynDNS-Dienst zu konfigurieren, sucht man vergeblich.

Die Modemsoftware bringt jedoch einen DynDNS-Client mit, allerdings ist der nur via Telnet zu konfigurieren. Das Modem ist vom LAN und WLAN aus unter seiner Standard-IP 192.168.1.1 erreichbar.

Die Zugangsdaten lauten:

  • User: admin
  • Passwort: AliceXXXXXX123

Die Zeichenfolge XXXXXX muss durch die letzten sechs Zeichen der LAN MAC-Adresse des Modems ersetzt werden. Lautet die MAC-Adresse des Modems z.B. 00:25:5E:AB:64:FE, so muss man als Passwort AliceAB64FE123 verwenden:

$ telnet 192.168.1.1
 
Entering character mode
Escape character is '^]'.
 
Alice Modem WLAN 1121
Login: admin
Password: AliceAB64FE123
 
>

Man findet sich auf einer kastrierten Linux(?)-Shell wieder. help liefert eine Liste der möglichen Kommandos. Mit ddns kann man den DynDNS-Client konfigurieren:

> ddns
ddns add hostname --username username --password password --interface interface --service tzo|dyndns
     remove hostname
     show
ddns --help>

Ok, mit add fügt man eine DynDNS-Konfiguration hinzu, mit remove wird sie wieder entfernt und mit show kann man alle anzeigen lassen.

Der folende Aufruf fügt eine Konfiguration für den Hostnamen myhomedsl.dyndns.org beim Dienst dyndns mit dem Usenamen user6 und dem Passwort 123456 hinzu:

ddns add myhomedsl.dyndns.org --username user6 --password 123456 --interface ppp_0_1_32_1  --service dyndns

Wichtig: man muss im parameter --interface den Namen des WLAN-Interfaces eingeben. Den Namen bekommt man mit dem Kommando ifconfig heraus. Es listet alle Interfaces auf, gesucht ist das mit ppp im Namen:

ppp_0_1_32_1    Link encap:Point-Point Protocol  
                inet addr:85.178.209.191  P-t-P:213.191.89.4  Mask:255.255.255.255
                UP POINTOPOINT RUNNING NOARP ALLMULTI MULTICAST  MTU:1492  Metric:1
                RX packets:9540 errors:0 dropped:0 overruns:0 frame:0
                TX packets:7456 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:3 
                RX bytes:6444034 (6.1 MiB)  TX bytes:1135835 (1.0 MiB)

In meinem Beispiel lautet der Name des Interfaces also ppp_0_1_32_1.

26C3: Tag vier

Leider leider ist der AS/400 Talk von Sebastian ausgefallen. Ich hatte ihn schon am Vorabend zu dem Thema ausführlich befragt, aber es wäre natürlich interessant gewesen, die Live-Demos zu sehen.

Statt dessen habe ich mich dann in Saal 1 zur Wikipedia-Diskussion gesetzt. Fefe hatte es sich auf der Couch bequem gemacht, lest Euch mal den Artikel in seinem Blog durch, er hat die Diskussion ganz gut zusammengefasst.

Fefe

Blackbox JTAG Reverse Engineering war auch nicht wirklich erhellend, aber vielleicht war auch meine Aufmerksamkeit am vierten Tag arg verschlissen. Ich habe mich dann noch mit ein paar älteren Herren aus dem Internet zum Aisiambiss in den Bahnhof gesetzt.

Photography and the Art of Doing it Wrong war ein interessanter Rückblick auf die Geschichte der Fotografie, außerdem gab es ein paar gute Inspirationen bewusst „falsch“ zu fotografieren und die „Fehler“ als künstlerischen Effekt einzusetzen. Ein erfrischender Kontrast zur üblichen „Eye Candy Fotografie“.

Falls Ihr den Kongress verpasst habt, schaut Euch die Aufzeichnungen an, Anne hat ein paar gute Empfehlungen zusammengetragen

26C3: Tag drei

Der Jahresrückblick hat mich mal wieder darin bestärkt, dass der CCC-Mitgliedsbeitrag goldrichtig angelegt ist. Schaut Euch einfach mal die Aufzeichnung an.

Danach gab es ein Update zur DECT-Sicherheit. Die Jungs sind schon sehr weit gekommen. Der Grund, warum man den großen Knall nicht gehört hat, ist vielleicht, weil er vom noch viel größeren Knall des Platzens der GSM-Sicherheitsblase übertönt wurde. Interessantes Detail: die Zusammenarbeit mit dem DECT-Forum scheint viel angenehmer und besser zu laufen, als die Zusammenarbeit mit dem GSM-Forum, die derzeit noch nicht einmal zugeben, dass es ein Problem gibt („das was die machen ist ja Illegal, und deswegen existiert das Problem nicht“).

Dann habe ich mir „DDoS/botnet mitigation and hosting online communities“ angeschaut, das war nett, aber insgesamt kein großer Erkenntnisgewinn.

Der GSM-Talk von Harald Welte hiess „Using OpenBSC for fuzzing of GSM handsets“, es war aber eher ein generelles Update zu OpenBSC. Trotzdem interessant, auf welch wackeligen Füßen das ganze System steckt, es gibt nur eine Hand voll (4!) GSM-Stacks und die sind auf 4 Milliarden Geräten deployed. Wenn also ein Stack ein Problem hat, kann man das auf sehr vielen Geräten nachvollziehen.

Was mir im Zusammenhang mit GSM total neu war – und gleich auf drei Vorträgen ausführlich erwähnt wurde – ist, dass im Zuge der 911-Notrufrichtlinie in den USA die Geräte ihren Standort bestimmen können müssen. Wenn ein GPS-Chip eingebaut ist, dann kann man das relativ einfach machen. Wenn kein GPS-Chip eingebaut ist, geht das aber trotzdem. Das Telefon verstellt einfach die Empfangsfrequenz auf die GPS-Frequenz und empfängt die blanken GPS-Signale, die es zur Auswertung an den Provider schickt (GSM funkt i.dR. auf 0.9, 1.8 und 1.9 GHz, GPS liegt mit 1.2 und 1.5 GHz genau dazwischen). Zusammen mit den bekannten Standortdaten der Basisstationen und der derzeit schon vorhandenen GSM-Peilungsmöglichkeiten kommt dabei eine ausreichend genaue Standortinformation heraus.

Da keine Geräte exklusiv für den US-Markt gebaut werden, ist also davon auszugehen, dass alle Geräte, die seit 2006 in den USA verkauft werden, diese Funktion mitbringen. Die Abfrage findet auf sehr sehr tiefen Schichten des GSM-Protokolls statt und kann von der Anwendungssoftware oder dem Betriebssystem des Telefons nicht verhindert oder bemerkt werden.

Bei „Location tracking does scale up“ hat Aaron die Funktionsweise von Skyhook erklärt. Das Grundprinzip ist ja recht einleuchtend. Die Standortdaten und Empfangsfeldstärken von WLAN Beacons werden einmal erfasst und in einer Datenbank hinterlegt. Nun kann man anhand dieser Datenbank seinen Standort auch in Gebäuden bestimmen. Das Problem ist, dass die Datenbank mit der Zeit veraltet, weil WLAN AccessPoints sterben und neue hinzu kommen. Die Update-Funktion steckt aber in der Skyhook-Api selbst. Bei Standortabfragen werden alle sichtbaren ESSIDs mitgesendet, ebenfalls die GPS-Position (falls bekannt) und die Basisstation-Id, an der das Telefon angemeldet ist. Zwar funktioniert die API-Abfrage anonymisiert, aber eine Korrelation mit anderen Datensätzen ist natürlich trotzdem möglich.

Der Fnord-Jahresrückblick war ebenfalls wieder Pflicht, statt mir danach gleich den Kaminsky zu geben, habe ich mich zu Andy und „Die Ereignisse des 12.9. und ihre Folgen“ angeschaut. Schaut Euch mal die Aufzeichnung an, den Erkenntnisgewinn kann man garantiert auf jeder Demo verwerten.

26C3: Tag zwei, was noch so war

One Laptop per Child: war ganz interessant, den größten Erfolg hat das Projekt derzeit scheinbar in Uruguay. Dort sind fast 400.000 Geräte ausgeliefert, jedes Kind von der 1. bis zur 6. Klasse hat eins. Es gibt Unterstützung von der Post, wenn ein Gerät kaputt ist kann man es kostenlos in jeder Postfiliale abgeben und die schicken es zur Reparatur.

Die alle Zuhörer unter den Nägeln brennende Frage – wo man als reicher Europäer einen OLPC XO kaufen kann, wurde leider nicht befriedigend beantwortet. Das sehr gute „get one, give one“-Programm, bei dem man ein Gerät kaufen und eins spenden konnte, gibt es leider nicht mehr. Man kann sich zwar als Entwickler mit einem Projekt bewerben, aber wenn man „nur“
Geräte für seine eigenen Kinder haben möchte, sieht es im Moment schlecht aus.

Ich verstehe nicht ganz, was das Problem wäre oder warum das „get one, give one“ Programm eingestell wurde. Für Faire 280 Euro würde man ein Gerät bekommen und gleichzeitig noch eins spenden. In unseren Breiten wäre das total akzeptabel. Statt dessen bekommen Schüler hier eher Netbooks von Ihren Eltern geschenkt („ist ja nicht so teuer und bringt auch sicherlich etwas für die Schule…“) und versuchen die wie normale Notebooks zu verwenden. Klar kann man sich auch die OLPC Software auf einen USB-Stick kopieren und auf einem Netbok verwenden, aber viel von dem OLPC Konzept geht dabei verloren.

Danach habe ich mir das Mondprojekt angeschaut, aber darüber habe ich ja schon geschrieben. Heise hat auch darüber berichtet.

„Privacy & Stylometry“ war mir zu trocken und so habe ich mich lieber noch ein wenig in der Phenoelit Drogenhölle rumgetrieben.

Vier Fäuste für ein Halleluja war dann natürlich Pflicht. Da ich beruflich viel Unixcode sehe und gelegentlich auch schreibe, kam mir das alles natürlich sehr bekannt vor. Ich werde das Video vom Vortrag mal mit in die Firma nehmen und den Kollegen zeigen, die haben bestimmt auch ihren Spaß daran 🙂

Dann habe ich mich statt eines weiteren Vortrags in den Podcast Developer Workshop von Tim Pritlove gesetzt. Sein Problem ist, dass es im Moment keine vernünftige Software gibt, die einen Podcast Workflow vernünftig abbilden kann und man verdammt viele Schritte manuell durchführen muss, die man alle wunderbar automatisieren könnte.

Er hat also ziemlich genau seine Ideen beschrieben, was eine Software alles können muss und welche Funktionen sie bereitstellen soll. Das geht da von Terminkoordination der Teilnehmer und Erzeugung korrekter Feeds über die Integration des Chatprotokolls in die Timeline bishin zu Distributionswegen über Webplayer und BitTorrent. Das ist also ein bunter Strauß an Wünschen,
die man eigentlich unmöglich in einem Projekt erschlagen kann, außer man hat sehr viel Geld und fähige Leute.

Ergebnis war, dass es erstmal eine google Group von Podcastern gibt, die sich des Themas annimmt und versucht konkrete Teilschritte umzusetzen, die man immer weiter zu einem Stück Software zusammensetzen kann. Mich hat das ganze Stark an Pentabarf erinnert, das auch aus der Congressorganisation heraus enstanden und vollkommen von Featurebedürfnissen des realen Congressorganisators getrieben ist.

26C3: Tag zwei soweit

Ich habe heute statt mir Vorträge anzuhören, mich ein bisschen mehr mit Leuten aus dem Internet unterhalten. Die sind alle echt nett 😉

Interessant war „A part time scientists‘ perspective of getting to the moon„, allerdings wurde das Thema Mondflug auf schmalem Budget so dermaßen schlecht vorgetragen, dass ich nur unter Schmerzen bis zum Schluss ausgehalten habe. Klar, das Team ist im Wettbewerb mit anderen Teams, die Ebenfalls zum Mond kommen wollen, aber wenn man nur nebulös drum herumredet, ist das der Aufmerksamkeit im Publikum nicht gerade zuträglich.

263C: dns2dht

Christian Bahls von Mogis hat einen ganz interessanten Ansatz vorgestellt, wie man DNS zensurfest gestalten kann: mittels einer distributed Hashtable. Die Anfragen laufen nicht mehr gegen einen potentiell zensierten DNS-Server, sondern gegen die DHT-Wolke. Voraussetzung ist natürlich, dass die DHT-Nodes letztendlich auf einen unzensierten DNS zugreifen können.

Der Vorteil des ganzen: das System ist dezentral und kann nicht zensiert werden. Nachteil: in die DHT zu schreiben ist einfach, Löschen ist jedoch unmöglich. DNS-Updates bekommt man also nicht so einfach dort rein. Aber: DNSSEC steht vor der Tür, signierte Domains könnten also schon Updates bereitstellen.

Christian hat diese Idee in ein paar Python-Scripte gegossen und hat auch schon eine kleine Wolke am Laufen, die bereits praktisch vom Iran aus genutzt wird. Ich bin gespannt auf den Release der Software.

26C3: Lightning Talks Tag 1

Ein kleiner Auszug aus den Talks (wird noch ergänzt):

  • Sleephacking scheint auszufallen, die Vortragende ist nicht da 🙁
  • In der C-Base gibt es parallel zum Kongress das Multitouch Hackfest. Und einige der Talks, die auf dem Kongress abgelehnt wurden. Und eine Menge Parties 🙂
  • Der CCC Düsseldorf hat eine Zensurinfrastruktur aufgebaut, man kann sie versuchen auf verschiedenen Leveln zu umgehen.
  • Voicebarf ist das Telefoninterface zum Fahrplan. Sehr cool 🙂
  • Cache games ist ein Hacking Contest auf Basis von CPU Cache Timing Angriffen. Krass 🙂
  • wiki2beamer konvertiert Mediawiki-Syntax in Latexcode. Das ist ganz cool, wenn man mit beamer eine Präsentation bauen will, aber der Latexsyntax dafür eigentlich zu aufwändig ist, speziell für syntax highlighting. Natürlich hat man trotzdem den vollen Latex-Syntax, da wiki2beamer lediglich wie ein Preprozessor arbeitet.
  • Sehr interessant war John Maushammer: er hat eine Pong Armbanduhr gebaut (tiny tiny tiny stuff!!1!) und digitale Wegwerfkameras gehackt.

26C3: Ausverkauft :-(

Tja, das ging dann doch schneller als erwartet. Noch vor dem offiziellen Start ist der Kongress ausverkauft, das Anstehen in der Schlange hat sich gestern dann doch gelohnt.

Insgesamt ist es schade, dass jetzt viele Menschen draußen bleiben müssen. Klar, 4200 Leute waren im letzten Jahr zu viel, aber vielleicht sollte man sich überlegen, ob das BCC als Veranstaltungsort noch geeignet ist. Oder ob man nicht generell Tickets im Vorverkauf anbietet, allerdings bedient man damit dann einen gewissen Schwarzmarktanteil.

Dragons Everywhere kann nicht ausgleichen, es dieses Jahr 700 Tickets weniger gibt.

Worauf ich mich beim 26C3 freue

Der nächste Congress steht vor der Tür und der aktuelle Fahrplan ist schon recht vielversprechend. Ich habe mal ein paar Talks rausgesucht, die ich mir auf jeden Fall anschauen werde.

Tag 1, 13:00 Uhr: Lightning Talks. Es wird einen Talk von @p4ula zu Sleephacking geben, außerdem ist danach um 15.00 Uhr eine Q&A Session zum Thema geplant. Wer schon immer mit dem Schlafrhythmus seiner Umwelt nichts anfangen konnte, ist hier genau richtig.

Update: Oh, gerade noch via Twitter gesehen: Tim macht einen Podcasting Developer Workshop. Da muss ich hin, auch wenn mich im Moment mehr die Hardwareseite interessiert.

Bei GSM: SRSLY? müsst Ihr Euch einfach mal die Beschreibung durchlesen. Auf dem Camp wurde das A51-Projekt vorgestellt, die Leute rechnen schon eine Weile und ich denke dieses Jahr wird GSM – wie DECT im letzten Jahr – als vollständig gebrochen gelten. Dazu passend gibt es noch am Tag 3 das Update zu DECT.

Schon aufgrund des Entertainmentfaktors sollte man sich nicht entgehen lassen, wenn Fefe und Erdgeist über kaputte APIs und Protokolle ranten (Tag 2, 17:15 Saal 1). Gleich danach werden Konstanze Kurz und Frank Rieger über die Anhörung vorm Bundesverfassungsgericht berichten.

Der wunderbare Erich Möchel – der schon auf dem 2007er Camp zum „Tod an der ETSI-Schnittstelle“ referierte – wird am Tag zwei zu zwei „ETSI-Vorratsdatenspeicherung 2009 und andere Sockenpuppen der GCHQ“ sprechen. Unterhaltsam und erschreckend. Der Vortrag ist Pflicht 🙂

In Location tracking does scale up – How skyhook wireless tracks you continously spricht Freifunkerkollege L. Aaron Kaplan über den kleinen praktischen Dienst der Lokalisierung über die WLANs in der Umgebung realisiert. Eine Schnittstelle zu Skyhook steckt in jedem Mac und iPhone. Es kann nicht schaden sich darüber schlau zu machen, vielleicht wird man öfters getrackt als einem lieb ist.

Für mich ist der AS/400-Talk Pflicht, die Maschine ist ja von der Architektur ziemlich nahe an der S/390-Architektur. Interessant ist ebenfalls der Talk zum Mediahacking.

Alles in allem klingt der Fahrplan vielversprechend, ich hoffe, dass ich die vier Tage mit genug Mate durchstehe und noch ein bisschen Zeit finde darüber zu bloggen.

How to enable Server Name Indication (SNI) on Debian Lenny

Server Name Indication (SNI) on Debian Lenny is easy to implement. OpenSSL is already SNI-capable, only the Apache Webserver is a bit outdated. So lets backport Apache >= 2.2.12 to Lenny. Here is my little step-by-step howto:

Install a compiler an the debian dpkg-Development Environment:

$ sudo aptitude install dpkg-dev build-essential fakeroot

To build apache, you will nee libcap2-dev and autoconf too:

$ sudo aptitude install libcap2-dev autoconf

…and the build dependencies for apache2:

$ sudo apt-get build-dep apache2

Download the Apache 2.2.14 sources for the current testing release from http://packages.debian.org/source/squeeze/apache2:

$ wget http://ftp.de.debian.org/debian/pool/main/a/apache2/apache2_2.2.14-1.dsc
$ wget http://ftp.de.debian.org/debian/pool/main/a/apache2/apache2_2.2.14.orig.tar.gz
$ wget http://ftp.de.debian.org/debian/pool/main/a/apache2/apache2_2.2.14-1.diff.gz

Extract the source packages:

$ dpkg-source -x apache2_2.2.14-1.dsc

Compile the package:

$ cd apache2-2.2.14/
$ dpkg-buildpackage -us -uc -rfakeroot

(-us and -uc supresses the digital signature, fakeroot allows to set the ownership of the archived files to root, even if you are not root currently)

Install the desired apache packets:

$ cd ../
$ dpkg -i apache2_2.2.14-1_i386.deb apache2.2-bin_2.2.14-1_i386.deb apache2.2-common_2.2.14-1_i386.deb apache2-mpm-prefork_2.2.14-1_i386.deb apache2-suexec_2.2.14-1_i386.deb apache2-utils_2.2.14-1_i386.deb

Finally, remove the packages you installed to build the apache2-packages.

Jetzt noch sicherer

20091109_https

Dieses Blog ist jetzt auch über https erreichbar und damit noch sicherer 😉 Der geneigte Leser mag bitte auf den Link klicken und ggf. in den Kommentaren Feedback hinterlassen, ob beim Aufruf der Seite ein Zertifikatsfehler angezeigt wird. Vermutlich trifft das User mit dem Internet Explorer unter Windows XP (*). Vielen Dank!

(*) Ja, SSL für Arme mit SNI, aber dafür mit „richtigem“ Kostenloszertifikat von StartCOM.