# [Tuto à 4 mains] Discuter en P2P et sans serveur avec IPFS-Chat : Arch et debian/*buntu/Mint

- Link: https://dolys.fr/forums/topic/tuto-a-4-mains-discuter-en-p2p-et-sans-serveur-avec-ipfs-chat-arch-et-debian-buntu-mint/
- Published: 2026-01-11T19:39:15+02:00
- Author: nam1962

[Tuto] IPFS-Chat : La messagerie P2P sans serveur « comme dans les films » Envie d&rsquo;une communication 100% décentralisée, sans passer par un serveur central ou une entreprise ? IPFS-Chat est une expérience de discussion qui utilise le protocole P2P IPFS. Ici, pas de compte à créer, pas de Cloud : vos messages circulent directement entre les utilisateurs (Peer-to-Peer). ATTENTION : Ne copiez-collez pas aveuglément ! Avant de lancer les commandes, vous devrez systématiquement remplacer deux éléments : VOTRE_PSEUDO : Le nom sous lequel vous apparaîtrez. NOM_DE_LA_SALLE : Le nom du salon de discussion. Vous ne verrez que les personnes ayant rejoint exactement le même nom de salle (attention à la casse !). Note technique : Cet outil fonctionne en Terminal (interface texte avec tmux). C&rsquo;est léger, souverain et sécurisé, mais tout se gère au clavier. 1. Pourquoi une approche « clientless » ? Ce tutoriel propose une solution de chat IPFS basée uniquement sur des scripts bash et le daemon IPFS natif. Contrairement aux applications dédiées avec interface graphique, cette approche présente plusieurs avantages stratégiques : Discrétion et sécurité opérationnelle Pas d&rsquo;installation d&rsquo;application identifiable : Aucun paquet spécifique « ipfs-chat » ou équivalent dans la liste des logiciels installés Juste des outils standards (tmux, bash, ipfs) présents sur la plupart des systèmes Linux Un simple apt list --installed ou pacman -Q ne révèle rien de suspect Empreinte disque minimale : Un seul script bash de quelques Ko dans le home directory Peut être renommé en quelque chose d&rsquo;anodin (system-check.sh, backup-tools.sh) Facile à déplacer, cacher ou chiffrer dans un volume LUKS Logs optionnels et configurables (peuvent être désactivés ou redirigés) Pas de traces dans les menus système : Contrairement à une application classique, aucune entrée .desktop obligatoire Le lanceur peut être créé ou supprimé à volonté Lance-toi depuis le terminal sans laisser de traces GUI Difficile à détecter par analyse automatique : Pas de processus avec un nom révélateur type « ipfs-chat-gui » Les processus visibles sont: bash, tmux, ipfs daemon (outils légitimes) Le trafic réseau est du trafic IPFS standard, indiscernable d&rsquo;un usage normal Pas de signature applicative spécifique Flexibilité et contrôle total : Code source visible et modifiable (pas de binaire opaque) Personnalisation complète du comportement Facile à adapter, forker, améliorer Pas de dépendance à un mainteneur tiers Cas d&rsquo;usage Cette approche est particulièrement adaptée pour : Les utilisateurs soucieux de discrétion numérique Les environnements où l&rsquo;installation de logiciels est surveillée Les situations nécessitant une communication résistante à la censure L&rsquo;apprentissage du fonctionnement réel d&rsquo;IPFS (pédagogique) Les systèmes minimalistes où chaque paquet compte Avertissement : Cette solution n&rsquo;offre pas l&rsquo;anonymat complet. Votre adresse IP reste exposée aux autres pairs IPFS. Pour un anonymat renforcé, combinez avec Tor ou I2P. La discrétion dont on parle ici concerne la détection locale sur votre machine, pas l&rsquo;anonymat réseau. 2. La méthode « Flash » de Steeve (Spécial Debian / Ubuntu / Mint) Pour un test immédiat entre deux machines sur base Debian, voici la procédure complète. # Installation des dépendances sudo apt install tmux libnotify-bin dialog wget -y # Installation IPFS wget https://dist.ipfs.tech/kubo/v0.39.0/kubo_v0.39.0_linux-amd64.tar.gz # Extraire l'archive tar -xvzf go-ipfs_v0.9.0_linux-amd64.tar.gz # Se déplacer dans le dossier cd go-ipfs sudo bash install.sh # Vérifiez la version installée ipfs --version # Initialisation d'un dépôt IPFS dédié IPFS_PATH=~/.ipfs-chat ipfs init # Cela crée le dossier ./ipfs-chat # Et ajoutez la variable dans votre shell echo 'export IPFS_PATH=~/.ipfs-chat' >> ~/.bashrc source ~/.bashrc 3. La méthode détaillée (Spécial Arch / EndeavourOS) Sur Arch et ses dérivées, le paquet IPFS se nomme kubo. Les versions récentes (0.39+) nécessitent une configuration spécifique : # 1. Installation des dépendances sudo pacman -S tmux kubo dialog wget # 2. Initialisation d'un dépôt IPFS dédié IPFS_PATH=~/.ipfs-chat ipfs init # 3. Configuration manuelle (pour Kubo 0.39+) IPFS_PATH=~/.ipfs-chat ipfs config Provide.Strategy "all" IPFS_PATH=~/.ipfs-chat ipfs config --json Provide.DHT.Interval '"12h"' IPFS_PATH=~/.ipfs-chat ipfs config --json Reprovider null IPFS_PATH=~/.ipfs-chat ipfs config --json Pubsub.Enabled true # Ajoutez la variable à votre shell echo 'export IPFS_PATH=~/.ipfs-chat' >> ~/.bashrc source ~/.bashrc 4. Simplifier l&rsquo;usage : ajouter IPFS_PATH aux variables d&rsquo;environnement Pour éviter de taper IPFS_PATH=~/.ipfs-chat avant chaque commande ipfs, ajoutez cette variable à votre shell : Pour Bash (Debian/Ubuntu) : # Ajouter à ~/.bashrc echo 'export IPFS_PATH=~/.ipfs-chat' &gt;&gt; ~/.bashrc source ~/.bashrc # Vous pouvez maintenant utiliser directement : ipfs pubsub ls ipfs swarm peers | wc -l Pour Zsh (Arch/EndeavourOS) : # Ajouter à ~/.zshrc echo 'export IPFS_PATH=~/.ipfs-chat' &gt;&gt; ~/.zshrc source ~/.zshrc # Vous pouvez maintenant utiliser directement : ipfs pubsub ls ipfs swarm peers | wc -l Note : Après avoir ajouté cette variable, redémarrez votre terminal ou tapez source ~/.bashrc (ou source ~/.zshrc) pour appliquer les changements. Dans le reste de ce tuto, nous supposerons que cette variable est configurée. 5. Créer le script de lancement (Méthode universelle) Ce script fonctionne avec toutes les versions de Kubo/IPFS. Il offre une interface tmux avec 3 zones : messages, peers connectés, et champ de saisie. Copiez ce bloc complet et collez-le dans votre terminal : cat &lt;&lt; 'EOF' &gt; ~/start-ipfs-chat.sh #!/bin/bash # IPFS Chat P2P – tmux + partage fichiers + notifications + son # --- PARAMÈTRES À MODIFIER --- PSEUDO="VOTRE_PSEUDO" ROOM="NOM_DE_LA_SALLE" # ----------------------------- SESSION="ipfs-chat" IPFS_PATH="$HOME/.ipfs-chat" LOG_DIR="$HOME/.ipfs-chat/logs" NOTIF_SOUND="/usr/share/sounds/freedesktop/stereo/message.oga" mkdir -p "$LOG_DIR" command -v tmux &gt;/dev/null || { echo "tmux manquant"; exit 1; } command -v notify-send &gt;/dev/null || echo "notify-send manquant, notifications désactivées" command -v paplay &gt;/dev/null || echo "paplay manquant, sons désactivés" # Lancer daemon IPFS si nécessaire if ! pgrep -f "IPFS_PATH=$IPFS_PATH ipfs daemon" &gt;/dev/null; then IPFS_PATH=$IPFS_PATH ipfs daemon --enable-pubsub-experiment &gt;/tmp/ipfs-daemon.log 2&gt;&amp;1 &amp; sleep 5 fi # Nettoyer ancienne session tmux kill-session -t "$SESSION" 2&gt;/dev/null # Créer session vide tmux new-session -d -s "$SESSION" -n chat # Split panes: Messages (75%) | Peers (10%) | Input (15%) tmux split-window -v -p 25 tmux select-pane -t 1 tmux split-window -v -p 40 # ---------- Messages (pane 0) ---------- tmux select-pane -t 0 tmux respawn-pane -t "$SESSION:0.0" -k bash -c " clear echo '📡 IPFS Chat – Room: $ROOM | Pseudo: $PSEUDO' echo '══════════════════════════════════════════════' LOGFILE=\"$LOG_DIR/$ROOM.log\" IPFS_PATH=$IPFS_PATH ipfs pubsub sub \"$ROOM\" 2&gt;/dev/null | while read -r msg; do command -v paplay &gt;/dev/null &amp;&amp; paplay \"$NOTIF_SOUND\" 2&gt;/dev/null &amp; if [[ \"\$msg\" != $PSEUDO:* &amp;&amp; \"\$msg\" != __typing__:* ]]; then command -v notify-send &gt;/dev/null &amp;&amp; notify-send \"IPFS Chat\" \"\$msg\" fi if [[ \"\$msg\" != __typing__:* ]]; then echo \"[\$(date +%H:%M:%S)] \$msg\" echo \"[\$(date +%H:%M:%S)] \$msg\" &gt;&gt; \"\$LOGFILE\" fi done " # ---------- Peers (pane 1) ---------- tmux respawn-pane -t "$SESSION:0.1" -k bash -c " while true; do clear PEERS=\$(IPFS_PATH=$IPFS_PATH ipfs pubsub peers \"$ROOM\" 2&gt;/dev/null | wc -l) echo \"🔗 \$PEERS peer(s)\" TYPING=\$(IPFS_PATH=$IPFS_PATH ipfs pubsub sub \"$ROOM\" 2&gt;/dev/null | grep -m1 '^__typing__:' | timeout 1 tail -n1) if [[ -n \"\$TYPING\" ]]; then TYPER=\${TYPING#__typing__:} echo \"✏️ \$TYPER est en train d'écrire...\" fi sleep 2 done " # ---------- Input (pane 2) ---------- tmux respawn-pane -t "$SESSION:0.2" -k bash -c " PSEUDO=\"$PSEUDO\" echo 'Commandes : /quit /nick pseudo /send fichier' while true; do read -e -p '💬 ' msg echo \"__typing__:\$PSEUDO\" | IPFS_PATH=$IPFS_PATH ipfs pubsub pub \"$ROOM\" 2&gt;/dev/null case \"\$msg\" in /quit) tmux kill-session -t \"$SESSION\" exit ;; /nick*) NEW=\${msg#/nick } [ -n \"\$NEW\" ] &amp;&amp; PSEUDO=\"\$NEW\" &amp;&amp; echo \"Pseudo → \$PSEUDO\" ;; /send*) FILE=\${msg#/send } if [ -f \"\$FILE\" ]; then HASH=\$(IPFS_PATH=$IPFS_PATH ipfs add -Q \"\$FILE\") MSG=\"\$PSEUDO a partagé le fichier \$FILE : \$HASH\" echo \"\$MSG\" | IPFS_PATH=$IPFS_PATH ipfs pubsub pub \"$ROOM\" 2&gt;/dev/null echo \"Fichier ajouté à IPFS : \$HASH\" else echo \"Fichier introuvable : \$FILE\" fi ;; *) [ -n \"\$msg\" ] &amp;&amp; echo \"\$PSEUDO: \$msg\" | IPFS_PATH=$IPFS_PATH ipfs pubsub pub \"$ROOM\" 2&gt;/dev/null ;; esac done " tmux select-pane -t "$SESSION:0.2" tmux attach -t "$SESSION" EOF chmod +x ~/start-ipfs-chat.sh N&rsquo;oubliez pas d&rsquo;éditer le script pour personnaliser VOTRE_PSEUDO et NOM_DE_LA_SALLE : nano ~/start-ipfs-chat.sh 6. Intégration au menu des applications (optionnel) Rappel discrétion : Créer un lanceur dans le menu rend l&rsquo;outil plus visible. Si la discrétion est importante, lancez simplement le script depuis le terminal et renommez-le en quelque chose d&rsquo;anodin. Pour retrouver l&rsquo;outil dans votre menu (catégorie Réseau/Internet) : cat &lt;&lt; EOF &gt; ~/.local/share/applications/ipfs-chat.desktop [Desktop Entry] Name=IPFS Chat Comment=Messagerie P2P souveraine Exec=/home/\$USER/start-ipfs-chat.sh Icon=utilities-terminal Terminal=false Type=Application Categories=Network;Chat; EOF 7. Partage de fichiers P2P &#8211; Guide complet L&rsquo;un des grands avantages d&rsquo;IPFS est le partage de fichiers décentralisé. Voici comment utiliser cette fonctionnalité dans le chat. 7.1. Envoyer un fichier Dans le chat IPFS, tapez : /send /chemin/complet/vers/fichier.pdf Exemples concrets : # Partager un document depuis le Bureau /send ~/Bureau/presentation.pdf # Partager une image /send ~/Téléchargements/photo.jpg # Partager un script /send ~/start-ipfs-chat.sh Le fichier est ajouté au réseau IPFS, un hash unique est généré, et ce hash est partagé dans le chat. 7.2. Visualiser un fichier sans le télécharger Ouvrir un nouveau terminal et taper : # Afficher le contenu (texte) ipfs cat QmbYHRCPmyXRfG4qZparHdPB4GDPcwPnFe8M4pgW2yAPkf # Avec pagination ipfs cat HASH | less # Ouvrir une image ipfs cat HASH &gt; /tmp/temp.jpg &amp;&amp; xdg-open /tmp/temp.jpg # Ouvrir un PDF ipfs cat HASH | zathura - 7.3. Télécharger et sauvegarder un fichier # Méthode recommandée ipfs cat HASH &gt; presentation.pdf # Dans un dossier spécifique ipfs cat HASH &gt; ~/Documents/presentation.pdf 7.4. Script pratique pour récupération cat &lt;&lt; 'EOF' &gt; ~/ipfs-get-file.sh #!/bin/bash if [ -z "$1" ]; then echo "Usage: $0 HASH [nom-fichier]" exit 1 fi HASH="$1" OUTPUT="${2:-fichier-$(date +%s)}" echo "Téléchargement depuis IPFS..." ipfs cat "$HASH" &gt; "$OUTPUT" if [ $? -eq 0 ]; then echo "✓ Fichier téléchargé : $OUTPUT ($(du -h "$OUTPUT" | cut -f1))" else echo "✗ Erreur" fi EOF chmod +x ~/ipfs-get-file.sh Usage : ~/ipfs-get-file.sh QmbYHRCPmyXRfG4qZparHdPB4GDPcwPnFe8M4pgW2yAPkf doc.pdf 8. Utilisation et astuces Lancement : ~/start-ipfs-chat.sh dans un terminal Interface tmux : Messages (75%), peers (10%), input (15%) Commandes : /quit, /nick PSEUDO, /send fichier Logs : ~/.ipfs-chat/logs/NOM_DE_LA_SALLE.log Vérifier présence : ipfs pubsub peers SALLE Dépannage : cat /tmp/ipfs-daemon.log 9. Diagnostic et commandes utiles # Daemon actif ps aux | grep "ipfs daemon" # Peers réseau global ipfs swarm peers | wc -l # Topics actifs ipfs pubsub ls # Peers dans une room ipfs pubsub peers SALLE # Message test manuel echo "test" | ipfs pubsub pub SALLE Redémarrage propre : pkill -f ipfs tmux kill-session -t ipfs-chat rm ~/.ipfs-chat/repo.lock ~/.ipfs-chat/datastore/LOCK 2&gt;/dev/null ~/start-ipfs-chat.sh Migration repo : pkill -f "ipfs daemon" ipfs repo migrate IPFS_PATH=~/.ipfs-chat ipfs daemon --enable-pubsub-experiment &amp; 10. Problèmes fréquents Peers à 0 mais messages passent : Normal. IPFS utilise des relay nodes pour contourner NAT/pare-feu Pour connexion directe : ouvrir port 4001 TCP/UDP sur votre box Erreur « repo needs migration » : ipfs repo migrate Daemon ne démarre pas (Kubo 0.39+) : ipfs config --json Reprovider null cat /tmp/ipfs-daemon.log 11. Écosystème IPFS et extensions Projets notables utilisant IPFS Médias et contenus : Audius : Plateforme musicale décentralisée (millions d&rsquo;utilisateurs actifs) Odysee/LBRY : Alternative décentralisée à YouTube DTube : Plateforme vidéo sur IPFS (actif mais avec limitations techniques récentes) NFT.Storage : Stockage gratuit IPFS pour NFTs Infrastructure : FileCoin : Réseau de stockage coopératif blockchain, complémentaire IPFS Fleek : Déploiement sites web sur IPFS Pinata : Service de pinning IPFS professionnel Brave Browser : Intègre IPFS nativement Bases de données et collaboration : OrbitDB : Base de données distribuée P2P Ceramic Network : Réseau de données décentralisées PeerPad : Éditeur collaboratif P2P (toujours accessible à peerpad.net) Extension navigateur IPFS Companion Pour accéder facilement aux contenus IPFS via votre navigateur : Installation : Firefox : https://addons.mozilla.org/firefox/addon/ipfs-companion/ Chrome/Brave : Chrome Web Store, chercher « IPFS Companion » Fonctionnalités : Accès direct aux adresses ipfs:// dans le navigateur Détection automatique des liens IPFS Intégration avec votre nœud local Partage fichiers par glisser-déposer Épinglage de contenus Configuration : # L'extension se connecte automatiquement au daemon local # Settings > IPFS API : http://127.0.0.1:5001 # Si daemon actif, status "Connected" Usage pratique : Cliquer sur hash IPFS (QmXXX&#8230;) pour ouverture directe navigateur URLs ipfs://HASH automatiquement résolues Glisser-déposer fichiers dans l&rsquo;extension pour ajout IPFS Astuce : Avec IPFS Companion, cliquez sur ipfs://HASH dans votre navigateur pour visualiser un fichier partagé sans ligne de commande. Une solution élégante, discrète et souveraine pour communiquer en P2P sans serveurs centraux. Bon chat décentralisé !
