#PrismBreak – Webmin für webbasierte Konfiguration

Um die Konfiguration der PrismBreakBox zu vereinfachen, wird Webmin genutzt. Die Installation speziell für Debian ist hier beschrieben. Der Abschnitt „Using the Webmin APT repository“ beschreibt dabei die Installation mittels APT. Durch diese Variante kann man die Installation von Webmin auch einfach aktuell halten.

#PrismBreak – Debian als Grundlage für den Server

Grundlage für das Hosten eigener Dienste ist bei mir aktuell noch ein Raspberry Pi. Die Resourcen des Raspberry Pi sind stark begrenzt (meiner hat nur 256MB Ram und eine 32GB SD-Karte). Bis jetzt war das noch kein Problem, aktuell hostet der Raspberry aber auch nur einen IMAP-Server. Ich wollte aber noch ein paar Alternativen für Dienste ausprobieren und dachte mir, das ich dann direkt an die Grenzen des kleinen Pi stossen würde. Da ich noch einen Intel Atom basierten MiniPC ungenutzt rumstehen hatte, wurde er als Versuchsobjekt ausgedeutet. Er hat 4GB Ram und eine 500GB Festplatte. Da kann man dann etwas entspannter experimentieren 🙂

Der Raspberry Pi läuft mit Debian, entsprechend sollte der MiniPC auch damit installiert werden. Da der MiniPC kein CD- oder DVD-Laufwerk besitzt, wurde die Installation mit einem USB-Stick durchgeführt.

Ich habe es zuerst mit der regulären Debian-Version versucht. Das, was man in der online verfügbaren Debian-Installationsanleitung erklärt bekommt. ISO-Image herunterladen, auf USB-Stick kopieren, booten, usw. Wie sich herausgestellt hat, war das mit dem MiniPC leider nicht möglich. Es wurde immer wieder darauf hingewiesen, dass bestimmte Module nicht gefunden/geladen werden konnten. Nach kurzer Suche fanden sich verschiedene Debian Live-ISOs zum Herunterladen. Bei mir hat es dann mit einem Amd64 Standard Live-ISO geklappt. Beim Booten wird einem ein Menü angezeigt, welches den Punkt „Install“ anbietet. Damit habe ich dann Debian ohne Probleme auf dem MiniPC installieren können. Der Installer fragt einen noch einige Punkte ab, um dann die Installation durchzuführen. Anschliessend hat man ein „nacktes“ Debian installiert. Das ganze läuft dann übrigens ohne grafische Oberfläche, alles über die Textkonsole.

Installationsanleitung

