La Raspberry Pi 4 ya admite el arranque desde un disco SSD

Hasta hace poco la Raspberry Pi 4 no podia realizar el arranque del sistema operativo desde un disco usb, ya fuera un disco HDD o SSD. Con el firmware lanzado a mediados de junio, este problema se ha solucionado.

Ahora ya podemos realizar el arranque desde un dispositivo usb y prescindir de las tarjetas SD, que por otro lado son bastante lentas, lo aconsejable y con lo que notaremos un aumento drástico de la velocidad de la Raspberry Pi es poner un disco de estado solido SSD.

Si tu tarjeta no esta actualizada, ante todo lo primero que debes hacer es proceder a su actualización:

sudo apt update
sudo apt full-upgrade

El siguiente paso es modificar un archivo del sistema. Los firmwares pueden tener 3 estados al momento de ser liberados:

  • Beta – Solo para pruebas, no suelen ser estables.
  • Stable – Ha sido probado y su estado se considera estable.
  • Critical – Se han solucionado todos los problemas reportados, es el más estable. Si tu Raspberry Pi hace un trabajo critico, que no puede fallar, este es el que debes usar.

Al instalar Raspbian, el sistema biene configurado para solo actualizar el firmware, si este se encuentra en la fase Critical. El firmware lanzado recientemente aun se encuentra en la fase Stable, es decir aun su versión no ha pasado a la fase Critical. Por ello es necesario modificar un archivo para permitir instalar en la Raspberry Pi 4 el firmware actual que se encuentra en fase Stable.

Para modificar el archivo utiliza el siguiente comando:

sudo nano /etc/default/rpi-eeprom-update

Ahora debemos cambiar el parametro FIRMWARE_RELEASE_STATUS de “critical” a “stable“, guarda los cambios realizados y sal del archivo. Ejecutar el siguiente comando.

sudo rpi-eeprom-update -d -a

Esto actualizara el bootloader, que es el encargado de arrancar la Raspberry Pi 4 desde unidades diferentes a la tarjeta SD.

Ahora toca reiniciar la raspberry Pi:

sudo reboot

Y comprobar que todo ha ido correctamente:

vcgencmd bootloader_version

Si realizas esta operación con fecha posterior a Agosto de 2020, puede que ya exista un firmware en estado Critical, y no tengas que modificar este archivo.

Aquí puedes encontrar más información sobre los bootloaders lanzados.

La fecha del firmware debería ser con fecha del 15 de junio de 2020 o posterior, ya que esta versión es la primera que soporta el arrancar la Raspberry Pi desde un dispositivo USB.

Si es así, tu Raspberry Pi 4 ya es capaz de arrancar desde unidades conectadas por usb.

Ahora toca pasar el contenido de la tarjeta SD a la unidad SSD. El proceso lo realizo desde un ordenador con Mac OS X. Pero con las herramientas adecuadas también se puede realizar desde Linux, es practicamente igual, o desde Windows.

Debes conectar la tarjeta SD al ordenador que realizará la tarea y ejecutar el siguiente comando en la terminal de Mac o Linux:

diskutil list

Veremos al silimar a la siguiente imagen:

Debemos saber el nombre con el que esta montada la unidad de la tarjeta SD, para ello busca la capacidad de tu tarjeta, sera de 16 o 32 GB, en la columna “SIZE“, y apunta la ruta que se muestra al principio, será algo como “/dev/disk6“, corresponde a una tarjeta SD de 16 GB (15.5 GB).

El siguiente paso es realizar una imagen de la tarjeta SD en nuestro ordenador, para ello utilizamos el comando:

sudo dd if=/dev/rdisk6 of=~/Desktop/raspberrypi.img bs=1m
  • if=, con este parametro seleccionamos la unidad a copiar, aquí debes poner la ruta que te dio en el paso anterior. Muy importante no olvides poner la letra “r” antes de disk6.
  • of=, indica la ruta donde se realizara la copia de la tarjeta SD, en este caso es en el “escritorio“, el archivo tendrá el nombre “raspberrypi.img
  • bs=1m, es el parametro y valor recomendado para este tipo de operaciones.

El proceso es algo lento, puede llevar entre 12 y 15 minutos, dependiendo en gran medida de la clase de la tarjeta SD.

