- Box init + chownInBox exec explicitly as root: under podman keep-id the container's default user is the mapped uid, which cannot useradd/chown. - Init renames an existing uid-1000 passwd entry (podman keep-id injects one named after the HOST user) instead of adding a duplicate that would win the getpwuid lookup and make whoami report the wrong name. - Terminal connections tag their shell with a per-connection marker and reap the process group on WebSocket close: closing the attach socket never killed the exec'd shell, so every disconnect leaked an attached tmux client (session stuck at the smallest zombie's size; enough dead clients starve tmux rendering for live ones). - Job image: nvm 0.39.5 at /usr/local/nvm (user-writable) with /etc/profile.d/nvm.sh, matching what user dotfiles expect; docs for the box user + ownership model.
73 lines
2.1 KiB
Docker
73 lines
2.1 KiB
Docker
FROM registry.fedoraproject.org/fedora:44
|
|
|
|
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
|
ENV LANG=en_US.UTF-8
|
|
|
|
# Core toolchain + interactive/QoL CLI tooling. Everything below is in the
|
|
# default Fedora repos (no COPR needed). The QoL set mirrors the user's Panama
|
|
# workstation setup so the terminal feels like a real dev box for everyone.
|
|
RUN dnf install -y --setopt=install_weak_deps=False --nodocs \
|
|
bash \
|
|
bash-completion \
|
|
bat \
|
|
bubblewrap \
|
|
ca-certificates \
|
|
curl \
|
|
eza \
|
|
fd-find \
|
|
findutils \
|
|
fzf \
|
|
gcc \
|
|
gcc-c++ \
|
|
gh \
|
|
git \
|
|
glibc-langpack-en \
|
|
gum \
|
|
gzip \
|
|
jq \
|
|
less \
|
|
make \
|
|
ncurses \
|
|
neovim \
|
|
nodejs \
|
|
nodejs-npm \
|
|
openssh-clients \
|
|
procps-ng \
|
|
python3 \
|
|
python3-pip \
|
|
ripgrep \
|
|
tar \
|
|
tmux \
|
|
unzip \
|
|
wget \
|
|
which \
|
|
zoxide \
|
|
&& dnf clean all \
|
|
&& rm -rf /var/cache/dnf
|
|
|
|
# Package managers + pinned agent CLIs (kept identical to the prior image).
|
|
# Fedora's nodejs-npm doesn't ship corepack, so install pnpm/yarn via npm.
|
|
RUN npm install -g pnpm yarn bun@1.3.10 opencode-ai@1.17.9 @openai/codex@0.142.0 @anthropic-ai/claude-code@2.1.207 \
|
|
&& npm cache clean --force
|
|
|
|
# nvm, system-wide: user dotfiles source /etc/profile.d/nvm.sh (workstation
|
|
# parity), and NVM_DIR must be writable by the box user (uid 1000) so
|
|
# `nvm install` works from the shell. PROFILE=/dev/null stops the installer
|
|
# from editing root's rc files.
|
|
ENV NVM_DIR=/usr/local/nvm
|
|
RUN mkdir -p "$NVM_DIR" \
|
|
&& wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | PROFILE=/dev/null bash \
|
|
&& printf 'export NVM_DIR=/usr/local/nvm\n[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"\n[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"\n' > /etc/profile.d/nvm.sh \
|
|
&& chown -R 1000:1000 "$NVM_DIR"
|
|
|
|
# oh-my-posh prompt (binary only; we ship our own /etc/spoon/omp.json theme).
|
|
RUN curl -fsSL https://ohmyposh.dev/install.sh | bash -s -- -d /usr/local/bin \
|
|
&& oh-my-posh version
|
|
|
|
# Neutral system-wide defaults: /etc/profile.d/spoon.sh, /etc/tmux.conf, theme.
|
|
COPY docker/agent-job-rootfs/ /
|
|
|
|
WORKDIR /workspace
|
|
|
|
CMD ["bash"]
|