Raspberry Pi como servidor de e-books con Calibre | Algo de Linux

lunes, 26 de mayo de 2014

Raspberry Pi como servidor de e-books con Calibre

Calibre es una excelente aplicación de gestión de bibliotecas de e-books que, entre otras cosas, nos va a permitir convertir nuestra Raspberry Pi en un servidor de e-books.

¿Y para qué queremos tener un servidor de ebooks? Simplemente para disponer de una plataforma que nos permita el acceso a los libros electrónicos de nuestra colección o la descarga a cualquiera de nuestros dispositivos: ordenador, tablet o smartphone.

Para instalar calibre y todas sus dependencias, abrimos un terminal y ejecutamos:
# apt-get install calibre
Supondremos que tenéis instalado avahi-daemon en vuestra Raspberry Pi para acceder a ella por su nombre. Si no lo habéis configurado aún, os recomiendo echar un vistazo al siguiente post.

Una vez instalado, vamos a copiar el siguiente script de inicio al que llamaremos calibre en /etc/init.d/:
#!/bin/bash
### BEGIN INIT INFO
# Provides: calibre
# Required-Start: networking
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Controls the Calibre content server
# Description: Controls the Calibre content web server
#
### END INIT INFO
# Original author: Alexandrdos Schillings
# Modifications: K-Light
#
# UPDATES:
# - Added USERNAME and PASSWORD to DAEMON_ARGS
# - In version 0.7.27+ of calibre, the "auto reload" command has been unbundled from "--develop"
#
# Modifications: Marco Antonio Blanco (04/2012)
#
# UPDATES:
# - Changed "network" for "networking" in Required-Start field so it installs in Debian
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
#
#
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Servidor de Libros Calibre"
NAME=calibre-server
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME.pid
# Edit the CONTENT variable below to point it to your library directory.
# Edit the PORT variable below to change the port the server will run on.
# Edit the MAX_COVER variable below to change the maximum size of a book cover image.
# Edit the USERNAME variable below to your desired username
# Edit the PASSWORD variable below to your desired password
CONTENT=/media/MULTIMEDIA/Calibre
PORT=8080
MAX_COVER=300x400
USERNAME=
PASSWORD=

DAEMON_ARGS="--auto-reload --with-library=$CONTENT --pidfile=$PIDFILE --port=$PORT --max-cover=$MAX_COVER --username=$USERNAME --password=$PASSWORD --daemonize"
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2

# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently. A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2

# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart}" >&2
exit 3
;;
esac
:
En este script debéis modificar las variables que os he resaltado en color amarillo:
  • DESC permite definir una descripción que se mostrará a la hora de iniciar y parar el servicio.
  • CONTENT sirve para indicarle al servidor de calibre en qué ubicación se encuentran los ebooks. En el ejemplo anterior hemos indicado que los libros están  en /media/MULTIMEDIA/Calibre, una carpeta de mi disco duro USB. 
  • PORT  nos permite indicar el puerto en el que escuchará calibre. Por defecto, veréis que hemos definido el puerto 8080, pero podéis cambiarlo por otro sin ningún problema.
  • USERNAME y PASSWORD: Nos van a permitir restringir el acceso al interfaz web de Calibre, de tal forma que el usuario tendrá que introducir ambos datos para poder ver el catálogo.  En el caso anterior, lo he dejado en blanco porque me interesa que cualquier usuario pueda verlo.
Una vez configurado el script de inicio, vamos a crear los enlaces que iniciarán y pararán el servidor automáticamente:
# insserv calibre
Para comprobar si funciona, podemos iniciar el servicio manualmente:
# service calibre start
A continuación, abrimos un navegador y escribimos la siguiente dirección: http://raspberrypi.local:8080
Si todo ha ido bien, veréis la pantalla de inicio de Calibre:

Publicado por primera vez en http://enavas.blogspot.com.es

2 comentarios:

Alfonso Delgado dijo...

Te dejo este comentario con la esperanza que lo veas y lo contestes.

Resulta que yo lo tenía calibre corriendo con modo gráfico y hasta ahí todo bien, entraba vnc con reminna y a correr.

Me dije... vamos a ahorrar tiempo en raspi... así que he desarmado entorno X, fuera vnc... controlamos todo ssh y al lio.....

Las primeras pruebas las he estado haciendo pasando parámetros

calibre --auto-reload --port 8080 --with-library /ruta_libros

Lanzo.... entro desde navegador con nombremaquina:8080 (uso dnsmasq) y al poco tiempo... plop... se para el servicio y error ninguno
he probado otro puerto... 8282.... y estoy en las mismas, no se que está pasando :(

¿Alguna idea?

Esteban M. Navas Martín dijo...

Hola, Alfonso:

Es difícil darte una solución. Habría que comprobar por qué se para el servicio. Lo mejor es que eches un vistazo a los logs. Te darán una pista o toda la información de lo que está sucediendo.