Calibre è sicuramente il software Open Source più famoso ed utilizzato per la gestione degli ebook. Si tratta essenzialmente di un programma che permette di catalogare la nostra libreria digitale, ma non solo: è possibile modificare, convertire e addirittura creare ex-novo gli ebook. Tra i vari moduli di Calibre troviamo il servizio calibre-server
, un piccolo web server che permette di distribuire in rete gli ebook della libreria. Purtroppo il suo utilizzo prevede la completa installazione della suite Calibre e questo non è proprio il massimo in sistemi con risorse limitate come la scheda Raspberry Pi.
Per ovviare a questo problema esistono alcuni progetti che, utilizzando il solo database della libreria di Calibre ed il formato standard Open Publication Distribution System (OPDS), riescono a fornire lo stesso servizio di calibre-server
attraverso l’installazione di un web server leggero, come nginx o lighttpd, e poche altre dipendenze.
In questa guida vedremo come installare uno di questi programmi, chiamato COPS, nella nostra Raspberry Pi.
Indice
calibre-server
Come già accennato, Calibre non è un programma molto indicato per essere installato su Raspberry, soprattutto se prevediamo di utilizzare quest’ultima in modalità Headless. Inoltre, normalmente, i binary correnti di Calibre sono forniti solo per le architetture x86_64: per utilizzare Calibre su RPi, che utilizza processori ARM, dobbiamo quindi ricompilare il tutto da sorgente oppure accontentarci di installare tramite APT la versione fornita nei repository standard della Raspberry, sempre più vecchia della versione attuale. Per fare un confronto: la release correntemente disponibile per RPi è la 2.50, 35 versioni più vecchia dell’attuale 2.80!
In poche parole: L’installazione della suite di Calibre risulta un bel mattone da fare digerire alla Raspberry ed installare il tutto per utilizzare poi solo calibre-server
non è propriamente il massimo.
COPS
COPS (Calibre OPDS (and HTML) Php Server) è un progetto di Sébastien Lucas e si tratta essenzialmente di un content server sviluppato in PHP che può essere installato in pochi minuti anche su sistemi a basse prestazioni come la Raspberry Pi. Una volta installato e configurato, COPS permette di navigare una libreria di ebook di Calibre da qualsiasi dispositivo collegato in rete, sia sotto forma di comuni pagine web, sia in formato di feed OPDS per i reader che supportano questo standard.
In entrambi i casi possiamo consultare tutte le informazioni disponibili per i titoli presenti nella libreria (copertine, trame, autori, case editrici, ecc.) così come effettuare ricerche e scaricare al volo i formati ebook che ci interessano.
Il vantaggio di utilizzare COPS al posto di calibre-server
risiede nel fatto delle sue estremamente ridotte richieste di risorse per funzionare. Se poi, per progetti collaterali, abbiamo già installato un web server qualsiasi nella nostra Raspberry, l’installazione si limiterà allo scaricare l’archivio del programma (circa 900Kb), decomprimerlo in una directory accessibile al web server e ad una minima configurazione del tutto.
Requisiti.
Hardware
- Una Raspberry Pi collegata in rete e perfettamente configurata.
- Un PC da dove gestire la normale libreria di Calibre.
Software
- Calibre: per lo scopo di questa guida non utilizzeremo direttamente il programma, ma solo la sua libreria. Possiamo copiare la libreria direttamente in una directory della Raspberry Pi, oppure (scelta consigliata) condividerla tramite lan o un servizio di sharing come Google Drive, Dropbox, ecc.
- COPS: Calibre OPDS (and HTML) PHP Server. Un content server OPDS/HTML molto leggero, semplice da installare e gestire.
- Nginx: web server leggero ad alte prestazioni. Insieme al web server installeremo inoltre alcuni moduli PHP necessari per il corretto funzionamento di COPS .
Operazioni preliminari.
Daremo per scontato che la Raspberry sia perfettmente configurata. Questo prevede che sia stata installata una versione qualsiasi delle varie distribuzioni Linux disponibili (Raspbian Jessie with Pixel/Lite, Minibian, ecc). Poiché andremo ad utilizzare la Raspberry in modalità Headless, ovvero senza monitor, tastiera e mouse, consiglio di installare la versione Lite della Raspbian che, tra l’altro, è stata appena aggiornata per il completo supporto alla nuova Raspberry Zero W. Quindi accertiamoci di aver installato correttamente il sistema operativo, di avere abilitato la connessione WiFi (o ethernet), di aver assegnato un IP statico alla RPi e che la stessa sia in grado di connettersi ad Internet.
Installare nginx
Colleghiamoci alla Raspberry Pi (localmente o tramite SSH) e come prima cosa effettuiamo l’aggiornamento dei pacchetti installati:
sudo apt-get update && sudo apt-get upgrade
Poi passiamo all’installazione di nginx e le estensioni necessarie per la gestione delle pagine PHP di COPS:
sudo apt-get install nginx php5-fpm php5-gd php5-sqlite php5-json php5-intl
Caso 1: installazione ex-novo di nginx.
Se stiamo installando nginx per la prima volta oppure non abbiamo intenzione di aggiungere altri siti o servizi oltre COPS, possiamo semplicemente aprirne il file di configurazione:
sudo nano /etc/nginx/sites-enabled/default
e sostituire la sezione server {…}
già presente con la seguente:
server {
listen [::]:80;
# COPS root directory
root /var/www/cops;
index index.html index.htm index.php feed.php;
#Useful only for Kobo reader
location /download/ {
rewrite ^/download/(\d+)/(\d+)/.*\.(.*)$ /fetch.php?data=$1&db=$2&type=$3 last;
rewrite ^/download/(\d+)/.*\.(.*)$ /fetch.php?data=$1&type=$2 last;
break;
}
#Can break loading the images - if you don't see anything, comment
location ~ ^/images.*\.(gif|png|ico|jpg)$ {
expires 31d;
}
#Can also break loading the images, comment if it happens
location ~ .(js|css|eot|svg|woff|ttf)$ {
expires 31d;
}
location /Calibre {
root /home/pi;
internal;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# Limit access to Localnet
location / {
allow 192.168.1.0/24;
deny all;
try_files $uri $uri/ =404;
}
}
Caso 2: nginx già utilizzato con un sito pre-esistente.
http://192.168.1.190:80 <- sito 1
http://192.168.1.190:81 <- COPS
Non è una procedura elegante, ma funziona. L’alternativa sarebbe quella di usare differenti nomi host per i differenti siti e gestirli tramite un server DNS interno alla rete come DNSmasq, ad esempio, oppure il router principale, se prevede questa opzione.
Per fare questo apriamo il file di configurazione di nginx:
sudo nano /etc/nginx/sites-enabled/default
Identifichiamo il primo blocco server {…}
relativo al sito già presente ed aggiungiamo/modifichiamo le seguente dichiarazioni:
listen 80 default_server;
# modificare il percorso con quello della root del vostro sito principale.
root /var/www/sito1/
N.B. eventuali altre dichiarazioni già presenti andranno modificate in accordo con quanto sopra riportato.
Eliminiamo l’eventuale riga della dichiarazione server_name dominiolocale.com
, se presente.
Poi aggiungiamo una nuova sezione server {…}
per COPS con il seguente contenuto:
server {
listen 81;
# COPS root directory
root /var/www/cops;
index index.html index.htm index.php feed.php;
#Useful only for Kobo reader
location /download/ {
rewrite ^/download/(\d+)/(\d+)/.*\.(.*)$ /fetch.php?data=$1&db=$2&type=$3 last;
rewrite ^/download/(\d+)/.*\.(.*)$ /fetch.php?data=$1&type=$2 last;
break;
}
#Can break loading the images - if you don't see anything, comment
location ~ ^/images.*\.(gif|png|ico|jpg)$ {
expires 31d;
}
#Can also break loading the images, comment if it happens
location ~ .(js|css|eot|svg|woff|ttf)$ {
expires 31d;
}
location /Calibre {
root /home/pi;
internal;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# Limit access to Localnet
location / {
allow 192.168.1.0/24;
deny all;
try_files $uri $uri/ =404;
}
}
Creiamo la directory dove poi copieremo il file di COPS:
sudo mkdir -p /var/www/cops
Correggiamo i permessi della dir appena creata:
sudo chmod -R 770 /var/www/cops
sudo chown -R pi:www-data /var/www/cops
Anche se dal punto di vista della sicurezza non è il massimo, per facilitare la gestione dei file nella cartella accessibile da nginx, aggiungiamo l’utente pi al gruppo www-data:
sudo usermod -a -G www-data pi
Verifichiamo che il web server funzioni correttamente creando un file index.php nella dir /var/www/cops/:
sudo nano /var/www/cops/index.php
Inseriamo il seguente contenuto nel file appena creato:
<?php phpinfo(); ?>
Salviamo, usciamo dall’editor e ricarichiamo nginx:
sudo service nginx restart
Ora da un qualsiasi browser ubicato nella nostra rete navighiamo verso l’IP della Rapsberry Pi. Se tutto funziona a dovere, dovremmo visualizzare una pagina simile a quella sotto riportata:
Prima di procedere creiamo la directory /home/pi/Calibre
dove copieremo la nostra libreria digitale:
mkdir /home/pi/Calibre
Preparare la libreria di Calibre.
Come già accennato all’inizio, il metodo migliore per distribuire la libreria di Calibre via COPS è quello di condividerla tra i due programmi tramite una share di rete o un servizio come Google Drive o Dropbox. In questo modo eviteremo di creare duplicati della libreria e manterremo i dati forniti da COPS su Raspberry allineati con i contenuti gestiti tramite Calibre su PC.
Per rendere le cose più semplici in questa guida copieremo la libreria di Calibre direttamente nella SD della Raspberry.
Come prima cosa, dal PC dove è installato Calibre, identifichiamo la sua libreria. Solitamente, in ambiente Linux e lasciando le varie opzioni di @default, la libreria viene memorizzata in ~/Calibre\ Library/
. Dobbiamo copiare TUTTO il contenuto della libreria (incluse directory e sottodirectory contenenti gli ebook) nella directory /home/pi/Calibre
sulla Raspberry Pi, facendo particolarmente attenzione ai file metadata_db_prefs_backup.json
e metadata.db
.
Per effettuare la copia utilizzeremo il comando scp, sicuramente già presente nella nostra linux box, quindi apriamo il terminale ed impartiamo i seguenti comandi:
cd ~/Calibre\ Library/
scp -r * pi@192.168.1.190:/home/pi/Calibre/
Ora che abbiamo nginx funzionante e libreria di Calibre copiata sulla scheda SD della Raspberry Pi, non rimane che passare all’installazione di COPS.
Installare e configurare COPS.
Torniamo alla Raspberry Pi. Scarichiamo e decomprimiamo l’ultima release di COPS nella directory precedentemente creata:
cd /var/www/cops
wget https://github.com/seblucas/cops/releases/tag/1.0.1
unzip cops-1.0.1.zip
Creiamo un file di configurazione personalizzato utilizzando il file predefinito fornito da COPS:
cp config_local.php.example config_local.php
Modifichiamo il file config_local.php
in modo da adattarsi alla nostra configurazione:
<?php
if (!isset($config))
$config = array();
/*
* The directory containing calibre's metadata.db file, with sub-directories
* containing all the formats.
* BEWARE : it has to end with a /
*/
$config['calibre_directory'] = '/home/pi/Calibre/';
/*
* Catalog's title
*/
$config['cops_title_default'] = "Libreria Ebook - rbnet.it";
/*
* SPECIFIC TO NGINX
* The internal directory set in nginx config file
* Leave empty if you don't know what you're doing
*/
$config['calibre_internal_directory'] = '/Calibre/';
/*
* Full URL prefix (with trailing /)
* useful especially for Opensearch where a full URL is often required
* For example Mantano, Aldiko and Marvin require it.
*/
$config['cops_full_url'] = "http://192.168.1.190/";
/*
* Wich header to use when downloading books outside the web directory
* Possible values are :
* X-Accel-Redirect : For Nginx
* X-Sendfile : For Lightttpd or Apache (with mod_xsendfile)
* No value (default) : Let PHP handle the download
*/
$config['cops_x_accel_redirect'] = "X-Accel-Redirect";
/*
* use URL rewriting for downloading of ebook in HTML catalog
* See Github wiki for more information
* 1 : enable
* 0 : disable
*/
$config['cops_use_url_rewriting'] = "1";
L’installazione di COPS è praticamente conclusa. Ora non resta che provare il tutto.
Usare COPS
Da un qualsiasi browser nella nostra LAN, navighiamo verso l’IP della Raspberry (es: http://192.168.1.190
oppure http:192.168.1.190:81
se abbiamo optato per l’opzione 2 durante la configurazione di nginx) e dovremmo ottenere una pagina web, simile alla seguente:
Di seguito alcune schermate tratte dal programma:
In ogni momento la flessibile ricerca interna permette di reperire gli ebook per titolo, autore, tag, casa editrice, ecc.
I pulsanti Epub, Mobi ecc. permettono di scaricare localmente il relativo formato ebook.
Dalla pagina delle opzioni possiamo modificare aspetto e comportamento di COPS:
COPS risulta utilizzabile anche da un device vecchio come un Kindle 4 Non-Touch tramite il browser integrato nell’e-reader. Anche il download dei formati Kindle compatibili funziona perfettamente:
Possiamo infine usare COPS senza browser, tramite un e-reader in grado di interpretare il comodo feed OPDS. Su Android due tra le app più utilizzate sono Moon + reader ed Aldiko. Una volta installate su smartphone o tablet, sarà sufficiente aggiungere un nuovo catalogo facendolo puntare al feed OPDS di COPS in questo modo:
http://IP-RASPBERRY-PI/feed.php
Vediamo come fare con Moon + reader. Dalla schermata principale fare tap sul menu in alto a destra e selezionare “Aggiungi nuovo catalogo“:
Inserire poi il feed OPDS fornito da COPS (http://IP-RASPBERRY-IP/feed.php
):
Una volta confermato l’inserimento, il catalogo sarà immediatamente disponibile e potremo navigare la nostra libreria digitale, effettuare ricerche e scaricare gli ebook nel dispositivo locale:
Note sulla configurazione di COPS
Il file di configurazione di COPS config_local.php
, che abbiamo creato per la nostra installazione, può essere ulteriormente personalizzato. Tutte le opzioni disponibili, con i valori di default, sono presenti nel file config_default.php
e sono ben commentate. Questo file non deve essere mai modificato. Le opzioni vanno copiate in config_local.php
e solamente qui possiamo apportare le modifiche ai valori di default. Evitare in tutti i modi di apportare cambiamenti direttamente nel file config_default.php
in quanto durante gli aggiornamenti di COPS questo file verrà sovrascritto ed i valori irrimediabilmente perduti.
E con questo è tutto.
Buon divertimento!
Ciao, progetto molto interessante ma allo stato attuale la guida sembra non funzionare più, sarebbe possibile aggiornarla? Grazie
Ciao Alessandro.
Purtroppo la guida ha i suoi anni e sicuramente qualcosa è cambiato nel frattempo. Al momento non ho in progetto un aggiornamento, mi dispiace.
E se voglio mantenere la libreria esistente senza copiarla?
Preparare la libreria di Calibre
https://rbnet.it/guide/raspberry-pi-server-ebook-con-calibre-e-cops/#preparare-la-libreria-di-calibre
In sostanza deve essere accessibile da entrambi i programmi: che sia una share di rete (NFS, Samba, ecc) o su cloud, basta che sia accessibile.
A senso (le info fornite sono poche) sembrerebbe una configurazione errata di COPS. Consulta il wiki del programma, ci sono alcuni consigli per i problemi più comuni.
ciao, sto cercando di configurare cops su raspberry. funziona tutto tranne il download dei libri.
mi dice
Impossibile raggiungere il sito
La pagina web all’indirizzo http://192.168.1.50/download/1858/………azw3
potrebbe essere temporaneamente non disponibile oppure è stata permanentemente spostata a un nuovo indirizzo web.
ovviamente i libri si trovano in un altro percorso.
cosa sbaglio secondo te?