Date : 05-01-2026 Statut : En attente de validation Objectif : Configurer PVE pour lancer Claude Code directement, avec accès complet aux disques ZFS
| 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) |
# 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
# 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/
# 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
# 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/
# 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
# 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
# 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
# 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
# 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
#!/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"
# 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
su - gouroubleu && claudeLa 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 :