Setup Calibre on FreeBSD
2020-04-13This article describes the installation of a calibre-based ebook server via ansible on a RaspberryPi running FreeBSD
Installing the system
Note: All snippets are meant to be part of an ansible configuration file.
---
- name: install calibre
pkgng:
name: calibre
state: present
We we'll use a distinct calibre user and corresponding group for running the server. Also, an init script which is provided by the installation of the calibre package is using the calibre user per default.
- name: ensure group "calibre" exists
group:
name: calibre
state: present
Create the corresponding user calibre with main group calibre.
- name: create user "calibre" with primary group "calibre"
user:
name: calibre
group: calibre
In the current system setup, there will be a folder /Calibre_Library that contains the books and metadata.db. As an alternative, you can think about an external drive (e.g. usb stick, ssd, nfs) for storing the library.
- name: create library directory
file:
path: /Calibre_Library
state: directory
If we stay with an empty directory, calibre_server will raise an error that Calibre_Library is not a library. Most probably that has someting to do with a missing metadata.db file. For that reason we will "init" the library with a "dummy" book.
- First approach: Adding an empty book (-e) in combination with a title (-t) is not detected as a duplicate an hence consectuive calls will add the same book again and again to our library.
- Second approach: Adding a book and immediately deleting it will result in a server error (i.e. it seems there need to be at least one book that can be served by the calibre-server)
- Third and chosen approach: Use the calibre quick start guide which comes per default with a calibre installation.
- name: adding quick start guide
shell: calibredb add /usr/local/share/calibre/quick_start/deu.epub --library-path /Calibre_Library
The former command was executed as root user that leads to a problem with the access rights. We fix that by chown the complete library folder with all it's files to the calibre user.
- name: set ownership of library path to user calibre
file:
path: /Calibre_Library
state: directory
owner: calibre
group: calibre
recurse: yes
For OPDS and adding books from a remote host via command line, we need to authenticate us as a valid user. Create a user database that is used by calibre-server for authentication.
- name: create userdb
expect:
command: calibre-server --userdb /usr/local/etc/cbusers.sqlite --manage-users
creates: /usr/local/etc/cbusers.sqlite
responses:
(.*)What do you want to do?(.*): "1"
(.*)Enter the username(.*): "test"
(.*)Enter the new password for(.*): "test"
(.*)Re-enter the new password for(.*): "test"
Finally, we will add a calibre server entry to /etc/rc.conf because otherwise the service is not allowed to be started. Here, we're using freebsd's calibre service file that comes with the installation of calibre package. Some remarks:
- reduce worker-count because of overload during an ebook upload due to the fact that several workers potentise the load on e.g. tmpfs fixme: worker-count to coarse also affects the process of preparing books for online reading (slows down)
- better: use a swapfs or mount bigger tmp folder
- name: enable calibre server in rc
blockinfile:
path: /etc/rc.conf
marker: "# {mark} ANSIBLE MANAGED CALIBRE BLOCK"
block: |
calibre_enable="YES"
calibre_user=calibre
calibre_library=/Calibre_Library
calibre_flags="--userdb /usr/local/etc/cbusers.sqlite --enable-auth --listen-on 127.0.0.1 --worker-count=1"
Thanks for reading. Feel free to send comments, questions, or recommendations via Mail.