Nachfolgend die Auflistung der Installationsschritte für meinen MiniPC.

  1. Vom USB-Stick booten.
  2. Im angezeigten Menü den Eintrag „Install“ auswählen und bestätigen.
    20130824_212526
  3. Die Sprache für die Installation auswählen. Bei mir „German“ – „Deutsch“ und bestätigen.
    20130824_212627
  4. Auswahl des Standorts. Bei mir „Deutschland“ und bestätigen.
    20130824_221003
  5. Tastatur konfigurieren. „Deutsch“ und bestätigen.
    20130824_221040
  6. Bei meinem MiniPC wurde bei der Netzwerk-Hardware-Erkennung eine fehlende Firmware-Datei bemängelt. Da ich die entsprechende Datei nicht hatte, habe ich diesen Schritt mit „Nein“ übersprungen.
    20130824_221447
  7. Nach einiger Zeit wird man nach dem Namen des Rechners im Netzwerk gefragt. Ich habe ihn „PrismBreakBox“ genannt. Namen eingeben und bestätigen.
    20130824_221635
  8. Den leeren Domain-Namen bestätigen.
    20130824_221734
  9. Nun das Passwort für den root-User eingeben. Der root-User ist wichtigste Benutzer unter Linux-Systemen. Er darf alles. Daher sollte man ich auch nicht für den normalen Betrieb benutzen.
    20130824_221824
  10. Zur Sicherheit wird das root-Passwort nochmals abgefragt. Erneut eingeben und bestätigen.
    20130824_221843
  11. Nun legt man den ersten Benuter-Account an. Im ersten Schritt wird der normale Name abgefragt. Bei mir Jochen Bachmann und bestätigen.
    20130824_222037
  12. In diesem Schritt wird der Anmeldename für den Benutzer-Account festgelegt. Mit diesem Anmeldename meldet sich der Benutzer am System an. Hier beispielhaft vorname.nachname. Namen eingeben und bestätigen.
    20130824_222114
  13. Für den neuen Benutzer-Account wird ein Passwort vergeben. Neues Passwort eingeben und bestätigen.
    20130824_222337
  14. Das Passwort muss erneut eingeben werden und bestätigt werden.
    20130824_222354
  15. Nun muss die Festplatte vorbereitet werden. Kann die komplette Festplatte für die Installation genutzt werden, dann ist „Geführt – vollständige Festplatte verwenden“ die einfachste Option. Eintrag auswählen und bestätigen.
    20130824_222448
  16. Da neben der Festplatte noch der USB-Stick im System als mögliches Installationsziel vorhanden ist, bekommt man mindestens beide jetzt zur Auswahl angeboten. Die Auswahl hier betrifft das Vorbereiten des Installationsmediums. In der Regel wird der Eintrag mit dem grössten Speicherplatz das gewünschte Installationsmedium sein. In meinem Beispiel der Eintrag mit „500.1 GB“.
    20130824_222620
  17. In der Abfrage habe ich den ersten Eintrag, „Alle Dateien auf eine Partition, für Anfänger empfholen“ ausgewählt und bestätigt.
    20130824_223710
  18. Es werden die anstehenden Änderungen an der Festplatten Partitionierung aufgezählt. In meinem Fall wirt eine root-Partition (/) und eine Swap-Partition angelegt. Entsprechend den Eintrag „Partitionierung beenden und Änderungen übernehmen“ auswählen und bestätigen.
    20130824_223832
  19. Es erfolgt nochmals eine Sicherheitsabfrage. „Ja“ auswählen und bestätigen. Anschliessend wird Debian installiert, was einen Augenblick dauern kann.
    20130824_224022
  20. Ein Netzwerkspiegel sollte verwendet werden. „Ja“ auswählen und bestätigen.
    20130824_225320
  21. „Deutschland“ wählen und bestätigen, um einen nahgelegenen Spiegelserver auszuwählen.
    20130824_225554
  22. Eine Adresse aus der Liste auswählen. Universitäten haben meistens eine gute Anbindung und sind eine gute Wahl. Einen Eintrag auswählen und bestätigen.
    20130824_225754
  23. Wenn mit dem Begriff HTTP-Proxy nichts anfangen kann, dann den Eintrag hier erstmal leer lassen und bestätigen.
    20130824_225819
  24. Nun wird man gefragt, ob ein Bootmanager im Master Boot Record installiert werden soll. Falls die Debian-Installation das einzigste Betriebssystem auf dem Rechner ist, kann „Ja“ ausgewählt werden und bestätigt werden.
    20130824_230130
  25. Die Installation ist abgeschlossen. „Weiter“ auswählen und bestätigen. Den USB-Stick entfernen.
    20130824_230559
  26. Nachdem das System neu gebootet wurde, meldet man sich mit seinem root-Benutzer und Passwort am System an.
  27. Nun gibt mal folgende Befehle ein. Damit werden noch ausstehende Updates geladen und installiert. Jede Zeile wird bestätigt:
    apt-get update
    apt-get upgrade

    Sind Updates vorhanden, wird man bei apt-get upgrade mit „Möchten Sie fortfahren [J/n]?“ aufgefordert, das Upgrade zu bestätigen, was man tun sollte. Anschliessend werden die Updates installiert und das Grundsystem für die #PrismBreakBox ist installiert.

#PrismBreak – Windows nach Linux

Hier hatte ich ja angekündigt, was ich alles ändern möchte. Mittlerweile sind einige Wochen vergangen, den aktuellen Stand habe ich auf dem Webmontag Frankfurt bereits präsentiert. Jetzt heisst es weitere Informationen zu liefern. Den Anfang macht mein Umstieg von Windows 8 auf Linux.

