123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- # this dockerfile can be translated to `docker/dockerfile:1-experimental` syntax for enabling cache mounts:
- # $ ./hack/translate-dockerfile-runopt-directive.sh < Dockerfile | DOCKER_BUILDKIT=1 docker build -f - .
- ARG BASE=ubuntu:20.04
- # Sep 26, 2020
- ARG ANBOX_COMMIT=170f1e029e753e782c66bffb05e91dd770d47dc3
- # ARG ANDROID_IMAGE=https://build.anbox.io/android-images/2018/07/19/android_amd64.img
- # Mirror
- ARG ANDROID_IMAGE=https://github.com/AkihiroSuda/anbox-android-images-mirror/releases/download/snapshot-20180719/android_amd64.img
- # https://build.anbox.io/android-images/2018/07/19/android_amd64.img.sha256sum
- ARG ANDROID_IMAGE_SHA256=6b04cd33d157814deaf92dccf8a23da4dc00b05ca6ce982a03830381896a8cca
- FROM ${BASE} AS anbox
- ENV DEBIAN_FRONTEND=noninteractive
- RUN apt-get update && \
- apt-get install -qq -y --no-install-recommends \
- build-essential \
- ca-certificates \
- cmake \
- cmake-data \
- cmake-extras \
- debhelper \
- dbus \
- git \
- google-mock \
- libboost-dev \
- libboost-filesystem-dev \
- libboost-log-dev \
- libboost-iostreams-dev \
- libboost-program-options-dev \
- libboost-system-dev \
- libboost-test-dev \
- libboost-thread-dev \
- libcap-dev \
- libegl1-mesa-dev \
- libexpat1-dev \
- libgles2-mesa-dev \
- libglm-dev \
- libgtest-dev \
- liblxc1 \
- libproperties-cpp-dev \
- libprotobuf-dev \
- libsdl2-dev \
- libsdl2-image-dev \
- libsystemd-dev \
- lxc-dev \
- pkg-config \
- protobuf-compiler \
- python2
- RUN git clone --recursive https://github.com/anbox/anbox /anbox
- WORKDIR /anbox
- ARG ANBOX_COMMIT
- RUN git pull && git checkout ${ANBOX_COMMIT} && git submodule update --recursive
- COPY ./src/patches/anbox /patches
- # `git am` requires user info to be set
- RUN git config user.email "nobody@example.com" && \
- git config user.name "AinD Build Script" && \
- if [ -f /patches/*.patch ]; then git am /patches/*.patch && git show --summary; fi
- # runopt = --mount=type=cache,id=aind-anbox,target=/build
- RUN ./scripts/build.sh && \
- cp -f ./build/src/anbox /anbox-binary
- FROM ${BASE} AS android-img
- ENV DEBIAN_FRONTEND=noninteractive
- RUN apt-get update && \
- apt-get install -qq -y --no-install-recommends \
- ca-certificates curl
- ARG ANDROID_IMAGE
- ARG ANDROID_IMAGE_SHA256
- RUN curl --retry 10 -L -o /android.img $ANDROID_IMAGE \
- && echo $ANDROID_IMAGE_SHA256 /android.img | sha256sum --check
- FROM ${BASE}
- ENV DEBIAN_FRONTEND=noninteractive
- RUN apt-get update && \
- apt-get install -qq -y --no-install-recommends \
- # base system
- ca-certificates curl iproute2 jq kmod socat \
- # lxc
- iptables lxc \
- # anbox deps
- libboost-log1.71.0 libboost-thread1.71.0 libboost-program-options1.71.0 libboost-iostreams1.71.0 libboost-filesystem1.71.0 libegl1-mesa libgles2-mesa libprotobuf-lite17 libsdl2-2.0-0 libsdl2-image-2.0-0 \
- # squashfuse
- squashfuse fuse3 \
- # adb
- adb \
- # systemd
- dbus dbus-user-session systemd systemd-container systemd-sysv \
- # X11
- xvfb x11vnc \
- # noVNC
- websockify novnc \
- # WM
- fvwm xterm \
- # debug utilities
- busybox figlet file strace less && \
- # ...
- useradd --create-home --home-dir /home/user --uid 1000 -G systemd-journal user && \
- curl -L -o /docker-entrypoint.sh https://raw.githubusercontent.com/AkihiroSuda/containerized-systemd/6ced78a9df65c13399ef1ce41c0bedc194d7cff6/docker-entrypoint.sh && \
- chmod +x /docker-entrypoint.sh
- # apk-pre.d is for pre-installed apks, /apk.d for the mountpoint for user-specific apks
- RUN mkdir -p /apk-pre.d /apk.d && \
- curl -L -o /apk-pre.d/FDroid.apk https://f-droid.org/FDroid.apk && \
- curl -L -o /apk-pre.d/firefox.apk https://ftp.mozilla.org/pub/mobile/releases/68.9.0/android-x86_64/en-US/fennec-68.9.0.en-US.android-x86_64.apk && \
- chmod 444 /apk-pre.d/*
- COPY --from=android-img /android.img /aind-android.img
- COPY --from=anbox /anbox-binary /usr/local/bin/anbox
- COPY --from=anbox /anbox/scripts/anbox-bridge.sh /usr/local/share/anbox/anbox-bridge.sh
- COPY --from=anbox /anbox/data/ui /usr/local/share/anbox/ui
- RUN ldconfig
- ADD src/anbox-container-manager-pre.sh /usr/local/bin/anbox-container-manager-pre.sh
- ADD src/anbox-container-manager.service /lib/systemd/system/anbox-container-manager.service
- RUN systemctl enable anbox-container-manager
- ADD src/unsudo /usr/local/bin
- ADD src/docker-2ndboot.sh /home/user
- ENV WEBMODE 0
- # Usage: docker run --rm --privileged -v /:/host --entrypoint bash ghcr.io/aind-containers/aind -exc "cp -f /install-kmod.sh /host/aind-install-kmod.sh && cd /host && chroot . /aind-install-kmod.sh"
- ADD hack/install-kmod.sh /
- VOLUME /var/lib/anbox
- ENTRYPOINT ["/docker-entrypoint.sh", "unsudo"]
- EXPOSE 5900
- EXPOSE 8080
- HEALTHCHECK --interval=15s --timeout=10s --start-period=60s --retries=5 \
- CMD ["pgrep", "-f", "org.anbox.appmgr"]
- CMD ["/home/user/docker-2ndboot.sh"]
|