Configurar SSL de Lets Encrypt en Node JS

Recientemente he instalado en un servidor el certificado SSL gratuito de Let’s Encrypt, y todo ha ido como la seda, en cinco minutos estaba funcionando.

Más tarde en la web de ese servidor he puesto un pequeño sistema de mensajería instantánea que usa Node JS y no tenía muy claro cómo indicar en las opciones SSL los certificados necesarios, así que aquí va para el futuro:

var httpOpcionesSSL =
{
key: fs.readFileSync('/etc/letsencrypt/live/MIDOMINIO/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/MIDOMINIO/fullchain.pem'),
ca: fs.readFileSync('/etc/letsencrypt/live/MIDOMINIO/chain.pem')
};

Restaurar GRUB desde Windows con EasyBCD

Los que tenemos un equipo con arranque dual Linux-Windows conocemos de sobra GRUB. Es un programa de arranque que nos permite escoger entre Linux o Windows al iniciar el ordenador. También sabemos que en un equipo nuevo lo ideal es instalar primero Windows y luego Linux. Esto es porque Linux es un caballero educado y detecta que hay otro sistema operativo en el arranque del equipo y automáticamente configura GRUB para que podamos escoger entre los dos.

Windows no es un caballero, pese a que cada vez me gusta más el rumbo que está tomando Microsoft con Satya Nadella, y cuando se instala no se molesta en mirar si hay algún otro sistema operativo en el arranque del equipo, borra lo que haya y pone su cargador. Por eso si reinstalamos Windows perdemos el GRUB y con ello la opción de arrancar en Linux.

Esto normalmente no supone más que una pequeña molestia y tiene una solución muy sencilla: basta con arrancar desde un Live-USB de Linux y ejecutar el programa Boot Repair, que reinstala GRUB y nos devuelve la opción de decidir el sistema operativo con el que queremos iniciar el equipo.

Pero a veces, como me pasó a mí ayer, esto no funciona. Probé con un LiveCD de Ubuntu 13.04 que tenía por ahí, con un USB de la última versión de Linux Mint y hasta con un USB con la distribución Boot Repair Disk específica para este tipo de casos, pero en todos pasaba lo mismo: después de un montón de mensajes de arranque la pantalla se quedaba en negro y no conseguía acceder a la interfaz gráfica.

Rebuscando por Google encontré este programa: EasyBCD, y fue mano de santo. Basta con ejecutarlo, pulsar el botón de añadir entrada y seleccionar la partición donde tenemos Linux. Por lo que sé este programa lo que hace es meter un cargador intermedio en Windows que nos permite seleccionar el sistema operativo a cargar, es el equivalente al GRUB pero en Windows.

Al reiniciar el equipo me apareció una pantalla para escoger entre arrancar Windows 10 y Linux; al seleccionar este último se cargó sin problemas, y ya desde ahí pude ejecutar Boot Repair. No era estrictamente necesario hacerlo, podría haber seguido usando el selector que instaló EasyBCD, pero el GRUB es mucho más rápido y carga por defecto Linux, que es lo que uso habitualmente.

Imagino que una vez instalado el GRUB se podría quitar ese cargador intermedio de EasyBCD, pero no me he atrevido a hacerlo porque tampoco entiendo del todo cómo funciona y no quiero liarla. Además, como en Windows entro solo de vez en cuando para jugar tampoco me molesta esa pantalla intermedia.

Es bueno saber que existe una forma de recuperar GRUB cuando no podemos ejecutar Boot Repair, o cuando no tenemos a mano un CD/DVD o un pincho USB para arrancar una sesión Live de Linux.

Ejecutar Chrome Dev Tools en iPad

Hace tiempo ya hablé de cómo usar un iPad como monitor adicional en Linux. Llevo desde entonces usándolo y funciona estupendamente, pero hay una espinita que tenía clavada desde el primer día: no poder mover la ventana de las Chrome Dev Tools al iPad.

El truco que usamos para poder tener el iPad como segundo monitor es crear una nueva sesión X y conectarse a ella mediante VNC. Por desgracia, si una ventana se abre en una sesión X no se puede enviar a otra (en realidad sí se puede, pero es demasiado complicado). Así que como la ventana de Dev Tools se abre en la sesión del monitor principal no hay forma de enviarla al iPad.

Pero resulta que hay una alternativa. Ejecutamos una instancia de Chrome en nuestra sesión X principal indicando un puerto para depuración remoto:

/usr/bin/google-chrome-stable --remote-debugging-port=9222 --user-data-dir=remote-profile