Ubuntu vs. Linux Mint

Wenn es um den Einsatz von Linux geht, wird meistens Ubuntu als Distribution der Wahl empfohlen. Leider wurde in die Ubuntu-Suche Amazon-Suchergebnisse mit eingebunden. Man kann diese Funktion zwar deaktivieren, das ganze hinterlässt allerdings einen gewissen Nachgeschmack. Daher hatte ich mich nach einer Alternative umgeschaut. Ich entschied mich schliesslich dafür, Linux Mint auszuprobieren. Linux Mint wird als sehr anwenderfreundlich empfohlen, ähnlich Ubuntu. Zum Zeitpunkt meiner #PrismBreak Aktion war Linux Mint 15 (Olivia) aktuell und wurde von mir eingesetzt.

Asus Zenbook

Begonnen habe ich mit meinem Asus Zenbook UX51VZ. Das hat sich auch gleich als knifflig herausgestellt. Es war mit Win 8 installiert, das BIOS ist ein modernes UEFI. Besonderheit bei diesen Notebook ist, dass es zwei SSD eingebaut hat, welche als RAID konfiguriert sind. Und diese RAID-Konfiguration war zu Beginn ein Problem.

Recht früh bei der Installation wird man nach der Partitionierung der Festplatte gefragt. Mit aktivierter RAID-Einstellung im UEFI bekam ich ziemlich viele einzelne Partitionen zur Auswahl angeboten. Manche Partition kleiner, andere wieder etwas grösser. Irgendwie nichts brauchbares dabei.

Um es kurz zu machen, ich habe mir eine Live CD von Gparted auf einen USB-Stick installiert und damit nach mehreren Versuchen die Partitionen löschen können.

Anschliessend konnte die Installation von Linux Mint „fast“ normal durchgeführt werden. Ich habe die beiden SSDs getrennt nach root (/) und home (/home). Nach der Installation wurde ein Neustart durchgeführt, Linux wurde aber nicht gestartet, da es Probleme mit der Grub-Konfiguration gab. Zum Glück gibt es dafür aber ein Tool, welches sich erfolgreich darum gekümmert hat: Boot-Repair. Wenn ich mich richtig erinnere, habe ich dazu Linux Mint vom USB-Stick als Live-System gestartet, Boot-Repair nachinstalliert und dann gestartet. Die Funktion „Recommended repair“ hatte ausgereicht. Anschliessend konnte Linux Mint sauber starten.

Nach einigen Tagen stellte sich heraus, das es noch ein Problem mit der Installation gab. Das System „fror“ immer wieder kurz ein, es wollte keinerlei Eingaben von der Tastatur entgegen nehmen und Anwendungen reagierten nicht mehr auf Mausklicks. Nach ein paar Sekunden war alles wieder ok, nur um nach kurzer Zeit wieder einzufrieren. Linux Mint wird mit zwei unterschiedlichen Fenstermanagern angeboten, Cinnamon und MATE. Ich hatte zuerst Cinnamon ausprobiert gehabt. Nachdem ich im Netz keine ähnlichen Berichte und entsprechend auch keine Lösungen finden konnte, entschied ich mich die MATE-Variante auszuprobieren. Damit traten dann keine Probleme mehr auf.

Was hier kurz beschrieben ist, hat einige Abende/Nächte Zeit gekostet. Hier hat sich noch jemand die Mühe gemacht, seine Probleme und Lösungen zu einzelnen Punkten mit der Linux-Installation auf dem Zenbook zu dokumentieren.

Womit wir zum kompletten Gegenteil kommen:

Dell XPS 17

Das Dell XPS 17 ist mein Arbeitstier und entsprechend ausgestattet, hat aber keine so ausgefallene Konfiguration wie das Zenbook mit seinen in RAID geschalteten SSDs. In dem Dell befindet sich eine SSD für das Betriebssystem und eine normale Festplatte für Daten. Ausserdem besitzt es kein UEFI sondern noch ein BIOS. Die Installation von Linux Mint per USB Stick funktionierte hier dann auch absolut ohne Probleme. Partitioniert habe ich es analog dem Zenbook, root (/) liegt auf der SSD, home (/home) auf der Festplatte.

