Archivo para 27 mayo 2014

Convertir comics en formato pdf a formato cbz

Para una visión más cómoda. Con este sencillo script que requiere poppler-utils

# pdf2cbz: Conversor de formato para comics por ratoncio
#!/bin/bash
for i in *.pdf;do
echo "************";
echo "$i";
echo "************";
mkdir "${i%.pdf}";
pdfimages -j "$i" "${i%.pdf}"/0;
zip -r "${i%.pdf}".cbz "${i%.pdf}";
rm -rf "${i%.pdf}";
done

El siguiente para convertir de cbr a cbz

# cbr2cbz: Conversor de formato para comics por ratoncio
#!/bin/bash
for i in *.cbr;do
echo "************";
echo "$i";
echo "************";
mkdir "${i%.cbr}";
unrar e "$i" "${i%.cbr}";
zip -r "${i%.cbr}".cbz "${i%.cbr}";
rm -rf "${i%.cbr}";
done
Anuncios

Enviar Pop-ups informativos a XBMC

Esto nos permitirá sacar Pop-ups en la interfaz de XBMC. Realmente sencillo usando la interfaz que nos proporciona XBMC (JSON-RPC API). Lo colocaremos en /usr/local/bin para acceso general.

Vamos con el script en cuestión: msgtoxbmc

# msgtoxbmc: script para enviar pop ups a XBMC por ratoncio
#!/bin/bash
# procesado del pipe
case "$#" in
0)
        mensaje=`cat`
;;
*)
        mensaje="$@"
;;
esac;
# codigo envio
mensajeenviar=`echo $mensaje|sed 's/\ /\%20/g'`
titulo="Informacion%20de%20Ratoncio"
wget -qO- "http://192.168.1.124:8080/jsonrpc?request={%22jsonrpc%22:%222.0%22,%22method%22:%22GUI.ShowNotification%22,%22params%22:{%22title%22:%22$titulo%22,%22message%22:%22$mensajeenviar%22},%22id%22:1}" &> /dev/null
#habla "`echo $mensaje|sed 's/\%20/\\ /g'`"
exit 0;

La invocación, sencilla, por parámetros o usando pipe:

  • msgtoxbmc mensaje de prueba
  • echo mensaje de prueba|msgtoxbmc

Si en el script se descomenta la línea penúltima (habla) se oiría el mensaje por la TV (usando el script habla del post anterior)

Síntesis de voz en Raspberry Pi con RaspBMC

Algo muy sencillo de lograr y que nos permitirá jugar un poco.
Los pasos son los siguientes:
Instalar espeak y alsa utils

aptitude update
aptitude install espeak alsa-utils

La salida de audio por defecto con RaspBMC es por HDMI pero es necesario cargar el módulo snd_bcm2835. Lo añadimos al fichero /etc/modules

Ahora, en las opciones de salida de audio de XBMC hay que poner que el dispositivo de audio este activo siempre. Por defecto sólo está activo un minuto con lo que no nos funcionaría más que la primera vez.

Para facilitar las cosas hacemos un pequeño script en bash (habla)que pondremos en /usr/local/bin para acceso general con los permisos necesarios.

#!/bin/bash
# Script para sintesis voz por consola por ratoncio

case "$#" in
0)
        cat|espeak -ves > /dev/null 2>&1
;;
*)
        echo "$@"|espeak -ves > /dev/null 2>&1
;;
esac
exit 0;