Ya con la imagen creada de nuestra tarjeta SD, es hora de grabar dicha imagen en el disco SSD, es el mismo proceso que ya utilizaste para grabar la imagen de Raspbian en la SD. Solo que ahora grabamos la imagen que hemos creado, en la unidad SSD. Para ello utilizamos la herramienta “Etcher“. Ten mucho cuidado al seleccionar la unidad de destino, selecciona bien el disco SSD donde quieres grabar la imagen, ya que este proceso borrar todos los datos de dicho disco.

Una vez completado el proceso solo nos queda montar el disco SSD en la Raspberry Pi 4, y proceder a su arranque, si todo ha ido bien, ya tienes instalado tu sistema Raspbian en un disco SSD, mucho más rapido que la tarjeta SD.

Ahora solo queda un último paso, como habras podido comprobar, el tamaño actual de tu SSD es igual al de la imagen que has grabado.

Si en tu Raspberry Pi 4 no tienes instalada la herramienta “GParted“. Procede a su instalación. La encontraras en la pestaña “Raspbian/Preferencias/Add / Remove Software

La herramienta se instala en la pestaña “Herramientas del sistema“.

Al ejecutar GParted, verás que aparecen varias particiones en tu disco SSD. Selecciona la partición que contiene el sistema operativo, tendrá el tamaño de la imagen que anteriormente has grabado. Pulsa con el botón secundario del ratón, y selecciona “Redimensionar“. En la siguiente pantalla selecciona todo el tamaño disponible. Pulsa en el botón “Redimensionar“. Aun no se ha realizado ninguna tarea. Pulsa en el icono con el check verde, para que se realicen todas las operaciones pendientes.

Una vez que GParted termine de realizar la redimensión, ya dispondras de todo tu espacio en el disco SSD.

Share

Compartir archivos con el protocolo Apple Filing Protocol (AFP), entre Mac OS X y Raspberry Pi

Con la utilidad Netatalk, podemos crear un acceso permanente entre nuestro ordenador Mac y una Raspberry Pi, ello nos permite compartir archivos entre los dos dispositivos de forma rápida.

Antes de realizar la instalación de ningun paquete en la Raspberry Pi es muy aconsejable proceder a su actualización, para ello ejecutamos los siguientes comandos:

sudo apt update
sudo apt upgrade
sudo reboot

Una vez completado el proceso procedemos a instalar Netatalk, con el siguiente comando:

sudo apt-get install netatalk

Una vez completada la instalción, tenemos que configurar el archivo AppleVolumes.default, detenemos el servicio con:

sudo /etc/init.d/netatalk stop

Y ejecutamos el comando:

sudo nano /etc/netatalk/AppleVolumes.default

Añadimos las siguientes lineas:

:DEFAULT: options:upriv,usedots,rw

/       "Directorio Raiz"

Si no deseamos dar acceso a todo el contenido, añadimos los paths a la carpeta o carpetas que queremos hacer visibles. La barra invertida da acceso al directorio raiz. El primer parametro es el path o ruta a la carpeta que queremos publicar, el segundo parametro es informativo.

Guardamos los cambios realizados y lanzamos el servicio:

sudo /etc/init.d/netatalk start

Si todo ha ido bien, veremos en el “Finder“, en el lateral izquierdo, sección “Compartido“, nuestra tarjeta Raspberry Pi, algo similar a la siguiente imagen.

Al seleccionar dicho icono, se mostrará en la parte superior del “Finder“, un botón “Conectar como“, debemos pulsar en dicho botón y poner el usuario y contraseña de nuestra Raspberry Pi para poder conectar. Si los datos son correctos, se producira la conexión y ya tendremos acceso a los datos compartidos.

Las carpetas compartidas tendrán un aspecto similar a este.

Share

Ejecutar scripts al recibir comandos mediante MQTT

MQTT es un protocolo similar a HTTP, pero mucho más liviano, utilizado hoy en día principalmente para el Internet de las cosas.

Vamos a describir un proyecto en el cual se utiliza una Raspberry Pi, la cual esta constantemente monitorizando un servicio de notificaciones, en el cual tenemos una notificación especifica que se lanza cada 15 días, a las 05:00 de la mañana, pero el script que ejecuta la tarea principal esta alojado en otro ordenador.

