{"id":1812,"date":"2022-08-02T07:26:33","date_gmt":"2022-08-02T07:26:33","guid":{"rendered":"https:\/\/www.dev-metal.ch\/?p=1812"},"modified":"2022-11-11T21:56:59","modified_gmt":"2022-11-11T21:56:59","slug":"calibre-auf-hc4","status":"publish","type":"post","link":"https:\/\/www.dev-metal.ch\/?p=1812","title":{"rendered":"Calibre und Calibre-web auf HC4 mit armbian"},"content":{"rendered":"<p>Auf meinem HC4 NAS soll Calibre die Bibliotheksverwaltung meiner eBooks \u00fcbernehmen. Hier wird die Installation beschrieben.<\/p>\n<p>Seit Mitte 2022 ist die Version 6.0 von Calibre verf\u00fcgbar, welche die ARM CPU Architektur unter Linux unterst\u00fctzt. Es waren bisher zwar auch Debian-Pakete f\u00fcr Calibre verf\u00fcgbar, diese waren aber meist veraltet. Calibre empfielt explizit, keine Distro-Pakete einzusetzen und statdessen ihren Installer zu verwenden.<\/p>\n<h2>Installation<\/h2>\n<p>Notwendige Pakages installieren<\/p>\n<ul>\n<li>python \u2265 3.3 =&gt; armbian liefert bereits 3.10 mit.<\/li>\n<li>xdg-utils<\/li>\n<li>wget =&gt; wget bereits auf armbian installiert.<\/li>\n<li>xz-utils<\/li>\n<li>libegl1<\/li>\n<li>libopengl0<\/li>\n<\/ul>\n<pre>sudo apt-get install xdg-utils\r\nsudo apt-get install xz-utils\r\nsudo apt-get install libegl1\r\nsudo apt-get install libopengl0<\/pre>\n<p>Nun kann Calibre \u00fcber das installer-Skript installiert werden. Ich f\u00fchre eine isolierte Installation durch und installiere Calibre auf einem eigens daf\u00fcr eingerichteten Platz auf der HDD:<\/p>\n<pre>wget -nv -O- https:\/\/download.calibre-ebook.com\/linux-installer.sh | sh \/dev\/stdin install_dir=\/mnt\/program_data\/calibre-bin isolated=y<\/pre>\n<p>Damit ist Calibre unter \/mnt\/program_data\/calibre-bin installiert. Calibre ist eine Desktop Anwendung, welche \u00fcber eine Server-Komponente verf\u00fcgt. Logischerweise kann Calibre selber nicht gestartet werden, da wir ja einen headless Server einsetzen. Folgender Aufruf f\u00fchrt entsprechend zu einem Fehler:<\/p>\n<pre>\/mnt\/program_data\/calibre-bin\/calibre\/calibre<\/pre>\n<p>Um die Server-Komponente starten zu k\u00f6nnen, m\u00fcssen noch einige Schritte getan werden:<\/p>\n<pre>cd \/mnt\/program_data\/calibre-bin\r\nmkdir mkdir calibre-library\r\ncd calibre-library<\/pre>\n<p>irgend ein eBook herunterladen<\/p>\n<pre>wget http:\/\/www.gutenberg.org\/ebooks\/46.kindle.noimages -O christmascarol.mobi<\/pre>\n<p>Das Buch der Calibre-db hinzuf\u00fcgen:<\/p>\n<pre>cd \/mnt\/program_data\/calibre-bin\/calibre\r\n.\/calibredb add \/mnt\/program_data\/calibre-bin\/calibre-library\/*.mobi --with-library \/mnt\/program_data\/calibre-bin\/calibre-library\/Calibre<\/pre>\n<p>Damit wurde eine Calibre Library unter \/mnt\/program_data\/calibre-bin\/calibre-library\/Calibre erstellt und gleichzeitig das Buch hinzugef\u00fcgt.<\/p>\n<p>Nun kann der Calibre-Server gestartet werden. Da ich den Standart-Port 8080 breits verwende, weise ich \u00fcber den Parameter &#8211;port den Port 8081 zu:<\/p>\n<pre>cd \/mnt\/program_data\/calibre-bin\/calibre\r\n.\/calibre-server --port 8081  \/mnt\/program_data\/calibre-bin\/calibre-library\/Calibre<\/pre>\n<p>Nun, da der Server l\u00e4uft, kann man das Web-Interface aufrufen:<\/p>\n<pre>http:\/\/192.168.x.xxx:8081<\/pre>\n<h3>Service erstellen<\/h3>\n<p>Achtung: Dieser Service soll nach dem mounten der btrfs Shares durchgef\u00fchrt werden. Es ist daher n\u00f6tig, die Reihenfolge der Services zu beeinflussen. <a href=\"https:\/\/www.dev-metal.ch\/?p=1913\" target=\"_blank\" rel=\"noopener\">Hier habe ich beschrieben<\/a> wie ich das konkret umgesetzt habe.<\/p>\n<pre>sudo vi \/etc\/systemd\/system\/calibre-server.service<\/pre>\n<pre>## startup service\r\n[Unit]\r\nDescription=calibre content server\r\n<del>After=runlevel4.target<\/del> =&gt; eigenes Target siehe https:\/\/www.dev-metal.ch\/?p=1913\r\n\r\n[Service]\r\nType=simple\r\nUser=xxx\r\nGroup=&lt;Gruppe, welche Schreibzugriff auf \/mnt\/multimedia\/books hat&gt;\r\nExecStart=\/mnt\/program_data\/calibre-bin\/calibre\/calibre-server --port 8081 \/mnt\/program_data\/calibre-bin\/calibre-library\/Calibre --enable-local-write\r\n\r\n[Install]\r\n<del>WantedBy=multi-user.target <\/del> =&gt; eigenes Target siehe https:\/\/www.dev-metal.ch\/?p=1913<\/pre>\n<pre>sudo systemctl enable calibre-server\r\nsudo service calibre-server start<\/pre>\n<p>Ab sofort wird Calibre-Server als Service beim System-Boot mit gestartet.<\/p>\n<h3>Die B\u00fccherbilbiothek Calibre hinzuf\u00fcgen<\/h3>\n<p>Ich verf\u00fcge bereits \u00fcber sehr viele eBooks, welches sich unter \/mnt\/multimeda\/books befinden. Dies k\u00f6nnen nun der Calibre-DB hinzugef\u00fcgt werden:<\/p>\n<pre>.\/calibredb add \/mnt\/multimedia\/books\/ -r --with-library http:\/\/localhost:8081#Calibre<\/pre>\n<p>Zu beachten ist hier, dass f\u00fcr den library-pfad die lokale http URL verwendet wird. Dies ist n\u00f6tig, weil calibredb ansonsten den Aufruf bei laufendem Server nicht erlaubt. Da wir den Service mit &#8211;enable-local-write gestartet haben, kann calibredb \u00fcber die lokale URL (localhost) dennoch direkte B\u00fccher hinzuf\u00fcgen.<\/p>\n<p>Im weiteren werden hier die B\u00fccher von \/mnt\/multimedia\/books nach Calibre kopiert.<\/p>\n<h3>Automatisch B\u00fccher der Bibliothek hinzuf\u00fcgen<\/h3>\n<p>Es g\u00e4be die M\u00f6glichkeit einen &#8222;Listener-Ordner&#8220; zu definieren, \u00fcber welchem calibredb dann jeweils B\u00fccher direkt importiert. Dann m\u00fcssten die b\u00fccher nur in diesen Ordner kopiert werden und diese w\u00fcrden dann automatisch nach Calibre eingelesen: <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-create-a-calibre-ebook-server-on-ubuntu-20-04#step-6-mdash-optional-automatically-adding-books-to-your-calibre-library\" target=\"_blank\" rel=\"noopener\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-create-a-calibre-ebook-server-on-ubuntu-20-04#step-6-mdash-optional-automatically-adding-books-to-your-calibre-library<\/a><\/p>\n<p>Dies verwende ich aber (mal bis auf weiteres) nicht, da B\u00fccher auch elegant \u00fcber die Weboberfl\u00e4che von Calibre oder Calibre-Web hochgeladen werden k\u00f6nnen.<\/p>\n<h3>Calibre-web<\/h3>\n<p>Das Standard- Web-Interface von Calibre ist zwar zu gebrauchen, aber sicher nicht &#8222;state of the art&#8220;. Es gibt ein Projekt &#8222;<a href=\"https:\/\/github.com\/janeczku\/calibre-web\" target=\"_blank\" rel=\"noopener\">Calibre-Web<\/a>&#8222;, welches ein sch\u00f6neres Interface f\u00fcr die Verwaltung einer Calibre Datenbank bietet (<a href=\"https:\/\/github.com\/janeczku\/calibre-web\/wiki\/Manual-installation\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/janeczku\/calibre-web\/wiki\/Manual-installation<\/a>):<\/p>\n<pre>sudo apt install python3-pip python3-venv python3-dev<\/pre>\n<p>Installations-Verzeichnis erstellen:<\/p>\n<pre>mkdir \/mnt\/program_data\/calibre-bin\/calibre-web\r\ncd \/mnt\/program_data\/calibre-bin\/calibre-web<\/pre>\n<p>Virtuelle Umgebung f\u00fcr calibre-web in ordner venv erstellen<\/p>\n<pre>python3 -m venv venv<\/pre>\n<p>Calibreweb in virutelle Umgebung installieren:<\/p>\n<pre>cd \/mnt\/program_data\/calibre-bin\/calibre-web\r\n.\/venv\/bin\/python3 -m pip install calibreweb<\/pre>\n<p>Calibre-Web starten<\/p>\n<pre>.\/venv\/bin\/python3 -m calibreweb<\/pre>\n<p>URL \u00f6ffnen<\/p>\n<pre>http:\/\/192.168.x.x:8083<\/pre>\n<h4>Login<\/h4>\n<p>Default admin login:<br \/>\nUsername: admin<br \/>\nPassword: admin123<\/p>\n<p>Calibre Datenbank konfigurieren<\/p>\n<p><a href=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1827\" src=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15.png\" alt=\"\" width=\"1173\" height=\"794\" srcset=\"https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15.png 1173w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15-300x203.png 300w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15-1024x693.png 1024w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15-768x520.png 768w, https:\/\/www.dev-metal.ch\/wp-content\/uploads\/2022\/08\/Bildschirmfoto-vom-2022-08-02-15-05-15-1x1.png 1w\" sizes=\"auto, (max-width: 1173px) 100vw, 1173px\" \/><\/a><\/p>\n<h4>Calibre-Web Konfig Files<\/h4>\n<p>Alle Konfig-Files (settings database, logfiles) befinden sich unter<\/p>\n<pre>cd \/homes\/[username]\/.calibre-web<\/pre>\n<p>zus\u00e4tzlichen Konfig-Files (f\u00fcr gdrive,\u00a0 gmail, etc.) sind dort zu konfigurieren.<\/p>\n<h4>Calibre-Web als Service installieren<\/h4>\n<p>Siehe <a href=\"https:\/\/github.com\/janeczku\/calibre-web\/wiki\/Setup-Service-on-Linux#start-calibre-web-as-service-under-linux-with-systemd\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/janeczku\/calibre-web\/wiki\/Setup-Service-on-Linux#start-calibre-web-as-service-under-linux-with-systemd<\/a><\/p>\n<p>Achtung: Dieser Service soll nach dem mounten der btrfs Shares durchgef\u00fchrt werden. Es ist daher n\u00f6tig, die Reihenfolge der Services zu beeinflussen. <a href=\"https:\/\/www.dev-metal.ch\/?p=1913\" target=\"_blank\" rel=\"noopener\">Hier habe ich beschrieben<\/a> wie ich das konkret umgesetzt habe.<\/p>\n<p>Service File erstellen<\/p>\n<pre>sudo vi \/etc\/systemd\/system\/cps.service<\/pre>\n<pre>[Unit]\r\nDescription=Calibre-Web\r\n<del>After=runlevel4.target<\/del> =&gt; eigenes Target. Siehe https:\/\/www.dev-metal.ch\/?p=1913\r\n\r\n[Service]\r\nType=simple\r\nUser=ralwet\r\nExecStart=\/mnt\/program_data\/calibre-bin\/calibre-web\/venv\/bin\/python3 -m calibreweb\r\n\r\n[Install]\r\n<del>WantedBy=multi-user.target<\/del> =&gt; eigenes Target. Siehe https:\/\/www.dev-metal.ch\/?p=1913<\/pre>\n<p>Service aktivieren<\/p>\n<pre>sudo systemctl enable cps.service<\/pre>\n<p>Service starten<\/p>\n<pre>sudo service cps status<\/pre>\n<h4>Gut zu wissen:<\/h4>\n<h5>Installations-Pfad<\/h5>\n<p>Hier wird die Installation \u00fcber den pip paket-manager durchgef\u00fchrt. Wenn man wissen will, wo calibre-web effektiv installiert ist:<\/p>\n<pre>\/mnt\/program_data\/calibre-bin\/calibre-web\/venv\/bin\/pip show calibreweb\r\n\r\nName: calibreweb\r\nVersion: 0.6.19\r\nSummary: Web app for browsing, reading and downloading eBooks stored in a Calibre database.\r\nHome-page: https:\/\/github.com\/janeczku\/calibre-web\r\nAuthor: @OzzieIsaacs\r\nAuthor-email: Ozzie.Fernandez.Isaacs@googlemail.com\r\nLicense: GPLv3+\r\nLocation: \/mnt\/program_data\/calibre-bin\/calibre-web\/venv\/lib\/python3.10\/site-packages\r\nRequires: advocate, APScheduler, Babel, backports-abc, chardet, Flask, Flask-Babel, Flask-Login, Flask-Principal, flask-wtf, iso-639, lxml, PyPDF3, pytz, requests, SQLAlchemy, tornado, unidecode, Wand, werkzeug\r\nRequired-by:<\/pre>\n<h5>Security-Header<\/h5>\n<p>Der Security-Header kann hier angepasst werden. =&gt; Man muss aber wissen was man tut&#8230; \ud83d\ude09<\/p>\n<pre>vi \/mnt\/program_data\/calibre-bin\/calibre-web\/venv\/lib\/python3.10\/site-packages\/calibreweb\/cps\/web.py\r\n\r\n@app.after_request\r\ndef add_security_headers(resp):\r\n# csp = \"default-src 'self'\"\r\n# csp += ''.join([' ' + host for host in config.config_trustedhosts.strip().split(',')])\r\n# csp += \" 'unsafe-inline' 'unsafe-eval'; font-src 'self' data:; img-src 'self' \"\r\n# if request.path.startswith(\"\/author\/\") and config.config_use_goodreads:\r\n# csp += \"images.gr-assets.com i.gr-assets.com s.gr-assets.com\"\r\n# csp += \" data:\"\r\n# resp.headers['Content-Security-Policy'] = csp\r\n# if request.endpoint == \"edit-book.show_edit_book\" or config.config_use_google_drive:\r\n# resp.headers['Content-Security-Policy'] += \" *\"\r\n# elif request.endpoint == \"web.read_book\":\r\n# resp.headers['Content-Security-Policy'] += \" blob:;style-src-elem 'self' blob: 'unsafe-inline';\"\r\n# resp.headers['X-Content-Type-Options'] = 'nosniff'\r\n# resp.headers['X-Frame-Options'] = 'SAMEORIGIN'\r\n# resp.headers['X-XSS-Protection'] = '1; mode=block'\r\n# resp.headers['Strict-Transport-Security'] = 'max-age=31536000;'\r\nreturn resp<\/pre>\n<p>&nbsp;<\/p>\n<h2>Links<\/h2>\n<ul>\n<li><a href=\"https:\/\/calibre-ebook.com\/download_linux\" target=\"_blank\" rel=\"noopener\">https:\/\/calibre-ebook.com\/download_linux<\/a><\/li>\n<li><a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-create-a-calibre-ebook-server-on-ubuntu-20-04\" target=\"_blank\" rel=\"noopener\">https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-create-a-calibre-ebook-server-on-ubuntu-20-04<\/a><\/li>\n<li><a href=\"https:\/\/manual.calibre-ebook.com\/generated\/en\/calibre-server.html\" target=\"_blank\" rel=\"noopener\">https:\/\/manual.calibre-ebook.com\/generated\/en\/calibre-server.html<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=teg0Rrjt_x4\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=teg0Rrjt_x4<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/janeczku\/calibre-web\/wiki\/Manual-installation\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/janeczku\/calibre-web\/wiki\/Manual-installation<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auf meinem HC4 NAS soll Calibre die Bibliotheksverwaltung meiner eBooks \u00fcbernehmen. Hier wird die Installation beschrieben. Seit Mitte 2022 ist die Version 6.0 von Calibre verf\u00fcgbar, welche die ARM CPU Architektur unter Linux unterst\u00fctzt. Es waren bisher zwar auch Debian-Pakete f\u00fcr Calibre verf\u00fcgbar, diese waren aber meist veraltet. Calibre empfielt explizit, keine Distro-Pakete einzusetzen und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[10],"tags":[],"class_list":["post-1812","post","type-post","status-publish","format-standard","hentry","category-techdocs"],"modified_by":"ralph","_links":{"self":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1812"}],"version-history":[{"count":22,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1812\/revisions"}],"predecessor-version":[{"id":1919,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=\/wp\/v2\/posts\/1812\/revisions\/1919"}],"wp:attachment":[{"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-metal.ch\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}