Outils pour extraire et analyser le contenu d'images de disques Smaky au format propriétaire FOS, dans le cadre du mandat de préservation du patrimoine Smaky confié par Epsitec SA.
Les disques Smaky (ordinateurs suisses, ici fin des années 1990) utilisent le système de fichiers FOS. Le projet FOSfat (développé chez Epsitec) fournit un accès en lecture seule à ces disques. Ce dépôt ajoute, par-dessus FOSfat, une chaîne d'outils Python pour extraire une image vers un dossier ordinaire, puis l'analyser.
⚠️ Confidentialité. Les images disque (.DI) et tout ce qui en est extrait sont des données privées sous autorisation restreinte. Elles ne sont pas versionnées (voir.gitignore) et ne doivent pas être diffusées. Ce dépôt ne contient que des outils et de la documentation.
Plutôt que d'appeler FOSfat (en C) depuis Python, on procède en deux temps :
- Extraction : une image
.DIest transformée une seule fois en un dossier sur le PC — copie binaire fidèle de l'arborescence et des fichiers, accompagnée d'unmanifest.jsondécrivant toutes les métadonnées FOS. - Analyse : des programmes Python travaillent ensuite sur ce dossier (fichiers ordinaires + manifeste), sans plus jamais toucher au C.
Cette séparation isole la partie fragile (lecture du format FOS) dans une étape unique, rend le dump réutilisable et archivable, et permet de développer toute l'analyse en Python pur — réutilisable pour les futures images.
image .DI ──[ FOSfat / extract_di.py ]──► dossier (tree/ + manifest.json) ──[ Python ]──► analyses
(C, lecture seule, dans WSL) (artefact d'archive) (natif Windows)
| Phase | Description | État |
|---|---|---|
| 0 | Compiler FOSfat, valider la lecture de l'image | ✅ fait |
| 1 | Extraction .DI → tree/ + manifest.json |
✅ fait — voir docs/extraction-phase1.md |
| 2 | Navigateur/visualiseur interactif (Electron) | 🚧 en cours — voir viewer/ |
| 3 | Livrables pour la recherche (rapports, exports) | à venir |
L'analyse interactive se fait dans une application Electron (viewer/) : interface
de navigation (arbre + visualiseur), génération de rapports, et visualiseurs de
formats Smaky décodés à la volée (texte ; format Typo — voir
docs/format-typo.md).
Voir le mode d'emploi complet : docs/extraction-phase1.md.
En résumé, dans WSL (où FOSfat est compilé) :
cd /mnt/d/Dropbox/35-Prof/epsitec/Analyse_DI
python3 tools/extract_di.py ALPINE.DI ALPINE_extracted # extraction complète
python3 tools/verify_extract.py ALPINE_extracted # contrôle d'intégritéApplication Electron (Node.js). Lancement :
cd viewer
npm install # la première fois
npm startPuis « Ouvrir un dossier extrait… » et choisir le dossier produit en phase 1
(celui qui contient manifest.json et tree/).
Depuis viewer/, avec electron-builder :
npm run dist:win # Windows : installateur NSIS + version portable
npm run dist:linux # Linux : AppImage + .deb + tar.gz (à lancer SOUS Linux)
npm run dist:linux:tar # Linux : tar.gz seul (constructible aussi sous Windows)
npm run dist:mac # macOS : .dmg (à lancer sous macOS uniquement)Les artefacts sont produits dans viewer/dist/ (ignoré par git).
Important — contrainte de plateforme. Chaque format se construit sur le système correspondant :
- l'AppImage et le .deb nécessitent des outils Linux (
mksquashfs,dpkg) : ils ne se construisent pas sous Windows (l'étape échoue aprèslinux-unpacked). Construis-les sous Linux (machine Linux ou WSL : installer Node, p. ex. vianvm, puisnpm installetnpm run dist:linux) ; - le
tar.gzne fait qu'archiver l'application : il se construit partout, y compris sous Windows (npm run dist:linux:tar) ; - macOS est requis pour produire une version Mac.
Trois formats sont produits ; choisis selon l'usage.
| Format | Pour qui | Intégration au menu | Multi-distribution |
|---|---|---|---|
| AppImage | tout le monde, « ça marche » | non (sauf script ci-dessous) | ✅ oui |
| .deb | Debian / Ubuntu / Zorin / Mint | ✅ automatique | ❌ non |
| tar.gz | usage technique, archivage | non | ✅ oui |
-
AppImage — un seul fichier portable, aucune installation ni droits root :
chmod +x "Navigateur Smaky-0.2.0.AppImage" ./"Navigateur Smaky-0.2.0.AppImage"
Si le lancement échoue faute de FUSE :
sudo apt install libfuse2, ou ajouter l'option--appimage-extract-and-run. -
.deb — installation intégrée (menu, icône, désinstallation propre) sur les distributions à base Debian :
sudo apt install ./smaky-viewer_0.2.0_amd64.deb # ou double-clic sudo apt remove smaky-viewer # désinstallation
-
tar.gz — simple archive : extraire, puis exécuter le binaire
smaky-viewerdu dossier obtenu. Aucune intégration au système. -
Depuis les sources (le plus simple pour un test rapide) : dans
viewer/,npm installpuisnpm start.
L'AppImage n'apparaît pas d'elle-même dans le menu des applications. Le script
viewer/install-desktop-linux.sh crée l'entrée
de menu et installe l'icône, au niveau utilisateur (sans sudo) :
cd viewer
./install-desktop-linux.sh # détecte l'AppImage dans dist/
./install-desktop-linux.sh /chemin/App.AppImage # ou chemin explicite
./install-desktop-linux.sh --uninstall # retire le lanceurIl écrit ~/.local/share/applications/smaky-viewer.desktop et copie l'icône dans
~/.local/share/icons/. Cherche ensuite « Navigateur Smaky » dans le menu (au
besoin, ferme/rouvre la session pour rafraîchir le cache d'icônes).
Logiciel libre sous GNU General Public License v3 — voir LICENSE. © 2026 Epsitec SA et Pierre-Yves Rochat. S'appuie sur FOSfat / libfosgra (Mathieu Schroeter, Epsitec SA), également sous GPL v3.
tools/
extract_di.py extraction .DI → dossier (+ manifest.json)
verify_extract.py contrôle d'intégrité (manifeste vs fichiers extraits)
viewer/ application Electron (navigateur, rapports, visualiseurs)
main.js, preload.js, package.json
renderer/ interface (HTML/CSS/JS) + décodeurs de formats Smaky
build/ icône de l'application (icon.svg source + icon.png)
install-desktop-linux.sh crée un lanceur GNOME/freedesktop (AppImage)
docs/
extraction-phase1.md mode d'emploi détaillé de la phase 1
format-typo.md notes sur le format de composition Typo
README.md
.gitignore