33800 Docs

← Retour

Proposition : Configuration Claude sur PVE

Date : 05-01-2026 Statut : En attente de validation Objectif : Configurer PVE pour lancer Claude Code directement, avec accès complet aux disques ZFS


Pourquoi Claude sur PVE ?

Avantage Description
Accès direct ZFS Pas de latence NFS, accès /stock_8to/ et /stock_36to/ en local
Permissions root Pas de problèmes de mapping NFS
Opérations ZFS Snapshots, scrub, send/receive directement
Gestion VMs Commandes qm, pct pour gérer les VMs
Économie Libère la VM claude (4 vCPU, 8 Go RAM)

Étapes de configuration

1. Créer/configurer l'utilisateur gouroubleu

# Vérifier si l'utilisateur existe
id gouroubleu || useradd -m -s /bin/bash gouroubleu

# Ajouter aux groupes nécessaires
usermod -aG sudo gouroubleu

# Configurer sudo sans mot de passe (optionnel)
echo "gouroubleu ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/gouroubleu
chmod 440 /etc/sudoers.d/gouroubleu

# Définir un mot de passe
passwd gouroubleu

2. Créer les symlinks Claude

# Symlinks directs vers ZFS (pas de /mnt/ car accès local)
ln -sf /stock_8to/33800-stack/claude/propositions /home/gouroubleu/propositions
ln -sf /stock_8to/33800-stack/claude/tasks /home/gouroubleu/tasks
ln -sf /stock_8to/33800-stack/claude/backlog /home/gouroubleu/backlog

# Vérifier
ls -la /home/gouroubleu/

3. Installer Claude Code

# Installer les dépendances
apt update
apt install -y curl git nodejs npm

# Installer Claude Code (adapter selon la méthode officielle)
# Option A : npm
npm install -g @anthropic-ai/claude-code

# Option B : Script officiel (si disponible)
# curl -fsSL https://claude.ai/install.sh | bash

# Vérifier l'installation
claude --version

4. Configurer CLAUDE.md

# Créer le dossier .claude
mkdir -p /home/gouroubleu/.claude

# Copier le CLAUDE.md
cp /stock_8to/33800-stack/claude/CLAUDE.md /home/gouroubleu/.claude/CLAUDE.md

# Permissions
chown -R gouroubleu:gouroubleu /home/gouroubleu/

5. Configurer les crons

# Script rsync backup
cat > /usr/local/bin/rsync-stock8-to-stock36.sh << 'EOF'
#!/bin/bash
LOG="/var/log/rsync-stock8-backup.log"
SOURCE="/stock_8to/33800-stack/"
DEST="/stock_36to/data/backup-stock8/33800-stack/"

mkdir -p "$DEST"
echo "$(date): Début sync" >> $LOG
rsync -avP --delete "$SOURCE" "$DEST" >> $LOG 2>&1
echo "$(date): Fin sync" >> $LOG
EOF
chmod +x /usr/local/bin/rsync-stock8-to-stock36.sh

# Cron rsync
cat > /etc/cron.d/rsync-stock8-backup << 'EOF'
# Backup horaire stock_8to vers stock_36to
0 * * * * root /usr/local/bin/rsync-stock8-to-stock36.sh
# Backup complet quotidien à 5h
0 5 * * * root /usr/local/bin/rsync-stock8-to-stock36.sh
EOF

# Cron monitoring
cat > /etc/cron.d/monitoring-33800 << 'EOF'
0 * * * * gouroubleu /stock_8to/33800-stack/monitoring/collect.sh 2>/dev/null
EOF

# Appliquer
systemctl restart cron

6. Configurer mDNS (avahi)

# Installer avahi si pas présent
apt install -y avahi-daemon avahi-utils

# Service pour pve-speed.local
cat > /etc/systemd/system/avahi-alias-speed.service << 'EOF'
[Unit]
Description=Publish pve-speed.local mDNS alias
After=avahi-daemon.service network-online.target
Requires=avahi-daemon.service

[Service]
Type=exec
ExecStart=/usr/bin/avahi-publish -a -R pve-speed.local 10.10.10.10
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now avahi-alias-speed.service

# Vérifier
ping -c 1 pve-speed.local

7. Configurer SSH pour gouroubleu

# Créer dossier SSH
mkdir -p /home/gouroubleu/.ssh
chmod 700 /home/gouroubleu/.ssh

# Copier les clés autorisées (depuis claude.local ou autre)
# Option : copier depuis la VM claude
scp gouroubleu@claude.local:~/.ssh/authorized_keys /home/gouroubleu/.ssh/

# Ou générer une nouvelle paire
ssh-keygen -t ed25519 -f /home/gouroubleu/.ssh/id_ed25519 -N ""

# Permissions
chown -R gouroubleu:gouroubleu /home/gouroubleu/.ssh
chmod 600 /home/gouroubleu/.ssh/authorized_keys 2>/dev/null

8. Installer les outils utiles

