Auto-hébergement

MiBee Steward v0.7.3 remplace l'agent Go par Rust et impose des réinitialisations de schéma

Le moniteur réseau auto-hébergé MiBee Steward v0.7.3 remplace son agent Go par une version Rust plus légère, rompt la compatibilité ascendante avec les bases de données antérieures et introduit une fédération en lecture seule entre

Illustration d'une baie de serveurs avec un ordinateur monocarte et une icône d'engrenage rouillé
Illustration créée pour cet article

Traduit automatiquement depuis l’original en anglais.

Le 12 octobre 2026, le développeur derrière MiBee Steward a publié la version 0.7.3, une mise à jour majeure pour cet outil de surveillance réseau auto-hébergé. Cette version introduit un changement incompatible qui refuse le démarrage avec les bases de données des versions précédentes, obligeant les utilisateurs à effectuer une nouvelle analyse. Elle remplace également l'agent distribué écrit en Go par une nouvelle implémentation en Rust afin d'améliorer les performances sur le matériel à ressources limitées.

Ce qui s'est passé

L'impact le plus immédiat pour les utilisateurs existants est le refus délibéré des anciens fichiers de base de données. MiBee Steward v0.7.3 ne démarrera pas s'il détecte une base de données issue de la v0.6 ou antérieure, ni n'acceptera les bases de données de la v0.7.0 à la v0.7.2. Le développeur a supprimé la chaîne complexe de migration au démarrage qui permettait auparavant des mises à jour incrémentales, ce qui avait conduit à des bugs DDL parallèles où des modifications partielles du schéma laissaient le système dans un état incohérent. À la place, le binaire vérifie désormais si la version du schéma dans la base de données correspond à la source unique de vérité située dans db/schema.sql. En cas de non-correspondance, l'application se ferme proprement pour éviter toute corruption des données.

Pour effectuer la mise à niveau, les administrateurs doivent sauvegarder leurs données existantes, lancer le nouveau binaire contre un répertoire de données vide et laisser le système repeupler la table des actifs via une nouvelle analyse réseau. Ce processus s'applique également à la mini-base de données locale de l'agent, ce qui signifie que l'historique des analyses et les identifiants SNMPv3 stockés localement ne sont pas migrés. Le développeur souligne que cette réinitialisation complète garantit qu'aucun état partiel ne subsiste pour perturber le fonctionnement du système.

Un changement architectural majeur de cette version est le remplacement de l'agent distribué basé sur Go par une version Rust. Le nouvel agent, situé dans le répertoire agent-rs/, produit des builds statiques musl pour les architectures amd64, arm64 et armv7. Bien que le fichier de configuration agent.yaml reste compatible pour éviter des modifications manuelles, le runtime sous-jacent a considérablement changé pour prendre en charge le matériel plus ancien doté d'une mémoire limitée. Le développeur a testé ce changement sur un NanoPi NEO avec 512 Mo de RAM, comparant l'utilisation des ressources des deux implémentations sur deux jours d'échantillonnage.

Détails clés

  • Compatibilité base de données : La v0.7.3 refuse de démarrer avec toute base de données issue de la v0.6 ou antérieure, ainsi que de la v0.7.0–v0.7.2, imposant un état de schéma propre.
  • Réécriture de l'agent : L'agent distribué est désormais écrit en Rust, remplaçant l'implémentation Go précédente pour réduire l'empreinte mémoire et améliorer la stabilité.
  • Métriques de performance : Sur un NanoPi NEO, l'agent Rust utilisait une médiane de 12 Mo RSS contre 54 Mo pour l'agent Go, avec une variance beaucoup plus faible (11–12 Mo contre 38–63 Mo).
  • Augmentation du débit : L'agent Rust a atteint environ 1,7 fois le débit de l'agent Go lors d'un balayage de sous-réseau /24 sur le même matériel.
  • Support de la fédération : La version ajoute une fédération en lecture seule entre deux centres, permettant à chaque côté de voir les appareils de l'autre sans exposer les identifiants ni autoriser les commandes à distance.
  • Corrections de topologie : Les mises à jour incluent une meilleure gestion des appareils multi-hommes pour éviter le ping-pong d'identité et une détection améliorée du pont racine utilisant les rôles de port STP.

Contexte