El ordenador principal realiza a través de una aplicación una serie de informes que una vez completados son enviados a diferentes destinatarios. Este ordenador corre un script a la espera de recibir un comando enviado a través de MQTT.

Cuando la Raspberry Pi lanza la notificación, envía un comando por MQTT, el ordenador principal recibe el comando MQTT, compara la instrucción recibida, y si es correcta, ejecuta un script, el cual se encarga de generar los informes y enviarlos a sus destinatarios.

Para que funcione el protocolo MQTT, se debe instalar en los ordenadores implicados en las tareas.

Antes de instalar el Broken de MQTT (Mosquitto) en nuestra Raspberry Pi, actualizamos los paquetes:

sudo apt update
sudo apt upgrade
sudo reboot

Luego instalamos mosquitto y su software cliente:

sudo apt-get install mosquitto mosquitto-clients

El archivo de configuración generado por defecto (mosquitto.conf) se encuentra en el directorio /etc/mosquitto.

Una vez instalado podemos revisar que se está ejecutando correctamente:

sudo systemctl status mosquitto.service

Para que el servicio se ejecuta cada vez que se inicia la Raspberry Pi, ejecutamos:

sudo systemctl enable mosquitto.service

En nuestro ordenador principal tambien debemos instalar un Broken de MQTT. Si tenemos instalada la aplicación brew, en Mac OS X, la instalación es muy sencilla, ejecutamos:

brew install mosquitto

En la Raspberry Pi, cuando la notificación alcanza la fecha prevista, llamamos a la función:

def Script_Envio_Informes():
    call('mosquitto_pub -h 192.168.1.43 -t script_enviar_informes -m "Realizar"', shell = True)
  • -h, especifica la IP de la máquina destino del mensaje MQTT.
  • -t, topic, es la palabra con la que se publica (el emisor) y se suscribe (el receptor), en como el nombre del canal al que se esta suscrito.
  • -m, es el mensaje que se envía.
  • call, es una función que se ejecuta a traves de la terminal.

El ordenador principal ejecuta en siguiente script:

#!/usr/bin/python

import paho.mqtt.client as mqtt
from captura_web import Explorar
from notifica import notify

broker_address = "localhost"
broker_port = 1883
topic = "script_enviar_informes"

def on_message(client, userdata, message):
    print("Mensaje recibido=", str(message.payload.decode("utf-8")))
    print("Topic=", message.topic)
    print("Nivel de calidad [0|1|2]=", message.qos)
    print("Flag de retención =", message.retain)
    #ejecutamos script, llamamos a la función del script
    if str(message.payload.decode("utf-8")) == "Realizar":
        Explorar()
        notify("MQTT", "Se ha ejecutado el script Envio Informes")

client = mqtt.Client('Cliente1') 
client.on_message = on_message 
client.connect(broker_address, broker_port, 60) 
client.subscribe(topic) # Subscripción al topic
client.loop_forever()

Este script se ejecutar constantemente, está a la espera de recibir algun mensaje.

  • broker_address, ejecuta el broken en el ordenador local.
  • broker_port, es el puerto por defecto utilizado por el broken.
  • topic, es al canal que nos suscribimos. El mismo canal que ha publicado el emisor.
  • if str(message.payload.decode(“utf-8”)) == “Realizar”, si el mensaje recibido es igual a Realizar, se ejecutan las siguientes funciones.
  • Explorar(), esta función genera diferentes informes y realiza los envios a sus destinatarios.
  • notify(“MQTT”, “Se ha ejecutado el script Envio Informes”), crea una notificación en la pantalla del ordenador, informa de las tareas realizadas.

El código de notify es:

import os

def notify(title, text):
    os.system("""
              osascript -e 'display notification "{}" with title "{}"'
              """.format(text, title))

El envío de mensajes a traves de diferentes dispositivos puede servir para realizar las más variadas tareas. Es muy comun su utilización en placas arduino con sensores de temperatura, humedad y presión, u otro tipo de sensores, que mediante el protocolo MQTT va enviando periodicamente los datos que obtiene, a un ordenador que los procesa o almacena, como podria ser una Raspberry Pi.

La comunicación MQTT también se utiliza para la comunicación entre dispositivos Tuya y Smart Life y las aplicaciones que gestionan estos dispositivos.

Share

