Aller au contenu

Trace install tas - DeepSeek Harness (DSH)

De Loic Wiki

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.service est actif ;
  • deepseek-harness-autostart.service est 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 dsh n’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’utilisateur loic.

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.