Prof. Dr. Detlef Stern

eBooks mit dem Raspberry Pi und Calibre verfügbar machen

Der erste Heimdienst für meinen Raspberry Pi dient dazu, meine eBook-Sammlung innerhalb meines lokalen Netzes verfügbar zu machen.

Calibre

Zur Verwaltung meiner eBooks nutze ich auf meinem Desktopsystem die Software Calibre. Etwas präziser: mit Calibre verwalte ich alle DRM-freien eBooks. Die Bücher für den Kindle, die es bei Amazon zu kaufen gibt, werden bei Amazon verwaltet. Die sind sowieso nur ausgeliehen. Bei Amazon habe ich, wenn ich nicht zu sehr daneben liege, deshalb nur 3 eBooks "gekauft" und dafür 11,49€ ausgegeben. Der Rest der Bücher sind gemeinfreie Bücher und Aktionsware.

Calibre Home

Für eBooks gebe ich bei anderen Verlagen Geld aus, z.B. bei O'Reilly (die haben immer mal wieder nette "Ebook deals of the Day") oder bei den Pragmatic Programmers. Bei beiden Verlagen sind die Bücher DRM-frei, werden aktualisiert und sogar mittels Dropbox sehr komfortabel ausgeliefert. Ansonsten gibt es noch viele (legale!) Quellen, auf denen man eBook findet, meistens im EPUB-Format. In der c't 6/2013, Seite 148ff ist sehr schön beschrieben, wie man sich seine eBooks aufbereiten kann. Ganz ähnlich mache ich das auch. Aber ich weiche vom Thema ab.

Mit Hilfe von Calibre verwalte ich meine eBooks und konvertiere sie ggf. in ein Format, dass mein Kindle versteht. Dann stöpsel ich den Kindle per USB an meinen Rechner und kopiere die Bücher auf den Reader. Soweit, so gut. Nur, abends, wenn der Desktoprechner ausgeschaltet ist, fällt einem ein, dass man noch ein bestimmtes Buch lesen wollte. Dummerweise hat man das nicht auf den Kindle kopiert. (Ich verstehe sowieso die Angaben der Hersteller von eBook-Reader nicht: wieso passen in 1GB angeblich 1000 Bücher? Ich habe nicht einmal 300 Bücher und über 1,5GB sind verbraucht...)

Oder: der Kindle liegt oben im Arbeitszimmer und man hat nur das Leih-Tablett, die Tablette) oder gar das Smartphone zur Hand. Dort ist überall eine App zum Lesen von eBooks installiert. Aber den Desktoprechner müsste ich auch in diesem Fall anschmeißen.

Calibre-Server

Zum Glück liefert Calibre eine Serverkomponente gleich mit. Läuft Calibre auf dem Desktoprechner, kann der Server einfach über die Systemeinstellungen eingeschaltet werden. Damit gelingt einem der Transport auf alle Lesegeräte. Hilft einem aber nicht, wenn der Desktoprechner ausgeschaltet ist.

Calibre Server

Besser ist die versteckt dokumentierte Möglichkeit, die Serverkomponente unabhängig von der Verwaltungsoberfläche zu starten. Das ist der Trick, um Calibre auf dem Raspberry Pi zu betreiben. Im Artikel Turn Raspberry Pi into an Ebook Server with Calibre wird angerissen, wie das gehen könnte: einfach Calibre auf dem Raspberry installieren, die Sammlung mit dem eBooks kopieren, fertig.

Leider ist das nur der halbe Weg, der mit den einfachen Schritten. Die Serverkomponente soll auch dann laufen, wenn kein Benutzer angemeldet ist (das ist nicht schwer). Sie soll nach einem Neustart automatisch gestartet werden (das schon mehr). Die Sammlung muss sicher aktualisiert werden (das auch). Und, als kleiner Hack für eine Unschönheit der Serverkomponente, muss diese nach einer Aktualisierung neu gestartet werden. Sonst ist die Aktualisierung nicht wirksam.

