Claude·2 min lezen

claude: command not found op een DirectAdmin-server met jailshell

Waarom claude wel voor de admin werkt maar niet voor andere gebruikers, en hoe je Claude Code server-breed installeert, ook in de jailshell.

Je installeert Claude Code op een DirectAdmin-server, het werkt voor de admin, maar een gewone gebruiker krijgt:

[klant@server ~]$ claude
bash: claude: command not found

Dit artikel is voor serverbeheerders. We liepen er zelf tegenaan op onze eigen hostingserver.

De oorzaak: de jail ziet je installatie niet

DirectAdmin kan gebruikers in een jailshell zetten (jail=ON in de gebruikersinstellingen). Die jail is gebouwd op bwrap en laat de gebruiker maar een klein deel van het systeem zien:

  • /usr (alleen lezen)
  • de eigen home-map
  • een paar losse bestanden uit /etc (zoals resolv.conf en /etc/profile.d)

/opt, /root en andere home-mappen bestaan in de jail niet. Stond Claude in /opt/claude met een symlink in /usr/local/bin, dan wijst die link in de jail naar niets. Vandaar "command not found", terwijl ls /usr/local/bin/claude als root prima werkt.

De oplossing: installeer onder /usr

Zet de Claude-binary zelf onder /usr, bijvoorbeeld:

install -d -m 755 /usr/local/lib/claude/versions
install -m 755 /pad/naar/claude-binary /usr/local/lib/claude/versions/2.1.198
ln -sfn /usr/local/lib/claude/versions/2.1.198 /usr/local/bin/claude

Controleer het als de gebruiker, via de jail:

su - klant -c "which claude; claude --version"

Updates: centraal, niet per gebruiker

Gebruikers kunnen niet schrijven in /usr, dus de ingebouwde auto-updater werkt daar niet. Zet hem uit via een bestand in /etc/profile.d (dat is wél zichtbaar in de jail):

echo 'export DISABLE_AUTOUPDATER=1' > /etc/profile.d/claude.sh

Updaten doe je als root: nieuwe versie in versions/ zetten en de symlink omzetten.

"claude command at ~/.local/bin/claude missing or broken"

Die waarschuwing zie je bij de eerste start van een gebruiker. Claude Code verwacht zijn eigen kopie in ~/.local/bin. Het is onschuldig: Claude start gewoon vanuit /usr/local/bin. Wel installeert Claude daarna vaak een eigen kopie in de home-map van de gebruiker, die vóór /usr/local/bin in het PATH staat en zichzelf bijwerkt.

Houd daar rekening mee:

  • Die kopie is ruim 200 MB per gebruiker en telt mee in de schijfquota.
  • Hij komt mee in backups van de home-map. Sluit .local/share/claude uit als je dat niet wilt.

Samengevat

Probleem Oplossing
command not found in jailshell binary onder /usr/local/lib, niet /opt
auto-updater faalt DISABLE_AUTOUPDATER=1 in /etc/profile.d
grote kopie per gebruiker accepteren of uitsluiten in backups
MK
Maarten Keizer

Oprichter van Invoker. Ruim twintig jaar hosting, systeembeheer en webdevelopment; bouwt de Claude-hosting zelf en test alles eerst op de eigen servers.

over maarten