Instalando Portainer en la Raspberry Pi

Uno de los temas que me tenía preocupado al cual le quería dar una solución, es la administración de contenedores Docker a través de una interfaz gráfica la cual a la vez me permitiera actualizarlos fácilmente en vez de hacerlo a través de la Terminal.

Los puristas del Terminal probablemente dirán que es mejor administrar los contenedores a través de la línea de comandos, y quizás tienen razón, pero en mi opinión para alguien a quien el tiempo le es esquivo y escaso, es mejor disponer de una interfaz gráfica.

No es mi primera aproximación a Portainer, lo había probado antes sin el éxito que esperaba, pero decidí darle una segunda oportunidad antes de lo cual me documenté adecuadamente leyendo otros blogs y viendo algunos videos de YouTube.

En mi caso instalé Portainer CE (Community Edition) el cual es de uso gratuito. Lo primero que debemos hacer es crear un volumen en el cual Portainer guardará su base de datos.

docker volume create portainer_data

Una vez hecho esto basta crear el contenedor Docker de Portainer usando el siguiente comando.

docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data cr.portainer.io/portainer/portainer-ce:latest

Una vez terminado el proceso, es necesario terminar la configuración de Portainer ingresando a la página web del servicio, reemplazando localhost por la dirección IP de la Raspebbry Pi.

https://localhost:9443

En este último paso, debemos crear el usuario y password con que administraremos Portainer.

En los próximos posts comentaré como instalar Homebridge vía Portainer, así como otros servicios con los que he estado jugando últimamente.

Por emontes, hace

[Docker] Cómo actualizar Homebridge

Habiendo comentado en una entrada previa respecto de la instalación de Homebridge, quedó pendiente comentar cómo es que se actualiza Homebridge ya que aunque se trata de un proceso sencillo y está dentro de la documentación, habitualmente lo pasamos por alto.

Después de tener corriendo Homebridge por casi 10 meses, me di cuenta que tanto los paquetes nodejs como npm estaban desactualizados.

Mi primera aproximación fue a través del Terminal interno que tiene la instalación de Homebridge gracias al plugin reinstalado «Homebridge UI», de hecho pude actualizar npm pero no tuvo ningún efecto en el sistema a pesar de reiniciar homebridge.

Después de buscar bastante tiempo por internet, finalmente encontré la respuesta en la página de Github del proyecto oznu/docker-homebridge.

La solución para actualizar Homebridge es conectarse por ssh a la Raspberry Pi, cambiar al directorio en que está el archivo «docker-compose.yml» de nuestra instalación de Homebridge, actualizar el docker y finalmente correr el «docker-compose.yml» con lo cual el sistema queda actualizado.

Los comandos para dicha gestión, una vez conectados por ssh, son los siguientes.

cd /home/pi/homebridge
docker-compose pull homebridge
docker-compose up -d

Con eso queda actualizada la instalación de Homebridge y los paquetes nodejs y npm que estaban desactualizados.

Por emontes, hace

Automatizando el respaldo de la Raspberry Pi

Uno de los temas que últimamente me ha estado preocupando es el respaldo del sistema de la Raspberry Pi, lo cual resulta muy necesario cuando has gastado bastante tiempo en personalizar el sistema y dejarlo funcionando como una máquina de relojería.

Buscando en internet encontré un post de PiMyLifeUp en el cual nombraban un script de bash llamado bkup_rpimage creado por lzkelley el cual de acuerdo a su creador permitía crear respaldos incrementales en un archivo .img de todo el contenido de la microSD de la Raspberry Pi.

Era justo lo que necesitaba, pero por alguna razón no funcionaba correctamente en mi sistema, así que decidí crear un fork en Github y optimizarlo, con lo cual quedó funcionando a pedir de boca.

Lo primero que debemos hacer es clonar el script en nuestra Raspberry para lo cual ejecutaremos el siguiente comando.

cd /home/pi
git clone https://github.com/MrAndersonMD/bkup_rpimage.git
cd bkup_rpimage

Esto creará un directorio llamado bkup_rpimage en nuestro directorio home en el cual encontraremos los archivos bkup_rpimage.sh, exclude-file.txt, LICENSE y readme.md.