En la sesión X del iPad, ejecutamos otra instancia:

/usr/bin/google-chrome-stable --user-data-dir=remote-debug

Y en esa ventana de Chrome que se nos abre en el iPad, navegamos a http://localhost:9222 y ¡bingo! Nos aparecerán las pestañas que tengamos abiertas en la instancia de Chrome que iniciamos en la sesión principal y podremos depurar desde el iPad.

Deshabilitar el autocompletado de LastPass en un formulario

LastPass es un programa para recordar contraseñas que funciona estupendamente, pero hay veces que si tenemos un formulario que no es de acceso a una web nos rellena algunos campos que no queremos que rellene.

Para solucionar esto hay que hacer dos cosas:

  1. Añadir el atributo autocomplete=”off” en la etiqueta form del formulario.
  2. En la extensión de LastPass, ir a Preferences -> Advanced y activar la opción Respect AutoComplete=off: allow websites to disable AutoFill.

Navegar a través de un túnel SSH

Hay veces en las que no nos fiamos de la conexión a Internet que estamos usando (por ejemplo, las redes WIFI gratuitas). En estos casos la solución es navegar a través de un túnel SSH con un servidor del que sí nos fiemos. Usaremos ese servidor como proxy y todas las peticiones web las hará nuestro servidor, no el router del que no nos fiamos.

Al hacerse las peticiones web desde ese otro servidor un efecto secundario es que si por ejemplo nuestro servidor está en EEUU podremos acceder a páginas que tienen bloqueado el acceso a países que no son EEUU.

Yo ahora mismo lo uso para poder subir ficheros a Amazon S3, por algún motivo que desconozco desde mi conexión de Movistar las subidas se quedan paradas. Usando como proxy un servidor externo funcionan perfectamente.

Montar esto es muy sencillo:

  1. Iniciamos el servidor SOCKS en el puerto 12345 (por ejemplo):
    ssh -D 12345 usuario@servidorProxy
  2. Configuramos el navegador para que utilice como proxy el servidor SOCKS v5 en la dirección 127.0.0.1 y el puerto 12345.

Y ya está. Cuando hayamos terminado cerramos la sesión de SSH y volvemos a cambiar la configuración del navegador.

Nota: Google Chrome en Linux no permite cambiar la configuración del proxy mediante el interfaz, hay que indicarlo por línea de comandos:

/opt/google/chrome/chrome --proxy-server="socks5://127.0.0.1:12345"

Recibir notificaciones de Android en el PC

Para recibir las notificaciones de Android en nuestro PC y no tener que mirar el teléfono la solución es “Desktop Notifications”. Se compone de una aplicación para el móvil y una extensión para el navegador (funciona con Chrome y con Firefox, aunque el proceso de identificación es más sencillo con Chrome).

  1. Instalamos en el teléfono (solo funciona con Android) la aplicación: https://play.google.com/store/apps/details?id=org.hcilab.projects.notification&hl=en
  2. Instalamos en Chrome la extensión: https://chrome.google.com/webstore/detail/desktop-notifications-for/giicnncicnopjohcpamieklkiacdoeni/related?hl=en
  3. Nos identificamos en ambas con nuestra cuenta de Google

Y ¡ya está! Se tarda dos minutos en hacer todo esto y ya podremos recibir en nuestro navegador las notificaciones del teléfono.

Abrir fichero winmail.dat con Linux

Hoy me ha llegado un correo con un adjunto winmail.dat. Se trata de un formato que utiliza Microsoft Outlook para el reenvío de emails, y para abrirlo en Linux se utiliza el programa tnef.

sudo apt-get install tnef

Así que si recibimos un fichero de estos no tenemos más que guardarlo en una carpeta y luego, a través de la línea de comandos, ir a esa carpeta y ejecutar

tnef winmail.dat

Convertir HTML a PDF por línea de comandos

Coincide que en los proyectos que tengo para dos clientes diferentes necesito hacer la misma cosa: generar un PDF con datos personalizados. En un caso son facturas y en otro contratos.

Hasta ahora cuando necesitaba hacer un PDF usaba la librería de PHP FPDF, que está bastante bien, pero hay una alternativa mucho más sencilla: wkhtml2pdf.

Es importante que si vamos a usarlo en un servidor de producción, que no tiene servidor de ventanas, nos descarguemos la versión estática. Una vez instalado el proceso es tan sencillo como:

  1. Copiar el documento HTML base para tenerlo con el nombre que queramos.
  2. Modificarlo con PHP para incluir la información personalizada.
  3. Ejecutar wkhtml2pdf fichero.html fichero.pdf