Convierte tu Raspberry Pi en un servidor multimedia DLNA

La Raspberry Pi es un pequeño ordenador con el que podemos realizar multiples tareas y muy interesantes. Dado su pequeño consumo, nos permite tenerla encendida las 24 horas, lo que supone un gasto de tan solo 0,60 euros al mes en consumo eléctrico.

Una de estas pequeñas tarjetas nos permite tener un servidor web (Apache, NGINX), un sistema para bloquear publicidad en los dispositivos enlazados en nuestra red (PI-HOLE), un servicio en la nube similar a Box, Dropbox, iCloud, etc. (NextCloud), un cliente bittorrent (QBITTORRENT), aplicaciones virtualizadas (Docker, Docker-Composer), servidores de bases de datos (Postgresql, MySql, Maria DB), servicios (Samba, Git, Mqtt, Node-red), una vpn para mejorar la seguridad de nuestra red (OPEN VPN), un servidor para contenidos multimedia de audio, video e imágenes (MINI DLNA), entre multitud de otras muchas aplicaciones y servicios, incluidas la domotica, robótica, etc.

Y todo instalado en un unico dispositivo.

Un servicio DLNA nos permite reproducir contenido multimedia en diferentes dispositivos que se encuentren conectados a nuestra misma red. Estos pueden ser, ordenadores, telefonos moviles, tablets, televisores, etc. Estos dispositivos tienen que tener instaladas aplicaciones que permitan recibir contenido a traves del protocolo DLNA, practicamente, por no decir todas, las televisiones actuales disponen de este protocolo, sobre todo si son Smart TV.

Hoy vamos a realizar la instalación del servicio multimedia MINI DLNA. Para ello lo primero que debemos hacer es actualizar la Raspberry Pi, este proceso se puede realizar desde la propia tarjeta, a través de un monitor, teclado y ratón, o accediendo a ella a través de ssh. Para poder acceder por ssh se debe tener habilitado dicho acceso, esto lo puedes ver pulsando en el icono de Raspbian, “Preferencias/Configuración de Raspberry Pi“, pestaña interfaces, debe estar activo “SSH“.

A continuación abrimos una terminal ya sea desde la Raspberry Pi directamente, o desde otro dispositivo mediante ssh y actualizamos nuestro pequeño dispositivo ejecutando cada uno de los siguientes comandos.

sudo apt update
sudo apt upgrade
sudo reboot

Una vez actualizada y reiniciada, ejecutamos el siguiente comando:

sudo apt install minidlna

En unos pocos segundos ya tendremos instalado nuestro servicio DLNA, ahora solo nos falta configurar dicho servicio para que sepa los directorios donde se encuentran los archivos de audio, video e imagenes. Para ello debemos acceder a un archivo de congiguración, con el siguiente comando:

sudo nano /etc/minidlna.conf

Una vez abierto el archivo podemos cambiar el nombre ser servicio DLNA, debemos buscar esta linea, #friendly_name=, y modificar para que quede algo silimar a friendly_name=MiServicioMultimedia.

Para añadir las carpetas donde se encontraran los archivos, debemos añadir unas lineas similares a estas:

media_dir=A,/home/pi/audio
media_dir=P,/home/pi/pictures
media_dir=V,/home/pi/videos
  • La A, indica que se trata de archivos de audio.
  • La P, son archivos de imagenes.
  • La V, archivos de video.

Para añadir archivos de video seria, media_dir=V,(la ruta a la carpeta que contiene los archivos de video). Es importante respetar la sintaxis. Despues de la V colocamos una coma, y sin espacios, la ruta a la carpeta, por ejemplo “/home/pi/videos“.

Una vez realizadas las modificaciones, guardamos el archivo y salimos del mismo.

Por último debemos aplicar el siguiente comando, para que los cambios realizados se actualicen.

sudo systemctl restart minidlna

Con este comando reiniciamos el servicio de DLNA. Ahora solo nos falta añadir algunos archivos en las carpetas indicadas en la configuración y realizar pruebas desde algún dispositivo.

Se puede obtener más información accediendo a traves de un navegador, con la IP de la Raspberry Pi y el puerto 8200, por ejemplo 192.168.1.200:8200, obtenemos información de los archivos multimedia compartidos y los dispositivos conectados al servicio DLNA.

Share