El script se puede invocar con parámetros o pipe:

  • habla hola que tal
  • echo hola que tal | habla
  • Actualización: debido a un error en el paquete espeak se puede usar este script alternativo:

    #!/bin/bash
    # Script para sintesis voz por consola por ratoncio
    FILE="/tmp/habla-$RANDOM.wav"
    case "$#" in
        0)
            cat|espeak -ves -w $FILE 
            ;;
        *)
            echo "$@"|espeak -ves -w $FILE 
            ;;
    esac
    play -q "$FILE" >/dev/null 2>&1
    rm "$FILE";
    exit 0;
    

    Para que funcione es necesario instalar sox

    apt-get install sox
    

    Servidor completo usando Raspberry Pi

    Introducción y objetivos

    El objetivo de este post es crear un completo servidor casero que permita gestionar varios servicios usando una Raspberry Pi. Este servidor se conectará a la televisión de casa mediante el puerto HDMI y a internet mediante el router y nos permitirá entre otras cosas:

    • Gestionar desde el móvil la descarga de contenidos vía torrent.
    • La reproducción vídeo y audio en la TV de casa usando el móvil como control.
    • Streaming de vídeo y audio a cualquier dispositivo que se conecte a la red de casa; DLNA
    • La gestión de una biblioteca electrónica de libros y comics permitiendo su acceso fácil a ella a dispositivos móviles tipo tablets o libros electrónicos.
    • Descarga automática de capítulos de series

    Raspberry Pi es un pequeño ordenador basado en arquitectura ARM con grandes posibilidades que corre un sistema basado en GNU/Linux.

    Los servicios básicos que queremos tener son los siguientes:

    • Apache: servidor web para servir de interfaz de varios de los servicios.
    • Calibre: para la gestión de una biblioteca electrónica.
    • Transmission: para la descarga de torrents.
    • XBMC: para disponer de un completo entorno multimedia.
    • sickbeard: para la descarga automática de capítulos de una serie.

    En mis pruebas he utilizado dos distribuciones diferentes de Linux adaptadas a Raspberry Pi ambas basadas en Debian: Raspbian y Raspmc. Debido a los problemas que supone la instalación de XBMC en Raspbian es recomendable usar Raspbmc.

    Hardware para el sistema

    Tras haber realizado varias pruebas voy a usar el siguiente hardware:

    • Una Raspberry Pi
    • Un adaptador de red inalámbrica USB para la conexión al router
    • Un cable HDMI para la conexión a la TV
    • Una tarjeta SD para instalar el arranque del sistema operativo de la Raspberry Pi
    • Una memoria USB para la instalación del sistema operativo
    • Un disco duro externo para el almacenamiento de los datos (vídeo, audio, etc)

    Uno de los pasos claves del proceso es el separar el arranque del sistema operativo del resto del SO en lugar de instalar ambos en una tarjeta SD como es el procedimiento estándar. En mi experiencia, el uso de torrents hace que el número de escrituras sobre la tarjeta SD la corrompa rápidamente. El uso de una memoria USB mejora el rendimiento y evita este problema. Una opción es particionar el disco duro externo para instalar en él el sistema operativo de la Raspberry Pi y también los datos.

    Sobre Raspbmc y su instalación

    Raspbmc es una distribución de Linux basada en debian. Su gran ventaja es que viene ya preparada con una instalación funcional de XBMC lo que simplifica en gran medida los quebraderos de cabeza que suponen instalar este programa.Hay varias formas de instalar Raspbmc en una tarjeta SD. El método que recomiendo es descargar el script python install.py de http://www.raspbmc.com/wiki/user/os-x-linux-installation/ y seguir las instrucciones.
    Este método facilita mucho la instalación de raspbmc y nos llevaría a tener instalado Raspbmc en la tarjeta SD, sin embargo, se va a mover el SO a un USB para usar sólo la SD como arranque (/boot). La instalación del sistema en el USB es tan simple como introducir una memoria USB en el momento de arrancar por primera vez la Raspberry Pi.

    Instalación y configuración de software adicional

    Vía apt se instalará transmission, apache y calibre

    apt-get update
    apt-get install transmission-daemon apache2 calibre
    

    Se cambia el nombre de host

    vi /etc/hostname
    mihost
    vi /etc/hosts
    se sustituye raspbmc por mihost mihost.noip.me en el loopback 127.0.1.1
    

    Configuración de apache2

    En la ruta /etc/apache2/sites-available se editará el fichero default
    vi /etc/apache2/sites-available/default

    <VirtualHost *:80>
            ServerAdmin pi@ratoncio.no-ip.org
    
            DocumentRoot /var/www
            <Directory />
                    Options FollowSymLinks
                    AllowOverride None
            </Directory>
            <Directory /var/www/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride None
                    Order allow,deny
                    allow from all
            </Directory>
            <Directory /var/www/ficheros/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride AuthConfig
                    Order allow,deny
                    allow from all
            </Directory>
            <Directory /var/www/biblioteca/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride All
                    Order allow,deny
                    allow from all
            </Directory>
    
            ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
            <Directory "/usr/lib/cgi-bin">
                    AllowOverride None
                    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                    Order allow,deny
                    Allow from all
            </Directory>
    
            ErrorLog ${APACHE_LOG_DIR}/error.log
    
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel warn
    
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    
            #para calibre y transmission
            RewriteEngine on
    
            ProxyPass /descargas/ http://localhost:9999/descargas/
            ProxyPass /descargas http://localhost:9999/descargas
            SetEnv force-proxy-request-1.0 1
            SetEnv proxy-nokeepalive 1
    </VirtualHost>
    

    Se habilitan los mods de apache necesarios para hacer rewrite, necesario para poder redirigir a distintos puertos calibre y transmission desde apache.

    a2enmod proxy rewrite proxy_http
    

    Se crea la estructura web en /var/www
    Se crea un directorio en /var/www/biblioteca con usuario y grupo www-data

    Configuración de calibre

    En la ruta /home/pi se crea un script calibre-server que permitirá lanzar y parar calibre en modo server. Calibre correrá en un puerto al que se redirigirá desde la página web que servimos con apache.

    #!/bin/bash
    export LANG=es_ES.UTF-8
    if [ $# -eq 1 ];then
    case $1 in
    start)
    calibre-server --with-library=/media/Almacen/biblioteca/ --daemonize --port 10001 --url-prefix /biblioteca ;
    echo "La biblioteca esta abierta";
    ;;
    stop)
    #killall calibre-server;
    kill -9 `ps -fea|grep calibre-server|grep -v grep|awk '{print $2}'`;
    echo "La biblioteca esta cerrada";
    ;;
    status)
    RESUL=`ps aux|grep -v grep|grep "calibre-server"|wc -l`;
    if [ $RESUL -eq 0 ];then
    echo "La biblioteca esta cerrada";
    else
    echo "La biblioteca esta abierta";
    fi;
    ;;
    *)
    echo "Opciones: start|stop"
    ;;
    esac;
    fi;
    

    El control de acceso se hace mediante un fichero .htaccess que se encuentra en /var/www/biblioteca con este contenido:

    AuthUserFile /home/pi/pass-htaccess-apache
    AuthType Basic
    AuthName "Haz login"
    Require user javi mariola
    Options +FollowSymLinks
    RewriteEngine on
    RewriteRule (.*) http://localhost:10001/biblioteca/$1 [proxy]
    

    Se puede ver que el script lanza en modo daemon calibre en el puerto 10001 con la ruta que hayamos configurado con la biblioteca. Al acceder vía web a la ruta mihost.noip.me/biblioteca se nos redirigirá al server corriendo en el puerto 10001 con calibre.

    Configuración de transmission-daemon

    Para emplear torrents se configurará transmission-daemon.

    Se edita el fichero /var/lib/transmission-daemon/info/settings.json (es un enlace a /etc/transmission-daemon/settings.json). Para que este fichero se edite correctamente el servidor transmission debe estar parado así:

    service transmission-daemon stop

    {
        "alt-speed-down": 50,
        "alt-speed-enabled": true,
        "alt-speed-time-begin": 420,
        "alt-speed-time-day": 127,
        "alt-speed-time-enabled": true,
        "alt-speed-time-end": 0,
        "alt-speed-up": 10,
        "bind-address-ipv4": "0.0.0.0",
        "bind-address-ipv6": "::",
        "blocklist-enabled": false,
        "blocklist-url": "http://www.example.com/blocklist",
        "cache-size-mb": 4,
        "dht-enabled": true,
        "download-dir": "/media/Almacen/transmission-daemon/downloads",
        "download-limit": 100,
        "download-limit-enabled": 0,
        "download-queue-enabled": true,
        "download-queue-size": 12,
        "encryption": 0,
        "idle-seeding-limit": 30,
        "idle-seeding-limit-enabled": false,
        "incomplete-dir": "/media/Almacen/transmission-daemon/incomplete",
        "incomplete-dir-enabled": false,
        "lpd-enabled": false,
        "max-peers-global": 200,
        "message-level": 2,
        "peer-congestion-algorithm": "",
        "peer-limit-global": 300,
        "peer-limit-per-torrent": 60,
        "peer-port": 51413,
        "peer-port-random-high": 65535,
        "peer-port-random-low": 49152,
        "peer-port-random-on-start": false,
        "peer-socket-tos": "default",
        "pex-enabled": true,
        "port-forwarding-enabled": true,
        "preallocation": 1,
        "prefetch-enabled": 1,
        "queue-stalled-enabled": true,
        "queue-stalled-minutes": 30,
        "ratio-limit": 2,
        "ratio-limit-enabled": false,
        "rename-partial-files": true,
        "rpc-authentication-required": true,
        "rpc-bind-address": "0.0.0.0",
        "rpc-enabled": true,
        "rpc-password": "contraseniaservicio",
        "rpc-port": 9999,
        "rpc-url": "/descargas/",
        "rpc-username": "descargas",
        "rpc-whitelist": "127.0.0.1",
        "rpc-whitelist-enabled": false,
        "script-torrent-done-enabled": true,
        "script-torrent-done-filename": "/var/lib/transmission-daemon/script/avisaTorrent",
        "seed-queue-enabled": false,
        "seed-queue-size": 10,
        "speed-limit-down": 350,
        "speed-limit-down-enabled": false,
        "speed-limit-up": 20,
        "speed-limit-up-enabled": true,
        "start-added-torrents": true,
        "trash-original-torrent-files": false,
        "umask": 18,
        "upload-limit": 100,
        "upload-limit-enabled": 0,
        "upload-slots-per-torrent": 14,
        "utp-enabled": true,
        "watch-dir": "/media/Almacen/transmission-daemon/blackhole",
        "watch-dir-enabled": true
    
    }
    
    

    A continuación se edita el fichero /etc/init.d/transmission-daemon y se indica en USER que el usuario será pi

    Y se hace chown -R pi:pi /var/lib/transmission-daemon/* y chown pi:pi /etc/transmission-daemon/settings.json

    Configuración de NFS

    Hacer que cargue nfs en el arranque.

    apt-get install nfs-kernel-server
    update-rc.d rpcbind defaults
    update-rc.d nfs-common defaults
    update-rc.d nfs-kernel-server defaults
    

    Se definen los exports

    /media/Almacen *(ro,sync,no_subtree_check,insecure,all_squash,anonuid=0,anongid=0)
    

    Se refrescan los exports
    exportfs -ra

    Configuración Sickbeard

    sudo apt-get install git-core
    git clone git://github.com/echel0n/SickBeard-TVRage.git /var/local/sickbeard
    cd /var/local/sickbeard
    python SickBeard.py -d
    

    Sickbeard arranca en el puerto 8081. En un navegador entramos en dicha dirección y seleccionamos config y general.
    Desactivar Launch Browser pues el acceso será web.
    En web interface se puede configurar un user, passwd y nuevo puerto. Solo cambiaré el puerto por otro (20001) pues la autenticación la hago con htacess
    En search providers se chequean los gratuitos sin cuenta ( NZBs, Sick Beard y Womble)
    En post processing se quita la opción de keep original files y se marcan las move associated files y rename episodes. En name pattern seleccionamos “s02e03 – Ep Name”
    En metadata seleccionamos XBMC (12+ pues la versión de Raspbmc equivale a la 12 o superior) y chequeamos los metadatos (todos menos los season all)
    En config notifications seleccionamos XBMC y chequeamos notify on download, update library, introducimos la ip y el puerto (192.168.1.124:1234)
    En search options, torrent search activamos la búsqueda de torrents, el método blackhole y definimos una ruta para el directorio blackhole (/media/Almacen/transmission-daemon/blackhole)
    Ya se puede trabajar seleccionando add existing shows si ya tenemos parte de la serie descargada o add shows si aún no.