La capacidad de acceder, conectar y administrar varios dispositivos de forma remota a través de una sola cuenta es importante. Yendo un paso más allá, poder actualizar completamente los dispositivos de forma remota es otra forma para que los administradores de sistemas reduzcan el esfuerzo y minimicen los dolores de cabeza.
UpdateHub es una solución de código abierto que le permite realizar actualizaciones completas de dispositivos, incluidos el firmware y los cargadores de arranque, de forma remota. Su objetivo es facilitar la actualización de dispositivos y reducir el retrabajo y el riesgo, ya sea que esté actualizando miles de dispositivos o administrando pequeñas implementaciones. UpdateHub maneja todos los aspectos de las actualizaciones inalámbricas (OTA), incluidas la integridad y la autenticidad del paquete, mientras usted se encarga de su otro trabajo.
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
Esta guía paso a paso de UpdateHub tiene como objetivo ayudarlo a comenzar a utilizar esta herramienta profesional. Hay dos opciones de servidor UpdateHub:UpdateHub Cloud y UpdateHub Community Edition (UpdateHub CE), un servidor de código completamente abierto (distribuido bajo la licencia MIT), que es lo que usa este tutorial.
Verificar los requisitos
Primero, asegúrese de que su distribución de Linux haya instalado todos los paquetes necesarios para construir una imagen usando el Proyecto Yocto.
También necesita el siguiente hardware:
- Objetivo es el dispositivo de desarrollo. Este tutorial usa un Raspberry Pi 3 Model B+, pero también podría usar un Raspberry Pi 3, Model B o Model B+.
- Anfitrión es la computadora donde construirás la imagen usando el Proyecto Yocto. Este tutorial utiliza Yocto 3.1 Dunfell.
Para iniciar UpdateHub CE, debe tener Docker instalado en el host. Si no lo tiene, consulte las instrucciones de configuración y orientación de Docker.
Este tutorial utiliza la herramienta de repositorios de Google para facilitar el proceso, ya que requiere varios repositorios. Puede obtener más información sobre el repositorio en la guía de configuración de desarrollo de Android.
En las distribuciones Debian y Ubuntu, instale el repositorio con:
sudo apt install repo
Si está utilizando otra distribución de Linux, descargue el repositorio directamente y configure su distribución con:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
PATH=${PATH}:~/bin
Finalmente, necesita conectividad de red a través de DHCP, o debe saber cómo cambiar la dirección del protocolo de Internet (IP) o crear una capa de Yocto Project que maneje esta configuración.
Prepare su entorno para la compilación
UpdateHub proporciona un repositorio con un archivo de manifiesto utilizado por la herramienta de repositorio, lo que facilita la administración de varias capas.
Descargue el código fuente creando un directorio y obteniendo las capas necesarias del Proyecto Yocto:
mkdir updatehub-platform
cd updatehub-platform
repo init -u https://github.com/UpdateHub/updatehub-yocto-project-reference-platform.git -b dunfell
repo sync
Después de la repo sync
completa el comando, verá todas las capas que necesita en las sources
directorio.
La plataforma UpdateHub brinda soporte para múltiples dispositivos compatibles. Durante la configuración del entorno del proyecto Yocto, se le preguntará si desea aceptar el acuerdo de licencia de usuario final (EULA) del meta-freescale
capa; esto no es necesario para este proyecto.
Cargue el entorno del Proyecto Yocto:
MACHINE="raspberrypi3" source ./setup-environment build
Tenga en cuenta que este comando solo es válido para la sesión de terminal en la que cargó el entorno. Si usa una nueva terminal, deberá volver a cargar el entorno. Sin embargo, no necesitará volver a configurar la máquina porque el contenido de la configuración se almacena en el conf/local.conf
archivo.
Iniciar UpdateHub CE
Con Docker instalado, descargue la imagen de Docker e inicie el servidor en el puerto 8080:
docker run -d -p 8080:8080 updatehub/updatehub-ce:latest
Acceda al panel de UpdateHub CE a través de la dirección IP del host y el puerto 8080 (http://IP_ADDRESS:8080
). La IP del host en el ejemplo es 192.168.15.50, por lo que sería http://192.168.15.50:8080
.
Utilice el valor predeterminado de admin
para el nombre de usuario y la contraseña, y haga clic en Iniciar sesión .
Debe configurar el UPDATEHUB_SERVER_URL
usar la dirección CE de UpdateHub porque el dispositivo necesita conocer la dirección IP del servidor. De forma predeterminada, el meta-updatehub
capa utiliza la dirección de UpdateHub Cloud en la variable URL del servidor.
Debería ver la interfaz principal de UpdateHub CE:
Configure el entorno para generar la imagen
El siguiente paso es generar la imagen de Linux que utilizará el dispositivo. Pero primero, debe configurar algunas variables en el conf/local.conf
archivo:
UPDATEHUB_SERVER_URL = "http://IP_ADDRESS:8080"
UPDATEHUB_PACKAGE_VERSION_SUFFIX = "-test-image-1"
ENABLE_UART = "1"
UPDATEHUB_POLLING_INTERVAL = "1m"
Yendo línea por línea en el código anterior:
UPDATEHUB_SERVER_URL
contiene la dirección IP donde se ejecuta UpdateHub CE.UPDATEHUB_PACKAGE_VERSION_SUFFIX
agrega un sufijo en la versión de la imagen. Esto es útil para colocar un número de versión e incrementarlo para cada nueva imagen. Esta variable será elVERSION_ID
, que se compone deDISTRO_VERSION
(descrito en los documentos) más elUPDATEHUB_PACKAGE_VERSION_SUFFIX
. Puede verificar esto en el/etc/os-release
archivo en el destino.ENABLE_UART
:Hay varias formas de acceder al dispositivo de destino, como usar la consola serie o conectar un teclado y un monitor. Esta variable permite el acceso a una consola serial en una Raspberry Pi usando los puertos seriales disponibles en el encabezado GPIO.UPDATEHUB_POLLING_INTERVAL
:De manera predeterminada, la comunicación entre el agente y el servidor de UpdateHub ocurre cada 24 horas. Utilice esta variable para configurar un nuevo tiempo de consulta de 1 minuto.
Este tutorial usa Minicom para conectarse con el objetivo; si lo desea, puede obtener más información sobre el uso de la conexión en serie en Raspberry Pi.
Generar la imagen
Ahora que el entorno del Proyecto Yocto está listo, compila la imagen usando el motor de ejecución de tareas de BitBake ejecutando:
bitbake updatehub-image-base
La generación de imágenes puede demorar un tiempo, dependiendo de la máquina anfitriona. Si es la primera vez que crea una imagen para raspberrypi3
en la sucursal Dunfell de Yocto, BitBake descargará el código fuente completo, por lo que la velocidad de descarga influirá en el tiempo que se tarde en generar la imagen.
Una vez compilada la imagen, vaya a build/tmp/deploy/images/raspberrypi3/
host y verifique el archivo de imagen, updatehub-image-minimal-raspberrypi3.wic.gz
, está ahí.
Inserte una tarjeta SD en su Raspberry Pi y verifique su nombre ejecutando dmesg
. Luego, envíe la imagen a su tarjeta SD con el siguiente comando, pero asegúrese de cambiar /dev/sdX
al nombre de su tarjeta SD:
zcat updatehub-image-base-raspberrypi3.wic.gz | sudo dd of=/dev/sdX
Inserte la tarjeta SD con la imagen en el dispositivo de destino para conectarse a Raspberry Pi. La imagen tiene una red configurada para obtener una dirección IP mediante DHCP. Accede a la consola con el usuario root
y deja la contraseña vacía.
Confirme la versión de la imagen que se ejecuta en el objetivo usando cat /etc/os-release
.
Generar el paquete de actualización
Su dispositivo debería estar funcionando correctamente, pero debe agregar la función para crear un paquete de actualización. Esto crea una imagen para actualizar su objetivo. El siguiente ejemplo agrega soporte para un servidor SSH en el destino y crea un paquete de actualización para instalar esta funcionalidad.
Agregue soporte para el servidor OpenSSH agregando la siguiente línea a build/conf/local.conf
archivo:
IMAGE_FEATURES += "ssh-server-openssh"
Para que quede claro que la imagen actualizada tendrá otra versión, ponle el sufijo -test-image-2
en el UPDATEHUB_PACKAGE_VERSION_SUFFIX
variables:
UPDATEHUB_PACKAGE_VERSION_SUFFIX = "-test-image-2"
Guarde el archivo y ejecute:
bitbake updatehub-image-base -c uhuarchive
Este comando genera un archivo con un .uhupkg
extensión, un formato utilizado por UpdateHub para actualizar el sistema. El archivo generado estará en el mismo directorio que las imágenes, tmp/deploy/images/raspberrypi3
; en este ejemplo, eso es updatehub-image-base-raspberrypi3.uhupkg
.
Revisa tu dispositivo
Para acceder al panel de UpdateHub CE, haga clic en Dispositivos pestaña para ver si su dispositivo está en la lista:
Enviar un paquete de actualización
Paquetes del panel de UpdateHub CE La pestaña muestra una lista de paquetes disponibles, pero aún no tiene ninguno. Para agregar un paquete, haga clic en Subir paquete y seleccione el botón updatehub-image-minimal-raspberrypi3.uhupkg
expediente. En este ejemplo, está en tmp/deploy/images/raspberrypi3/directory
. Aparecerá una pantalla que muestra los detalles del paquete. Esto muestra el proceso de agregar un paquete de actualización al tablero:
Crear un lanzamiento
Con el dispositivo reconocido y el paquete enviado al servidor, puede crear una implementación, que es esencialmente un plan de implementación. Vaya a Lanzamientos y haga clic en Crear lanzamiento . Elija qué versión del paquete desea usar en la actualización. Este ejemplo solo tiene el paquete del paso anterior, con la versión 20.04-test-image-2
. Elija esta versión y asegúrese de que incluya la lista de dispositivos que se actualizarán.
Anteriormente, configuró la imagen que se ejecuta en el destino para realizar una consulta de actualización en el servidor UpdateHub cada minuto, por lo que dentro de un minuto de crear el lanzamiento, comenzará el proceso de actualización. Para realizar un seguimiento del estado de la actualización, consulta los Lanzamientos. pestaña.
Después de finalizar un proceso de actualización, el objetivo se reinicia automáticamente. La nueva imagen se inicia y consulta automáticamente el servidor en busca de actualizaciones. El servidor responde que no tiene ninguna actualización y finaliza el ciclo de actualización.
Cuando el estado muestra updated
, ejecute el siguiente comando en el host para acceder al destino a través de SSH:
ssh root@IP_DO_TARGET
No se requiere contraseña; solo presiona Entrar , y estará en la consola de destino. Puede verificar la versión en /etc/os-release
archivo para confirmar.
¡Felicitaciones! ¡Terminaste!
Ahora tienes acceso a una herramienta profesional para actualizar tus dispositivos de forma remota. Este tutorial usó una Raspberry Pi 3 con Yocto Project versión Dunfell 3.1.2, pero se admiten otros dispositivos y versiones.
Si tiene alguna pregunta sobre la integración de su dispositivo, acceda al equipo de desarrolladores a través de Gitter o envíe un correo electrónico a [email protected].
Este artículo se basa en UpdateHub:envío de actualizaciones OTA mediante el proyecto Yocto en el blog de UpdateHub.