Trace install tas - DeepSeek Harness (DSH)
Trace install tas - DeepSeek Harness (DSH)
Rôle et état
DeepSeek Harness (dsh) fournit une interface Web d’agent de codage reliée au modèle Qwen3.8 servi par Ollama ROCm local. L’installation est réalisée sur tas en Podman rootless, avec une image locale versionnée :
- image :
localhost/deepseek-harness:0.1.0-rc.7; - conteneur :
deepseek-harness; - interface locale :
http://127.0.0.1:3080; - commande exécutée dans le conteneur :
dsh web --host 127.0.0.1 --port 3080 --no-open; - fournisseur : Ollama ROCm sur
http://127.0.0.1:11434/v1; - modèle par défaut :
qwen3.8-q8-256k:latest.
Le service n’est pas exposé directement sur le réseau : le réseau host est utilisé uniquement pour permettre à DSH d’atteindre Ollama sur la boucle locale, tandis que DSH écoute lui-même sur 127.0.0.1:3080.
Mise en place vérifiée le 22 août 2026 :
deepseek-harness.serviceest actif ;deepseek-harness-autostart.serviceest actif et activé ;- le conteneur répond HTTP 200 sur
http://127.0.0.1:3080/; - l’image locale utilisée est
localhost/deepseek-harness:0.1.0-rc.7; - la commande
dshn’est pas installée sur l’hôte : elle est exécutée dans le conteneur, ce qui évite de mélanger l’installation DSH avec les outils de l’utilisateurloic.
Fichiers et stockage
- Quadlet :
/home/loic/.config/containers/systemd/deepseek-harness.container - Volume workspace :
/home/loic/.config/containers/systemd/deepseek-harness-workspace.volume - Volume d’état :
/home/loic/.config/containers/systemd/deepseek-harness-state.volume - Wrapper d’automatisation :
/home/loic/.config/systemd/user/deepseek-harness-autostart.service - Workspace persistant : Nextcloud
/minidev/deepseek-harness - État et journaux : volume Podman
deepseek-harness-state
Le workspace est monté dans le conteneur sous /workspace. L’état DSH est monté sous /root/.dsh et n’est pas mélangé au workspace Nextcloud.
Mode d’automatisation
Le runtime est géré par Podman rootless et Quadlet, via systemd utilisateur. deepseek-harness.container génère l’unité deepseek-harness.service. Le wrapper deepseek-harness-autostart.service est une unité oneshot persistante, activée dans default.target, qui tire l’unité Quadlet au démarrage de la session utilisateur.
Le conteneur redémarre automatiquement après une panne grâce à :
Restart=on-failure
RestartSec=10
TimeoutStartSec=900
Le démarrage automatique ne repose donc pas sur un cron ni sur une commande lancée manuellement à chaque connexion.
Démarrage
Démarrer le wrapper persistant (et donc le service DSH) :
systemctl --user start deepseek-harness-autostart.service
Le démarrage direct du service généré reste possible :
systemctl --user start deepseek-harness.service
Après une modification d’un Quadlet, régénérer les unités puis redémarrer :
systemctl --user daemon-reload
systemctl --user restart deepseek-harness.service
Pour activer le démarrage automatique s’il a été désactivé :
systemctl --user enable deepseek-harness-autostart.service
Arrêt
Arrêt normal du service généré :
systemctl --user stop deepseek-harness.service
Pour arrêter également le wrapper persistant :
systemctl --user stop deepseek-harness-autostart.service
Pour empêcher le redémarrage automatique à la prochaine session, désactiver le wrapper :
systemctl --user disable deepseek-harness-autostart.service
Ces commandes arrêtent le service et le conteneur, mais ne suppriment ni l’image, ni les volumes, ni les données du workspace.
Pour un arrêt complet et explicite :
systemctl --user stop deepseek-harness-autostart.service
systemctl --user stop deepseek-harness.service
Contrôles
systemctl --user status deepseek-harness.service
systemctl --user status deepseek-harness-autostart.service
podman ps --filter name=deepseek-harness
curl -fsS http://127.0.0.1:3080/ | head
journalctl --user -u deepseek-harness.service -n 100 --no-pager
Contrôle de la commande DSH dans le conteneur :
podman exec deepseek-harness dsh --help
podman exec deepseek-harness sh -lc 'find /root/.dsh -maxdepth 2 -type f -print'
Le service utilise le réseau hôte, mais DSH et Caddy restent liés à la boucle locale ; aucun port DSH n’est publié directement sur le réseau.
Mise à jour contrôlée
L’image actuellement utilisée est une image locale épinglée. Avant toute évolution, sauvegarder les Quadlets, le workspace /minidev/deepseek-harness et le volume d’état deepseek-harness-state. Après remplacement validé de l’image ou modification d’un Quadlet :
systemctl --user daemon-reload
systemctl --user restart deepseek-harness.service
systemctl --user is-active deepseek-harness.service
curl -fsS http://127.0.0.1:3080/ >/dev/null
Ne pas supprimer l’ancienne image ni les volumes tant que le nouveau service n’a pas été validé.
Retour arrière et précautions
La version DSH est épinglée à 0.1.0-rc.7. Pour revenir à l’état précédent, arrêter et désactiver le wrapper ; aucune suppression n’est nécessaire :
systemctl --user disable --now deepseek-harness-autostart.service
Les autres services locaux (OpenClaw, Ollama, Caddy et SGLang) ne sont pas modifiés par cette installation.