|
FROM ubuntu:questing@sha256:4a9232cc47bf99defcc8860ef6222c99773330367fcecbf21ba2edb0b810a31e |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Copied directly from docker/sandbox-templates:shell-docker |
|
# ----------------------------------------------------------------------------- |
|
|
|
ARG TARGETPLATFORM |
|
|
|
ENV NPM_CONFIG_PREFIX=/usr/local/share/npm-global |
|
ENV PATH=/home/agent/.local/bin:/usr/local/share/npm-global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin |
|
ENV NO_PROXY=localhost,127.0.0.1,::1,172.17.0.0/16 |
|
ENV no_proxy=localhost,127.0.0.1,::1,172.17.0.0/16 |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Essentials (for me) |
|
# ----------------------------------------------------------------------------- |
|
|
|
RUN set -euxo pipefail \ |
|
&& apt-get update \ |
|
&& apt-get install -yy --no-install-recommends \ |
|
ca-certificates \ |
|
curl \ |
|
wget \ |
|
gnupg \ |
|
openssh-server \ |
|
htop \ |
|
git \ |
|
git-lfs \ |
|
fd-find \ |
|
jq \ |
|
fzf \ |
|
bat \ |
|
tree \ |
|
zip \ |
|
xz-utils \ |
|
zstd \ |
|
file \ |
|
tar \ |
|
gzip \ |
|
build-essential \ |
|
pkg-config \ |
|
cmake \ |
|
ninja-build \ |
|
vim \ |
|
nano \ |
|
inetutils-traceroute \ |
|
inetutils-ping \ |
|
iproute2 \ |
|
&& ln -sf "$(which fdfind)" /usr/local/bin/fd \ |
|
&& ln -sf "$(which batcat)" /usr/local/bin/bat \ |
|
&& git lfs install --system \ |
|
&& chmod 1777 /tmp \ |
|
&& install -m 0755 -d /etc/apt/keyrings \ |
|
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ |
|
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg \ |
|
&& chmod a+r /etc/apt/keyrings/docker.gpg \ |
|
&& echo \ |
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ |
|
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" \ |
|
| tee /etc/apt/sources.list.d/docker.list > /dev/null \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
# ----------------------------------------------------------------------------- |
|
# User |
|
# ----------------------------------------------------------------------------- |
|
|
|
RUN set -ex \ |
|
&& userdel ubuntu || true \ |
|
&& useradd --create-home --uid 1000 --shell /bin/bash agent \ |
|
&& groupadd -f docker \ |
|
&& usermod -aG sudo agent \ |
|
&& usermod -aG docker agent \ |
|
&& mkdir /etc/sudoers.d \ |
|
&& chmod 0755 /etc/sudoers.d \ |
|
&& echo "agent ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/agent \ |
|
&& echo "Defaults:%sudo env_keep += \"http_proxy https_proxy no_proxy HTTP_PROXY HTTPS_PROXY NO_PROXY SSL_CERT_FILE NODE_EXTRA_CA_CERTS REQUESTS_CA_BUNDLE JAVA_TOOL_OPTIONS\"" > /etc/sudoers.d/proxyconfig \ |
|
&& mkdir -p /home/agent/.docker/sandbox/locks \ |
|
&& mkdir -p /home/agent/.local/share /home/agent/.local/state \ |
|
&& chown -R agent:agent /home/agent \ |
|
&& mkdir -p /usr/local/share/npm-global \ |
|
&& chown -R agent:agent /usr/local/share/npm-global |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Sandbox persistence |
|
# ----------------------------------------------------------------------------- |
|
|
|
RUN touch /etc/sandbox-persistent.sh \ |
|
&& chmod 644 /etc/sandbox-persistent.sh \ |
|
&& chown agent:agent /etc/sandbox-persistent.sh |
|
ENV BASH_ENV=/etc/sandbox-persistent.sh |
|
|
|
RUN set -ex \ |
|
&& cat > /etc/profile.d/sandbox-persistent.sh <<-'PROFILEEOF' \ |
|
&& chmod 644 /etc/profile.d/sandbox-persistent.sh |
|
if [ -f /etc/sandbox-persistent.sh ]; then |
|
. /etc/sandbox-persistent.sh |
|
fi |
|
|
|
export BASH_ENV=/etc/sandbox-persistent.sh |
|
|
|
PROFILEEOF |
|
|
|
RUN set -ex \ |
|
&& cat > /tmp/sandbox-bashrc-prepend <<-'PREPEND' |
|
if [ -f /etc/sandbox-persistent.sh ]; then |
|
. /etc/sandbox-persistent.sh |
|
fi |
|
|
|
export BASH_ENV=/etc/sandbox-persistent.sh |
|
|
|
PREPEND |
|
|
|
RUN cat /tmp/sandbox-bashrc-prepend /etc/bash.bashrc > /tmp/new-bashrc \ |
|
&& mv /tmp/new-bashrc /etc/bash.bashrc \ |
|
&& chmod 644 /etc/bash.bashrc \ |
|
&& rm /tmp/sandbox-bashrc-prepend |
|
|
|
RUN set -ex \ |
|
&& cat > /home/agent/.bashrc <<-'BASHRCEOF' \ |
|
&& chmod 644 /home/agent/.bashrc \ |
|
&& chown agent:agent /home/agent/.bashrc |
|
if [ -f /etc/sandbox-persistent.sh ]; then |
|
. /etc/sandbox-persistent.sh |
|
fi |
|
|
|
export BASH_ENV=/etc/sandbox-persistent.sh |
|
|
|
BASHRCEOF |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Astral uv |
|
# ----------------------------------------------------------------------------- |
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Common tools |
|
# ----------------------------------------------------------------------------- |
|
USER root |
|
RUN set -euxo pipefail \ |
|
&& apt-get update \ |
|
&& apt-get install -yy --no-install-recommends \ |
|
bubblewrap \ |
|
dnsutils \ |
|
docker-buildx-plugin \ |
|
docker-ce-cli \ |
|
docker-compose-plugin \ |
|
gh \ |
|
less \ |
|
lsof \ |
|
make \ |
|
openssh-client \ |
|
procps \ |
|
psmisc \ |
|
ripgrep \ |
|
rsync \ |
|
socat \ |
|
sudo \ |
|
tini \ |
|
unzip \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
USER agent |
|
ENTRYPOINT ["tini", "--"] |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Common languages |
|
# ----------------------------------------------------------------------------- |
|
USER root |
|
RUN set -euxo pipefail \ |
|
&& apt-get update \ |
|
&& apt-get install -yy --no-install-recommends \ |
|
bc \ |
|
default-jdk-headless \ |
|
golang \ |
|
man-db \ |
|
npm \ |
|
python3 \ |
|
python3-pip \ |
|
python3-venv\ |
|
pipx \ |
|
&& curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \ |
|
&& apt-get install -y --no-install-recommends nodejs \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
# ----------------------------------------------------------------------------- |
|
# Docker in Docker |
|
# ----------------------------------------------------------------------------- |
|
USER root |
|
RUN set -euxo pipefail \ |
|
&& apt-get update \ |
|
&& apt-get install -yy --no-install-recommends \ |
|
containerd.io \ |
|
docker-ce \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
# ----------------------------------------------------------------------------- |
|
# The end |
|
# ----------------------------------------------------------------------------- |
|
WORKDIR /home/agent |
|
USER agent |
|
|
|
CMD ["bash"] |