# syntax=docker/dockerfile:1 FROM debian:bookworm-slim AS capture-builder RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential \ libx11-dev \ libxdamage-dev \ libxext-dev \ libxfixes-dev \ libxtst-dev \ libpng-dev \ && rm -rf /var/lib/apt/lists/* WORKDIR /build COPY xcapture.c . RUN cc -O3 -fPIC -shared -Wall -Wextra -Werror -o librakazo-xcapture.so xcapture.c \ -lX11 -lXext -lXdamage -lXfixes -lXtst -lpng FROM debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends \ xvfb \ x11vnc \ fluxbox \ xterm \ xdotool \ x11-utils \ x11-xserver-utils \ imagemagick \ novnc \ websockify \ python3 \ ca-certificates \ procps \ bash \ chromium \ fonts-liberation \ fonts-dejavu-core \ fonts-noto-cjk \ fonts-noto-color-emoji \ xclip \ dbus-x11 \ xdg-utils \ sudo \ && rm -rf /var/lib/apt/lists/* \ && groupadd --gid 1000 bangso \ && useradd --uid 1000 --gid bangso --create-home --shell /bin/bash bangso \ && usermod -aG sudo bangso \ && printf '%s\n' 'bangso ALL=(ALL:ALL) ALL' > /etc/sudoers.d/bangso \ && chmod 440 /etc/sudoers.d/bangso \ && mkdir -p /etc/rakazo/fluxbox \ && printf '%s\n' '#!/bin/sh' 'exec xsetroot -solid "#111113" "$@"' > /usr/bin/fbsetbg \ && chmod +x /usr/bin/fbsetbg \ && ln -sfn /bin/true /usr/bin/xmessage ENV DISPLAY=:1 ENV HOME=/home/bangso ENV USER=bangso ENV LOGNAME=bangso ENV LANG=C.UTF-8 ENV LC_ALL=C.UTF-8 WORKDIR /home/bangso # --chmod normalizes modes: a restrictive host umask (e.g. 077 on hardened hosts) would # otherwise leave these files unreadable to USER 1000 at runtime. COPY --chmod=755 start.sh /usr/local/bin/rakazo-computer COPY --chmod=755 control.py /usr/local/bin/rakazo-computer-control COPY --from=capture-builder /build/librakazo-xcapture.so /usr/local/lib/librakazo-xcapture.so COPY --chmod=755 rakazo-browser /usr/local/bin/rakazo-browser COPY --chmod=755 paste-text.sh /usr/local/bin/rakazo-paste COPY --chmod=755 terminal.sh /usr/local/bin/rakazo-terminal COPY --chmod=644 rakazo-browser.desktop /usr/share/applications/rakazo-browser.desktop COPY --chmod=644 fluxbox.init /etc/rakazo/fluxbox/init COPY --chmod=644 fluxbox.apps /etc/rakazo/fluxbox/apps COPY --chmod=644 fluxbox.menu /etc/rakazo/fluxbox/menu COPY --chmod=644 embed.html /usr/share/novnc/embed.html COPY --chmod=644 clipboard-bridge.js /usr/share/novnc/clipboard-bridge.js # Strip CR so shebangs work even if the build context came from a CRLF checkout. RUN ldconfig \ && sed -i 's/\r$//' /usr/local/bin/rakazo-computer /usr/local/bin/rakazo-computer-control /usr/local/bin/rakazo-browser /usr/local/bin/rakazo-paste /usr/local/bin/rakazo-terminal \ /etc/rakazo/fluxbox/init /etc/rakazo/fluxbox/apps /etc/rakazo/fluxbox/menu # Password is a BuildKit secret so it never appears in the Dockerfile or git. RUN --mount=type=secret,id=computer_password,required=false \ if [ -s /run/secrets/computer_password ]; then \ echo "bangso:$(cat /run/secrets/computer_password)" | chpasswd; \ fi EXPOSE 7070 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 USER 1000:1000 CMD ["/usr/local/bin/rakazo-computer"]