Dockerfile 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. # this dockerfile can be translated to `docker/dockerfile:1-experimental` syntax for enabling cache mounts:
  2. # $ ./hack/translate-dockerfile-runopt-directive.sh < Dockerfile | DOCKER_BUILDKIT=1 docker build -f - .
  3. ARG BASE=ubuntu:20.04
  4. # Sep 26, 2020
  5. ARG ANBOX_COMMIT=170f1e029e753e782c66bffb05e91dd770d47dc3
  6. # ARG ANDROID_IMAGE=https://build.anbox.io/android-images/2018/07/19/android_amd64.img
  7. # Mirror
  8. ARG ANDROID_IMAGE=https://github.com/AkihiroSuda/anbox-android-images-mirror/releases/download/snapshot-20180719/android_amd64.img
  9. # https://build.anbox.io/android-images/2018/07/19/android_amd64.img.sha256sum
  10. ARG ANDROID_IMAGE_SHA256=6b04cd33d157814deaf92dccf8a23da4dc00b05ca6ce982a03830381896a8cca
  11. FROM ${BASE} AS anbox
  12. ENV DEBIAN_FRONTEND=noninteractive
  13. RUN apt-get update && \
  14. apt-get install -qq -y --no-install-recommends \
  15. build-essential \
  16. ca-certificates \
  17. cmake \
  18. cmake-data \
  19. cmake-extras \
  20. debhelper \
  21. dbus \
  22. git \
  23. google-mock \
  24. libboost-dev \
  25. libboost-filesystem-dev \
  26. libboost-log-dev \
  27. libboost-iostreams-dev \
  28. libboost-program-options-dev \
  29. libboost-system-dev \
  30. libboost-test-dev \
  31. libboost-thread-dev \
  32. libcap-dev \
  33. libegl1-mesa-dev \
  34. libexpat1-dev \
  35. libgles2-mesa-dev \
  36. libglm-dev \
  37. libgtest-dev \
  38. liblxc1 \
  39. libproperties-cpp-dev \
  40. libprotobuf-dev \
  41. libsdl2-dev \
  42. libsdl2-image-dev \
  43. libsystemd-dev \
  44. lxc-dev \
  45. pkg-config \
  46. protobuf-compiler \
  47. python2
  48. RUN git clone --recursive https://github.com/anbox/anbox /anbox
  49. WORKDIR /anbox
  50. ARG ANBOX_COMMIT
  51. RUN git pull && git checkout ${ANBOX_COMMIT} && git submodule update --recursive
  52. COPY ./src/patches/anbox /patches
  53. # `git am` requires user info to be set
  54. RUN git config user.email "nobody@example.com" && \
  55. git config user.name "AinD Build Script" && \
  56. if [ -f /patches/*.patch ]; then git am /patches/*.patch && git show --summary; fi
  57. # runopt = --mount=type=cache,id=aind-anbox,target=/build
  58. RUN ./scripts/build.sh && \
  59. cp -f ./build/src/anbox /anbox-binary
  60. FROM ${BASE} AS android-img
  61. ENV DEBIAN_FRONTEND=noninteractive
  62. RUN apt-get update && \
  63. apt-get install -qq -y --no-install-recommends \
  64. ca-certificates curl
  65. ARG ANDROID_IMAGE
  66. ARG ANDROID_IMAGE_SHA256
  67. RUN curl --retry 10 -L -o /android.img $ANDROID_IMAGE \
  68. && echo $ANDROID_IMAGE_SHA256 /android.img | sha256sum --check
  69. FROM ${BASE}
  70. ENV DEBIAN_FRONTEND=noninteractive
  71. RUN apt-get update && \
  72. apt-get install -qq -y --no-install-recommends \
  73. # base system
  74. ca-certificates curl iproute2 jq kmod socat \
  75. # lxc
  76. iptables lxc \
  77. # anbox deps
  78. 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 \
  79. # squashfuse
  80. squashfuse fuse3 \
  81. # adb
  82. adb \
  83. # systemd
  84. dbus dbus-user-session systemd systemd-container systemd-sysv \
  85. # X11
  86. xvfb x11vnc \
  87. # noVNC
  88. websockify novnc \
  89. # WM
  90. fvwm xterm \
  91. # debug utilities
  92. busybox figlet file strace less && \
  93. # ...
  94. useradd --create-home --home-dir /home/user --uid 1000 -G systemd-journal user && \
  95. curl -L -o /docker-entrypoint.sh https://raw.githubusercontent.com/AkihiroSuda/containerized-systemd/6ced78a9df65c13399ef1ce41c0bedc194d7cff6/docker-entrypoint.sh && \
  96. chmod +x /docker-entrypoint.sh
  97. # apk-pre.d is for pre-installed apks, /apk.d for the mountpoint for user-specific apks
  98. RUN mkdir -p /apk-pre.d /apk.d && \
  99. curl -L -o /apk-pre.d/FDroid.apk https://f-droid.org/FDroid.apk && \
  100. 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 && \
  101. chmod 444 /apk-pre.d/*
  102. COPY --from=android-img /android.img /aind-android.img
  103. COPY --from=anbox /anbox-binary /usr/local/bin/anbox
  104. COPY --from=anbox /anbox/scripts/anbox-bridge.sh /usr/local/share/anbox/anbox-bridge.sh
  105. COPY --from=anbox /anbox/data/ui /usr/local/share/anbox/ui
  106. RUN ldconfig
  107. ADD src/anbox-container-manager-pre.sh /usr/local/bin/anbox-container-manager-pre.sh
  108. ADD src/anbox-container-manager.service /lib/systemd/system/anbox-container-manager.service
  109. RUN systemctl enable anbox-container-manager
  110. ADD src/unsudo /usr/local/bin
  111. ADD src/docker-2ndboot.sh /home/user
  112. ENV WEBMODE 0
  113. # 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"
  114. ADD hack/install-kmod.sh /
  115. VOLUME /var/lib/anbox
  116. ENTRYPOINT ["/docker-entrypoint.sh", "unsudo"]
  117. EXPOSE 5900
  118. EXPOSE 8080
  119. HEALTHCHECK --interval=15s --timeout=10s --start-period=60s --retries=5 \
  120. CMD ["pgrep", "-f", "org.anbox.appmgr"]
  121. CMD ["/home/user/docker-2ndboot.sh"]