Derrière un proxy, sans Internet¶
Derrière un proxy d'entreprise¶
L'installeur et Lyra ne lisent aucune variable qui leur soit propre pour le réseau : ils respectent celles que les outils sous-jacents lisent déjà.
| Variable | Lue par | Effet |
|---|---|---|
HTTP_PROXY, HTTPS_PROXY, NO_PROXY |
curl, pip/uv, requests, le script d'installation d'Ollama | tout le trafic sortant passe par le proxy |
PIP_INDEX_URL (ou UV_INDEX_URL) |
pip / uv | miroir PyPI interne pour le venv |
HF_ENDPOINT |
huggingface_hub (modèles Whisper, MiniLM) et le téléchargement des voix Piper | miroir Hugging Face interne |
OLLAMA_HOST |
le client ollama et Lyra (get_ollama_base_url, prime sur llm.base_url de config.yaml) |
Ollama distant, machine sans GPU, Codespace. Précédence : OLLAMA_HOST > llm.base_url > http://localhost:11434. --ollama-host écrit les deux (config.yaml et un unique export OLLAMA_HOST= dans ~/.bashrc, remplacé s'il existait déjà) ; un OLLAMA_HOST déjà exporté dans le shell courant l'emporte jusqu'à la prochaine session |
Trois endroits ne voyaient pas ces variables ; ils sont traités
(installer/core/proxyenv.py, lyra/utils/netenv.py) :
- sudo remet l'environnement à zéro :
sudo dnf install/sudo apt-get installpartaient sans proxy. Toute commandesudode l'installeur reçoit--preserve-env=<variables définies>. Si ta politique sudoers l'interdit (utilisateur sans droitSETENV), ajouteDefaults env_keep += "HTTP_PROXY HTTPS_PROXY NO_PROXY http_proxy https_proxy no_proxy"viavisudo. - le service
ollama(systemd) n'hérite pas du shell, or c'est lui qui télécharge lors d'unollama pull. Avec un proxy défini, l'installeur écrit/etc/systemd/system/ollama.service.d/proxy.conf(Environment=HTTPS_PROXY...), recharge systemd et redémarre le service s'il tournait. - Lyra elle-même : avec
HTTP_PROXYseul, httpx et requests enverraient aussi au proxy les appels à l'Ollama local, à l'API tracking (127.0.0.1:8765) et aux serveurs MCP locaux. Le client et le démon ajoutentlocalhost,127.0.0.1,::1àNO_PROXYau démarrage (seulement si un proxy est défini) ; les MCP lancés par le démon en héritent.
Les mots de passe éventuels dans l'URL du proxy sont masqués dans les messages de l'installeur.
Exemple :
export HTTPS_PROXY=http://proxy.interne:3128 NO_PROXY=localhost,127.0.0.1,.interne
export PIP_INDEX_URL=https://nexus.interne/repository/pypi/simple
export HF_ENDPOINT=https://hf-mirror.interne
export OLLAMA_HOST=gpu-box.interne:11434
python3 installer/install.py
Machine sans Internet : bundle hors ligne¶
Limite actuelle : le bundle est une commande séparée, pas encore proposée par l'installeur, et il n'a pas été rejoué de bout en bout sur une VM sans réseau (suivi : issue #25).
installer/bundle.py met dans une seule archive (environ 3 Go) tout ce que
l'installeur télécharge : modèles Ollama, MiniLM (RAG) et Whisper (micro),
binaire et voix Piper, wheels Python du venv. Chaque fichier est contrôlé par
sha256 avant toute copie : une archive altérée ou tronquée est refusée en entier.
# machine connectée, depuis le dépôt (le venv fournit huggingface_hub)
.venv/bin/python -m installer.bundle create --out lyra-bundle.tar
# --parts ollama,hf,piper,wheels --whisper base|small|...|aucun
# machine sans réseau (python3 du système suffit)
python3 -m installer.bundle install lyra-bundle.tar --lyra-dir ~/lyra
LYRA_OFFLINE=1 # ensuite : interdit tout téléchargement de modèle
- Les modèles Ollama sont téléchargés par un serveur Ollama privé et temporaire
(
OLLAMA_MODELSpointé vers le bundle) : ni sudo ni lecture du dossier du service. À l'installation, la copie vers/usr/share/ollama/.ollama/modelspasse par sudo si ce dossier n'est pas inscriptible. - Les wheels sont celles de la plateforme de la machine qui crée le bundle (même architecture et même version de Python attendues).
- Hors bundle : les paquets système (portaudio, git, nodejs...) et le binaire Ollama, à installer depuis le média de la distribution ; les serveurs MCP.
- Au démarrage, Lyra charge les modèles Hugging Face depuis le cache local sans
interroger huggingface.co (
lyra/utils/hf_local.py) ; le réseau ne sert que si le modèle manque, et jamais avecLYRA_OFFLINE=1ouHF_HUB_OFFLINE=1.