Cómo instalar Plexpy en Ubuntu

Una eficaz y potente herramienta para monitorizar la actividad de tu Plex Media Server

PlexPy
Cuando tu servidor Plex alcanza una cantidad de contenido multimedia considerable y cuando, además, compartes tus contenidos con decenas de usuarios, es una buena idea tener algún tipo de sistema de monitorización. Puede que te interese saber quién está viendo, y cuándo, tu biblioteca multimedia, saber cuáles son los contenidos más demandados, desde qué dispositivos se consumen, etcétera.
Para ello, y de entre las varias opciones que existen, PlexPy es posiblemente una de las más completas y potentes. Se trata de un sistema de monitorización escrito en python y que ha sido diseñado específicamente para Plex. Incluye una increíble cantidad de características que permiten monitorizar la actividad en tiempo real del servidor Plex, acceder a registros históricos, configurar todo tipo de alertas personalizadas, estadísticas, actividad por usuario, y muchas más.

Instalación de Plexpy

El proceso de instalación en Ubuntu es bien simple, lo resumo a continuación:

  1. Si no tenemos aún instalado git, lo instalamos:
    sudo apt-get install git-core
  2. Instalamos PlexPy:
    cd /opt
    sudo git clone https://github.com/drzoidberg33/plexpy.git
    cd plexpy
    sudo python PlexPy.py
  3. Para salir de la pantalla que se nos muestra a continuación, tecleamos:
    :q
  4. En un navegador, introducimos la IP del servidor donde hayamos instalado PlexPy seguido del puerto 8181. Por ejemplo, 192.168.0.1:8181
  5. Esto nos muestra la pantalla de configuración de PlexPy. Introducimos nuestro usuario y contraseña de Plex y ya está. Sólo tenemos que configurarlo a nuestro gusto.
  6. Finalmente, para arrancar automáticamente Plexpy como servicio, tecleamos lo siguiente:
    sudo adduser –system –no-create-home plexpy
    sudo chown plexpy:nogroup -R /opt/plexpy
    sudo ln -s /opt/plexpy/init-scripts/init.ubuntu /etc/init.d/plexpy
    sudo update-rc.d plexpy defaults
  7. Ya hemos terminado. Para arrancar el servicio:
    sudo service plexpy start

La página del proyecto en GitHub, donde se puede obtener el código fuente (y donde se pueden consultar instrucciones para su instalación en otros sistemas operativos), es la siguiente: https://github.com/drzoidberg33/plexpy

HTTPS con LetsEncrypt

Y algunos ajustes adicionales para sitios construidos con WordPress

LetsEncrypt

Cuando nació, allá por la década de los 60 del siglo pasado, Internet servía casi exclusivamente para el envío y recepción de mensajes, y el modelo se parecía mucho al del correo tradicional: el emisor envía algo a un receptor, pero siempre origen, destino y contenido eran conocidos previamente.
Este modelo del Internet primitivo cambió para siempre en 1989. Tim Berners-Lee ideó el lenguaje HTML con el objetivo de organizar los documentos del CERN.

Poco después, en 1991, este sistema se extendió para el envío de todo tipo de documentos a través de Internet, dando origen a la World Wide Web, que es lo mismo que decir Internet tal y como lo conocemos hoy día. Y todo estaba fundamentado en el protocolo de transferencia para hipertextos (HTTP). Exactamente igual que hoy.

HTTP es el protocolo que utiliza cualquier navegador para comunicarse con los servidores web, y que permiten que puedas ver, por ejemplo, esta página. Funciona bien, pero hay que tener en cuenta que con él todos los datos se transmite en texto plano, sin cifrar.

Cualquier persona dentro de tu red o que pueda interponerse entre tu computadora y el servidor será capaz de ver tus contraseñas, datos bancarios, etc. Por eso desde hace años prácticamente todas las webs transaccionales (aquellas en las que puedes realizar operaciones de cualquier índole, pero especialmente compras, transferencias, etc) utilizan HTTPS.

HTTPS

Hyper Text Transfer Protocol Secure (HTTPS) es la versión segura de HTTP. Todas las comunicaciones entre tu navegador y el servidor son encriptadas utilizando SSL/TLS (Secure Sockets Layer/Transmission Layer Security), que son dos protocolos para enviar paquetes cifrados a través de Internet. Su uso como dijimos, está ampliamente difundido entre comercios electrónicos y banca online, aunque desde hace unos años crece la presión para generalizar su uso en detrimento de HTTP. Google, por ejemplo, concede mayor relevancia en sus resultados a los sitios con HTTPS, lo que hace que cualquier experto en posicionamiento se decante por su uso.

El problema, hasta hace poco, es que los certificados que se usan para el cifrado HTTPS eran de pago. Pero todo eso cambió desde el finales del año pasado, cuando la Electronic Frontier Foundation se propuso la puesta en marcha de una “autoridad certificadora” con la intención de ayudar a cifrar el tráfico de toda la web.

LetsEncrypt

