zonza/install.sh
Ralph Mayola 5eedda0467 install.sh refuse de detourner une Zonza deja installee
build_app.sh grave le chemin du dossier courant dans le binaire de
/Applications/Zonza.app. Lancer install.sh depuis une COPIE detournait donc
l'application en service vers cette copie, changeait son cdhash, et REVOQUAIT
silencieusement les autorisations macOS deja accordees.

Constate le 2026-08-23 en testant le script depuis un clone temporaire : rattrape
de justesse, avant que build_app.sh ne s'execute. Le script compare desormais la
cible gravee a son propre dossier, refuse de reconstruire s'ils different, et
explique pourquoi. ZONZA_REMPLACER=1 pour passer outre volontairement.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-23 20:09:44 +02:00

102 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Installe Zonza sur macOS (et Linux, pour la partie portable).
#
# ./install.sh
#
# Cree l'environnement, installe UNIQUEMENT ce qui sert a cette machine (les
# marqueurs de requirements.txt s'en chargent), construit l'app macOS, puis lance
# le diagnostic. Il ne masque aucune erreur : si une etape echoue, il s'arrete.
set -euo pipefail
cd "$(dirname "$0")"
MINIMUM="3.11"
PY="${PYTHON:-python3}"
echo "→ Verification de Python…"
command -v "$PY" >/dev/null || { echo "✗ '$PY' introuvable. Installe Python $MINIMUM ou plus, ou renseigne PYTHON=/chemin/vers/python3." >&2; exit 1; }
"$PY" - <<PYCODE || { echo "✗ Python $MINIMUM minimum requis." >&2; exit 1; }
import sys
raise SystemExit(0 if sys.version_info >= tuple(int(n) for n in "$MINIMUM".split(".")) else 1)
PYCODE
echo " $("$PY" --version)"
if [[ ! -d .venv ]]; then
echo "→ Creation de l'environnement…"
"$PY" -m venv .venv
else
echo "→ Environnement deja present, on le reutilise."
fi
echo "→ Installation des dependances de CETTE machine…"
.venv/bin/python -m pip install --quiet --upgrade pip
.venv/bin/python -m pip install --quiet -r requirements.txt
echo " $(.venv/bin/python -m pip list 2>/dev/null | wc -l | tr -d ' ') paquets installes"
if [[ "$(uname)" == "Darwin" ]]; then
# Garde-fou : build_app.sh grave le chemin de CE dossier dans le binaire de
# /Applications/Zonza.app. Si une Zonza y est deja installee depuis un AUTRE
# dossier, reconstruire la detournerait vers ici — et changerait son cdhash,
# ce qui REVOQUE silencieusement les autorisations macOS deja accordees.
# Faute de ce garde-fou, un simple essai depuis une copie casse l'installation
# en service (arrive le 2026-08-23, rattrape de justesse).
CIBLE_ACTUELLE=""
if [[ -x /Applications/Zonza.app/Contents/MacOS/zonza ]]; then
CIBLE_ACTUELLE="$(strings /Applications/Zonza.app/Contents/MacOS/zonza 2>/dev/null | grep -m1 -E '/app\.py$' || true)"
fi
ICI="$(pwd)/app.py"
if [[ -n "$CIBLE_ACTUELLE" && "$CIBLE_ACTUELLE" != "$ICI" ]]; then
echo
echo "⚠ Une Zonza est deja installee, et elle pointe ailleurs :"
echo " installee ici : $CIBLE_ACTUELLE"
echo " ce dossier : $ICI"
echo
echo " Reconstruire la detournerait vers ce dossier et REVOQUERAIT ses"
echo " autorisations macOS (Accessibilite, Surveillance de l'entree)."
echo " L'application n'est donc PAS reconstruite."
echo
echo " Si c'est bien ce que tu veux, lance : ZONZA_REMPLACER=1 ./install.sh"
if [[ "${ZONZA_REMPLACER:-}" != "1" ]]; then
CONSTRUIRE=0
else
echo " ZONZA_REMPLACER=1 : reconstruction demandee explicitement."
CONSTRUIRE=1
fi
else
CONSTRUIRE=1
fi
if [[ "$CONSTRUIRE" == "1" ]]; then
echo "→ Construction de Zonza.app…"
./build_app.sh
fi
fi
echo "→ Diagnostic…"
.venv/bin/python app.py --diagnostic || {
echo
echo "✗ Le diagnostic signale un probleme. Rien n'est casse : lis les lignes"
echo " ci-dessus, elles disent laquelle des epreuves a echoue." >&2
exit 1
}
cat <<'FIN'
✓ Installe.
Il reste UNE chose que seul toi peux faire, et sans elle le raccourci ne
fonctionnera pas : accorder les autorisations macOS.
Reglages systeme > Confidentialite et securite
• Accessibilite → ajoute /Applications/Zonza.app, puis active
• Surveillance de l'entree → la meme chose
Puis quitte Zonza par son icone 🎙️ et relance-la : l'autorisation n'est lue
qu'au demarrage.
Usage : Cmd+Ctrl+D pour demarrer et arreter la dictee.
Journal : ~/Library/Logs/Zonza.log
FIN