Software

Die Installationen von zusätzlicher Software auf beiden Geräten ist identisch. Aktuell benötige ich folgende Programme auf beiden Rechnern:

  • Firefox
    bereits installiert nach Installation von Linux Mint.
  • Libre Office
    bereits installiert nach Installation von Linux Mint.
  • Eclipse
    von eclipse.org geladen, findet es sich jetzt unter /opt.
  • Sublime Text 2
    von www.sublimetext.com geladen, findet sich ebenfalls unter /opt.
  • Pidgin
    Per Paketmanager installiert, zusätzlich noch das OTR-Plugin.
  • Spotify
    ich war bisher Spotify Kunde. Leider bieten sie keinen Linux-Client an. Spotify hat eine Linux Preview, welche man bereits nutzen kann. Die Installation liegt ebenfalls unter /opt.
  • 1Password
    Ein kommerzieller Passwortmanager. Eine Windowssoftware, welche es nicht für Linux gibt. Danke Wine funktioniert die Anwendung aber auch unter Linux. Allerdings gibt es unter Linux keine Integration mit den Browsern.

 Was fehlt?

Sicherlich viele Kleinigkeiten. Das Powermanagement der Rechner kann bestimmt noch optimiert werden.

Beide Rechner sind mit beleuchteten Tastaturen ausgestatet. Soweit ich das bisher erkennen kann, funktioniert ein automatisches ein- und ausschalten der Tastaturbeleuchtung nicht, man kann es nur manuell steuern.

Ich habe noch nicht meinen Musikplayer gefunden, mit dem ich voll und ganz zufrieden bin. Aktuell teste ich Rhythmbox und Banshee.

Eine Sache die mir positiv aufgefallen ist: Drucker, Scanner und meine ganzen Android-Devices wurden ohne grossen Aufwand erkannt. Beide Drucker sind Netzwerkdrucker und wurden nach einem Suchlauf im internen Netz erkannt. Beim Tintenstrahldrucker musste ich noch einen passenden Treiber beim Hersteller herunterladen. Aber danach funktionierte dieser auch.

Fazit bisher: ich vermisse nichts. An spezieller Windows-Software hatte ich nur MS Office 2010 im Einsatz. Und 1Password.

PrismBreak oder wieso und wie ich mein elektronisches Leben umkrempel

Ich führe ein recht unprivates Leben, checke gerne und überall mit Foursquare ein, poste privates auf Twitter, Facebook, Google+ oder sonst wo, meine mit dem Smartphone gemachten Fotos werden automatisch bei Google+ hochgeladen (privat, liegen aber damit schon bei Google), manche finden ihren Weg über Instagram nach Tumblr, Twitter und Facebook.

Bis heute….genauer gesagt, gestern…da hatten wir vom Webmontag Frankfurt Team ein Treffen und kamen auf das Thema PRISM und co zu sprechen. Nach den doch recht heftigen Diskussionen zu dem Themenkomplex an dem Abend kam ich auf dem Nachhauseweg zur Erkenntnis, dass es bei mir so nicht weitergehen kann. Ich habe die ganzen Dienste gerne genutzt…und reichlich. Wenn es einen neuen Dienst gibt, der interessant aussieht melde ich mich an….bin halt ein Spielkind. Aber dieses Spielkind wird gerade motzig. Man macht mir meine Spielwiese madig. Madig in der Form, dass ich nicht mehr entscheiden kann und darf, welche Infos wirklich aus meiner Hand an andere weitergegeben werden. Schicke ich Mails, weiss ich nicht wirklich, wer noch alles mit ließt. Lade ich Bilder privat bei Facebook oder Google+ hoch, wer schaut sie sich noch an außer den Algorithmen? Ist ja nicht nur PRISM, vor unserer eigenen Haustür müssen unsere Rechte auch ordentlich Federn lassen, Thema Bestandsdatenauskunft. Ich hoffe, ich gehe das Thema mit genügend normalen Menschenverstand an. Ich werde mich nicht von Diensten wie Twitter, Facebook, G+ oder App.net verkrümeln. Dort sind einfach zu viele Leute unterwegs, die ich nicht missen möchte. Und ich bekomme darüber zu viele Hinweis auf interessante Themen. Ich werde mir aber in Zukunft überlegen, was ich dort poste. Und ich werde in Zukunft überlegen, welche Dienste ich wirklich nutze. Genug zu den Gründen, jetzt mal zu den Punkten, die ich ändern will. Vollständig wird die Liste nicht sein, im Laufe der Zeit wird sicherlich das ein oder andere ergänzt werden.

