4.3 KiB
Build de l'AppImage IdeA (Linux)
Procédure canonique pour reconstruire l'AppImage Linux d'IdeA et les bundles frontend associés.
À utiliser à chaque fois qu'un correctif doit être visible dans l'app desktop. Rappel produit : le binaire qui tourne = l'AppImage installée, pas les sources. Un correctif source n'est actif dans l'app desktop qu'après rebuild, remplacement de l'AppImage utilisée, puis relance d'IdeA.
Commande principale
Depuis le project root /home/anthony/Documents/Projects/IdeA :
cd crates/app-tauri
APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=true ../../frontend/node_modules/.bin/tauri build --bundles appimage
Cette commande déclenche build.beforeBuildCommand, donc elle reconstruit automatiquement les deux bundles frontend :
frontend/dist: bundle desktop, transporttauri.frontend/dist-web: bundle web, transporthttp.
Ne pas revenir à l'ancienne procédure npm --prefix frontend run build seule : elle ne reconstruit pas le bundle web séparé.
Vérification des bundles web/desktop
Après le build, lancer :
npm --prefix frontend run test:bundle-transport
Sortie attendue :
dist: __IDEA_TRANSPORT__="tauri" (1 marker)
dist-web: __IDEA_TRANSPORT__="http" (1 marker)
Artefact attendu
target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage
Vérifier rapidement :
ls -lh target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage
APPIMAGE_EXTRACT_AND_RUN=1 target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage --appimage-help | head
Pourquoi ces variables sont obligatoires
--bundles appimage: cible uniquement l'AppImage Linux et évite les bundles inutiles/cassants comme NSIS.NO_STRIP=true: évite l'échec linuxdeploy/strip sur les bibliothèques système modernes contenant.relr.dyn.APPIMAGE_EXTRACT_AND_RUN=1: évite l'échec FUSE quand linuxdeploy ou appimagetool ne peuvent pas monter une AppImage dans l'environnement courant.
Fallback si Tauri échoue à failed to run linuxdeploy
Symptôme : la commande Tauri reconstruit frontend/dist, frontend/dist-web, compile target/release/app-tauri, crée target/release/bundle/appimage/IdeA.AppDir, puis échoue seulement à l'étape finale :
failed to bundle project `failed to run linuxdeploy`
Ne pas réanalyser tout le build. Faire ce diagnostic court :
APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=true LDAI_OUTPUT=/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage \
/home/anthony/.cache/tauri/linuxdeploy-x86_64.AppImage \
--appdir /home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA.AppDir \
--output appimage
Si appimagetool échoue avec téléchargement runtime impossible :
Failed to download runtime file
utiliser le runtime local déjà en cache et l'appimagetool extrait. Chercher le dossier extrait récent :
find /tmp -path '*/appimagetool-prefix/usr/bin/appimagetool' -type f -printf '%p\n' | tail -1
Puis lancer en remplaçant <EXTRACTED> par le préfixe trouvé, par exemple /tmp/appimage_extracted_xxx :
PATH=<EXTRACTED>/appimagetool-prefix/usr/bin:$PATH \
ARCH=x86_64 \
<EXTRACTED>/appimagetool-prefix/usr/bin/appimagetool \
--runtime-file /home/anthony/.cache/tauri/runtime-x86_64 \
/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA.AppDir \
/home/anthony/Documents/Projects/IdeA/target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage
Le PATH est nécessaire parce que mksquashfs est fourni dans appimagetool-prefix/usr/bin et peut être absent du PATH système.
Relance de l'application
Ne pas relancer IdeA automatiquement depuis une session active : cela tue l'orchestrateur courant et les ponts MCP. Une fois l'AppImage reconstruite, l'utilisateur décide quand remplacer/lancer l'artefact final.
Piège d'environnement AppImage
Une session shell lancée depuis l'AppImage peut hériter de variables comme APPDIR, LD_LIBRARY_PATH, PYTHONHOME pointant vers /tmp/.mount_IdeA_*. Symptômes possibles : python3 casse avec No module named 'encodings', ou un binaire Tauri local se lance dans un environnement pollué.
Pour des commandes sensibles, préférer un environnement propre ou éviter Python :
env -i PATH=/usr/bin:/bin HOME=$HOME XDG_RUNTIME_DIR=/run/user/1000 <commande>