Instalar un servidor de ebooks basado en Calibre y Debian Squeeze

Hace tiempo que quería montar un servicio interno para facilitar la gestión y el acceso al ingente fondo bibliográfico con que contamos en la empresa, compuesto principalmente por ebooks de licencia libre y complementado con algunos títulos comprados en conocidas tiendas online.

Buscando al respecto me topé con un interesante artículo que relataba paso a paso la instalación de Calibre en un servidor Ubuntu. Como en Activa Sistemas utilizamos preferentemente Debian en su versión estable («Squeeze»), adapté un poco las instrucciones, le añadí algo de mi propia cosecha y ahora contamos con un fabuloso servidor de ebooks en nuestra red local.

Para los que no lo conozcan aún, Calibre (del cuál hablé hace tiempo en un artículo anterior) es posiblemente el software de gestión de libros electrónicos más completo del mercado y que cuenta con dos características que lo hacen aún más valioso y destacable frente a la competencia: es software libre y funciona en diversas plataformas. Entre sus numerosas funcionalidades hay una poco conocida pero muy útil si se le sabe sacar provecho: un servidor de contenidos accesible tanto vía web como a través de clientes ODPS y a través del cual es muy sencillo acceder tanto a los libros como a la metainformación que los acompañe. Este servidor de contenidos es fácilmente gestionable desde el propio interfaz gráfico de Calibre, pero en el caso que nos ocupa estamos hablando de un servidor que cuenta únicamente con la consola de texto.

El primer paso es instalar los paquetes de software necesario para que Calibre funcione adecuadamente. Para ello, abrimos una sesión como root en el servidor Debian y ejecutamos el siguiente comando:

# apt-get install xdg-utils imagemagick python-imaging python-mechanize python-lxml python-dateutil python-cssutils python-beautifulsoup python-dnspython python-poppler libpodofo-utils libwmf-bin python-chm

A continuación se lanza la instalación de Calibre, que no se realiza con un paquete Debian, sino descargándolo directamente del sitio web oficial. Este es uno de los pocos casos en que es recomendable hacerlo así. Ejecutamos el siguiente comando:

python -c "import urllib2; exec urllib2.urlopen('http://status.calibre-ebook.com/linux_installer').read(); main()"

y se siguen las instrucciones en pantalla. Recomiendo aceptar los valores por defecto que el instalador nos proponga, sobre todo en lo referente al directorio de instalación (/opt).

Con esto Calibre ya está instalado. Ahora lo que hay que asegurarse es de que es capaz de ejecutarse en un servidor sin consola gráfica y de que se inicia automáticamente en el arranque del sistema. Para ello crearemos un script de arranque al uso:

# nano /etc/init.d/calibre

en el que copiaremos el siguiente contenido:

{code}
#! /bin/sh
### 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=»Calibre Content Server»
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=/home/user/calibre
PORT=8080
MAX_COVER=300×400
#USERNAME=books
PASSWORD=12345678

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
:
{/code}

Antes de guardar el script debemos asegurarnos de editar adecuadamente las variables CONTENT, PORT, MAX_COVER, #USERNAME y PASSWORD, que especifican respectivamente el directorio donde se encuentra la biblioteca digital, el puerto en el que escucha el servidor de contenidos, el tamaño máximo de las cubiertas de los libros, el usuario para acceder al servidor y su contraseña correspondiente.

A continuación habilitamos el script de arranque con los siguientes comandos:


# cd /etc/init.d/
# chown root.root calibre
# chmod 755 calibre
# insserv calibre
# update-rc.d calibre defaults

Ya sólo queda arrancar manualmente calibre:


# /etc/init.d/calibre start

y comprobar que funciona bien accediendo con un navegador a la siguiente URL:

http://servidor:8080

En ese momento debe aparecer un diálogo solicitando usuario y contraseña, por lo que introduciremos los que indicamos en la configuración del script de arranque. A continuación debe aparecer en la ventana del navegador la página principal de la biblioteca, que en estos momentos debe estar vacía.

Finalmente procederemos a llenar de libros la biblioteca y comprobar que podemos acceder a ellos vía web sin problemas. Lo primero será detener de nuevo el servidor Calibre:

# /etc/init.d/calibre stop

Para introducir libros en la biblioteca es imprescindible el uso del interfaz gráfico de Calibre. Mi recomendación en este sentido es instalar Calibre en un puesto de escritorio, compartir el directorio del servidor donde se va a almacenar la biblioteca a través de NFS (para escritorios Linux) o SAMBA (para escritorios Windows) y configurar Calibre para indicarle que la biblioteca está en dicho directorio compartido. De este modo, no tenemos que mantener dos bibliotecas (una en el servidor y otra en el escritorio que tendríamos que sicronizar a mano, lo cual sería absurdo) y se facilita la gestión de los ebooks.

Una ves populada la biblioteca con los primeros libros y la base de datos de Calibre con la metainformación correspondiente, arrancamos a mano de nuevo el servidor y accedemos al mismo mediante el navegador. Si todo ha ido bien, deberíamos ser capaces de consultar y descargar los libros, tanto desde el propio navegador como desde cualquier cliente ODPS (como Stanza para iPhone).

La única pega que tiene este método es que Calibre sólo acepta un usuario con su contraseña correspondiente, por lo que no podemos diferenciar entre diferentes usuarios. Si en nuestro caso queremos que todo el mundo acceda a la biblioteca digital, entonces lo mejor es dejar vacíos los campos #USERNAME y PASSWORD para acceder directamente a la misma sin autentificación.

Espero esta guía os sirva para montar vuestro propia biblioteca digital en red y que compartáis con todos vuestros comentarios, ideas y sugerencias al respecto.

[DKB url=»http://www.activasistemas.com/Sistemas-informaticos.11.0.html» text=»Servidores basados en Linux» desc=»
Conoce las ventajas del uso de software libre en los sistemas informáticos» title=»Servidores basados en Linux» type=»large» style=»stitched» color=»orange» height=»» width=»» opennewwindow=»yes» nofollow=»yes»]

4 comentarios en “Instalar un servidor de ebooks basado en Calibre y Debian Squeeze

  1. Con la versión actual (calibre 0.9.16) tu tutorial no me va:

    /etc/init.d/calibre: 47: –with-library=/data/calibre: not found
    /etc/init.d/calibre: 153: restart}”: not found
    /etc/init.d/calibre: 153: status: not found
    /etc/init.d/calibre: 153: stop: not found

    Gracias de todas formas.

    • Hola Isaac. Me temo que WordPress te ha jugado una mala pasada al copiar el código del script y se han convertido algunos caracteres, como las comillas y los guiones dobles, de forma que el script se comporta de una forma no esperada tal y como muestran los errores que has comentado.

      He cambiado la forma en que el blog muestra trozos de código, de forma que ahora debe ser más seguro el copiar dicho código. Prueba de nuevo y me cuentas.

      Por cierto, el script es independiente de la versión de calibre, al menos mientras éste siga en la rama 0.9.

  2. Pingback: Calibre liburutegia zerbitzarian. Gui gabe | Supazter Digitala

Los comentarios están cerrados.