33 lines
2.3 KiB
Docker
33 lines
2.3 KiB
Docker
# AnyBot's own computer ("Bot 的電腦"): a Linux desktop the bots share, like the original's box
|
|
# (an X11 desktop driven by xdotool, watched through noVNC on port 6080). One TigerVNC server is
|
|
# the screen and the VNC server; AT-SPI is on, so every app's controls (web pages included) can
|
|
# be read with their places and numbered on the bot's picture (box/a11y, after XBot's box).
|
|
FROM debian:bookworm-slim
|
|
ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8 TZ=UTC
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
tigervnc-standalone-server tigervnc-tools xdotool x11-utils x11-xserver-utils imagemagick fluxbox xterm \
|
|
at-spi2-core libatk-adaptor python3-gi gir1.2-atspi-2.0 libglib2.0-bin gsettings-desktop-schemas dconf-gsettings-backend \
|
|
novnc python3-websockify chromium fonts-noto-cjk fonts-noto-color-emoji \
|
|
ca-certificates curl wget git jq unzip zip less nano vim-tiny procps psmisc \
|
|
python3 python3-pip python3-venv nodejs npm sudo tini dbus-x11 xclip poppler-utils \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* \
|
|
&& useradd -m -s /bin/bash bot && echo 'bot ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/bot \
|
|
&& ln -sf /usr/share/novnc/vnc.html /usr/share/novnc/index.html
|
|
COPY start.sh /usr/local/bin/anybot-box-start
|
|
COPY a11y /usr/local/bin/anybot-a11y
|
|
COPY browser /usr/local/bin/anybot-browser
|
|
COPY fluxbox-init /etc/anybot/fluxbox-init
|
|
COPY overlay /etc/anybot/overlay
|
|
COPY Xresources /etc/anybot/Xresources
|
|
COPY menu /etc/anybot/menu
|
|
RUN chmod +x /usr/local/bin/anybot-box-start /usr/local/bin/anybot-a11y /usr/local/bin/anybot-browser \
|
|
# Chromium has no sandbox inside a container (no user namespaces); the box itself is the
|
|
# sandbox. Debian's chromium wrapper reads these flags for every launch (menu, bots, xdg-open).
|
|
&& printf '%s\n' 'export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --no-sandbox --disable-dev-shm-usage --no-first-run --no-default-browser-check --disable-gpu --password-store=basic --test-type"' > /etc/chromium.d/anybot
|
|
# Accessibility on for every app, including those started over `docker exec`.
|
|
ENV DISPLAY=:1 SCREEN_SIZE=1280x800x24 GTK_MODULES=atk-bridge GTK_A11Y=atspi GNOME_ACCESSIBILITY=1 NO_AT_BRIDGE=0
|
|
EXPOSE 6080
|
|
LABEL anybot.box.version="6"
|
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
CMD ["/usr/local/bin/anybot-box-start"]
|