Calibre on FreeBSD

2020-04-13

This article describes the installation of a calibre-based ebook server via ansible on a RaspberryPi running FreeBSD

Calibre on FreeBSD

This article describes the installation of a calibre-based ebook server via ansible on a RaspberryPi running FreeBSD.

Preface

I want to have a description about my homelab here

Installing the system

Calibre

  ---
  - 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"

#literate, #devops