I have a huge problem I had to address long time ago. I have so many books, but my organization is zero. At first, I tried to upload my ebooks to Kindle service, but not all books (larger ones) would fit to the service and after some time, I had a mess on my hands, because books would be across devices and directories.
And who is to blame for this? Humble Bundle. They have all kind of great deals on books and comics. I bought a lot of books there since they started they Book and Comics packs and after some time I figured that I’m getting lost in my collections.
Really great site, if you haven’t checked it out yet, I highly recommend it.
Now, onto our problem… Ebook organization.
I looked a lot and tested a lot of solutions, and in the end I selected to stick with Calibre. I checked Ubooquity and some other solutions, but in the end, I went back to Calibre, because it simply fits best my needs.
Before we begin
I’m doing this on Ubuntu 20.04 with desktop environment. I did it this way because it is easier to organize books on machine with GUI. All of this can be also done on server without GUI, there is still web interface through which you can organize your collections.
My machine also has fixed IP address, and other than that, it is empty machine.
I allocated 2vCPUs, 1GB or RAM and 120GB of hard drive for this machine.
I will be using it on local network and it will be only ebook server, so I don’t need HTTPS or security hardening. So if you are looking for that, you will need to check other sources on the internet.
Installation of Calibre server
First, we need to prepare dependencies
sudo apt update && sudo apt install -y libfontconfig libgl1-mesa-glx
Now we will download and then install Calibre…
wget https://download.calibre-ebook.com/linux-installer.sh
I’m doing all of this inside my home folder.
Start installation with
sudo sh linux-installer.sh
If you are doing this in installation without GUI you will get error regarding desktop environment, but you can safely ignore it.
Creating a library, adding a book.
Since I did this around last Christmas, I think it is appropriate that I download Christmas Carol. We will download the book from Project Gutenberg. Project Gutenberg has free ebooks in public domain. Great resource for many classic books.
Ok, lets download Christmas Carol.
wget http://www.gutenberg.org/ebooks/46.kindle.noimages -O christmascarol.mobi
I will now create directory named calibre-library. Location of the directory will be in /home/zeljko/ folder. I already mentioned that I will be doing all of this inside my home dir.
mkdir calibre-library
Now, we will add downloaded book to our library with calibredb command.
calibredb add *.mobi --with-library calibre-library/
Ok, I got “Added book ids: 1” message which signal that everything went ok.
Running Calibre Content Server
If you have firewall up and running make sure you let through port 8080
sudo ufw allow 8080
Let’s start Calibre Content Server
calibre-server calibre-library
If you enter your IP address with port 8080 into browser you will be greeted with Calibre library.
http://10.10.1.28:8080 is the IP address of my ebook server.
Ok, this is the way you will start your Calibre Content Server. But you will have to do it manually every time.
We will now create service for Calibre Content Server
We will create calibre-server.service file inside /etc/systemd/system folder.
sudo nano /etc/systemd/system/calibre-server.service
Enter this into the file. Be sure to exchange zeljko with your user account on ubuntu.
## startup service
[Unit]
Description=calibre content server
After=network.target
[Service]
Type=simple
User=zeljko
Group=zeljko
ExecStart=/opt/calibre/calibre-server /home/zeljko/calibre-library --enable-local-write
[Install]
WantedBy=multi-user.target
Ok, we will now enable and start the service we created.
sudo systemctl enable calibre-server
sudo systemctl start calibre-server
sudo systemctl status calibre-server
Status says that we did good and service is running.
Reboot your server.
sudo reboot
Adding users to Calibre Content Server
If you try to upload a book through web interface of Calibre Content Server, you will get error “Anonymous users are not allowed to make changes”
Ok. Lets fix this and add a user to our Calibre Content Server.
First, we need to stop Calibre service
sudo systemctl stop calibre-server
We will now start Calibre user management and add a user.
calibre-server --manage-users
You will then be asked what you want to do. We will select 1, define our username and password. This is how a process looks like.
Ok, before starting back again our Calibre Server we need to edit service file we defined earlier.
Open
sudo nano /etc/systemd/system/calibre-server.service
and add
--enable-auth
to the end of the line which starts with “ExecStart=”
The line should look like this
ExecStart=/opt/calibre/calibre-server /home/zeljko/calibre-library --enable-local-write --enable-auth
and in the picture…
Reload and start the service
sudo systemctl daemon-reload
sudo systemctl start calibre-server
Now, next time we start Calibre in web browser, pop-up for login should appear.
Now you should be able to add books to your Calibre via web browser.
Automagically adding books to your library
It would be great if we could define one directory to which we could upload books, and then cron job can add them to Calibre.
We will create folder named books-to-add (again, I will do it in my home folder). Right after we create the folder, we will enter it.
mkdir ~/books-to-add
cd ~/books-to-add
Ok, now we will download A Tale of Two Cities by Charles Dickens.
wget https://www.gutenberg.org/ebooks/98.epub.images -o twocities.epub
Now, we need to open Crontab
crontab -e
I don’t have anything defined, so empty one will be used. I entered 1 since I use nano editor.
In the command, make sure to change zeljko for your username, and instead “yourcalibreuser” enter usarnem you defined for your Calibre server. Also change “YourPassword” for the password you defined for your Calibre user.
*/5 * * * * calibredb add /home/zeljko/books-to-add/ -r --with-library http://localhost:8080#calibre-library --username yourcalibreuser --password YourPassword && rm -r /home/zeljko/books-to-add/*
This job will run every 5 minutes, so check your books-to-add after 5 minutes, it should be empty, and your Calibre library should be richer for one book.
In my books-to-add folder twocities was listed
After five minutes…
Also, in web interface…
Book is added!!
Conclusion:
Ok, that is it, we now have ebook server up and running inside local network.
One thing that is crashing on me, is calibre inside GUI in my Ubuntu install, I didn’t have a time to check the errors out, but other than that, everything is fine and working.