Auf der Seite http://prism-break.org/ kann man sich übrigens nach Alternativen zu Diensten und Software umschauen.

Software

Windows durch Linux ersetzen

Warum das? Auf der Präsentation bezüglich PRISM fand sich Microsoft. Könnte sein, dass damit „nur“ die angebotenen Onlinedienste gemeint sind, sicher kann man allerdings nicht sein. Daher werde ich die meine beiden Notebooks versuchen auf Linux umzustellen. Zuerst dachte ich an Ubuntu, allerdings leiten sie in Ubuntu Suchanfragen an Amazon weiter…daher werde ich Linux Mint testen.

Da ich aber noch einiges an Windows-Spielen habe, werde ich schon noch einen Windows-Rechner benötigen (ab und an benötige ich das als „Ausgleich“). Allerdings wird er rein für die Spiele zur Verfügung stehen und keinerlei andere Daten dort drauf liegen. Daher liebäugele ich mit der c’t Steambox.

Chrome durch Firefox

Eigentlich vertraue ich ja Google…eigentlich. Aber was passiert mit den Daten, die sie von mir auch dank der Nutzung von Chrome, sammeln? Dabei denke ich noch nicht mal an die kommerzielle Nutzung, sondern wieder daran, was NSA und co sich davon abgreifen. Daher wechsel von Chrome nach Firefox.

1Password

Jahrelang hat mir 1Password treu gedient. Bei meinem Wechsel von Mac auf Windows letztes Jahr konnte ich eine neue Lizenz für Windows erwerben und alles war gut. Mit dem Wechsel auf Linux muss ich mich leider nach einer Alternative umschauen. Die Alternative muss sowohl für Linux wie auch für Android verfügbar sein.

Stock-Android durch CyanogenMod ersetzen (Privacy Guard)

Auch hier wieder das Problem, dass man nicht wirklich weiss, wer oder was „nach Hause“ telefoniert. Heute musste ich lesen, dass ein Motorola Droid X2 gerne nach Hause telefoniert. Bei CyanogenMod, einem sogenannten Custom ROM, wurde die Funktion Privacy Guard eingefügt. Damit kann man den Zugriff von Apps auf sensitive Daten (z.B. Kalender, Kontakte oder GPS-Position) sperren.

Da ich CyanogenMod bereits auf meinem Samsung S3 ausprobiert habe, werde ich es wohl auch auf meinen anderen Android-Geräten installieren, falls sie entsprechend unterstützt werden.

Dienste

Google Dienste: GMail, Calendar, Drive, Contacts

Meine täglichen Arbeitstiere! Die Umstellung wird sicherlich nicht so einfach werden. Calendar und Contacts wird hoffentlich durch OwnCloud abgedeckt werden können. Bei Drive werde ich insbesondere die Spreadsheet vermissen, da ich damit meine Zeiterfassung für Kundenprojekte durchgeführt habe. Aktuell kann ich nur Calendar und Contacts direkt ablösen. Für GMail und Drive habe ich noch keine direkte Lösung. Bei GMail bin ich mir auch noch nicht sicher, ob ich die Mailserver meines Domainhosters nutzen soll oder versuchen soll, einen eigenen Mailserver aufzusetzen (ich sag nur SINA). Auch ist noch nicht klar, ob es wieder eine Webmailer-Lösung wird, oder ob ein Fat-Client (z.B. Thunderbird) die Arbeit übernimmt.

