Die Möglichkeit, über ein einziges Konto remote auf mehrere Geräte zuzugreifen, diese zu verbinden und zu verwalten, ist wichtig. Um noch einen Schritt weiter zu gehen, ist die Möglichkeit, Geräte vollständig aus der Ferne zu aktualisieren, eine weitere Möglichkeit für Systemadministratoren, den Aufwand zu reduzieren und Kopfschmerzen zu minimieren.
UpdateHub ist eine Open-Source-Lösung, mit der Sie vollständige Geräteaktualisierungen, einschließlich Firmware und Bootloader, remote durchführen können. Sein Ziel ist es, die Durchführung von Geräteaktualisierungen zu vereinfachen und Nacharbeiten und Risiken zu reduzieren, unabhängig davon, ob Sie Tausende von Geräten aktualisieren oder kleine Bereitstellungen verwalten. UpdateHub kümmert sich um alle Aspekte von OTA-Updates (Over-the-Air), einschließlich Paketintegrität und Authentizität, während Sie sich um Ihre andere Arbeit kümmern.
Weitere Linux-Ressourcen
- Spickzettel für Linux-Befehle
- Spickzettel für fortgeschrittene Linux-Befehle
- Kostenloser Online-Kurs:RHEL Technical Overview
- Spickzettel für Linux-Netzwerke
- SELinux-Spickzettel
- Spickzettel für allgemeine Linux-Befehle
- Was sind Linux-Container?
- Unsere neuesten Linux-Artikel
Diese Schritt-für-Schritt-Anleitung zu UpdateHub soll Ihnen den Einstieg in dieses professionelle Tool erleichtern. Es gibt zwei UpdateHub-Serveroptionen:UpdateHub Cloud und UpdateHub Community Edition (UpdateHub CE), ein vollständiger Open-Source-Server (vertrieben unter der MIT-Lizenz), der in diesem Tutorial verwendet wird.
Prüfen Sie die Anforderungen
Stellen Sie zunächst sicher, dass Ihre Linux-Distribution alle erforderlichen Pakete installiert hat, um ein Image mit dem Yocto-Projekt zu erstellen.
Außerdem benötigen Sie folgende Hardware:
- Ziel ist das Entwicklungsgerät. Dieses Tutorial verwendet einen Raspberry Pi 3 Model B+, aber Sie können auch einen Raspberry Pi 3, Model B oder Model B+ verwenden.
- Host ist der Computer, auf dem Sie das Image mit dem Yocto-Projekt erstellen. Dieses Tutorial verwendet Yocto 3.1 Dunfell.
Um UpdateHub CE zu starten, muss Docker auf dem Host installiert sein. Wenn Sie es nicht haben, lesen Sie die Orientierungs- und Einrichtungsanweisungen von Docker.
In dieser Anleitung wird das Repo-Tool von Google verwendet, um den Vorgang zu vereinfachen, da mehrere Repositories erforderlich sind. Weitere Informationen zu Repo finden Sie im Einrichtungsleitfaden für die Android-Entwicklung.
Installieren Sie auf Debian- und Ubuntu-Distributionen das Repo mit:
sudo apt install repo
Wenn Sie eine andere Linux-Distribution verwenden, laden Sie das Repo direkt herunter und stellen Sie Ihre Distribution ein mit:
mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
PATH=${PATH}:~/bin
Schließlich benötigen Sie eine Netzwerkverbindung über DHCP, oder Sie müssen wissen, wie Sie die Internetprotokolladresse (IP-Adresse) ändern oder eine Yocto-Projektschicht erstellen, die diese Konfiguration handhabt.
Bereiten Sie Ihre Umgebung auf den Build vor
UpdateHub stellt ein Repository mit einer Manifestdatei bereit, die vom Repo-Tool verwendet wird, wodurch die Verwaltung mehrerer Ebenen vereinfacht wird.
Laden Sie den Quellcode herunter, indem Sie ein Verzeichnis erstellen und die erforderlichen Yocto-Projektschichten abrufen:
mkdir updatehub-platform
cd updatehub-platform
repo init -u https://github.com/UpdateHub/updatehub-yocto-project-reference-platform.git -b dunfell
repo sync
Nach der repo sync
Befehl abgeschlossen ist, sehen Sie alle Ebenen, die Sie in den sources
benötigen Verzeichnis.
Die UpdateHub-Plattform bietet Unterstützung für mehrere unterstützte Geräte. Während der Einrichtung der Yocto-Projektumgebung werden Sie gefragt, ob Sie die Endbenutzer-Lizenzvereinbarung (EULA) von meta-freescale
akzeptieren möchten Schicht; dies ist für dieses Projekt nicht erforderlich.
Laden Sie die Yocto Project-Umgebung:
MACHINE="raspberrypi3" source ./setup-environment build
Beachten Sie, dass dieser Befehl nur für die Terminalsitzung gültig ist, in der Sie die Umgebung geladen haben. Wenn Sie ein neues Terminal verwenden, müssen Sie die Umgebung erneut laden. Sie müssen die Maschine jedoch nicht erneut konfigurieren, da der Konfigurationsinhalt in conf/local.conf
gespeichert ist Datei.
UpdateHub CE starten
Laden Sie bei installiertem Docker das Docker-Image herunter und starten Sie den Server auf Port 8080:
docker run -d -p 8080:8080 updatehub/updatehub-ce:latest
Greifen Sie über die Host-IP-Adresse und den Port 8080 (http://IP_ADDRESS:8080
) auf das UpdateHub CE-Dashboard zu ). Die Host-IP im Beispiel ist 192.168.15.50, das wäre also http://192.168.15.50:8080
.
Verwenden Sie die Vorgabe von admin
für den Benutzernamen und das Passwort und klicken Sie auf Anmelden .
Sie müssen die UPDATEHUB_SERVER_URL
konfigurieren um die UpdateHub CE-Adresse zu verwenden, da das Gerät die IP-Adresse des Servers kennen muss. Standardmäßig ist der meta-updatehub
Layer verwendet die UpdateHub Cloud-Adresse in der Server-URL-Variablen.
Sie sollten die Hauptschnittstelle von UpdateHub CE sehen:
Konfigurieren Sie die Umgebung zum Generieren des Images
Der nächste Schritt besteht darin, das Linux-Image zu generieren, das vom Gerät verwendet wird. Aber zuerst müssen Sie einige Variablen in der conf/local.conf
einrichten Datei:
UPDATEHUB_SERVER_URL = "http://IP_ADDRESS:8080"
UPDATEHUB_PACKAGE_VERSION_SUFFIX = "-test-image-1"
ENABLE_UART = "1"
UPDATEHUB_POLLING_INTERVAL = "1m"
Zeile für Zeile im obigen Code:
UPDATEHUB_SERVER_URL
enthält die IP-Adresse, unter der UpdateHub CE ausgeführt wird.UPDATEHUB_PACKAGE_VERSION_SUFFIX
fügt ein Suffix in der Bildversion hinzu. Dies ist nützlich, um eine Versionsnummer zu platzieren und sie für jedes neue Bild zu erhöhen. Diese Variable ist dieVERSION_ID
, die sich ausDISTRO_VERSION
zusammensetzt (in der Dokumentation beschrieben) plusUPDATEHUB_PACKAGE_VERSION_SUFFIX
. Sie können dies in/etc/os-release
überprüfen Datei im Ziel.ENABLE_UART
:Es gibt mehrere Möglichkeiten, auf das Zielgerät zuzugreifen, z. B. die Verwendung der seriellen Konsole oder das Anschließen einer Tastatur und eines Monitors. Diese Variable ermöglicht den Zugriff auf eine serielle Konsole auf einem Raspberry Pi, indem die im GPIO-Header verfügbaren seriellen Ports verwendet werden.UPDATEHUB_POLLING_INTERVAL
:Standardmäßig erfolgt die Kommunikation zwischen dem Agenten und dem Server von UpdateHub alle 24 Stunden. Verwenden Sie diese Variable, um eine neue Beratungszeit von 1 Minute einzurichten.
Dieses Tutorial verwendet Minicom, um sich mit dem Ziel zu verbinden; Wenn Sie möchten, können Sie mehr über die Verwendung der seriellen Verbindung in Raspberry Pi erfahren.
Bild generieren
Nachdem die Yocto-Projektumgebung bereit ist, kompilieren Sie das Image mithilfe der BitBake-Task-Execution-Engine, indem Sie Folgendes ausführen:
bitbake updatehub-image-base
Die Image-Generierung kann je nach Host-Rechner eine Weile dauern. Wenn Sie zum ersten Mal ein Image für raspberrypi3
erstellen In Yoctos Dunfell-Zweig lädt BitBake den gesamten Quellcode herunter, sodass Ihre Download-Geschwindigkeit die Zeit beeinflusst, die zum Generieren des Bildes benötigt wird.
Sobald das Image kompiliert ist, navigieren Sie zu build/tmp/deploy/images/raspberrypi3/
host-Verzeichnis und überprüfen Sie die Bilddatei updatehub-image-minimal-raspberrypi3.wic.gz
, ist da.
Legen Sie eine SD-Karte in Ihren Raspberry Pi ein und überprüfen Sie ihren Namen, indem Sie dmesg
ausführen . Flashen Sie dann das Image mit dem folgenden Befehl auf Ihre SD-Karte, aber stellen Sie sicher, dass Sie /dev/sdX
ändern zu Ihrem SD-Kartennamen:
zcat updatehub-image-base-raspberrypi3.wic.gz | sudo dd of=/dev/sdX
Legen Sie die abgebildete SD-Karte in das Zielgerät ein, um eine Verbindung mit Raspberry Pi herzustellen. Das Image hat ein Netzwerk, das so konfiguriert ist, dass es eine IP-Adresse über DHCP erhält. Greifen Sie mit dem Benutzer root
auf die Konsole zu und lassen Sie das Passwort leer.
Bestätigen Sie die auf dem Ziel ausgeführte Image-Version mit cat /etc/os-release
.
Generieren Sie das Update-Paket
Ihr Gerät sollte ordnungsgemäß laufen und funktionieren, aber Sie müssen die Funktion hinzufügen, um ein Aktualisierungspaket zu erstellen. Dadurch wird ein Bild erstellt, um Ihr Ziel zu aktualisieren. Das folgende Beispiel fügt Unterstützung für einen SSH-Server auf dem Ziel hinzu und erstellt ein Aktualisierungspaket, um diese Funktionalität zu installieren.
Fügen Sie Unterstützung für den OpenSSH-Server hinzu, indem Sie die folgende Zeile zu build/conf/local.conf
hinzufügen Datei:
IMAGE_FEATURES += "ssh-server-openssh"
Um deutlich zu machen, dass das aktualisierte Image eine andere Version haben wird, fügen Sie das Suffix -test-image-2
hinzu im UPDATEHUB_PACKAGE_VERSION_SUFFIX
Variable:
UPDATEHUB_PACKAGE_VERSION_SUFFIX = "-test-image-2"
Speichern Sie die Datei und führen Sie Folgendes aus:
bitbake updatehub-image-base -c uhuarchive
Dieser Befehl erzeugt eine Datei mit einem .uhupkg
Erweiterung, ein Format, das von UpdateHub verwendet wird, um das System zu aktualisieren. Die generierte Datei befindet sich im selben Verzeichnis wie die Bilder, tmp/deploy/images/raspberrypi3
; in diesem Beispiel ist das updatehub-image-base-raspberrypi3.uhupkg
.
Überprüfen Sie Ihr Gerät
Um auf das UpdateHub CE-Dashboard zuzugreifen, klicken Sie auf Geräte Tab, um zu sehen, ob Ihr Gerät aufgeführt ist:
Sende ein Updatepaket
Die Pakete des UpdateHub CE-Dashboards Registerkarte zeigt eine Liste der verfügbaren Pakete, aber Sie haben noch keine. Um ein Paket hinzuzufügen, klicken Sie auf Paket hochladen und wählen Sie updatehub-image-minimal-raspberrypi3.uhupkg
aus Datei. In diesem Beispiel befindet es sich in tmp/deploy/images/raspberrypi3/directory
. Ein Bildschirm mit den Paketdetails wird angezeigt. Dies zeigt den Prozess zum Hinzufügen eines Aktualisierungspakets zum Dashboard:
Rollout erstellen
Nachdem das Gerät erkannt und das Paket an den Server gesendet wurde, können Sie einen Rollout erstellen, bei dem es sich im Wesentlichen um einen Bereitstellungsplan handelt. Navigieren Sie zu den Rollouts und klicken Sie auf Einführung erstellen . Wählen Sie aus, welche Paketversion Sie beim Upgrade verwenden möchten. Dieses Beispiel enthält nur das Paket aus dem vorherigen Schritt mit der Version 20.04-test-image-2
. Wählen Sie diese Version und vergewissern Sie sich, dass sie die Liste der zu aktualisierenden Geräte enthält.
Zuvor haben Sie das auf dem Ziel ausgeführte Image so konfiguriert, dass jede Minute eine Aktualisierungsabfrage auf dem UpdateHub-Server ausgeführt wird, sodass der Aktualisierungsprozess innerhalb einer Minute nach Erstellung des Rollouts gestartet wird. Um den Aktualisierungsstatus zu verfolgen, überprüfen Sie die Rollouts Registerkarte.
Nach Abschluss eines Upgrade-Vorgangs wird das Ziel automatisch neu gestartet. Das neue Image startet und fragt den Server automatisch nach Updates ab. Der Server antwortet, dass er keine Updates hat und beendet den Update-Zyklus.
Wenn der Status updated
anzeigt , führen Sie den folgenden Befehl auf dem Host aus, um über SSH auf das Ziel zuzugreifen:
ssh root@IP_DO_TARGET
Es ist kein Passwort erforderlich; drücken Sie einfach Enter , und Sie befinden sich in der Zielkonsole. Sie können die Version in /etc/os-release
überprüfen Datei zu bestätigen.
Herzlichen Glückwunsch! Sie sind fertig!
Jetzt haben Sie Zugriff auf ein professionelles Tool, um Ihre Geräte aus der Ferne zu aktualisieren. In diesem Tutorial wurde ein Raspberry Pi 3 mit der Yocto Project-Version Dunfell 3.1.2 verwendet, aber andere Geräte und Versionen werden unterstützt.
Wenn Sie Fragen zur Integration Ihres Geräts haben, wenden Sie sich über Gitter oder per E-Mail an [email protected] an das Entwicklerteam.
Dieser Artikel basiert auf UpdateHub:Sending OTA Updates using the Yocto Project im Blog von UpdateHub.