Installation der Komponenten

Da ich, im Unterschied zum oben genannten Artikel, Arch Linux nutze, muss ich andere Befehle zum Installieren von Calibre angeben (ich bin als root angemeldet):

pacman -S calibre

Das dauert etwas länger, da Calibre jede Menge an abhängigen Paketen benötigt. Ein Kaffee wäre jetzt angemessen.

Danach lege ich einen eigenen Nutzer für den Dienst an und gebe diesem ein initiales Passwort. Den Nutzer benötige ich, um die eBook-Sammlung zu aktualisieren.

useradd -m -g users -s /bin/bash calibre
passwd calibre

Der Nutzer sollte für den SSH-Dienst autorisiert werden. Da auf meinen System "explizit ist besser als implizit" gilt, muss ich ihn in der Datei /etc/ssh/sshd_config unter AllowUser eintragen.

Erstkopie der eBook-Sammlung

Jetzt muss die eBook-Sammlung auf den RPi kopiert werden. Da trennen sich Spreu und Weizen, sprich die Betriebssysteme. Mit OSX und Unix-artigen Betriebssystem ist alles recht einfach, bei Windows kann ich nicht gut mitreden. Vielleicht weiß ein Windows-Guru, wie man optimal Daten auf einen Linux-Rechner überspielt.

Wo Calibre auf dem Desktoprechner seine Sammlung ablegt, verrät ein Blick in Willkommens-Assistenten. Auf meinem Desktoprechner ist es das Verzeichnis ~/Documents/Calibre. Das synchronisiere ich jetzt mit dem Verzeichnis des frisch angelegten Benutzers calibre mit Hilfe des Befehls rsync. Unter Arch Linux muss dieser explizit installiert werden, also mit pacman -S rsync.

Ich öffne auf meinem Desktoprechner ein Terminal, stelle sicher, dass die Software Calibre nicht läuft und setze folgenden Befehl ab (192.168.0.250 sei die IP-Adresse des Raspberry):

rsync -az --delete -e ssh ~/Documents/Calibre/ calibre@192.168.0.250:/home/calibre/library

Diesen Befehl merken Sie sich oder, viel besser, sichern ihn als Alias oder Shell-Skript. Damit können Sie jederzeit die Daten der eBook-Sammlung aktualisieren.

Wer nicht jedes Mal das Kennwort eingeben möchte, kann sich gern mit der Schlüsselauthentifizierung von SSH beschäftigen. Ist nicht schwer, macht alles komfortabler, ist aber nicht essentiell für diesen Blogeintrag.

Nun arbeite ich wieder auf dem Raspberry Pi unter dem Benutzer root weiter.

Calibre testen

Als erstes teste ich, ob alles soweit läuft. Dazu wechsle ich in den Benutzer calibre und probiere aus, ob die Serverkomponente funktioniert:

su - calibre
calibre-server --with-library=/home/calibre/library

Nachdem die Serverkomponente gestartet ist (dauert ein wenig bei einer etwas größeren eBook-Sammlung), kann ich mit meinem Web-Browser prüfen, ob alles soweit funktioniert. Ich rufe dazu einfach die Seite http://192.168.0.250:8080 auf (die IP-Adresse des RPi). Sofern alles geklappt hat, kann ich den Server mit einem beherzten ^C (Ctrl-C, Strg-C) beenden. Mit dem Befehl exit wechsel ich wieder zum Benutzer root.

Bisher bin ich nicht weitergekommen, als im obigen Artikel "Turn Raspberry Pi into...". Jetzt installiere ich Calibre so, dass es gemeinsam mit dem Raspberry startet.

Calibre konfigurieren

Das von Arch Linux verwendete systemd dient dazu, alle benötigten Dienste zu kontrollieren. Auf Basis einer Dienstbeschreibung startet systemd die Dienste in der "richtigen" Reihenfolge. systemd war für mich einer der Gründe zu Arch Linux zu wechseln.

