Aller au contenu principal

Distribution et Déploiement Hors-Ligne (Air-Gapped)

Certains secteurs d'activité (défense, salles de marchés isolées, agences bancaires rurales sans accès Internet permanent, navires, chantiers miniers) exigent de déployer des mises à jour logicielles dans des environnements strictement étanches (Air-Gapped) ou présentant une connectivité intermittente.

TkushPatch intègre des mécanismes permettant d'exporter, transporter et appliquer des patchs OTA sans exiger de connexion Internet active vers le serveur central.


1. Architecture de Déploiement en Environnement Déconnecté​

Flux de distribution en environnement déconnecté (Air-Gap)
  1. Zone connectée (Siège) : Téléchargement manuel du correctif signé et de ses métadonnées depuis la Console Web.
  2. Transfert sécurisé : Acheminement des fichiers via support amovible sécurisé ou réseau privé.
  3. Zone isolée (Agence / Site) : Déploiement sur un relais local ou installation directe sur les terminaux.

2. Exportation Manuelle des Artefacts depuis la Console Web​

Pour préparer un kit de mise à jour hors-ligne :

  1. Connectez-vous à la console web TkushPatch (/releases).
  2. Ouvrez le volet d'inspection du patch validé (ReleaseDetailInspectorPane).
  3. Dans le menu contextuel d'actions (PatchActionMenu), cliquez sur Télécharger l'artéfact binaire :
    • Le navigateur télécharge le fichier différentiel compressé (ex. patch_v1.0.0_1.vmcode).
  4. Téléchargez également le fichier de manifeste associé contenant :
    • Le hash targetSha256Hash.
    • La signature numérique RSA signature numérique en Base64.
    • La clé publique au format format de clé publique de signature.

3. Application Locale du Patch via le SDK Mobile​

Le SDK Flutter tk_ota_push expose une méthode dédiée permettant d'appliquer un fichier de patch préalablement transféré sur le stockage interne de l'appareil (via câble USB, carte SD ou partage local Bluetooth/Wi-Fi) :

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:tk_ota_push/tk_ota_push.dart';

Future<void> appliquerPatchHorsLigne(String cheminFichierVmcode, String signatureBase64) async {
final fichierPatch = File(cheminFichierVmcode);

if (!await fichierPatch.exists()) {
throw Exception("Le fichier de patch est introuvable sur le stockage local.");
}

// Application locale avec vérification cryptographique rigoureuse
final resultat = await TkOtaPush.applyPatchFromFile(
patchFile: fichierPatch,
signatureBase64: signatureBase64,
);

if (resultat.isSuccess) {
debugPrint("✅ Patch hors-ligne appliqué avec succès !");
// Redémarrage de l'application pour charger le nouveau binaire
await TkOtaPush.restartApp();
} else {
debugPrint("❌ Échec de l'application : ${resultat.errorMessage}");
}
}

[!IMPORTANT] Même en mode hors-ligne, le moteur natif Rust refuse formellement d'exécuter un fichier dont la signature RSA ou le hash SHA-256 est invalide. Le respect de la chaîne de confiance cryptographique est absolu et ne dépend pas d'une connexion réseau.


4. Déploiement via un Relais HTTP Local d'Agence​

Dans une agence bancaire déconnectée du réseau central mais disposant d'un réseau Wi-Fi local :

  1. Déposez les fichiers .vmcode et le fichier de métadonnées patches.json sur un mini-serveur HTTP local (ex. Raspberry Pi ou poste d'agence exécutant Nginx léger).
  2. Configurez le fichier de configuration de l'application ou modifiez dynamiquement le paramètre d'URL de secours du SDK :
    await TkOtaPush.initialize(
    overrideEndpoint: "http://192.168.1.100:8080/ota-cache",
    );
  3. Dès que les collaborateurs de l'agence se connectent au réseau Wi-Fi local le matin, leurs smartphones téléchargent automatiquement le patch depuis le serveur d'agence sans consommer de bande passante satellite ou cellulaire.