Introduction
For too long, containerization has been presented as the only way to isolate workloads, but our experiment proves otherwise. Instead of relying on Podman/Docker, we’ve successfully deployed ROCm inside a Debian 12 chroot, achieving full functionality without unnecessary complexity. This document outlines why containers were unnecessary, how we built a streamlined environment, and provides full scripts for reproducibility.
🚀 Why Chroot Over Containers?
Containers are often bloated with:
- Unnecessary abstraction—web interfaces, complex security policies, artificial restrictions.
- Corporate lock-in—forcing users into ecosystems where usability is monetized.
- Opaque behavior—too many layers between the user and actual system hardware.
Chroot, however, offers: ✔ Direct control—no sandbox limitations. ✔ Lightweight isolation—no unnecessary layers. ✔ Minimal dependencies—no tangled runtime management.
Instead of wrestling with Podman, we went back to basics—and it worked.
Pre-reqs:
Here’s a list of critical prerequisites for setting up and managing chroot environments:
🚀 Essential Chroot Management Packages
Install these first on a fresh Debian 12 server, net install is recommended:
bash
sudo apt update && sudo apt install -y \
debootstrap \
schroot \
wget \
curl \
sudo \
nano \
vim \
build-essential \
tar \
gzip \
lsb-release
🔧 System Utilities (Recommended)
These improve usability and troubleshooting inside the chroot:
bash
sudo apt install -y \
htop \
tmux \
openssh-server \
gnupg \
ca-certificates \
software-properties-common
💾 GPU-Specific Dependencies (For ROCm)
If you plan to install ROCm, you’ll also need:
bash
sudo apt install -y \
python3-setuptools \
python3-wheel \
pciutils \
libnuma-dev
💡 Verifying Prerequisites
Once installed, confirm everything is in place:
bash
dpkg -l | grep -E "debootstrap|schroot|build-essential|sudo"
This will ensure your net-installed Debian 12 system is ready for chroot management.
The installation instructions for Debian 12 for ROCm can be found below if the weblink doesn’t break (it will but anyway)
:https://rocm.docs.amd.com/projects/install-on-linux/en/latest/install/quick-start.html
ROCm Install Script for Debian 12
(install_rocm_base.sh
)
#!/bin/bash
# ROCm Installation Script for Base Debian 12 (Not Chroot)
# Author: 8p8c
# Description: Sets up ROCm on Debian 12 and prepares GPU drivers.
set -e # Exit on error
echo "Updating package lists..."
sudo apt update
echo "Installing required dependencies..."
sudo apt install -y wget python3-setuptools python3-wheel
echo "Adding AMD ROCm repository..."
echo 'deb [trusted=yes] http://repo.radeon.com/rocm/apt/latest bookworm main' | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt update
echo "Installing AMD GPU package..."
wget https://repo.radeon.com/amdgpu-install/6.4/ubuntu/jammy/amdgpu-install_6.4.60400-1_all.deb
sudo apt install ./amdgpu-install_6.4.60400-1_all.deb
echo "Updating package lists after installation..."
sudo apt update
echo "Adding current user to render and video groups..."
sudo usermod -a -G render,video $LOGNAME
echo "Installing ROCm..."
sudo apt install -y rocm
echo "Verifying ROCm installation..."
rocminfo
clinfo
echo "ROCm setup is complete!"
How to Use This Script
1️⃣ Save the script as install_rocm_base.sh
. 2️⃣ Make it executable:
bash
chmod +x install_rocm_base.sh
3️⃣ Run on your base Debian 12 OS (not inside a chroot):
bash
sudo ./install_rocm_base.sh
Why This Is Important
✅ Ensures the base OS has proper GPU support before installing ROCm inside a chroot. ✅ Avoids dependency issues inside the chroot by handling drivers at the system level. ✅ Prepares the host system for chroot-based ROCm installations.
Once this is installed on Debian 12 (outside the chroot), you can safely install ROCm inside the chroot without conflicts.
Lest set up the chroot next:
Setting Up ROCm in a Debian 12 Chroot
Step 1: Creating the Base Chroot Environment
First, we establish a clean Debian environment:
bash
mkdir /mnt/myenv
debootstrap --arch=amd64 bookworm /mnt/myenv http://deb.debian.org/debian
Then, we enter it:
bash
chroot /mnt/myenv /bin/bash
Below is a script that automates the ROCm installation inside your Debian 12 chroot. It ensures everything is set up cleanly, including user group permissions, dependencies, and ROCm itself. n.b. the script is accessible on the host OS via the chroot once suitably named and saved – with run permissions active – this will need to be checked if working via transferring from a daily driver to your server – if working that way.
ROCm Install Script (install_rocm.sh
)
bash
#!/bin/bash
# ROCm Installation Script for Debian 12 Chroot
# Author: 8p8c
# Description: Automates ROCm setup inside a chroot environment.
set -e # Exit immediately if a command fails
echo "Updating package lists..."
sudo apt update
echo "Installing required dependencies..."
sudo apt install -y wget python3-setuptools python3-wheel
echo "Downloading AMD GPU installer..."
wget https://repo.radeon.com/amdgpu-install/6.4/ubuntu/jammy/amdgpu-install_6.4.60400-1_all.deb
echo "Installing AMD GPU package..."
sudo apt install ./amdgpu-install_6.4.60400-1_all.deb
echo "Updating package lists after installation..."
sudo apt update
echo "Adding current user to render and video groups..."
sudo usermod -a -G render,video $LOGNAME
echo "Installing ROCm..."
sudo apt install -y rocm
echo "Installation complete! Verifying setup..."
rocminfo
clinfo
How to Use This Script
1️⃣ Save the script as install_rocm.sh
. 2️⃣ Make it executable:
bash
chmod +x install_rocm.sh
3️⃣ Run inside your chroot:
bash
sudo schroot -c debian12 -- ./install_rocm.sh
What This Script Does
✅ Handles dependency installation automatically. ✅ Ensures correct user permissions for ROCm compatibility. ✅ Performs verification after installation.
🔹 Snapshot and Clone
Once your chroot environment is set up, you can snapshot it for reuse:
- Compress the template:
tar -czvf myenv-template.tar.gz /mnt/myenv
- Clone it whenever you need a new instance:
tar -xzvf myenv-template.tar.gz -C /mnt/newenv chroot /mnt/newenv /bin/bash
Be aware that error trapping is a distant dream at the moment – this is the raw stuff and you are on your own – no guarantees – no warranty – and your mileage may vary. This is also obviously not meant for spaceflight or medical or… yeah, it’s working, bells and whistles? that’s for you to add. Don’t rely on this for production or critical systems – I know, I know, but I have to put this bit in, and as you got this far…
Here’s some more test commands before you go conquer the universe in the nicest possible way:
The primary System Management Interface (SMI) command for ROCm is rocm-smi
, but AMD has also introduced amd-smi
as an alternative tool for managing GPUs.
Key ROCm SMI Commands
1️⃣ Check GPU status & utilization
bash
rocm-smi
or
bash
amd-smi list
2️⃣ Show detailed GPU hardware info
bash
rocm-smi --showhw
or
bash
amd-smi static
3️⃣ Monitor GPU temperature & power usage
bash
rocm-smi --showtemp --showpower
or
bash
amd-smi metric
4️⃣ List installed GPUs
bash
rocm-smi --listgpu
or
bash
amd-smi list --gpu
5️⃣ Reset GPU settings
bash
rocm-smi --gpureset
or
bash
amd-smi reset
Both rocm-smi
and amd-smi
provide similar functionality, but amd-smi
is newer and offers additional features for monitoring and managing AMD GPUs
Ok – that’s all folks – no containers and nothing up the sleeves – there are some refinements and niggles – this is the first draft.
Remember – With great power comes great responsibility – that’s probably Cicero by the way – not Peter Parker