# Outils de base
apt install -y \
  jq \
  htop \
  ncdu \
  tree \
  ripgrep \
  fd-find \
  bat \
  tmux

# Docker CLI (pour gérer les containers sur prod-portainer)
apt install -y docker.io
usermod -aG docker gouroubleu

9. Configurer le réseau stockage (si pas fait)

# Vérifier que 10.10.10.10 est configuré
ip addr show | grep 10.10.10

# Si pas configuré, ajouter dans /etc/network/interfaces :
# auto vmbr1
# iface vmbr1 inet static
#     address 10.10.10.10/24
#     bridge-ports none
#     bridge-stp off
#     bridge-fd 0

Script complet (copier-coller)

#!/bin/bash
# Configuration Claude sur PVE - Script complet

set -e

echo "=== 1. Configuration utilisateur gouroubleu ==="
id gouroubleu || useradd -m -s /bin/bash gouroubleu
usermod -aG sudo gouroubleu
echo "gouroubleu ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/gouroubleu
chmod 440 /etc/sudoers.d/gouroubleu

echo "=== 2. Symlinks Claude ==="
ln -sf /stock_8to/33800-stack/claude/propositions /home/gouroubleu/propositions
ln -sf /stock_8to/33800-stack/claude/tasks /home/gouroubleu/tasks
ln -sf /stock_8to/33800-stack/claude/backlog /home/gouroubleu/backlog

echo "=== 3. CLAUDE.md ==="
mkdir -p /home/gouroubleu/.claude
cp /stock_8to/33800-stack/claude/CLAUDE.md /home/gouroubleu/.claude/CLAUDE.md
chown -R gouroubleu:gouroubleu /home/gouroubleu/

echo "=== 4. Script rsync ==="
cat > /usr/local/bin/rsync-stock8-to-stock36.sh << 'RSYNC'
#!/bin/bash
LOG="/var/log/rsync-stock8-backup.log"
SOURCE="/stock_8to/33800-stack/"
DEST="/stock_36to/data/backup-stock8/33800-stack/"
mkdir -p "$DEST"
echo "$(date): Début sync" >> $LOG
rsync -avP --delete "$SOURCE" "$DEST" >> $LOG 2>&1
echo "$(date): Fin sync" >> $LOG
RSYNC
chmod +x /usr/local/bin/rsync-stock8-to-stock36.sh

echo "=== 5. Crons ==="
cat > /etc/cron.d/rsync-stock8-backup << 'CRON1'
0 * * * * root /usr/local/bin/rsync-stock8-to-stock36.sh
0 5 * * * root /usr/local/bin/rsync-stock8-to-stock36.sh
CRON1

cat > /etc/cron.d/monitoring-33800 << 'CRON2'
0 * * * * gouroubleu /stock_8to/33800-stack/monitoring/collect.sh 2>/dev/null
CRON2

echo "=== 6. Avahi mDNS ==="
apt install -y avahi-daemon avahi-utils 2>/dev/null || true

cat > /etc/systemd/system/avahi-alias-speed.service << 'AVAHI'
[Unit]
Description=Publish pve-speed.local mDNS alias
After=avahi-daemon.service
[Service]
Type=exec
ExecStart=/usr/bin/avahi-publish -a -R pve-speed.local 10.10.10.10
Restart=always
[Install]
WantedBy=multi-user.target
AVAHI

systemctl daemon-reload
systemctl enable --now avahi-alias-speed.service

echo "=== 7. Outils ==="
apt install -y jq htop ncdu tree ripgrep 2>/dev/null || true

echo "=== Configuration terminée ==="
echo ""
echo "Pour lancer Claude sur PVE :"
echo "  su - gouroubleu"
echo "  claude"
echo ""
echo "Vérifications :"
echo "  ls -la /home/gouroubleu/"
echo "  cat /home/gouroubleu/.claude/CLAUDE.md | head -20"
echo "  ping -c 1 pve-speed.local"

Vérification après installation

# En tant que gouroubleu
su - gouroubleu

# Vérifier symlinks
ls -la ~/propositions ~/tasks ~/backlog

# Vérifier CLAUDE.md
cat ~/.claude/CLAUDE.md | head -30

# Vérifier accès ZFS direct
ls /stock_8to/33800-stack/
ls /stock_36to/data/

# Tester écriture
touch ~/propositions/test.tmp && rm ~/propositions/test.tmp && echo "OK"

# Vérifier mDNS
ping -c 1 pve.local
ping -c 1 pve-speed.local

Après configuration

  1. Installer Claude Code sur PVE (méthode selon documentation officielle)
  2. Tester une session : su - gouroubleu && claude
  3. Éteindre la VM claude (VMID 206) pour économiser les ressources

Note sur la VM claude (VMID 206)

La VM claude n'est PAS supprimée, seulement éteinte. Elle peut être rallumée à tout moment si besoin :

# Éteindre la VM claude
qm shutdown 206

# Rallumer si besoin
qm start 206

Raisons de conserver la VM :


Validation requise