Article rédigé par : Mohamed BELOUARGA
L'ajout d'une fonctionnalité, la correction d'un bogue ou la correction d'une faille de sécurité font tous partie du cycle de vie d'un logiciel, d'une bibliothèque ou d'un microprogramme. Cependant, pour les architectes et les développeurs, l'exécution de ces tâches comporte toujours des inconvénients techniques et peut entraîner de nombreux résultats indésirables (plus de bogues, annulations, etc.)
Jusqu'à présent, l'industrie, et en particulier l'industrie des systèmes embarqués, continue d'envoyer ses techniciens sur site pour effectuer des mises à jour de leurs produits. Ces procédures prennent du temps, nécessitent une logistique lourde, sont coûteuses et sont donc souvent négligées, ce qui suscite beaucoup de mépris pour les clients et les utilisateurs.
Les mises à jour à distance, également appelées mises à jour Over The Air (OTA), sont plus adaptées aux besoins futurs de la plupart des industriels, des fabricants et de leurs futurs produits.
Cet article traite des mises à jour à distance pour les systèmes Linux intégrés.
Les mises à jour OTA permettent d'apporter des modifications logicielles à un système sans entrer en contact physique avec celui-ci. Ces mises à jour peuvent être effectuées à l'aide de plusieurs solutions open source, mais leur mise en œuvre n'est pas toujours simple.
Lorsque les fabricants étudient les options de mise à jour, la première solution qu'ils envisagent est de procéder à la mise à jour par paquet. Cette solution est la moins adaptée aux systèmes embarqués pour plusieurs raisons :
👉 Les exemples incluent Réparateur, Ostrée, RAUC...
Il existe néanmoins d'autres solutions permettant d'éviter tous ces inconvénients, telles que Mise à jour SW, Rendeur, Arbre OST, RAUC, etc.
Chaque solution a sa propre façon de gérer les mises à jour, nous n'en discuterons que Mise à jour SWUpdate de Stefano Babic dans cet article.
Contrairement à la solution de bout en bout Mender, qui comporte ses exigences, ses contraintes et ses limites, SWUpdate peut créer une version personnalisée de Mender, permettant d'ajouter ou de supprimer des fonctionnalités. Création d'une solution de mise à jour qui répondra parfaitement aux besoins du client.
L'inconvénient est que le fichier de mise à jour peut être considérable, ce qui augmentera les prix du réseau. Cependant, ce problème peut également être évité en utilisant des rootfs compressés lors de la mise à jour ou en utilisant delta update. Nous développerons cela plus tard.
Avant de mettre en œuvre une solution de mise à jour, une stratégie de mise à jour doit être définie. Cette stratégie respecte la durée de vie d'un produit et est très difficile à modifier.
Voici quelques exemples de stratégies de mises à jour :
La procédure de mise à jour est la suivante. Pendant que le produit fonctionne avec rootfs1 et kernel1, swupdate met à jour rootfs2 ou kernel2, puis redémarre sur rootfs2 et kernel2.
Si la mise à jour est réussie, le produit reste tel quel. Mais si ce n'est pas le cas (rootfs2 est endommagé ou kernel2 panique), u-boot exécute une opération de restauration vers rootfs1 et kernel1.
Le noyau de secours est limité aux pilotes nécessaires, et le rootfs de secours est limité aux bibliothèques nécessaires et à swupdate. Les autres rootfs et le noyau sont le firmware de production.
Lorsqu'une mise à jour est prête, l'image redémarre sur l'image de secours et, à partir de l'image de secours, le rootfs et le noyau sont mis à jour. Une fois mise à jour, l'image redémarre sur le noyau de production et rootfs.
Dans tous les cas, si la mise à jour échoue, le noyau de secours et rootfs font office de sauvegardes.
Comme indiqué précédemment, SWUpdate étant un framework, tout est possible avec lui. Ses seules limites sont l'imagination de ses utilisateurs.
SWUpdate doit fonctionner avec le chargeur de démarrage, ce qui signifie que lorsque le périphérique ou le produit doit modifier le rootfs, le chargeur de démarrage modifie la ligne de commande que le noyau reçoit. Rendre cette conjonction vitale pour le système de mise à jour.
Maintenant que nous avons vu les stratégies de mise à jour et l'interface du chargeur de démarrage, voyons les différents outils fournis par SWUpdate pour envoyer une véritable mise à jour.
L'interface pourrait ressembler à ceci :
SWUpdate en mode Mangoose inclut un serveur Web intégré qui nous permet d'envoyer le fichier de mise à jour via une interface Web.
Une fois SWUpdate configuré correctement, cette interface permet à l'utilisateur d'envoyer un fichier de mise à jour (.swu) à la cible. L'interface affiche également des informations telles que l'état des mises à jour et les journaux.
SWUpdate en mode Surricata demande les mises à jour à un serveur distant, les extrait et les installe, puis communique les résultats.
Principalement utilisé pour de grandes quantités de cartes, le mode Surricata centralise et surveille les commandes du système de mise à jour. Côté serveur, nous pouvons utiliser Eclipse HawkBit pour surveiller l'état d'un parc de cartes.
Actuellement, seul Eclipse HawkBit est pris en charge mais, grâce à la nature open source de ces solutions, un serveur personnalisé peut être ajouté et servir de solution de contournement.
SWUpdate, agissant comme un framework, fournit aux utilisateurs de nombreuses autres fonctionnalités et outils. Par exemple, dans le cas où un utilisateur souhaite saisir une mise à jour du fichier .swu à l'aide d'une autre application. Le fichier peut être envoyé au démon SWUpdate à l'aide de l'outil SWUpdate-Client. De plus, avec SWUpdate-Progress, cette même application peut récupérer les données de progression de la mise à jour, ce qui permet une surveillance externe.
De nombreuses autres fonctionnalités sont disponibles et toutes sont très bien documentées.
Si vous avez un besoin spécifique, par exemple comment installer une certaine mise à jour ou mettre à jour un microcontrôleur lié à la cible, SWUpdate vous permet d'ajouter votre propre gestionnaire.
La sécurité reste importante pour SWUpdate. La possibilité d'utiliser HTTPS avec le mode surricata le prouve déjà, mais nous pouvons également signer des fichiers .swu. SWUpdate sera alors en mesure de vérifier que les mises à jour reçues proviennent d'une source autorisée (clé privée/clé publique).
La partie la plus coûteuse d'une procédure de mise à jour est dans la plupart des cas le coût de la bande passante. La mise à jour d'un rootfs pour un grand nombre de cibles nécessite également de grandes quantités de bande passante. Pour résoudre les problèmes et réduire les coûts, SWUpdate vous permet d'utiliser des rootfs compressés.
Le prix de la bande passante reste élevé même après compression, c'est pourquoi SWUpdate propose une autre solution basée sur les deltas.
Cette solution sera abordée dans un prochain article.
En conclusion, SWUpdate est un framework massif capable de résoudre de nombreuses situations spécifiques. Lorsqu'il est correctement configuré, SWUpdate peut réduire vos coûts de mise à jour tout en simplifiant considérablement la mise à jour des systèmes basés sur Linux pour tous.
Fabien LAHOUDERE, responsable de la pratique T&S Linux
Martin COUSSERANS, Directeur commercial
« Découvrez les fondamentaux de Linux embarqué, un système d'exploitation open source, léger et modulable, utilisé dans l'IoT, les objets connectés, les systèmes industriels ou médicaux. Technologie et stratégie vous accompagnent dans vos projets innovants grâce à son expertise technique.
EN SAVOIR PLUSSébastien Julien a structuré et développé Englab chez T&S, apportant vision stratégique, expérience de terrain et croissance humaine pour faire d'un bureau d'ingénierie un atout clé de l'entreprise.
EN SAVOIR PLUST&S s'engage dans une approche ambitieuse avec SBTi, afin de réduire ses émissions de carbone et d'aligner ses actions sur les objectifs climatiques mondiaux d'ici 2033 avec la participation active de toutes ses entités.
EN SAVOIR PLUS