Con el nacimiento de LetsEncrypt, cualquiera puede asegurar su sitio web con HTTPS en cuestión de minutos y de forma absolutamente gratuita. Veamos cómo hacerlo en un servidor con Ubuntu Server y Apache:

  1. Comprobar que todos los paquetes del sistema están actualizados, e instalar git:
    apt-get update
    apt-get upgrade
    apt-get install git
  2. Instalar Let’s Encrypt:
    git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
  3. Generar los certificados de Let’s Encrypt:
    cd /opt/letsencrypt
    ./letsencrypt-auto --apache -d ejemplo.com

    También puedes utilizar un único certificado para múltiples dominios o subdominios, para lo que tienes que añadir algunos parámetros al comando:
    ./letsencrypt-auto --apache -d ejemplo.com -d www.ejemplo.com

Con esto ya tenemos el certificado para nuestro sitio web, podemos asegurar razonablemente (https no es invulnerable) que la comunicación entre nuestro servidor y los navegadores de los visitantes del mismo ha sido cifrada y es inviolable. Cuando visiten nuestro sitio, verán algo así:

Candado verde https

Un candado verde, seguido de “https”, que indica que la conexión es segura.

Aspectos adicionales

Ya casi todo el trabajo está hecho. Pero veamos algunos aspectos a revisar.

  1. Para evitar que se pueda acceder a tu sitio web por http, y obligar a que la conexión sea siempre segura, https y por el puerto 443, teclea lo siguiente en la terminal:
    cd /etc/apache2/sites-available
    gedit tusitio.com.conf
  2. Sustituye el contenido del fichero de configuración por lo siguiente:
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =tusitio.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent]

    Guarda el fichero y reinicia apache
    sudo service apache2 reload

    Con esto, cualquier visitante a tu sitio web será redireccionado a la versión segura.
  3. Si tu sitio está construido con WordPress, tendrás que cambiar la configuración para evitar que el navegador te alerte de que estás ofreciendo contenido inseguro (el candado se verá tachado y/o de color naranja, según el navegador). Ve a la administración de WordPress y en “Ajustes”, cambia la URL del sitio añadiendo “https”.
  4. En función del “Theme” que estés utilizando, es posible que te salga el mismo mensaje de alerta. Revisa que todas las imágenes y URL’s introducidas en las opciones de personalización del Theme comienzan por “https”.
  5. Como apunta Manuti en su comentario, aún pueden quedar elementos que realicen llamadas hacia fuera sin usar https (puede ser el caso de algunos plugins). Estas llamadas se realizan o bien desde el código fuente del sitio web, bien desde su base de datos. Para solucionar los enlaces incorrectos en el código fuente hacemos lo siguiente:
    cd /var/www/tusitio.com
    grep -lir “http://tusitio.com”

    Este comando nos listará los ficheros que contengan un enlace con HTTP. Modificamos estos enlaces por HTTPS.
    Para corregir los enlaces incorrectos que puedan quedar en la base de datos, hacemos lo siguiente:
    mysql -u root -p nombre_de_tu_base_de_datos

    UPDATE wp_options SET option_value = replace(option_value, ‘http://tusitio.com’, ‘https://tusitio.com’) WHERE option_name = ‘home’ OR option_name = ‘siteurl’;

    UPDATE wp_posts SET guid = replace(guid, ‘http://tusitio.com’,’https://tusitio.com’);

    UPDATE wp_posts SET post_content = replace(post_content, ‘http://tusitio.com’, ‘https://tusitio.com’);

    UPDATE wp_postmeta SET meta_value = replace(meta_value,’http://tusitio.com’,’https://tusitio.com’);

Y esto es todo. Ya tienes tu sitio web securizado con HTTPS.

Cambiando la ubicación de los contenidos multimedia en Plex

Paso a paso para no perder la indexación de los contenidos multimedia

Migrar contenido multimedia en Plex
Cuando migré MartinServer a un Hp Proliant G8 mantuve temporalmente todos mis contenidos multimedia en las dos NAS  Western Digital de de 3 TB y  de 6 TB que venía utilizando hasta entonces. Pero las bibliotecas de Plex (películas, series, fotos y música) habían crecido exponencialmente desde la primera instalación del Servidor Plex, y por tanto había llegado la hora de migrarlos a los dos discos de 6TB que había añadido al servidor HP Proliant G8.

La forma fácil

El procedimiento viene bien explicado en las páginas de soporte de Plex. Si lo que necesitas es solamente cambiar el contenido a un nuevo disco, la forma más sencilla es ponerle exactamente el mismo nombre al nuevo disco, y conservar la misma ruta de acceso para todos los contenidos. El procedimiento en Ubuntu sería algo así:

  1. Tienes que detener el servidor Plex. Abre una terminal y teclea:
    sudo service plexmediaserver stop
  2. Cambiamos el nombre del disco actual. Por ejemplo, si se llama “Plex”, lo renombramos a “PlexAntiguo”. En el terminal:
    sudo mv /media/Plex /media/PlexAntiguo

    Suponiendo que la partición del disco sea /dev/sdb1, tecleamos:
    sudo mount /dev/sdb1 /media/PlexAntiguo
  3. Ahora montamos el nuevo disco y le ponemos el mismo nombre que al original (en este caso, “Plex”):
    sudo mkdir /media/Plex

    Suponiendo que la partición del nuevo disco sea /dev/sdb2 (esto lo comprobamos con el comando “fdisk -l”), tecleamos:
    sudo mount /dev/sdb2 /media/Plex

    Añadimos el nuevo disco a fstab para que se monte al inicio:
    sudo nano fstab

    Añadimos la siguiente línea a fstab:
    /dev/sdb2 /media/Plex ext4 defaults 0 2

    Si hay una entrada para el disco antiguo en fstab, la eliminamos. Guardamos fstab y actualizamos:
    sudo mount -a
  4. Ya estamos en condiciones de mover todo el contenido del viejo al nuevo disco:
    mv  -v /media/PlexAntiguo/* /media/Plex/

    Si son Terabytes de contenido… paciencia.
  5. Una vez que acabe de moverse todo el contenido, desmontamos el disco antiguo:
    sudo umount /media/PlexAntiguo

    Ya podemos desconectar el disco antiguo. Sólo queda iniciar el servidor Plex:
    sudo service plexmediaserver start

    Y eso sería todo. Debería funcionar con normalidad.

La vía del penitente

Pero en ocasiones esta forma simple no nos sirve. Por ejemplo en mi caso, yo había creado mis bibliotecas de Plex en el NAS de 3TB, y cuando se llenó añadí otro NAS de 6TB. Esto supuso duplicar la estructura de carpetas, solución que no me gustaba nada. Aprovechando el cambio a los dos nuevos discos de 6TB, quería aprovechar para dejar una estructura limpia, algo así:

/Plex/
    /Peliculas/
        /NombredePelicula (año)/
            NombredePelicula (año).ext
            SubtitulodePelicula (año).spa.srt
    /Series/
        /NombreSerie/
            /Temporada 01/
                NombreSerie - s01e01.ext
                SubtituloSerie - s01e01.spa.srt

En este caso, el procedimiento se complica un poco:

  1. Deshabilitar la opción “Vaciar la papelera automáticamente después de cada escaneado”. En la interfaz web de Plex hay que ir a “Ajustes/Biblioteca/” y desmarcar la opción que se reproduce en la imagen:
    deshabilitar-vaciar-papelera
  2. Detener el servidor Plex. Abre una terminal y teclea:
    sudo service plexmediaserver stop
  3. Copiar (no mover) el contenido del viejo al nuevo disco:
    cp -R /media/PlexAntiguo/ /media/PlexNuevo/

    Aquí no tenemos que conservar la misma estructura. Es el paso que podemos aprovechar para reestructurar nuestras bibliotecas.
  4. De nuevo en la interfaz web de Plex, nos vamos a “Librerías/Añadir Biblioteca”. Aquí vamos añadiendo las diferentes bibliotecas de películas, series, música o fotos con la ubicación del disco nuevo:
    añadir-a-la-biblioteca
  5. Una vez que se han añadido todas las nuevas bibliotecas, iniciamos Plex Media Server:
    sudo service plexmediaserver start
  6. Actualiza las bibliotecas desde la interfaz web. Si tienes mucho contenido multimedia, tardará bastante. Cuando termine el proceso, verás que todo el contenido aparece duplicado.
  7. Desde la interfaz web, buscamos las bibliotecas correspondientes al disco antiguo. Seleccionamos “editar” y borramos las carpetas correspondientes al disco antiguo una a una.
    borrar-biblioteca
  8. Volvemos a actualizar las bibliotecas. Ya sólo debe aparecer el contenido del nuevo disco. Para comprobar que no hay errores, utilizamos el filtro de contenidos “buscar duplicados”. Si hay algún duplicado, seguramente se debe a un error de indexación. Editamos manualmente los contenidos mal indexados.
  9. Finalmente, vaciamos la papelera de las bibliotecas.
  10. Y con esto ya está: migrado el contenido de Plex Media Server a un disco nuevo y con una estructura distinta.

Nunca olvides el factor humano

Cómo aprendí de primera mano que no siempre la solución a los problemas de un sistema está en los logs

Limpiando la computadora
Cuando hice la migración de MartinServer ya era consciente de que no había sido todo lo “limpia” que hubiera sido de desear, y me esperaba algunos problemas.
Efectivamente, en los días siguientes vi cómo se producían desconexiones intermitentes. Creí haberlo solucionado, primero, con un script para actualizar FreeDNS, y más tarde, ya de forma más definitiva, solucionando un problema con la interfaz de red.

Problemas menores

En verdad el sistema quedó mucho más estable, ya apenas se producían caídas. Pero persistían algunos problemillas que me traían de cabeza, y me puse a estudiar como loco los logs del sistema para ver de qué coño se trataba. En primer lugar, cada vez que reiniciaba el sistema, se demoraba una eternidad. No era normal. Yo estoy acostumbrado a trabajar con Ubuntu desde hace años y nunca me había pasado nada igual. Por mucho que un servidor HP ProLiant Gen8 sea diferente, no se justificaba.
El otro problema, poco importante pero desconcertante, es que todos los días se desconectaba unos minutos a las 7:00 AM. Yo monitorizo algunos de los sitios web que alojo en MartinServer con una funcionalidad del plugin JetPack para WordPress. Este plugin te avisa si se ha producido una caída en el servicio y durante bastantes días, como digo, puntualmente me llegaba un mensaje a las 7:00 AM. Sólo duraba unos minutos, pero jodía.

Swap

En cuanto al primer problema, lo que me llamó la atención fue este error:

The disk drive for /dev/mapper/ubuntu--vg-swap_1 is not ready yet or not present.

Esto quería decir que el espacio de intercambio o “swap” no era reconocido en el arranque. Con casi toda seguridad era esto lo que estaba enlenteciendo el arranque.
Me llamó la atención la ruta “/dev/mapper/”, es la que se suele utilizar para las particiones encriptadas. Y yo no recordaba haber encriptado mi partición swap. Así que, tecleando blkid en una terminal, comprobé la UUID de la partición swap, y efectivamente no era la que daba el error. Edité fstab:
sudo nano /etc/fstab

Cambié la ruta de la partición swap por la UUID que me había proporcionado el comando blkid. Guardé y reinicié. Problema resuelto, el arranque ya era normal. Y además (y esto ya no sé explicarme por qué), el segundo problema, el de las desconexiones todos los días a las 7:00AM, también desapareció.

Factor humano

Aún quedaba otro problema más pequeño aún, pero me obsesioné con resolverlo. Todos los miércoles por la mañana, el equipo se apagaba. No era una desconexión de red, sino apagado. Mis sitios webs, el accesso SSH y todos los servicios en general eran inaccesibles, pero sí podía acceder a través del interfaz HP iLO, donde veía que el equipo estaba apagado.

Tampoco podía deberse a un corte de electricidad, porque el equipo se reiniciaría solo. No. La única alternativa que me quedaba era, como digo, volver a encender el equipo a través del interfaz HP iLO. Y después todo volvía a funcionar con normalidad, hasta el siguiente miércoles, cuando volvía a pasar lo mismo.

Me quemé las cejas revisando los logs del servidor, para no encontrar finalmente nada. Estas misteriosas caídas del servidor hubieran quedado para siempre sin resolver si no hubiera recordado que lo único que diferencia los miércoles al resto de los días de la semana es que… ¡una chica viene a limpiar la casa por las mañanas!

La llamé. Le pregunté si había tocado el equipo, y me dijo que sí, que por supuesto, que había visto que yo me lo había dejado encendido y que ella lo apagaba. “Por favor, no lo vuelvas a apagar nunca más -le rogué-“. Misterio resuelto. Maldito factor humano 🙂 .

 

 

Problemas con la interfaz de red

Configurar la interfaz de red para que la reconozca como “em1”

Eth0Cada dos o tres días al principio, cada pocas horas al final, MartinServer estuvo sufriendo una serie de caídas que me impedían acceder al servidor. No tenia acceso a mis páginas web, pero es que tampoco podía acceder remotamente a una terminal vía SSH. El servidor estaba muerto  (o, más exactamente, desconectado). Para salir del paso, apagaba y volvía a encender el equipo, bien directamente o en remoto a través del HP iLO. Pero aquí había un problema que solucionar 🙂 .

Revisando el log del sistema en /var/log/syslog, me encontré con que el error era el siguiente:

Error getting hardware address for “eth0”: No such device

“Eth0” es el nombre que habitualmente se le da en los sistemas Linux a la tarjeta de red, es decir, al adaptador donde se conecta el cable ethernet que nos permite conectarnos a nuestra red LAN y a internet. Lo que estaba pasando, sencillamente, es que mi servidor no encontraba este adaptador de red.
Para averiguar qué estaba pasando, abro el terminal y tecleo:
ifconfig -a

Y me devuelve algo así:
em1       Link encap:Ethernet  direcciónHW b3:5f:dc:87:da:c0
Direc. inet:192.168.1.100  Difus.:191.161.1.255  Másc:255.255.255.0
Dirección inet6: fd80::b25c:dbcc:fd87:dac0/64 Alcance:Enlace
ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
Paquetes RX:14145493 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:17842179 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:6871585837 (6.8 GB)  TX bytes:17386533946 (17.3 GB)
Interrupción:16
em2       Link encap:Ethernet  direcciónHW b3:5f:dc:87:da:c1
ACTIVO DIFUSIÓN MULTICAST  MTU:1500  Métrica:1
Paquetes RX:0 errores:0 perdidos:0 overruns:0 frame:0
Paquetes TX:0 errores:0 perdidos:0 overruns:0 carrier:0
colisiones:0 long.colaTX:1000
Bytes RX:0 (0.0 B)  TX bytes:0 (0.0 B)
Interrupción:17

No me extraña que mi servidor no encontrase el adaptador de red. En mi equipo (es algo que pasó tras la actualización a Ubuntu Server 16.04) se está nombrando el adaptador de red como “em1” en vez de como “eth0”. Busqué la posible razón, y por lo visto es para conseguir mayor consistencia en la nomenclatura de las tarjetas de red. No profundicé mucho en la razón, simplemente procedí a solucionar el problema 🙂 .
La mayor parte de los afectados lo que hicieron fue forzar, modificando el Grub, que la tarjeta de red volviese a llamarse “eth0”. En mi caso fui más cómodo (espero que no me dé más problemas en adelante), y lo único que hice fue renombrar el interfaz de red:
sudo nano /etc/network/interfaces

Y aquí dejé el fichero de configuración de red tal que así:
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto em1
iface em1 inet dhcp

Listo. A partir de ahora, mi sistema “sabe” que la interfaz del red se llama “em1”. No he vuelto a tener esos problemas de conexión.

Problemas con la actualización de FreeDNS

Y de cómo le hallé solución

FreeDNSComo ya conté aquí hace algún tiempo, tanto mis páginas webs como la de algunos amigos las alojo en un servidor casero, al que llamo MartinServer :-). Realmente, para el tráfico que tienen está bastante bien. Cuento con 200Mb simétricos, tanto de subida como de bajada, y he podido comprobar tanto desde aquí en México como desde España que su rendimiento es bastante razonable.

El único problema es el de los DNS. Yo no he contratado una IP estática con mi proveedor, luego la IP de MartinServer cambia cada cierto tiempo. Por tanto, no me queda más remedio que contratar o utilizar algún servicio gratuito que se encargue de renovar los DNS  de mis páginas webs cada vez que a mi proveedor le dé por cambiar la IP de mi servidor.

Para el dominio martinalia.com contraté DynDNS. Es un servicio de pago, pero supercómodo. Tan sólo tengo que configurar los parámetros de mi cuenta en mi router (un Linksys WRT1900 AC), y ya está. Puedo estar seguro de que cada vez que cambie la IP de MartinServer, el propio router lo comunicará a DynDNS y de ahí se propagará, garantizando que martinalia.com siempre esté online.

Para el resto de los websites, en cambio, opté por un servicio gratuito: FreeDns. En mi router no se puede configurar (al menos no de forma sencilla) este servicio, por lo que tuve que recurrir a instalar en el servidor un servicio que se encargase de esta tarea.

ddclient

De entre todos los disponibles, me decanté por ddclient. Se instala así:

sudo apt-get install ddclient

Una vez instalado, hay que editar la configuración, de la siguiente manera:
sudo nano /etc/ddclient/ddclient.conf

Y dejamos la configuración con algo como esto:
# /etc/ddclient/ddclient.conf
#
daemon=3600 # Aquí le decimos la frecuencia con que se actualizará. En el ejemplo, cada 3600 segundos
protocol=freedns
use=if, if=eth0
ssl=yes # Aquí le indicamos si se utilizará o no SSL
use=web, web=http://ip.dnsexit.com/ # Aquí podemos poner cualquier servicio que nos devuelva la IP que estamos utilizando
server=freedns.afraid.org
login=nombre_de_usuario
password=’contraseña’
midominio.ejemplo.com #Aquí listamos nuestro dominio o dominios a actualizar

Y ya está. Con esto debería funcionar, y de hecho me funcionó en el momento en el que lo instalé. Sin embargo, hace unos días mi proveedor cambió la IP con la que MartinServer sale a internet. Mi web martinalia.com seguía funcionando, porque está configurada con DynDNS en el router, pero el resto de las webs dejaron de funcionar.

Le di un vistazo al log del sistema en /var/log/syslog y lo que me indicaba es que la conexión de ddclient con el servicio de FreeDNS no se podría realizar. Estuve un buen rato trasteando con la configuración para ver si lo solucionaba, pero como todo intento fue infructuoso, corté por lo sano. Me monté yo mismo una tarea programada (cron) para actualizar el servicio.

La solución

La idea me la dio No soy vago, soy eficiente. Creé un archivo llamado “freeDNS.sh”, le di permiso de ejecución. Lo edité y quedó tal que así:

#! /bin/bash
DOMINIO=”midominio.ejemplo.com”
UPDATE_URL=”http://freedns.afraid.org/dynamic/update.php?xxxxxxxxxxxx” #donde pone xxxxxxxxxxxx va la cadena que te genera para tu dominio FreeDNS
UPDATE_COMMAND=”/usr/bin/curl -s $UPDATE_URL”
logger “Actualizando FreeDNS”
CURRENTIP=`curl -s ip.dnsexit.com | sed ‘s/[^0-9.]//g’`
echo “IP actual: ${CURRENTIP}”
CURRENTIPDOMINIO=`dig -x -add +short $DOMINIO`
echo “IP de $DOMINIO: ${CURRENTIPDOMINIO}”
if [ “${CURRENTIP}” != “${CURRENTIPDOMINIO}” ] ; then
echo “Encontrada diferencia, actualizando”
logger “Actualizando a ${CURRENTIP}”
if ${UPDATE_COMMAND}; then
echo “IP actualizada”
else
echo “Error actualizando FreeDNS”
fi
else
echo “No hay cambios, no se hace nada”
fi

Una vez listo, hacemos un “crontab -e”, y añadimos la línea:
*/5 * * * * /home/ruta_a/freeDNS.sh

Con esto le decimos que actualice la información sobre nuestra IP en FreeDNS cada 5 minutos. Y listo. Funcionando.

Arqueología web

Breve historia de cómo rescaté los contenidos de mis blogs antiguos que creía perdidos para siempre

Cuando hace unos días tuve que recuperar el blog de Gustavo Montes, repasándolo para verificar que no se había perdido nada, me encontré con muchísimas referencias antiguas a mis propios blogs. Sobre todo a m4rt1n.com, un blog que mantuve desde 2006 hasta 2008. Hacía muchos años que yo había retirado el contenido de este blog de internet, pero, lo que es peor, hace un tiempo ya que perdí incluso la titularidad del dominio. Estaba perdido para siempre.

Pero también me entró nostalgia de martinalia.com, un dominio que sigue siendo de mi titularidad pero que, desde 2004, había pasado por varias fases. Desde 2004 hasta 2006 era un blog más o menos personal con bastante enfoque en el ámbito de la Gestión de Contenidos. Era un blog muy peculiar, que utilizaba un CMS francés que me encantaba, SPIP. Anteriormente a esta fase, desde 2001, había publicado varios contenidos, pero estos se perdieron para siempre.
martinalia.com antiguo

En 2006 adquirí m4rt1n.com, el dominio que antes comenté que ya he perdido (se me pasó la fecha de renovación en Godaddy…). Estuvo funcionando como mi blog personal durante tres años, y tenía este aspecto (la imagen es de muy mala calidad, pero es lo único que conservo):

com

Años después, en 2009, actualicé el blog martinalia.com a SPIP 2.0, una versión muy mejorada, utilicé una plantilla minimalista y me centré en la Gestión de Contenidos. Todos los artículos anteriores quedaron arrinconados en una escueta sección llamada “antiguos”:

martinalia.com

Posteriormente también abandoné este blog, hasta que en 2011 le di un cambio absoluto y construí uno nuevo (con el lema “Objetivo Brasil”) que era todo un ejercicio de “personal branding”. Por motivos personales tenia la necesidad de moverme hacia Brasil, y el blog fue una pieza más en ese esfuerzo (que finalmente conseguí al cabo de unos meses).

objetivo brasil

Lo cierto es que esto también dejó de tener sentido una vez alcanzado el objetivo, y finalmente lo abandoné también No fue hasta el año pasado que martinalia.com volvió a funcionar, esta vez un WordPress en el que voy subiendo críticas de películas que me interesan sin ningún orden cronológico ni de ningún otro tipo. Tan solo lo que se me antoja. También ofrezco “extras” bien interesantes para los usuarios registrados.

En cualquier caso, haciendo memoria me entró bastante nostalgia y decidí que todos esos contenidos desaparecidos merecían ser rescatados, que al fin y al cabo formaban parte de mi historia personal. Pero -y era un gran problema- tan sólo conservaba copia de seguridad del último, todos los anteriores habían desaparecido para siempre.

Archive.org al rescate

Sin copia de seguridad, la única alternativa que me quedaba era recurrir al servicio WayBack Machine que ofrece gratuitamente Internet Archive, una entidad sin ánimo de lucro que conserva en sus archivos millones de sitios webs, películas, libros, etc. En WayBack Machine quedaba constancia de todas estas antiguas versiones de mis blogs… el problema era, claro, cómo extraer esa información y poder migrarla a martin.ekiry.com.

La solución me vino con Wayback Machine Downloader, una herramienta sencilla y potente que me permitió hacer justo lo que necesitaba. Para utilizarla debes tener instalado previamente Ruby. Para instalar Wayback Machine Downloader sólo hay que teclear lo siguiente en una terminal:

gem install wayback_machine_downloader

Una vez instalado, su uso es de lo más sencillo. Con los siguientes comandos en el terminal descargué todos mis blogs “perdidos”:
wayback_machine_downloader http://www.m4rt1n.com --timestamp 20090425231334
wayback_machine_downloader http://www.martinalia.com --timestamp 20090625231334
wayback_machine_downloader http://www.martinalia.com --timestamp 20060325231334

Listo. Ya tenía todo el contenido guardado en mi disco duro. Ahora lo que tenía que hacer es pasar todos los artículos, que había guardado en formato HTML, a la base de datos de martin.ekiry.com. Para ello utilicé el plugin HTML Import2. Misión cumplida.

Eso sí, algunos (pocos) artículos se perdieron para siempre, porque Internet Archive no los había almacenado. Casi todas las imágenes se habían perdido también, con lo cual me tocó una tediosa tarea manual de búsqueda y reposición de imágenes (algunas de las originales se perdieron para siempre).

Pero básicamente está todo recuperado, disponible ahora aquí en martin.ekiry.com casi toda mis publicaciones en internet (salvo las anteriores a 2004, que esas también se perdieron para siempre).

Resucitando el blog de Gustavo Montes

gustavo.ekiry.com antiguo

Ayer dejó de funcionar el blog de Gustavo Montes, que tengo alojado en MartinServer. Me daba un error de conexión a la base de datos, pero aparentemente el servicio MySql estaba funcionando correctamente y todos los demás websites alojados en MartinServer funcionaban con normalidad. Mirando con un poco más de atención, descubrí el motivo: Ubuntu 16.04, versión a la que acababa de migrar mi servidor, viene con PHP7, y en PHP7 la extensión mysql se ha declarado obsoleta, teniendo que optar en su lugar por mysqli.
O sea, que en vez de gestionar la conexión a la base de datos así:

connect = mysql_connect(‘server’,’username’,”);
mysql_select_db(‘dbname’);

tendría que hacerlo más o menos así:
connection = mysqli_connect(‘server’, ‘username’, ‘password’, ‘database’);

No parece un gran cambio, pero realmente me hubiera supuesto reescribir gran parte del código (todos los selects y queries) de una instalación de Dotclear muy antigua (la 1.2.1, de 2006). No tenía mucho sentido, realmente merecía la pena actualizar el blog a un CMS más moderno.

Otra opción hubiera sido volver a la versión antigua de PHP, PHP 5.6, o hacer convivir ambas versiones en la misma máquina. Se puede seguir para esto el procedimiento detallado aquí. Pero, nuevamente, considero que es mejor actualizar de una vez el software de base del blog en vez de ir haciendo remiendos.

Dotclear

Mi primera intención fue migrar el blog a una versión moderna del mismo CMS, Dotclear. La versión instalada, como ya he dicho, tenía más de 10 años de antigüedad, era la 1.2.1. La actual versión de Dotclear es la 2.9.1, y realmente en todos estos años ha evolucionado tanto que es otro CMS totalmente distinto. No hay una forma fácil de hacer la migración entre ambas versiones, es casi tan difícil como migrar a otro CMS diferente.

La única solución era hacer una migración manual, así que opté por cambiar de CMS. Al igual que otros blogs de MartinServer, decidí migrar a la última versión de WordPress. Exporté la base de datos a XML, realicé una instalación limpia de WordPress en el servidor y, con la ayuda del plugin WP All Import, importé todos los artículos y comentarios.

Paso seguido, subí todas las imágenes del blog a la carpeta /wp-content/uploads y, finalmente, cambié dentro de la base de datos la ruta relativa hacia las imágenes con una sentencia SQL:

UPDATE <tabla> SET <post_content> = REPLACE ( <columna>, ‘<url antigua>’, ‘<url nueva>’ )

Y eso fue todo. Ya volvía a funcionar el blog de Gustavo Montes. Obviamente, la plantilla o template que utilizaba (Promenade para Dotclear) no servía, lo adapté para la plantilla Writr para WordPress y ahora el blog luce tal que así:

blog de Gustavo Montes

Migrando MartinServer a un HP ProLiant MicroServer Gen8

Venturas y desventuras del cambio de servidor

hp proliant

Hewlett Packard Enterprise ProLiant MicroServer Gen8 E3-1220v2 4GB-U B120i LFF 2x1TB Server/S-Buy – Servidor

Hace menos de un año que puse mi propio servidor, MartinServer, en marcha. Desde entonces alojo todas mis páginas webs en casa, sin recurrir a ningún proveedor de hosting. El PC que utilizaba como servidor era bastante mediocre, un HP dc7800p Convertible Minitower, pero la verdad es que para lo que me costó ha venido funcionando bastante bien.

Pero el uso verdaderamente intensivo de MartinServer ha venido de parte del Servidor Plex que instalé. Actualmente alojo unas 1.500 películas y unas cincuenta series, que no sólo disfruto yo, sino que comparto con 15 amigos en 3 países diferentes.

Obviamente, con este escenario el rendimiento ya se resiente, y cuando tres o más usuarios están transcodificando vídeo simultáneamente, el servidor se desestabiliza peligrosamente. Ya se ha caído en alguna ocasión.

Llevo bastante tiempo pensando en cambiar el equipo, de forma que obtenga un rendimiento razonable. La mayor parte de los usuarios de Plex utilizan un NAS como servidor. Yo de hecho tengo dos Western Digital, uno de 3 TB y otro de 6 TB, donde almaceno mi contenido multimedia, aunque Plex está instado en el HP dc7800p.

Pero no es una solución que me convenza: MartinServer no sólo lo utilizo como servidor de Plex, es además mi servidor web, mi servidor FTP, mi almacenamiento en la nube particular… lo que necesito es un pequeño servidor doméstico.

ProLiant

La verdad es que no entiendo nada de hardware, por lo que me he tomado mucho tiempo pensando las opciones. Tras mucho comparar, fijé mi atención en el  HP ProLiant MicroServer Gen8, un servidor de diseño compacto y elegante que, además, tenía buenas referencias entre usuarios de Plex. Sólo advertían de la poca potencia del procesador, que no permitía demasiadas transcodificaciones simultáneas. En cualquier caso, el modelo que se me había antojado venía con un procesador Intel Xeon E3-1220L, que debería ser más que suficiente para soportar la carga de MartinServer.

Así que finalmente me decidí, y hace apenas unos días llegó a mi casa. Ahora quedaba el reto de migrar el servidor de equipo sin romper nada por el camino 🙂 .

Preparativos

La mayor parte de los propietarios de un  HP ProLiant MicroServer Gen8, por lo que vi, instalan el sistema operativo en un SDD (unidad de estado sólido) que obviamente se compra por separado y se conecta a través de la bahía para la unidad de disco óptico que viene dentro del equipo (hay que desmontarlo para su instalación). La ventaja de esta opción es mantener separado el sistema operativo de las unidades de almacenamiento (el HP Proliant viene con cuatro bahías para discos duros).

Yo ignoré esta opción. Mi equipo venía con dos discos duros de 1 TB, y yo le añadí otros dos discos duros de 6 TB cada uno. 14 TB en total. Decidí usar el primero de los discos de 1 TB para el sistema operativo y para la carpeta /home, el segundo para copias de seguridad y los dos discos de 6 TB para almacenar contenidos multimedia.

Otra opción que ignoré fue la de configurar los discos duros en RAID (Redundant Array of Independent Disks, es decir, “conjunto redundante de discos independientes”). Se suele utilizar para montar un espejo entre discos duros y, de esta forma, replicar la información en dos discos duros idénticos. Yo, imprudentemente, he ignorado esta posibilidad, he priorizado la capacidad total de almacenamiento sobre la seguridad.

Ubuntu Server

Así que pude proceder a instalar Ubuntu sin mayor demora. Lo único a tener en cuenta antes de instalar este sistema operativo es modificar la opción “Smart Array B120i RAID controller enabled” que viene por defecto en la BIOS (y que no está soportada por Ubuntu) por la opción “SATA AHCI Support”. Es fácil de hacer: Presionamos la tecla F9 y nos vamos a “System Options -> SATA Controller Options -> Embedded SATA Configuration”. Ahí seleccionamos “Enable SATA AHCI Support”. Presionamos la tecla ESC hasta que aparezca la opción para guardar, y listo.

Hecho esto, introducimos un USB de arranque con Ubuntu Server. Antes de instalar, abrimos Gparted y formateamos y montamos los discos duros. Reiniciamos, arrancamos nuevamente desde el USB, seguimos los pasos para la instalación y nada más. Ya está el HP Proliant funcionando con Ubuntu Server.

Clonando el servidor

Conecto el HP Proliant a mi red doméstica. Para clonar MartinServer utilizo el comando dd, que es una herramienta simple y muy potente. Con este comando puedo clonar todo el disco físico incluyendo el MBR (arranque de sistema), todas las particiones, UUIDs (la identificación única de cada partición) y los datos.
En el terminal escribí el siguiente comando para copiar el MBR:

su -c ‘dd if=/dev/sda of=/ruta/al/respaldo/sdabk.mbr count=1 bs=512’

Donde “/ruta/al/respaldo/” es donde guardé la copia de seguridad, un disco externo accesible tanto por el servidor viejo como por el nuevo.

Para realizar la copia de seguridad del sistema en sí, tecleé lo siguiente:

su -c ‘tar -cvpzf /ruta/al/respaldo/linuxbackup.tgz --exclude=/ruta/al/respaldo/ --exclude=/lost+found --exclude=/dev --exclude=/proc --exclude=/sys /’

Donde “/ruta/al/respaldo/”, nuevamente, es la ruta de acceso al disco duro externo. Con esto creé el archivo “linuxbackup.tgz” en el disco duro externo, que es una copia de seguridad completa del sistema. Es muy importante la opción “–exclude”, con ella le decimos qué debe quedar fuera de la copia de seguridad, como los discos duros externos o los directorios que están dinámicamente llenos por el sistema durante el arranque.

Migración

Ahora en el nuevo servidor, en el HP Proliant, escribí el siguiente comando para restaurar el MBR:

dd if=/ruta/al/respaldo/sdabk.mbr of=/dev/sda

Y para restaurar el sistema:
su -c ‘tar -xvpzf /ruta/al/respaldo/linuxbackup.tgz -C /’

Finalmente:
su -c ‘mkdir /proc && mkdir /lost+found && mkdir /dev && mkdir /sys && init 6’

Con esto se vuelven a crear los directorios excluidos y se reinicia el sistema. Teóricamente, el nuevo servidor debería ser idéntico al original.

Problemas

Pero algo debí hacer mal, porque el nuevo servidor no arrancaba. Me daba el error:

error: no such device: …
press any key to continue …

Seguramente no respaldé o restauré correctamente el MBR, con lo que la UUIDs de las particiones no coincidían. Es decir, en el archivo /etc/fstab del nuevo servidor se estaba apuntando a particiones que no existían. En el Grub seguramente habría la misma incongruencia.
Para solucionar esto, reinicié de nuevo el equipo con el USB de instalación. Desde una terminal tecleé:
blkid

Este comando me listó las UUIDs correctas del nuevo servidor. Con esta información siempre a la vista, abro otra ventana del terminal y tecleo:
gksudo gedit /boot/grub/grub.cfg

Me abre el fichero de configuración del Grub, el gestor de arranque. Cambio las antiguas UUIDs por las nuevas.
A continuación, lo mismo para fstab:
gksudo gedit /etc/fstab

Nuevamente cambio las antiguas UUIDs por las nuevas. Guardo y reinicio el sistema. Y… voilà! MartinServer ya está funcionando en el flamante HP Proliant Server.
El único detalle final es desconectar el servidor antiguo de la red y configurar en el router, para el nuevo servidor, la misma IP que utilizaba el servidor antiguo. Con esto, listo y funcionando.

Poemar, en formato ePub

poemar-epub Como decía en un artículo anterior, no pude resistirme a hacerme con el dominio poemar.es y subir el él todos los cuadernos de poesía publicados desde 1982 hasta 1992.
Diez años increíbles (yo participé sólo en la última etapa, desde 1990) en los que aprendimos juntos mientras creábamos.

Como también decía, mi intención no era sólo subir los poemas sino crear un eBook con cada uno de los Cuadernos de Poesía Poemar. Dicho y hecho. Ya están todos, en formato ePub, listos para descargar.

Los podéis encontrar en la sección “Libros” de este blog. En concreto, en los que yo participé son:

A disfrutarlos.