Dropbox

Ist aktuell mehr oder weniger schon durch die Software Cloud Station des Herstellers meiner NAS-Box, Synology, abgelöst. Allerdings bietet er keinen Linux-Client an. Hier könnte OwnCloud die Alternative sein.

Mail verschlüsseln

Wenn ich auf GMail geblieben wäre, hätte vielleicht Mailvelope eine Lösung sein können. So muss ich es davon abhängig machen, wie der Ersatz für GMail aussehen wird. Bei Nutzung von Thunderbird wäre Enigmail wohl eine Möglichkeit.

Hangouts gegen verschlüsselte Alternative

Nicht nur Google Hangout, auch für Skype sollte eine Alternative her. Das Ganze muss über Plattformgrenzen hinweg funktionieren, am Besten mit einer End-zu-End-Verschlüsselung. Bin gespannt, ob man hier was finden kann.

Evernote

Evernote „missbrauche“ ich aktuell als Bookmarksammlung. Von daher suche ich nicht wirklich nach einer Alternative.

Picasaweb

Picasaweb, oder jetzt eher Google+ Photos. Das automatische Hochladen von gemachten Fotos aufm Smartphone habe ich bereits deaktiviert. Könnte auch durch OwnCloud abgelöst werden.

Play Music (Android)

Da werde ich verschiedene Player ausprobieren müssen. Als erster wird wohl DoubleTwist getestet. Zusammen mit AirSync könnte das eine Lösung sein.

Websuche

Google ist im Moment einfach der Standard, das zu ändern…puh… Ich werde mir DuckDuckGo anschauen.

 

Und jetzt?

Wie geht es jetzt weiter? Während ich viel zu lange an diesem Blogpost gesessen habe, sichere ich die Daten von einem Notebook, welches ich jeden Tag mit zu meinen Kunden nehme. Das heisst, der Wechsel von Windows auf Linux werde ich wohl als Erstes angehen.

Da ich OwnCloud schon vor ein paar Wochen auf meinem NAS installiert und eingerichtet habe, werde ich die Funktionen, die ich dort nutzen kann, parallel weiter einrichten und testen.

Ich bin gespannt, was ich alles vergessen habe und was mir im Laufe der Zeit alles noch auffällt…

Update 03.07.2013

Mittlerweile wurde ich dazu verdonnert, meinen aktuellen Stand mal zu präsentieren. Das Ergbnis findet man hier.

[OwnCloud] Einrichten auf Synology NAS

Wer seine Daten (Kalender, Kontaktdaten, Dateien) nicht mehr in die Hand von Firmen geben will, kann versuchen mit OwnCloud seine Bedürfnisse zu befriedigen. Irgendwo muss die OwnCloud-Installation laufen. Bei mir hat sich mein Synology-NAS angeboten. Dort kann man verschiedene Anwendungen nachinstallieren, um das NAS entsprechend an die eigenen Bedürfnisse anpassen zu können. OwnCloud wird leider nicht standardmässig zur Installation angeboten. Kurzes googeln und es fand sich eine Anleitung, die auch funktioniert hat.

Unter http://www.eg-blog.de/?page_id=639 fand sich eine einfache Anleitung. Wenn man OwnCloud einfach nur mal kurz antesten will, reicht diese Anleitung aus. Will man OwnCloud „richtig“ nutzen, sollte man sich noch die erweiterte Anleitung durchlesen: http://www.eg-blog.de/?page_id=639.

Neben dem in der Anleitung aufgeführten Anwendungsrepository http://www.cphub.net haben ich noch das von http://www.synocommunity.com/ eingebunden. Die Anleitung, wie es einzurichten ist, findet sich unter http://www.synocommunity.com/faq.

Unter http://doc.owncloud.org/server/5.0/user_manual/calendars.html#synchronising-calendars-with-caldav findet sich eine Anleitung, wie man an die Kalenderdaten kommt und mit welcher Adresse man es in entsprechenden mobilen Apps einbinden kann. Für das Syncen der Kalenderdaten nehme ich https://play.google.com/store/apps/details?id=org.dmfs.caldav.lib.