MiBee Steward est un outil de surveillance réseau mono-binaire conçu pour répondre à la question de savoir quels appareils sont présents sur un réseau local. Il utilise Go pour le composant serveur principal avec le routeur Chi et SQLite via modernc pour éviter les dépendances CGO. L'interface utilisateur est construite avec SvelteKit et intégrée directement dans le binaire. L'outil identifie les appareils par fournisseur, type, ports ouverts et certificats, et cartographie les relations de voisinage. Il est licencié sous AGPL-3.0, avec une double licence commerciale disponible pour ceux qui souhaitent le forker vers des produits fermés ou des services hébergés.

Le passage de Go à Rust pour le composant agent reflète un compromis courant en programmation système. Go offre un développement rapide et de fortes primitives de concurrence mais peut avoir une surcharge mémoire plus élevée due à son ramasse-miettes. Rust, bien qu'ayant une courbe d'apprentissage plus raide, fournit une sécurité mémoire sans ramasse-miettes, résultant en des binaires plus petits et une utilisation des ressources plus prévisible. Cela est particulièrement important pour les périphériques edge comme les ordinateurs monocarte qui peuvent n'avoir que 512 Mo de RAM et exécuter plusieurs services simultanément.

Pourquoi c'est important

Pour les équipes gérant leur propre infrastructure, la décision de rompre la compatibilité de la base de données est une considération opérationnelle significative. Bien que le développeur argue que la suppression des migrations incrémentales élimine une classe de bugs subtils liés aux mises à jour partielles du schéma, elle impose un processus de récupération manuel aux utilisateurs. Les administrateurs doivent prévoir des temps d'arrêt pendant la période de re-scan, car la table des actifs sera vide jusqu'à ce que le nouveau binaire termine son cycle de découverte. Cela met en évidence la tension entre la maintenabilité du code à long terme et la commodité opérationnelle à court terme dans les logiciels auto-hébergés.

Les améliorations de performance apportées par l'agent Rust sont pertinentes pour les organisations utilisant du matériel ancien ou basse consommation pour la surveillance réseau. Dans les environnements où chaque mégaoctet de RAM compte, tels que les homelabs ou les petits réseaux de bureau fonctionnant sur des ordinateurs monocarte, la réduction d'une médiane RSS de ~54 Mo à ~12 Mo est substantielle. La bande mémoire plus resserrée aide également à la planification de la capacité, car le système est moins susceptible de subir des pics soudains pouvant déclencher des kills out-of-memory sur les dispositifs contraints.

L'introduction de la fédération en lecture seule répond à un besoin commun pour les équipes distribuées ou les organisations multi-sites qui souhaitent une visibilité sur les réseaux sans compromettre la sécurité. En permettant à une instance de voir la liste des appareils d'une autre sans accorder l'accès aux commandes, l'outil réduit le risque de mouvement latéral en cas de compromission. Ce choix de conception garantit que les bugs ou vulnérabilités dans un centre ne peuvent pas être exploités pour contrôler les appareils du réseau pair, maintenant une frontière de sécurité stricte entre les domaines administratifs.

Ce que vous pouvez faire

  • Sauvegardez avant la mise à niveau : Exécutez le script fourni ./scripts/backup.sh avant de tenter d'installer la v0.7.3 pour préserver toutes les données historiques critiques.
  • Préparez-vous à un re-scan : Planifiez une fenêtre de maintenance pour la mise à niveau, car le système aura besoin de temps pour redécouvrir tous les actifs sur le réseau après le démarrage avec une base de données vide.
  • Mettez à jour les configurations de l'agent : Assurez-vous que vos fichiers agent.yaml sont prêts pour le nouvel agent Rust ; bien que le format reste compatible, vérifiez les chemins et les permissions pour le nouveau binaire.
  • Testez sur le matériel cible : Si vous utilisez des dispositifs à faibles ressources, déployez d'abord le nouvel agent Rust sur une unité de test pour confirmer que les builds statiques musl fonctionnent correctement avec votre version spécifique du noyau.
  • Examinez les paramètres de fédération : Si vous prévoyez d'utiliser la nouvelle fonctionnalité de fédération, générez des jetons d'authentification du côté pair et configurez soigneusement les paramètres center_url et cidr pour limiter l'exposition.
  • Vérifiez les graphes de topologie : Après la mise à niveau, vérifiez que le graphe de topologie identifie correctement le pont racine et que les appareils multi-hommes ne sautent plus entre les segments dans l'interface utilisateur.

Autres actualités

Toutes les actualités