Run PearAI (a VS Code fork) in an isolated container with GUI support using Podman and Distrobox.
./pearai-bin directory
PearAI executable and required resourcespearai-bin directorychmod +x setup-pearai-container.sh
./setup-pearai-container.sh
distrobox-enter pearai-container -- /opt/PearAI/PearAI
| Command | Description |
|---|---|
distrobox-enter pearai-container |
Enter the container shell |
distrobox-stop pearai-container |
Stop the container |
distrobox-rm pearai-container |
Remove the container |
podman rmi pearai-image |
Remove the Podman image |
GUI Not Showing:
xhost +local:
Permission Issues:
sudo usermod -aG fuse $USER
newgrp fuse
Verify Podman Installation:
podman info
/opt/PearAI/
├── pearai # Main executable
└── resources/ # Required assets
#!/usr/bin/env bash
set -e
# Define variables
CONTAINER_NAME="pearai-container"
IMAGE_NAME="localhost/pearai-image"
PEARAI_BIN_DIR="./pearai-bin" # Directory containing pre-compiled PearAI binaries
# Install required packages on NixOS
echo "[1/6] Installing dependencies on NixOS..."
sudo nix-env -iA nixos.distrobox nixos.podman
sudo sh -c "echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/99-unprivileged-userns.conf"
sudo sysctl -p /etc/sysctl.d/99-unprivileged-userns.conf
# Prepare Podman build context
echo "[2/6] Preparing build context..."
mkdir -p podman-build
cp -r "${PEARAI_BIN_DIR}" podman-build/pearai
# Create Containerfile
cat > podman-build/Containerfile <<EOF
FROM docker.io/ubuntu:22.04
# Install GUI dependencies
RUN apt-get update && \\
apt-get install -y \\
libgtk-3-0 \\
libx11-xcb1 \\
libnss3 \\
libasound2 \\
libxcomposite1 \\
libxdamage1 \\
libxrandr2 \\
libgbm1 \\
libpango-1.0-0 \\
libcairo2 \\
libatk1.0-0 \\
libatk-bridge2.0-0 \\
libepoxy0 \\
libxkbcommon0 \\
xauth \\
&& rm -rf /var/lib/apt/lists/*
# Create non-root user
RUN groupadd -g 1000 pearai && \\
useradd -u 1000 -g pearai -m pearai
# Copy PearAI binaries
COPY pearai /opt/PearAI
RUN chown -R pearai:pearai /opt/PearAI
USER pearai
WORKDIR /opt/pearai
CMD ["./pearai"]
EOF
# Build Podman image
echo "[3/6] Building Podman image..."
podman build -t "${IMAGE_NAME}" podman-build
# Create distrobox container
echo "[4/6] Creating distrobox container..."
distrobox-create --name "${CONTAINER_NAME}" --image "${IMAGE_NAME}" --yes --root
# Configure X11 permissions
echo "[5/6] Configuring GUI permissions..."
xhost +local: &> /dev/null || true
# Create desktop shortcut
echo "[6/6] Creating desktop shortcut..."
mkdir -p "${HOME}/.local/share/applications"
cat > "${HOME}/.local/share/applications/pearai.desktop" <<EOF
[Desktop Entry]
Name=PearAI
Comment=PearAI Code Editor
Exec=distrobox-enter ${CONTAINER_NAME} -- /opt/PearAI
Icon=text-editor
Terminal=false
Type=Application
Categories=Development;IDE;
EOF
echo "Setup complete! Run PearAI from your applications menu or using: distrobox-enter ${CONTAINER_NAME} -- /opt/pearai/pearai"```