Unter http://doc.owncloud.org/server/5.0/user_manual/contacts.html gibt es eine Anleitung, wie man an die Kontaktdaten kommt. Fürs syncen der Daten habe ich https://play.google.com/store/apps/details?id=org.dmfs.carddav.Sync genutzt.

[Android] Fehler bei Nutzung von Commons Lang 2.5

Wer bei der Android-Entwicklung auf die Unterstützung von Commons Lang nicht verzichten will, und besonders den ReflectionToStringBuilder nutzen möchte, darf nicht eine Version <3.0 verwenden. In meinem Fall hatte ich die Version 2.5 genutzt (weil durch ein anderes Projekt referenziert) und mit folgenden Exceptions bei der Nutzung des ReflectionToStringBuilder zu kämpfen:

java.lang.ExceptionInInitializerError
java.lang.StringIndexOutOfBoundsException

Der Fehler wurde mit Version 3.0 beseitigt.

[Mac] Mac wechselt nicht mehr in den Ruhezustand

Ein Freund von mir hatte das Problem, dass sich sein Mac nicht mehr in den Ruhezustand versetzen lies. Er ist immer wieder aus dem Ruhezustand von selbst aufgewacht, obwohl er das nicht machen sollte. Wie sich rausstellte, war das Problem sein Drucker.

Mittels „pmset -g assertions“ im Terminal gab es folgende Informationen:

18.03.12 16:12:36 MEZ   
Assertion status system-wide:
   ChargeInhibit                           0
   PreventUserIdleDisplaySleep             0
   PreventUserIdleSystemSleep              0
   NoRealPowerSources_debug                0
   CPUBoundAssertion                       0
   EnableIdleSleep                         1
   PreventSystemSleep                      1
   DisableInflow                           0
   DisableLowPowerBatteryWarnings          0
   ExternalMedia                           1

Listed by owning process:
  pid 30: [0x0000012c0000001e] ExternalMedia named: "com.apple.powermanagement.externalmediamounted" 
  pid 514: [0x0000012c00000202] PreventSystemSleep named: "org.cups.cupsd"

PreventSystemSleep zeigt an das es knarzt, sollte auf 0 sein. Unten in der Prozessliste sieht man dann, dass cupsd das problem verursacht. Er hat dann bei den Druckeinestellungen nachgeschaut, und irgendwie stand da was das der Drucker online oder schlafend wäre, was er aber nicht war. Das hatte sich dort restartresistent festgesetzt. Er hat es dann gelöscht. Anschliessend wurde der Drucker offline gezeigt und der Ruhezustand ging wieder.

[Android] RESTEasy und Android

