Serie: NAS mit ODROID-HC4 - Teil 3: Calibre

Di, 12. Oktober 2021, Martin Brodbeck

Mit dieser Artikelserie soll das Einrichten eines kleinen, günstigen NAS erläutert werden. Linux basierte Clients im Haushalt sollen darauf ihre Backups ablegen. Damit eine defekte NAS-Festplatte keinen Daten-GAU verursacht, werden die Daten per RAID1 gespiegelt. Der generische Ansatz (kein Fertigsystem) soll uns dabei helfen, auch andere Wünsche an das NAS zu erfüllen, wie z. B. ein Calibre Server.

Es sind folgende Teile geplant:
1. Hardware und Betriebssystem
2. Backups mit Borg
3. Calibre Server
4. Samba Server

Subvolume @calibre

Wie schon für den Borg Backup-Teil, erstellen wir auch hier ein Subvolume, dediziert für unsere Calibre Bibliothek:

# mkdir /mnt/temp
# mount /dev/sda /mnt/temp
# btrfs subvolume create /mnt/@calibre
# umount /mnt/temp

Damit das Subvolume automatisch eingehängt wird, erstellen wir noch das Verzeichnis /mnt/calibre und fügen folgenden Eintrag in /etc/fstab hinzu:

[…]
/dev/sda1 /mnt/calibre btrfs defaults,nofail,noatime,compress=zstd,subvol=@calibre 0 0

Die Optionen können natürlich nach Belieben modifiziert werden. Ich habe mich für eine Kompression mittels des zstd-Algorithmus entschieden. nofail bewirkt, dass das System auch startet, wenn es beim Einhängen Probleme gibt.

Wenn man sich einen Reboot ersparen will, mountet man das Subvolume nun einfach einmalig mit mount /mnt/calibre (als root).

Nginx und der Calibre Server

Nach Installation der Pakete calibre (samt umfangreicher Abhängigkeiten) und nginx erstellen wir einen User calibre und legen ihn als Besitzer für die E-Book-Bibliothek fest:

# useradd -m calibre
# chown calibre:calibre /mnt/calibre

Ziel ist, dass die Calibre Bibliothek über http://droidnas/calibre erreichbar ist. Hierzu kann man den Symlink /etc/nginx/sites-enabled/default löschen und eine neue site-Datei /etc/nginx/sites-available/calibre erstellen:

server {
  listen 80;
  proxy_set_header X-Forwarded-For $remote_addr;
  location /calibre/ {
      proxy_buffering off;
      proxy_pass http://127.0.0.1:8080$request_uri;
  }
  location /calibre {
      # we need a trailing slash for the Application Cache to work
      rewrite /calibre /calibre/ permanent;
  }
}

Nun muss noch ein systemd-Service erstellt werden, der calibre-server entsprechend unseren Wünschen startet. Dazu erstellen wir die Datei /etc/systemd/system/calibre-server.service mit folgendem Inhalt:

[Unit]
Description=calibre Content server
After=network.target

[Service]
Type=simple
User=calibre
Group=calibre
ExecStart=/usr/bin/calibre-server --listen-on 127.0.0.1 --port 8080 --url-prefix /calibre "/mnt/calibre/Calibre Bibliothek"

[Install]
WantedBy=multi-user.target

Ist das gemacht, informieren wir systemd über die neue Konfigurationsdatei mittels systemctl daemon-reload.

Nun gilt es, die Calibre Bibliothek vom PC auf das NAS zu übertragen. Dazu kopieren wir am besten den Public SSH Key in /home/calibre/.ssh/authorized_keys und nutzen rsync zur Dateiübertragung:

rsync -rlptv --delete ~/Dokumente/Calibre\ Bibliothek calibre@beenas:/mnt/calibre/

Die Pfade sind selbstverständlich ggf. jeweils anzupassen.

Um die nginx Site zu aktivieren, erstellen wir den entsprechenden Symlink und aktivieren ausserdem den calibre-server Daemon:

# ln -s /etc/nginx/sites-available/calibre /etc/nginx/sites-enabled/calibre
# systemctl enable --now calibre-server.service

Fertig ist der Calibre Serverdienst, der jederzeit mit einem Browser über http://droidnas/calibre erreicht werden kann. Ändert sich die am PC gepflegte Bibliothek, kann das Delta einfach wieder über das obige rsync-Kommando übertragen werden. Anschliessen muss man nur noch den calibre-Dienst mittels systemctl restart calibre-server neu starten, damit die Änderungen eingelesen werden.

Im vorerst letzten Teil schauen wir uns noch das Einrichten eines einfachen Shares an, das z. B. zum Dateiaustausch in der Familie dienen kann.