🤖 Mettre en place un agent IA autonome (Opencode) en environnement isolé sur ArchLinux

Posted on Oct 20, 2025

L’objectif de ce guide est de mettre en place un agent autonome opencode/GLM-4.6 dans un environnement isolĂ© (jailed) sur un système ArchLinux (ici, Manjaro). L’utilisation d’un jail avec systemd-nspawn garantit une segmentation stricte entre l’agent et le système hĂ´te, une pratique essentielle pour la sĂ©curitĂ©. Nous ne voulons pas laisser Skynet prendre le contrĂ´le !


🕵️‍♂️ Prérequis

Avant de commencer, assurons-nous que l’environnement de base est prĂŞt et que les outils nĂ©cessaires sont disponibles.

  • MatĂ©riel HĂ´te : Ordinateur portable Aspire, 4GB RAM, Xeon E3-1200.
  • Système d’exploitation : Manjaro Linux Ă  jour.

VĂ©rifions que systemd-nspawn, l’outil clĂ© pour crĂ©er notre conteneur, est bien prĂ©sent sur le système hĂ´te.

whereis systemd-nspawn        
systemd-nspawn: /usr/bin/systemd-nspawn

đź§± CrĂ©ation de l’environnement isolĂ© (Jail)

Nous allons maintenant prĂ©parer la structure de base : un groupe et un utilisateur dĂ©diĂ©s sur l’hĂ´te, puis le rĂ©pertoire racine de notre jail.

  1. CrĂ©er le groupe et l’utilisateur sur l’hĂ´te Ceux-ci serviront Ă  gĂ©rer les permissions du rĂ©pertoire de la jail. L’utilisateur est créé sans shell valide (nologin) pour des raisons de sĂ©curitĂ©.

    sudo groupadd ai-agents
    sudo useradd -m -g ai-agents -s /usr/bin/nologin opencode
    
  2. Créer et sécuriser le répertoire de la jail Ce répertoire /home/opencode/lab deviendra le / de notre système isolé.

    sudo mkdir -p /home/opencode/lab 
    sudo chown root:root /home/opencode/lab
    sudo chmod 755 /home/opencode/lab
    
  3. Installer un système de base dans la jail Nous utilisons pacstrap pour installer un système ArchLinux minimal ainsi que les outils de dĂ©veloppement essentiels dans notre rĂ©pertoire /home/opencode/lab. Si pacstrap n’est pas installĂ© (courant sur Manjaro), il faut d’abord installer arch-install-scripts.

    pamac install arch-install-scripts
    

    Ensuite, nous peuplons la jail avec les paquets nécessaires.

    sudo pacstrap -c /home/opencode/lab base linux base-devel \
        git make go python zsh gcc cmake vim \
        nodejs npm tree jq yq man-db unzip \
        logrotate iproute2 net-tools pacman
    

👤 Configuration de l’utilisateur dans la Jail

Le système isolĂ© est prĂŞt, mais il nous faut y crĂ©er l’utilisateur opencode qui exĂ©cutera l’agent. Cette opĂ©ration se fait en lançant une commande directement dans la jail.

Note : Il n’est peut-ĂŞtre pas strictement nĂ©cessaire de crĂ©er l’utilisateur sur l’hĂ´te au prĂ©alable, mais cela aide Ă  maintenir la cohĂ©rence des permissions.

sudo systemd-nspawn -D /home/opencode/lab /bin/sh -c 'groupadd --gid 1001 ai-agents; useradd --uid 1001 --gid ai-agents -d /home/opencode -m -s /usr/bin/zsh opencode;'

🤖 Installation et DĂ©pannage d’Opencode

Entrons maintenant dans notre environnement isolĂ© pour la première fois et tentons d’installer l’agent.

  1. AccĂ©der Ă  la jail Nous nous connectons en tant qu’utilisateur opencode avec zsh comme shell.

    sudo systemd-nspawn -D /home/opencode/lab -u opencode /usr/bin/zsh
    
  2. Première tentative d’installation (et premier Ă©chec) L’invite de commande lab% indique que nous sommes bien dans la jail. Tentons l’installation via le script curl.

    lab% curl -fsSL [https://opencode.ai/install](https://opencode.ai/install) | zsh
    

    Cela échoue avec une erreur liée au shell :

    Downloading opencode version: 0.15.8 ...
    ######################################################################## 100.0%
    zsh: SHELL: parameter not set
    
  3. Tentatives de correction L’erreur suggère que la variable d’environnement SHELL n’est pas dĂ©finie. Essayons de la positionner manuellement et de crĂ©er un fichier de configuration Zsh minimal.

    lab% export SHELL=/usr/bin/zsh
    lab% mkdir -p /home/opencode/.config/zsh
    lab% touch /home/opencode/.config/zsh/.zshrc 
    

    MalgrĂ© ces ajustements, l’installation via le script curl ne fonctionnait toujours pas.

  4. Plan B : Installation via Go Puisque nous avons installĂ© Go, nous pouvons compiler et installer l’outil directement depuis la source.

    lab% go install [github.com/opencode-ai/opencode@latest](https://github.com/opencode-ai/opencode@latest)
    

✅ Analyse Post-Installation et Résolution

Après investigation, la vĂ©ritable cause du problème avec le script d’installation curl a Ă©tĂ© identifiĂ©e. Il ne s’agissait pas de la configuration de Zsh, mais du fait que le rĂ©pertoire d’installation d’Opencode n’Ă©tait pas dans le PATH.

Le script installe le binaire dans $HOME/.opencode/bin. Pour que le shell le trouve, il faut mettre Ă  jour la variable PATH.

lab% export PATH="$HOME/.opencode/bin:$PATH"

En ajoutant cette ligne Ă  votre .zshrc, la commande opencode sera disponible Ă  chaque connexion.


🚀 Configuration et Première Utilisation

Maintenant que l’outil est correctement installĂ© et accessible, nous pouvons finaliser la configuration.

  1. Authentification Connectez votre client opencode à votre compte en ajoutant vos clés API.

    lab% opencode auth login
    
  2. Lancer une tâche Utilisons l’agent BUILD avec le modèle GLM-4.6 (de Z.AI) pour lui demander de construire ses propres commandes.

    lab% opencode "/theme etc..."
    

đź‘€ Observations Initiales

Une première observation intĂ©ressante : lorsqu’on lui demande de crĂ©er des outils, l’agent gĂ©nère du code Python, ce qui n’Ă©tait pas forcĂ©ment l’attendu. Cela souligne l’importance de formuler des prompts prĂ©cis pour guider le comportement de l’agent.


📝 Annexe et Prochaines Étapes

Quelques points à considérer pour améliorer et fiabiliser cet environnement.

  • Polices d’Ă©criture : Installer des polices comme noto-fonts-emoji, car les LLM modernes les utilisent frĂ©quemment, apparemment pour amĂ©liorer l’ancrage contextuel.
  • Timeouts : Des TIMEOUT ont Ă©tĂ© observĂ©s. Une investigation est nĂ©cessaire pour en dĂ©terminer la cause (rĂ©seau dans la jail, limitations des API, etc.).
  • Utilisation de Tmux : Pour gĂ©rer plusieurs shells simultanĂ©ment au sein de l’environnement nspawn, l’installation et l’utilisation de tmux sont fortement recommandĂ©es.