Wurde eine REST-Schnittstelle auf Server-Seite mit RESTEasy implementiert, gab es bisher keine wirkliche Möglichkeit, mit RESTEasy den vorhandenen Code auch auf Android-Seite zu nutzen. RESTEasy funktionierte bisher nicht unter Android. Thomas Diesler hat glücklicherweise ein Projekt auf github (https://github.com/tdiesler/resteasy-mobile) gestartet, welches diesen Teil nachimplementiert. Er hat hierzu auch einen Blogpost verfasst.

Nachfolgende die Kurzform der notwendigen Schritte. Ich habe den Code in drei Projekte aufgeteilt:

  • REST-Interface und Transferobjekte
    In diesem Projekt werden die Transferobjekte und das REST-Interface implementiert. Transferobjekte sind die Klassen, die die Daten zwischen Server und Client kapseln. Wie der Name REST-Interface schon vermuten lässt, wird damit die Schnittstelle zwischen Client und Server definiert (aber noch nicht implementiert). Nutzt Maven.
  • REST-Server-Implementierung
    Die Implementierung der Backend-Logik. Benutzt das REST-Interface und die Transferobjekte. Nutzt Maven.
  • REST für Android
    Die Implementierung der Android-Client-Seite. Benutzt das REST-Interface und die Transferobjekte.

Für das REST-Interface und Transferobjekte wird folgende Dependency in der pom.xml eingetragen:

<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jaxrs</artifactId>
 <version>1.2.1.GA</version>
</dependency>

Für die REST-Server-Implementierung werden folgende Dependencies in der pom.xml eingetragen:

<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jaxrs</artifactId>
 <version>1.2.1.GA</version>
</dependency>

<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jaxb-provider</artifactId>
 <version>1.2.1.GA</version>
 </dependency>

<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>jaxrs-api</artifactId>
 <version>1.2.1.GA</version>
</dependency>

<dependency>
 <groupId>net.sf.scannotation</groupId>
 <artifactId>scannotation</artifactId>
 <version>1.0.2</version>
</dependency>

<dependency>
 <groupId>org.jboss.resteasy</groupId>
 <artifactId>resteasy-jackson-provider</artifactId>
 <version>2.3.1.GA</version>
</dependency>

<!-- Reference to REST-Interface-Project -->
<dependency>
 <groupId>de.yellowshoes.rest</groupId>
 <artifactId>restinterface</artifactId>
 <version>0.0.1-SNAPSHOT</version>
</dependency>

Auf Android-Seite ist kein Maven im Einsatz. Folgende Libraries werden im Buildpath mit aufgenommen:

  • Jackson Core ASL 1.6.3
  • Jackson JAXRS 1.6.3
  • Jackson Mapper ASL 1.6.3
  • Jackson XC 1.6.3
  • JAXRS API 2.2.1 GA von RESTEasy
  • RESTEasy Mobile 1.0.0

Nachfolgend ein einfaches Beispiel, wie eine konkrete Implementierungen aussehen kann:

REST-Interface

Zuerst die Transferklasse. Hier ein Objekt Book. Ein simples POJO, mehr nicht.

public class Book
 {
 private String titel;
 private String author;

 public String getTitel()
 {
 return titel;
 }

public void setTitel( String titel )
 {
 this.titel = titel;
 }

public String getAuthor()
 {
 return author;
 }

public void setAuthor( String author )
 {
 this.author = author;
 }
}

Nun das REST-Interface. Die @Path-Annotation definiert jeweils, an welche Url die Klasse/die Methode gebunden wird. Hier wird das komplette Interface an /api gebunden, die Methode (durch die Vererbung) an /api/book. Mit den Annotations @Consumes und @Produces wird festgelegt, was für MediaTypes verarbeitet werden können und was zurückgeschickt werden kann. Hier wird jeweils JSON definiert.

@Path( "/api" )
@Consumes( MediaType.APPLICATION_JSON )
@Produces( MediaType.APPLICATION_JSON )
public interface RestResourceInterface
 {
 @GET
 @Path( "/book" )
 public Book getBook();
 }

REST-Implementierung

Auf Server-Seite wird nur eine Klasse benötigt.

public class RestResource implements RestResourceInterface
 {
 public Book getBook()
  {
  Book book = new Book();
  book.setAuthor( "Hans Müller" );
  book.setTitel( "REST gut" );
  return book;
  }
}

REST-Android

Auch auf Android-Seite muss nicht mehr viel gemacht werden. Hier eine einfache Client-Implementierung. Das wichtigste ist die Methode getClient(), die über die ProxyFactory die Schnittstellen-Implementierung initialisiert. Der Code sollte ansonsten selbsterklärend sein.

public class ResteasyClient implements RestResourceInterface
 {
 RestResourceInterface client = null;

 @Override
 public Book getBook()
  {
  RestResourceInterface client = getClient();
  Book book = client.getBook();
  return book;
  }

 private RestResourceInterface getClient()
  {
  String requestURI = "http://192.168.11.86:8080/restest/";

  if( client == null )
   {
   BasicHttpParams params = new BasicHttpParams();
   HttpProtocolParams.setVersion( params, HttpVersion.HTTP_1_1 );
   HttpProtocolParams.setContentCharset( params, HTTP.DEFAULT_CONTENT_CHARSET );
   HttpProtocolParams.setUseExpectContinue( params, false );
   client = ProxyFactory.create( RestResourceInterface.class, requestURI, new ApacheHttpClient4Executor( params ) );
   }
  return client;
  }
 }