fix(permissions): validate network access flow
This commit is contained in:
111
.ideai/skills/md/eb76ce50-c05c-443b-8ba5-36bda091a148.md
Normal file
111
.ideai/skills/md/eb76ce50-c05c-443b-8ba5-36bda091a148.md
Normal file
@ -0,0 +1,111 @@
|
||||
# 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` :
|
||||
|
||||
```bash
|
||||
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, transport `tauri`.
|
||||
- `frontend/dist-web` : bundle web, transport `http`.
|
||||
|
||||
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 :
|
||||
|
||||
```bash
|
||||
npm --prefix frontend run test:bundle-transport
|
||||
```
|
||||
|
||||
Sortie attendue :
|
||||
|
||||
```text
|
||||
dist: __IDEA_TRANSPORT__="tauri" (1 marker)
|
||||
dist-web: __IDEA_TRANSPORT__="http" (1 marker)
|
||||
```
|
||||
|
||||
## Artefact attendu
|
||||
|
||||
```text
|
||||
target/release/bundle/appimage/IdeA_0.3.0_amd64.AppImage
|
||||
```
|
||||
|
||||
Vérifier rapidement :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```text
|
||||
failed to bundle project `failed to run linuxdeploy`
|
||||
```
|
||||
|
||||
Ne pas réanalyser tout le build. Faire ce diagnostic court :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```text
|
||||
Failed to download runtime file
|
||||
```
|
||||
|
||||
utiliser le runtime local déjà en cache et l'`appimagetool` extrait. Chercher le dossier extrait récent :
|
||||
|
||||
```bash
|
||||
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` :
|
||||
|
||||
```bash
|
||||
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 :
|
||||
|
||||
```bash
|
||||
env -i PATH=/usr/bin:/bin HOME=$HOME XDG_RUNTIME_DIR=/run/user/1000 <commande>
|
||||
```
|
||||
Reference in New Issue
Block a user