Files
pmomusic/INSTALL_LIBSOXR.md
Claude 590cd655d6 Documenter le contenu de setup-env.sh dans la documentation
- 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.
2025-11-06 07:47:10 +00:00

8.0 KiB

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

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

# 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 :

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

# 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 :

[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

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)

brew install libsoxr
# Note: ALSA n'est pas nécessaire sur macOS (rodio utilise CoreAudio)

Debian/Ubuntu (avec sudo)

sudo apt-get install libsoxr-dev libasound2-dev

Fedora/RHEL

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
  • 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 :

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) :

# 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

# 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 :

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 :

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 :

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

# 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

# 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 :

# 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