- INSTALL_LIBSOXR.md : Ajouter le contenu complet du script setup-env.sh - Readme.md : Montrer comment créer setup-env.sh en une commande Puisque setup-env.sh est dans .gitignore (configuration locale), les utilisateurs doivent le créer eux-mêmes. La documentation fournit maintenant le contenu exact à utiliser.
297 lines
8.0 KiB
Markdown
297 lines
8.0 KiB
Markdown
# Installation des dépendances système sans droits sudo
|
|
|
|
Ce document explique comment installer les dépendances système de `pmoaudio` localement sans privilèges administrateur.
|
|
|
|
## Dépendances requises
|
|
|
|
1. **libsoxr** - Nécessaire pour `ResamplingNode` (resampling audio haute qualité)
|
|
2. **libasound2** (ALSA) - Nécessaire pour `AudioSink` via cpal (lecture audio sur Linux)
|
|
|
|
## Contexte
|
|
|
|
Les crates `soxr` et `cpal` nécessitent des bibliothèques système. Dans un environnement sans droits sudo (comme Claude Code), voici comment les installer localement.
|
|
|
|
## Méthode : Installation locale via apt-get download
|
|
|
|
### 1. Télécharger les packages .deb
|
|
|
|
```bash
|
|
cd ~/.local
|
|
|
|
# Pour libsoxr (ResamplingNode)
|
|
apt-get download libsoxr-dev libsoxr0
|
|
|
|
# Pour ALSA (AudioSink)
|
|
# Note: libasound2t64 contient la bibliothèque partagée, libasound2-dev les headers
|
|
apt-get download libasound2-dev libasound2t64
|
|
```
|
|
|
|
Cela télécharge les fichiers `.deb` sans les installer système-wide.
|
|
|
|
### 2. Extraire les packages
|
|
|
|
```bash
|
|
# Extraire libsoxr
|
|
dpkg -x libsoxr-dev_*.deb .
|
|
dpkg -x libsoxr0_*.deb .
|
|
|
|
# Extraire ALSA
|
|
dpkg -x libasound2-dev_*.deb .
|
|
dpkg -x libasound2t64_*.deb .
|
|
```
|
|
|
|
Les fichiers sont extraits dans `~/.local/usr/lib/x86_64-linux-gnu/` et `~/.local/usr/include/`.
|
|
|
|
### 3. Configurer les variables d'environnement
|
|
|
|
Ajouter à votre `~/.bashrc` ou exporter dans votre session :
|
|
|
|
```bash
|
|
export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
|
|
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
|
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
|
|
```
|
|
|
|
**IMPORTANT:** Ces variables doivent être définies dans chaque session où vous compilez le projet.
|
|
|
|
### 4. Vérifier l'installation
|
|
|
|
```bash
|
|
# Vérifier libsoxr
|
|
pkg-config --libs --cflags soxr
|
|
|
|
# Vérifier ALSA
|
|
pkg-config --libs --cflags alsa
|
|
```
|
|
|
|
Devrait retourner quelque chose comme :
|
|
```
|
|
# soxr
|
|
-I/root/.local/usr/include -L/root/.local/usr/lib/x86_64-linux-gnu -lsoxr
|
|
|
|
# alsa
|
|
-I/root/.local/usr/include -L/root/.local/usr/lib/x86_64-linux-gnu -lasound
|
|
```
|
|
|
|
## Utilisation avec Cargo
|
|
|
|
### Pour les builds réguliers
|
|
|
|
Les variables d'environnement suffisent pour `cargo build` et `cargo run`.
|
|
|
|
### Pour les tests
|
|
|
|
Les tests nécessitent également la configuration du linker. Deux options :
|
|
|
|
#### Option A : Configuration locale du projet (NON RECOMMANDÉ pour le versioning)
|
|
|
|
Créer `.cargo/config.toml` dans chaque crate :
|
|
|
|
```toml
|
|
[build]
|
|
rustflags = ["-L", "/root/.local/usr/lib/x86_64-linux-gnu"]
|
|
```
|
|
|
|
**⚠️ NE PAS committer ces fichiers** - ils contiennent des chemins spécifiques à votre installation.
|
|
|
|
#### Option B : Variables d'environnement pour cargo test
|
|
|
|
```bash
|
|
export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
|
|
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
|
cargo test
|
|
```
|
|
|
|
## Pour d'autres distributions
|
|
|
|
### macOS (avec Homebrew)
|
|
|
|
```bash
|
|
brew install libsoxr
|
|
# Note: ALSA n'est pas nécessaire sur macOS (rodio utilise CoreAudio)
|
|
```
|
|
|
|
### Debian/Ubuntu (avec sudo)
|
|
|
|
```bash
|
|
sudo apt-get install libsoxr-dev libasound2-dev
|
|
```
|
|
|
|
### Fedora/RHEL
|
|
|
|
```bash
|
|
sudo dnf install soxr-devel
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Erreur : "Package 'soxr' was not found" ou "Package 'alsa' was not found"
|
|
|
|
- Vérifier que `PKG_CONFIG_PATH` contient le bon chemin
|
|
- Vérifier que les fichiers `soxr.pc` et `alsa.pc` existent dans ce répertoire
|
|
|
|
### Erreur de link : "unable to find library -lsoxr" ou "-lasound"
|
|
|
|
- Pour `cargo build` : vérifier `LD_LIBRARY_PATH`
|
|
- Pour `cargo test` : utiliser la configuration rustflags (Option A ci-dessus)
|
|
|
|
### Le test compile mais échoue au runtime
|
|
|
|
```
|
|
error while loading shared libraries: libsoxr.so.0: cannot open shared object file
|
|
```
|
|
|
|
Solution : Ajouter `LD_LIBRARY_PATH` également pour l'exécution :
|
|
|
|
```bash
|
|
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
|
cargo test
|
|
```
|
|
|
|
## Guide complet pour environnement Claude Code
|
|
|
|
### Configuration initiale (à faire une seule fois)
|
|
|
|
Dans une session Claude Code (https://claude.ai/code), vous n'avez pas de droits sudo.
|
|
|
|
**🚀 Méthode rapide (recommandée) :**
|
|
|
|
```bash
|
|
# 1. Installation automatique des dépendances (une seule fois)
|
|
./setup-deps.sh
|
|
|
|
# 2. Configuration des variables d'environnement (à chaque session)
|
|
source setup-env.sh
|
|
|
|
# 3. Compilation
|
|
cargo build
|
|
```
|
|
|
|
**📋 Méthode manuelle (si les scripts ne fonctionnent pas) :**
|
|
|
|
#### 1. Installation des dépendances
|
|
|
|
```bash
|
|
# Créer le répertoire local
|
|
mkdir -p ~/.local
|
|
cd ~/.local
|
|
|
|
# Télécharger tous les packages nécessaires
|
|
apt-get download libsoxr-dev libsoxr0 libasound2-dev libasound2t64
|
|
|
|
# Extraire tous les packages
|
|
dpkg -x libsoxr-dev_*.deb .
|
|
dpkg -x libsoxr0_*.deb .
|
|
dpkg -x libasound2-dev_*.deb .
|
|
dpkg -x libasound2t64_*.deb .
|
|
|
|
# Retourner au projet
|
|
cd /home/user/pmomusic
|
|
```
|
|
|
|
#### 2. Configuration des variables d'environnement
|
|
|
|
**IMPORTANT:** Ces variables doivent être exportées dans CHAQUE session Claude Code avant de compiler :
|
|
|
|
```bash
|
|
export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
|
|
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
|
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
|
|
```
|
|
|
|
**Astuce :** Créez un fichier `setup-env.sh` pour ne pas avoir à retaper ces commandes à chaque session :
|
|
|
|
```bash
|
|
cat > setup-env.sh << 'EOF'
|
|
#!/bin/bash
|
|
# Script de configuration des variables d'environnement pour PMOMusic
|
|
# Usage: source setup-env.sh
|
|
|
|
# Configuration des chemins pour libsoxr et libasound2
|
|
export PKG_CONFIG_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
|
|
export LD_LIBRARY_PATH="$HOME/.local/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
|
|
export RUSTFLAGS="-L $HOME/.local/usr/lib/x86_64-linux-gnu"
|
|
|
|
echo "Variables d'environnement configurées pour PMOMusic"
|
|
echo " PKG_CONFIG_PATH=$PKG_CONFIG_PATH"
|
|
echo " LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
|
|
echo " RUSTFLAGS=$RUSTFLAGS"
|
|
echo ""
|
|
echo "Vous pouvez maintenant compiler avec: cargo build"
|
|
EOF
|
|
|
|
chmod +x setup-env.sh
|
|
```
|
|
|
|
Puis dans chaque session :
|
|
|
|
```bash
|
|
source setup-env.sh
|
|
```
|
|
|
|
⚠️ **Note :** Le fichier `setup-env.sh` est dans `.gitignore` (configuration locale), vous devez le créer vous-même avec le contenu ci-dessus.
|
|
|
|
#### 3. Vérifier l'installation
|
|
|
|
```bash
|
|
# Vérifier que pkg-config trouve les bibliothèques
|
|
pkg-config --libs --cflags soxr
|
|
pkg-config --libs --cflags alsa
|
|
|
|
# Devrait afficher quelque chose comme :
|
|
# -I/root/.local/usr/include -L/root/.local/usr/lib/x86_64-linux-gnu -lsoxr
|
|
# -I/root/.local/usr/include -L/root/.local/usr/lib/x86_64-linux-gnu -lasound
|
|
```
|
|
|
|
#### 4. Compiler et tester
|
|
|
|
```bash
|
|
# Compiler le workspace complet
|
|
cargo build
|
|
|
|
# Tester l'exemple play_and_cache de pmoparadise
|
|
cargo run --package pmoparadise --example play_and_cache --features full -- 0
|
|
```
|
|
|
|
### Workflow pour chaque nouvelle session
|
|
|
|
À chaque fois que vous démarrez une nouvelle session Claude Code :
|
|
|
|
```bash
|
|
# 1. Configuration de l'environnement
|
|
source setup-env.sh
|
|
|
|
# 2. Compilation
|
|
cargo build
|
|
|
|
# 3. Exécution des exemples
|
|
cargo run --package pmoparadise --example play_and_cache --features full -- 0
|
|
```
|
|
|
|
**IMPORTANT :** Si vous oubliez d'exporter les variables, vous obtiendrez des erreurs comme :
|
|
```
|
|
error: failed to run custom build command for `soxr-sys`
|
|
Package 'soxr' was not found in the pkg-config search path
|
|
```
|
|
|
|
ou
|
|
|
|
```
|
|
rust-lld: error: unable to find library -lasound
|
|
```
|
|
|
|
**Solution :** Exécutez `source setup-env.sh` et recompilez.
|
|
|
|
### Notes importantes
|
|
|
|
- ✅ Les dépendances installées dans `~/.local` persistent entre les sessions
|
|
- ✅ Les variables d'environnement doivent être réexportées à chaque nouvelle session
|
|
- ❌ NE JAMAIS créer de fichiers `.cargo/config.toml` dans le projet (chemins spécifiques)
|
|
- ❌ NE JAMAIS committer `setup-env.sh` (configuration locale)
|
|
- 💡 Sur macOS (via Homebrew) : seul `libsoxr` est nécessaire (pas d'ALSA)
|
|
|
|
## Références
|
|
|
|
- libsoxr GitHub: https://github.com/chirlu/soxr
|
|
- Documentation pkg-config: https://www.freedesktop.org/wiki/Software/pkg-config/
|