Also muss ich eine systemd-kompatible Beschreibung für meinen Calibre-Server erzeugen. Das mache ich mit einem Editor meiner Wahl (manche nutzen den vorinstallierten nano) und speichere sie unter dem Namen /etc/systemd/system/calibre.service. Dies ist der Inhalt:

cat <<EOF >/etc/systemd/system/calibre.service
[Unit]
Description=Calibre Library Server
Documentation=http://manual.calibre-ebook.com/cli/calibre-server.html

[Service]
Type=simple
ExecStart=/usr/bin/calibre-server -p 8080 --thread-pool=10 --with-library=/home/calibre/library --max-cover=150x200
User=calibre
After=network.target

[Install]
WantedBy=multi-user.target
EOF

Die Angabe -p 8080 (in der Zeile ExecStart=...) definiert den TCP-Port, auf dem die Serverkomponente Anfragen erwartet. Der Wert 8080 ist die Voreinstellung, die manche nicht unbedingt beibehalten möchten. Mit --thread-pool=10 kann Calibre nur 10 Abfragen gleichzeitig beantworten, was absolut ausreichend ist und gegenüber der Voreinstellung von 30 Thread etwas an Ressourcen einspart. Die Option --max-cover=150x200 begrenzt die Größe der Buchtitelbilder. Diese Angabe spart etwas an Rechenzeit, die Seite baut sich dadurch schneller auf.

Wer möchte, gibt die Optionen --username=USER und --password=PASSWORD an (natürlich mit vernünftigen Werten für USER/PASSWORD), um den Zugriff auf Eingeweihte zu beschränken.

Durch die Zeile User=calibre läuft die Serverkomponente mit den Rechten des Benutzers calibre, was immer eine gute Idee ist.

Jetzt gilt es, den Dienst zu aktivieren und zu starten. Das geht mit systemd ganz einfach:

systemctl enable calibre.service
systemctl start calibre.service

Eigentlich wäre ich nun fertig. Eigentlich. Aber es gibt einen kleinen Haken.

Den kleinen Haken beseitigen

Wenn die Serverkomponente gestartet ist und die eBook-Sammlung währenddessen aktualisiert wurde, bekommt dies die Serverkomponente nicht mit. Vermutlich liest sie nur beim Start alle wichtigen Daten ein und bekommt von einer Aktualisierung nichts mit. Sprich: die Serverkomponente muss neu gestartet werden.

Das lässt sich unterschiedlich erreichen. Mir persönlich reicht es, wenn die eBooks am nächsten Tag zugreifbar sind. Möchte ich schon heute auf diese zugreifen, kann ich ja die Desktopversion nutzen. Ich brauche nur noch dafür sorgen, dass die Serverkomponente regelmäßig, z.B. um 3:14 Uhr in der Nacht, neu gestartet wird.

Dazu gebe ich als Benutzer root den Befehl

crontab -e

ein und erstelle mit dem voreingestellten Editor folgenden Dateiinhalt:

14 3 * * * /usr/bin/systemctl restart calibre.service

Dies ist zugleich ein Beispiel, wie man mit systemd einen Dienst neu startet. Wer nicht bis 3:14 Uhr nachts warten möchte, kann sich als Benutzer root im Raspberry anmelden und den Befehl manuell eingeben.

Fertig

Jetzt spricht nichts mehr dagegen, mit einem Gerät des modernen Lebensstils die URL http://192.168.0.250:8080 anzusurfen und sich das eBook der Wahl herunterzuladen. Außer ...

Ja, außer, dass ich jetzt eine größere SD-Karte für meinen RPi benötige. Die eBook-Sammlung wächst!

Fertig.

Für Hinweise, Anregungen, Lob und Kritik bin ich dankbar. Mangels Kommentarsystem gerne via Mail, Google+, App.net oder Twitter.

Im nächsten Teil zeige ich, wie Sie den Raspberry Pi in ein kleines Privacy-Device mittels OpenVPN verwandeln.