cloudburn.dev

Building an IronClaw AI Assistant on Debian LXC

ROCm 6.0 and IronClaw on a Beelink EQR6 Proxmox node. Same hardware as before, different goal.

Same hardware as the previous posts: Beelink EQR6, Ryzen 9 6900HX, Radeon 680M iGPU running on Proxmox. This time the goal is getting IronClaw working inside a Debian LXC with ROCm, bridged to existing Claude Pro and Gemini subscriptions to keep the inference bill at zero.

Here’s exactly how the setup works.

The Hardware Stack

  • Host: Proxmox VE on the Beelink EQR6 (Ryzen 9 6900HX)
  • LXC Container: Debian 12 (Bookworm), 16GB RAM, 40GB NVMe root
  • GPU: Radeon 680M (gfx1030), ROCm 6.0 userspace
  • Drivers: ROCm with --no-install-recommends — userspace compute only, no kernel module headaches inside a container
  • Storage: NAS mounted at /mnt/nas via host-level bind mounts

Step 1: Wire the GPU into the LXC

This happens on the Proxmox host, not inside the container.

Find your render device major:minor numbers:

ls -l /dev/dri
stat -c "%t %T" /dev/dri/card0        # major:minor → 226:0
stat -c "%t %T" /dev/dri/renderD128   # major:minor → 226:128
stat -c "%t %T" /dev/kfd              # major:minor → 234:0

Edit the LXC config (replace 400 with your CT ID):

nano /etc/pve/lxc/400.conf

Add to the bottom:

lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.cgroup2.devices.allow: c 234:0 rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry: /dev/kfd dev/kfd none bind,optional,create=file

Set privileged and restart:

pct stop 400 && pct start 400

Step 2: Install ROCm 6.0 (Userspace Only)

Shell into the container:

pct exec 400 -- bash

Install userspace libraries only. Do not install DKMS modules. The container shares the host kernel and DKMS will cause conflicts.

apt-get install -y wget gnupg2

wget -qO - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add -

echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/6.0 bookworm main' \
  | tee /etc/apt/sources.list.d/rocm.list

apt-get update
apt-get install -y rocm-hip-libraries rocm-opencl-runtime --no-install-recommends

Add your user to the render/video groups:

usermod -aG render,video root

Verify the GPU is visible:

rocminfo | grep -A2 gfx
# Should show: gfx1030 (Radeon 680M)

Step 3: Fix the systemd-logind Namespace Error

Inside the LXC you’ll hit status=226/NAMESPACE on login. Newer Debian tries to sandbox systemd-logind using kernel namespaces that LXC restricts. Fix it permanently:

mkdir -p /etc/systemd/system/systemd-logind.service.d/

cat > /etc/systemd/system/systemd-logind.service.d/override.conf << 'EOF'
[Service]
PrivateUsers=no
RestrictNamespaces=no
EOF

systemctl daemon-reload
systemctl restart systemd-logind

Login latency drops back to normal.


Step 4: Install Ollama with ROCm Backend

curl -fsSL https://ollama.com/install.sh | sh

# ROCm is auto-detected via /dev/kfd
ollama serve &

# Verify GPU is used, not CPU fallback
rocm-smi

# Pull a model sized for shared VRAM + RAM
ollama pull qwen2.5:7b

# Confirm
ollama run qwen2.5:7b "confirm GPU inference is active"

Step 5: Install Claude Code

curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install -y nodejs
npm install -g @anthropic-ai/claude-code

export ANTHROPIC_API_KEY=your-key-here

claude --version

What’s Next

Foundation is solid. Two things on the immediate list:

  1. Subscription Bridge: Headless Chromium to use existing Claude Pro and Gemini seats without stacking API costs on top of subscriptions.
  2. GitLab Integration: Autonomous repo scanning via SSH deploy keys for content pipelines.

The Beelink EQR6 handles this workload without complaint. More coming as the pipeline gets pushed further.