bkup_rpimage.sh corresponde al script, exclude-file.txt corresponde a un archivo en el cual podemos incluir los archivos o directorios que queremos excluir del respaldo, como por ejemplo archivos de cache y logs, LICENSE corresponde a la licencia y readme.md corresponde al archivo de ayuda en el cual se explica el uso del script.

Antes de realizar el primer respaldo vale la pena revisar el archivo exclude-file.txt con el siguiente comando.

sudo nano exclude-file.txt

El contenido por defecto de dicho archivo es el siguiente.

media
tmp/**
proc/**
run/**
sys/**
mnt/**
var/swap
var/cache
var/log
home/pi/.cache/**
root/.cache
root/.npm

Podemos incluir más directorios, archivos específicos, o incluso extensiones, teniendo el cuidado de escribir un recurso por línea como se aprecia en el ejemplo. Una vez que hayamos terminado de editar el archivo, grabamos con Ctrl-O y salimos con Ctrl-X.

El primer respaldo es el que tomará más tiempo, pero los siguientes, dado que utiliza un sistema de respaldo incremental, sólo agregarán o borrarán lo que no esté respaldado previamente.

Para realizar el primer respaldo basta con utilizar el siguiente comando.

sudo sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/MYBACKUPDRIVE/rpi_backup.img

Yo tengo conectado un SSD WD PiDrive a uno de los puertos USB de la Raspberry Pi, de manera tal que donde dice MYBACKUPDRIVE lo reemplacé por la ruta de dicho SSD y del directorio que creé para guardar dichos respaldos.

Una vez terminado el primer respaldo podemos automatizarlos mediante cron con el siguiente comando.

sudo crontab -e

Seleccionamos nano como editor y agregamos la siguiente línea.

0 0 * * * sudo sh /home/pi/bkup_rpimage/bkup_rpimage.sh start -c /media/pi/WD_PiDrive_314GB/raspi-backup/raspi-backup.img

Una vez que esté todo listo, grabamos con Ctrl-O y salimos con Ctrl-X. Esta linea de cron creará un respaldo incremental todos los días a las 0:00.

Con esto, ya tendremos automatizada la creación de respaldos incrementales del sistema de nuestra Raspberry Pi, y podremos dormir algo más tranquilos sabiendo que si el sistema se llega a estropear, tenemos una copia de seguridad para recrear todo sin tanto trabajo.

Por emontes, hace

Agregando una ampolleta Philips ZhiRui a Home via Homebridge

Como buen cacharrero, cada cierto tiempo reviso la web de AliExpress buscando alguna novedad tecnológica que pueda ser de alguna utilidad, especialmente si se trata de artículos de domótica.

En una de estas andanzas, encontré unas ampolletas inteligentes marca Xiaomi modelo Philips ZhiRui, las cuales tienen un precio bastante menor (USD$9.95) que las ampolletas Philips Hue y además tienen la cualidad de no necesitar un hub para funcionar, ya que funcionan a través de WiFi.

Específicamente necesitaba una ampolleta inteligente con rosca E14 para una lámpara de pie que instalé en el living de casa. Esta lámpara tiene un soquete E27 en el cual por ahora instalé una ampolleta Philips LED normal, y un soquete E14 para una luz de lectura en el cual tenía instalada una ampolleta LED normal.

De forma nativa estas ampolletas sólo pueden ser utilizadas a través de la aplicación Xiaomi Home, pero se pueden integrar a Home gracias a HomeBridge como veremos a continuación.

1. Obteniendo el token de la ampolleta Philips Zhirui

El primer paso es obtener el token de la ampolleta, pues es un dato requerido por el plugin de homebridge al momento de configurarlo. Antes de esto debemos poner la ampolleta en modo de emparejamiento.

Si es primera vez que instalamos la ampolleta simplemente basta con instalarla y encenderla. Si por el contrario previamente fue agregada a Xiaomi Home, es necesario restaurarla a la configuración de fábrica para lo cual basta con apagarla y encenderla rápidamente 5 veces en 5 segundos.

Una vez que la ampolleta está en modo de emparejamiento, seguimos los pasos para obtener el token. Para esto tenemos dos formas de hacerlo.

1.1 Obteniendo el token con Packet Sender

La primera forma es a través de la aplicación Packet Sender. Descargamos la aplicación en nuestro computador, y la ejecutamos.

Con la ampolleta en modo de emparejamiento, esta crea una red WiFi a la cual tenemos que conectar nuestro computador.

Una vez conectados a esta red, necesitamos conocer la IP de la ampolleta, para lo cual vamos a Preferencias del Sistema – Red, luego seleccionamos la opción WiFi y finalmente pinchamos en el botón «Avanzado». Esto no mostrará una caja de diálogo en la cual tenemos que seleccionar la pestaña TCP/IP. En la etiqueta Router aparecerá la dirección IP de la ampolleta.

Ahora en Packet Sender, tenemos que enviar un paquete con los siguientes datos, reemplazando XXX1 por la IP de la ampolleta.

HEX: 21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
IP: XXX1
Puerto: 54321
Menú desplegable de protocolo: UDP

 La ampolleta debiera devolvernos un mensaje cuyos últimos 32 caracteres hexadecimales corresponden al token.

Guardamos este valor para cuando tengamos que configurar el plugin correspondiente en Homebridge.

1.2 Obteniendo el token con miio

La segunda forma de obtener el token es utilizando la aplicación miio desarrollada por aholstenson y disponible en GitHub. Antes de instalar miio, es necesario que hayas instalado Homebrew tal como discutimos previamente.

Para instalar miio basta con ejecutar el siguiente comando.

sudo npm install -g miio

Es posible instalarla en la Raspberry Pi, pero debido a que para obtener el token es necesario conectarse a la red WiFi que genera la ampolleta, es recomendable instalarla en otro dispositivo puesto que la administración de redes de la Raspberry no es tan sencilla.

En mi caso, la instalé en mi MacBook Pro ya que la gestión de redes del Mac es mucho más flexible. Para instalarla en el MacBook es necesario tener instalado Homebrew, lo cual fue tratado en post anteriores, y obviamente como en el Mac no existe el comando sudo, la forma de instalarla es la siguiente.

npm install -g miio

Ahora que tenemos instalado miio, conectamos nuestro dispositivo a la red WiFi creada por la ampolleta Xiaomi Philips ZhiRui, y ejecutamos el siguiente comando.

miio discover

La aplicación comenzará a buscar los dispositivos que utilizan el protocolo Xiaomi Mi Home, y mostrará una lista entre los cuales estará la ampolleta en cuestión y su respectivo token, el cual debemos guardar para cuando la configuremos en Homebridge.

2. Agregando la ampolleta Philips ZhiRui a Xiaomi Home

Ahora que tenemos el token, tenemos que agregar la ampolleta a Xiaomi Home, para que a través de esta aplicación se conecte a nuestra red WiFi local y el router le asigne una IP, el cual es otro de los datos que necesitaremos para configurarla en Homebridge.

Volvemos a poner la ampolleta en modo de emparejamiento, entramos en la aplicación Xiaomi Home en nuestro smartphone, pinchamos en el símbolo «+» en la esquina superior derecha de la pantalla y en la caja de búsqueda escribimos «zhirui». Seleccionamos «Philips ZhiRui E14 candle lamp» y seguimos con el proceso de emparejamiento tras lo cual la ampolleta será exitosamente agregada al sistema de domótica de Xiaomi.

Para identificar la IP, seleccionamos la ampolleta, pinchamos en los «…» de la esquina superior derecha, seleccionamos «Ajustes adicionales», luego seleccionamos «Información de red», y de esta forma obtendremos la dirección IP.

3. Instalando el plugin homebridge-mi-philips light

Una vez que ya hemos hecho los 2 pasos previos, lo único que resta es la instalación del plugin  homebridge-mi-philips-light, el cual permitirá integrar la ampolleta Philips ZhiRui a Home vía Homebridge. Si bien es cierto que este plugin no fue desarrollado para este modelo específico de ampolleta Xiaomi, funciona sin problemas.

Para instalar dicho plugin basta con abrir una ventana de un navegador web, escribir la dirección IP y el puerto correspondiente a nuestra instalación de Homebridge y loguearnos. Una vez que estemos dentro del sistema, seleccionamos la opción «Plugins» del menú, y en la caja de búsqueda escribimos el nombre del plugin y lo instalamos.

Una vez instalada procedemos a configurar la ampolleta Philips ZhiRui con los siguientes parámetros.

  • En «Light Model» selecciona la opción MiPhilipsSmartBulb.
  • En «IP Address» escribe la IP de la ampolleta Philips ZhiRui que obtuviste en el paso 2.
  • En «Token» escribes el token que obtuviste en el paso 1.
  • En «Name» le das un nombre que la identifique.
  • Finalmente pinchas en «Guardar» y reinicias Homebridge para que los cambios surtan efecto.

Con esto la ampolleta Philips ZhiRui ya aparecerá en Home, y sólo restará asignarla a una habitación ya que tendrá asignado el nombre correctamente.

Por emontes, hace

Instalando Python 3.x en Raspbian

Hace un tiempo, ArmoredReaper les comentó respecto de cómo instalar Python 3.6.4 en macOS, y dado que tengo en mente la publicación de algunos proyectos que requieren de Python y de nuestra siempre bien amada Raspberry Pi, resulta necesario comentar cómo se instala Python en Raspbian.

Es probable que en su Raspberry ya esté instalado Python, aunque en la versión 2.x la cual dejó de tener soporte a contar del 1 de Enero de 2020. Por esta razón es necesario desinstalarlo e instalar Python 3.x en su reemplazo.

1. Desinstalando Python 2.x

Abrimos una ventana de Terminal y nos conectamos por SSH a nuestra Raspberry Pi, lo cual ya vimos en detalle con anterioridad.

Una vez logueados, desinstalamos Python 2.x utilizando los siguientes comandos.

sudo apt-get remove -y python
sudo apt-get autoremove

Con el primer comando desinstalaremos Python, y con el segundo se desintstalarán los archivos o dependencias que hayan quedado huérfanas y que ya no son necesarias.

2. Instalando Python 3.x

Instalaremos Python 3.x desde los repositorios que vienen definidos por defecto en nuestra instalación de Raspbian. Esto permitirá que Python se mantenga actualizado constantemente sin comandos o procesos demasiado complejos. Para instalar Python 3.x utilizaremos los siguientes comandos.

sudo apt-get update
sudo apt-get install python3 idle3 python3-pip

Con el primer comando actualizamos los repositorios, y con segundo instalaremos los paquetes python3 e idle3. Idle3 es una librería que si bien no es un requisito para Python 3.x, es mejor instalarla desde el principio puesto que otorga bastante funcionalidad a Python y puede que en el futuro la necesitemos. Finalmente python3-pip, es un gestor de paquetes que permite instalar librerías de Python dentro del entorno de Python.

3. Ejecutando archivos py con Python 3.x

Finalmente, para ejecutar los archivos py los cuales ejecutábamos con el comando «python archivo.py», ahora deben ser ejecutados utilizando el comando «python3 archivo.py».

Si les genera demasiado hastío tener que agregar un «3» al final de comando «python», es posible crear un alias para evitar que nuestro cerebro sufra un cortocircuito por esta razón.

Una vez abierto el archivo «/home/pi/.bashrc» como vimos con anterioridad en la entrada correspondiente, sólo basta agregar una línea con el siguiente alias.

alias python='python3'

Y con eso ya tenemos instalado Python 3.x en nuestra Raspberry Pi para los futuros proyectos que tengo que comentarles.

Por emontes, hace

Creando alias en Raspbian

La creación de alias permiten transformar una palabra común y corriente en un comando o en una serie de comandos. Los alias están almacenados en el archivo .bashrc. Para crear nuevo alias tenemos que editar dicho archivo con el siguiente comando.

sudo nano /home/pi/.bashrc

Una vez abierto el archivo, nos daremos cuenta que este contiene mucha información. No tenemos que preocuparnos por dicha información, pero por supuesto no debemos borrarla. Así que iremos al final del archivo y agregaremos los alias que estimemos necesarios utilizando para ello el formato alias palabra=’comando’. Les dejo un par de ejemplos.

alias home='cd /home/pi'
alias pidrive='cd /media/pi/WD_PiDrive_314GB/'

Guardamos con Ctrl-O y salimos con Ctrl-X. Ahora solo basta reiniciar bash con el siguiente comando.

exec bash

Y listo, ya tenemos creados nuestros alias.

Por emontes, hace

[Docker] Montando un servidor MariaDB en una Raspberry Pi

Para continuar con la instalación de un sistema LEMP en la Raspberry Pi, ahora le toca el turno a la instalación de una base de datos. Elegí MariaDB ya que se trata de un sistema de base de datos liviano pero a la vez con la potencia suficiente. Para esto utilicé una imagen de Docker creada por uGeek.

Para descargar la imagen, crear el contenedor y ejecutarlo basta una sola línea de comando de Terminal, al igual que lo hicimos con la instalación de Nginx.

docker run --name mariadb --restart always -p 3306:3306 -v $HOME/docker/mariadb/config:/var/lib/mysql -v $HOME/docker/mariadb/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d ugeek/mariadb:arm

Veamos qué significa cada uno de los modificadores. —name corresponde al nombre que tendrá el contenedor que estamos creando, —restart always indica al sistema que cada vez que el sistema se reinicie, dicho contenedor debe ser ejecutado nuevamente, -p corresponde a los puertos que utilizará, -v corresponde a los directorios a los que tendrá acceso fuera del contenedor, en -e MYSQL_ROOT_PASSWORD es necesario reemplazar my-secret-pw por el password del usuario root en MariaDB, y finalmente -d corresponde a la imagen del contenedor que se descargará.

Una vez que el sistema haya descargado la imagen, creado y ejecutado el contenedor, es necesario crear una base de datos cualquiera, para lo cual primero es ingresar al contenedor de MariaDB por sh.

docker exec -i -t mariadb sh

Ahora ejecutamos MariaDB con el usuario root, para lo cual nos solicitará el password my-secret-pw que utilizamos en el comando de creación del contenedor.

mysql -u root -p

Ahora creamos una base de datos la cual llamaremos db1, y modificamos sus privilegios.

CREATE DATABASE IF NOT EXISTS db1;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
FLUSH PRIVILEGES;

Finalmente salimos de MariaDB y salimos del contenedor.

\q
exit

Con esto ya queda creado el contenedor de MariaDB. Más adelante veremos cómo integrarlo con el servidor de Nginx para, por ejemplo, instalar WordPress.

Por emontes, hace

[Docker] Montando un servidor Nginx en una Raspberry Pi

Poco a poco le voy dando más utilidad a mi Raspberry Pi 2B, la cual aunque está lejos del rendimiento de una Raspberry Pi 4, creo que es suficiente para el trabajo que pretendo pedirle. Como uno de mis objetivos es verificar si tiene la capacidad de correr un servidor LEMP (Linux, Nginx, MySQL y Php), o primero que hay que hacer es montar un servidor Nginx a través de Docker.

Aunque pueda parecer una tarea compleja o complicada, la verdad es que se puede hacer en una sola línea de comando de terminal.

docker run --name nginx --restart always -d -p 80:80 -v $HOME/docker/nginx:/usr/share/nginx/html:ro nginx:alpine

Veamos qué significa cada uno de los modificadores. –name corresponde al nombre que tendrá el contenedor que estamos creando, –restart always indica al sistema que cada vez que el sistema se reinicie, dicho contenedor debe ser ejecutado nuevamente, -p corresponde a los puertos que utilizará, y -v corresponde a los directorios a los que tendrá acceso fuera del contenedor.

Esto descargará la imagen de Docker desde su repositorio original, y luego creará el contenedor y lo ejecutará.

En mi caso tengo conectado un SSD externo de Western Digital, el cual fue diseñado específicamente para la Raspberry Pi, llamado PiDrive de 314 Gb, por lo tanto la carpeta donde estarán ubicados los archivos del servidor web tienen otra localización, y es necesario hacer algunos ajustes al comando.

docker run --name nginx --restart always -d -p 80:80 -v /media/pi/WD_PiDrive_314GB/html:/usr/share/nginx/html:ro nginx

Ahora hay que agregar el directorio /media/pi/WD_PiDrive_314GB/html install al usuario pi y al grupo www-data, cambiar los permisos de escritura de dicho directorio y finalmente agregar el usuario pi al grupo www-data, con lo cual ya todo debiera funcionar. En el caso de ustedes reemplacen /media/pi/WD_PiDrive_314GB/html por $HOME/docker/nginx.

sudo chown pi:www-data -R /media/pi/WD_PiDrive_314GB/html
sudo chmod 0755 -R /media/pi/WD_PiDrive_314GB/html
sudo adduser pi www-data

Con esto queda montado el servidor Nginx en la Raspberry Pi a través de Docker. Sólo nos falta crear un archivo index.html en el directorio /media/pi/WD_PiDrive_314GB/html y listo. El ejemplo que sigue es el index por defecto de Nginx.

<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<link href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYA$
<style>
body {
  margin: 0px;
  font: 20px 'RobotoRegular', Arial, sans-serif;
  font-weight: 100;
  height: 100%;
  color: #0f1419;
}
div.info {
  display: table;
  background: #e8eaec;
  padding: 20px 20px 20px 20px;
  border: 1px dashed black;
  border-radius: 10px;
  margin: 0px auto auto auto;
}
div.info p {
    display: table-row;
    margin: 5px auto auto auto;
}
div.info p span {
    display: table-cell;
    padding: 10px;
}
img {
    width: 176px;
    margin: 36px auto 36px auto;
    display:block;
}
div.smaller p span {
    color: #3D5266;
}
h1, h2 {
  font-weight: 100;
}
div.check {
    padding: 0px 0px 0px 0px;
    display: table;
    margin: 36px auto auto auto;
    font: 12px 'RobotoRegular', Arial, sans-serif;
}
#footer {
    position: fixed;
    bottom: 36px;
    width: 100%;
}
#center {
    width: 400px;
    margin: 0 auto;
    font: 12px Courier;
}
</style>
<script>
var ref;
function checkRefresh(){
    if (document.cookie == "refresh=1") {
        document.getElementById("check").checked = true;
        ref = setTimeout(function(){location.reload();}, 1000);
    } else {
    }
}
function changeCookie() {
    if (document.getElementById("check").checked) {
        document.cookie = "refresh=1";
        ref = setTimeout(function(){location.reload();}, 1000);
    } else {
        document.cookie = "refresh=0";
        clearTimeout(ref);
    }
}
</script>
</head>
<body onload="checkRefresh();">
<img alt="NGINX Logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEU$
<div class="info">
<p><span>Server&nbsp;address:</span> <span>server_address</span></p>
<p><span>Server&nbsp;name:</span> <span>server_hostname</span></p>
<p class="smaller"><span>Date:</span> <span>server_date</span></p>
<p class="smaller"><span>URI:</span> <span>server_url</span></p>
</div>
<div class="check"><input type="checkbox" id="check" onchange="changeC$
    <div id="footer">
        <div id="center" align="center">
            Request ID: request_id<br/>
            &copy; NGINX, Inc. 2018
        </div>
    </div>
</body>
</html>

Para verificar que está corriendo basta abrir una ventana de navegador, y escribir la dirección IP de la Raspberry Pi seguido del puerto 80, en mi caso 192.168.1.30:80, y debiera mostrar una imagen como la siguiente.

Más adelante veremos cómo crear vhosts para cada uno de los sitios que alojemos dentro de nuestro propio servidor web.

Por emontes, hace

[Docker] Instalando Homebridge en una Raspberry Pi

Desde hace un tiempo que vengo domotizando mi casa, hasta ahora he agregado varias ampolletas Phillips Hue y algunos sensores de Aqara (2 hubs, 2 sensores de presencia, 2 sensores de puerta y 2 sensores de vibración) lo cual me ha permitido automatizar en cierta forma la casa. Aún hay trabajo pendiente ya que faltan más ampolletas Phillips Hue, más sensores, cámaras, cerraduras inteligentes, etc, todo esto de la mano de Home, Siri y Alexa gracias a un parlante Echo Dot.

Leyendo por aquí y por allá encontré una plataforma llamada Homebridge la cual permite integrar a Home dispositivos que no tienen una compatibilidad nativa con este framework.

La forma más sencilla de instalar Homebridge es a través de Docker, el cual ya expliqué con anterioridad cómo se instala, así que en este post nos centraremos en la instalación de Homebridge.

Instalando Homebridge

Para la instalación de Homebridge utilizaremos un docker desarrollado por Oznu disponible en GitHub.

La forma más sencilla es utilizando para ello docker compose, el cual se trata simplemente de un manifiesto donde se encuentran registradas todas las configuraciones para descargar, crear y ejecutar el contenedor en un sólo paso, sin tener que escribir manualmente el comando docker run con todos sus parámetros.

sudo apt-get install docker-compose

Una vez instalado docker compose, tenemos que crear un directorio para homebridge, dentro del cual crearemos el manifiesto que permitirá la descarga, creación y ejecución del contenedor.

sudo mkdir /home/pi/homebridge
cd /home/pi/homebridge

Una vez que estemos dentro del directorio de homebridge, creamos un archivo llamado docker-compose.yml.

sudo nano docker-compose.yml

Dentro de este archivo copiamos lo siguiente

version: '2'
services:
  homebridge:
    image: oznu/homebridge:raspberry-pi
    restart: always
    network_mode: host
    volumes:
      - ./config:/homebridge
    environment:
      - PGID=1000
      - PUID=1000
      - HOMEBRIDGE_CONFIG_UI=1
      - HOMEBRIDGE_CONFIG_UI_PORT=8080

Grabamos con Ctrl-O y salimos con Ctrl-X.

Ahora basta que ejecutemos el manifiesto con docker compose

sudo docker-compose up -d

Con esto el sistema comenzará a descargar la imagen del docker, creará el contenedor y lo ejecutará, con lo cual ya tendremos corriendo Homebridge en nuestra Raspberry Pi.

Para ingresar al panel de control de Homebridge basta con abrir una ventana de navegador, y escribir la dirección IP de la Raspberry Pi, utilizando el puerto 8080, por ejemplo 192.168.1.30:8080. El usuario por defecto es admin, y la password de dicho usuario es admin.

Más adelante nos adentraremos en cómo agregar Homebridge a Home, y cómo agregar plugins de Homebridge para poder conectar a Home otros dispositivos domésticos que no tienen compatibilidad nativa con este framework.

Por emontes, hace

Instalando Docker en una Raspberry Pi

Desde hace algún tiempo que venía escuchando en distintos podcast (uGeek, Atareao, etc) relacionados con Linux y Raspberry Pi, respecto de las bondades de la instalación de servicios a través de una plataforma llamada Docker.

Docker permite que servicios como Apache, NGINX, MySQL, MariaDB, etc, sean instalados dentro de un contenedor, es decir, dentro de una sandbox y corran dentro de un entorno protegido sin riesgo de modificar el sistema operativo. En resumen, si un contenedor se daña, basta que lo borres, lo vuelvas a crear y tu sistema operativo seguirá corriendo de forma segura, sin intromisiones.

Lo primero es instalar algunos paquetes antes de la instalación de Docker

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Luego tenemos que instalar la clave de firma de Docker para poder instalar sus paquetes

sudo curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -

Ahora es necesario añadir los repositorios oficiales de Docker a la lista de repositorios de Raspbian

sudo echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

Luego instalamos Docker, pero primero es necesario actualizar la lista de repositorios con el comando apt-get update.

sudo apt-get update
sudo apt-get install docker-ce

Ahora es necesario activar e iniciar el servicio de Docker en systemd.

sudo systemctl enable docker
sudo systemctl start docker

Finalmente agregamos el grupo docker para no tener que usar sudo antes de los comandos de docker.

sudo groupadd docker
sudo usermod -aG docker $USER

Con todo esto ya tenemos instalado y corriendo Docker el cual nos será de gran utilidad, en especial para la instalación de Homebridge, lo cual les comentaré más adelante.

Por emontes, hace