Docker M1 preview
https://desktop.docker.com/mac/m1preview/Docker-AppleSilicon-Preview7.dmg
(2) Install the above preview and then use terminal the tools. The build script is based on Android SDK docker image for x64 and modify it for arm64. Moreover, swift 5.3.1, clang 10.0.0, kotlin 1.4.21, gradle 6.7.1, gcc 9.3.0, java 11, firefox, visual studio code and codeblocks are added for development purpose.
(3) Shell script run in Mac docker info # check if docker is installed properly in Mac M1
mkdir -p ${HOME}/android_sdk_vnc
cd ${HOME}/android_sdk_vnc
curl -O https://raw.githubusercontent.com/thyrlian/AndroidSDK/master/android-sdk/sshd-banner
curl -O https://raw.githubusercontent.com/thyrlian/AndroidSDK/master/android-sdk/supervisord.conf
curl -O https://raw.githubusercontent.com/thyrlian/AndroidSDK/master/android-sdk/vnc/supervisord_vncserver.conf
curl -O https://raw.githubusercontent.com/thyrlian/AndroidSDK/master/android-sdk/vnc/vncpass.sh
curl -O https://raw.githubusercontent.com/thyrlian/AndroidSDK/master/android-sdk/vnc/watchdog.sh
(4) Create the following Dockfile
- Dockerfile Select all
cat >Dockerfile <<'HEREEOF'
# ====================================================================== #
# Android SDK Docker Image
# ====================================================================== #
# Base image
# ---------------------------------------------------------------------- #
FROM arm64v8/ubuntu:20.04
# install essential tools
RUN apt-get update && \
apt-get dist-upgrade -y && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends git wget wget2 zip unzip && \
apt-get install -y build-essential vim
# install Android SDK
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y android-sdk && \
rm -f /usr/lib/android-sdk/build-tools/27.0.1
# install Android SDK cmdline tools
ARG ANDROID_SDK_VERSION=6858069
ENV ANDROID_SDK_ROOT /usr/lib/android-sdk
RUN wget2 -q https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip && \
unzip commandlinetools*linux*${ANDROID_SDK_VERSION}*.zip && \
mv cmdline-tools tools && \
mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \
mv tools ${ANDROID_SDK_ROOT}/cmdline-tools/ && \
(cd /usr/lib/android-sdk/cmdline-tools; ln -s tools latest) && \
rm -f commandlinetools*linux*.zip
# download and install Gradle
ARG GRADLE_VERSION=6.7.1
ARG GRADLE_DIST=bin
RUN wget2 -q https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-${GRADLE_DIST}.zip && \
rm -fr /usr/share/gradle && \
unzip gradle*.zip -d /usr/share && \
rm gradle*.zip && \
mv /usr/share/gradle-${GRADLE_VERSION} /usr/share/gradle
# download and install Kotlin compiler
ARG KOTLIN_VERSION=1.4.10
RUN wget2 -q https://github.com/JetBrains/kotlin/releases/download/v${KOTLIN_VERSION}/kotlin-compiler-${KOTLIN_VERSION}.zip && \
unzip *kotlin*.zip && \
mv kotlinc /usr/share && \
rm *kotlin*.zip
# install swift5 compiler
RUN wget -qO- https://packagecloud.io/install/repositories/swift-arm/release/script.deb.sh | bash
RUN apt install -y swiftlang
# setup adb server
EXPOSE 5037
# set the environment variables
ARG JDK_VERSION=1.11.0
ENV JAVA_HOME /usr/lib/jvm/java-${JDK_VERSION}-openjdk-arm64
ENV GRADLE_HOME /usr/share/gradle
ENV KOTLIN_HOME /usr/share/kotlinc
ENV ANDROID_SDK_ROOT /usr/lib/android-sdk
ENV ANDROID_HOME /usr/lib/android-sdk
ENV ANDROID_TOOLS /usr/lib/android-sdk/tools
ENV ANDROID_PLATFORMS /usr/lib/android-sdk/platforms
ENV ANDROID_PLATFORM_TOOLS /usr/lib/android-sdk/platform-tools
ENV ANDROID_BUILD_TOOLS /usr/lib/android-sdk/build-tools
ENV ANDROID_CMDLINE_TOOLS /usr/lib/android-sdk/cmdline-tools/tools
ENV PATH ${PATH}:${GRADLE_HOME}/bin:${KOTLIN_HOME}/bin:${ANDROID_BUILD_TOOLS}/debian:${ANDROID_TOOLS}/bin:${ANDROID_PLATFORM_TOOLS}:${ANDROID_CMDLINE_TOOLS}/bin:${ANDROID_SDK_ROOT}/emulator
# install system image and accept licence, installation of emulator will fail for arm64 system
RUN yes Y | ${ANDROID_CMDLINE_TOOLS}/bin/sdkmanager --install "platform-tools" "system-images;android-24;google_apis;arm64-v8a" "platforms;android-24" "build-tools;30.0.3" && \
wget https://github.com/qhuyduong/arm_adb/releases/download/v1.0.39-aarch64/adb && \
chmod +x adb && mv adb /usr/lib/android-sdk/platform-tools/
# install and configure SSH server
EXPOSE 22
ADD sshd-banner /etc/ssh/
# ADD authorized_keys /tmp/
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends openssh-server supervisor locales && \
mkdir -p /var/run/sshd /var/log/supervisord && \
locale-gen en en_US en_US.UTF-8 && \
apt-get remove -y locales && apt-get autoremove -y && \
FILE_SSHD_CONFIG="/etc/ssh/sshd_config" && \
echo "\nBanner /etc/ssh/sshd-banner" >> $FILE_SSHD_CONFIG && \
echo "\nPermitUserEnvironment=yes" >> $FILE_SSHD_CONFIG && \
ssh-keygen -q -N "" -f /root/.ssh/id_rsa && \
FILE_SSH_ENV="/root/.ssh/environment" && \
touch $FILE_SSH_ENV && chmod 600 $FILE_SSH_ENV && \
printenv | grep "JAVA_HOME\|GRADLE_HOME\|KOTLIN_HOME\|ANDROID_SDK_ROOT\|LD_LIBRARY_PATH\|PATH" >> $FILE_SSH_ENV && \
echo "\nauth required pam_env.so envfile=$FILE_SSH_ENV" >> /etc/pam.d/sshd && \
FILE_AUTH_KEYS="/root/.ssh/authorized_keys" && \
touch $FILE_AUTH_KEYS && chmod 600 $FILE_AUTH_KEYS && \
for file in /tmp/*.pub; \
do if [ -f "$file" ]; then echo "\n" >> $FILE_AUTH_KEYS && cat $file >> $FILE_AUTH_KEYS && echo "\n" >> $FILE_AUTH_KEYS; fi; \
done && \
(rm /tmp/*.pub 2> /dev/null || true)
# install and configure VNC server
ENV USER root
ENV DISPLAY :1
EXPOSE 5901
ADD vncpass.sh /tmp/
ADD watchdog.sh /usr/local/bin/
ADD supervisord_vncserver.conf /etc/supervisor/conf.d/
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends xfce4 xfce4-goodies xfonts-base dbus-x11 tightvncserver expect && \
apt-get install -y --no-install-recommends firefox codeblocks && \
chmod +x /tmp/vncpass.sh; sync && \
/tmp/vncpass.sh && \
rm /tmp/vncpass.sh && \
apt-get remove -y expect && apt-get autoremove -y && \
FILE_SSH_ENV="/root/.ssh/environment" && \
echo "DISPLAY=:1" >> $FILE_SSH_ENV
# install and patch Visual Studio Code
RUN apt update && apt install -y libsecret-1-0 libxss1 libgbm1 && apt-get clean
RUN wget -O code_arm64.deb https://aka.ms/linux-arm64-deb && dpkg -i code_arm64.deb && rm code_arm64.deb
RUN sed 's/BIG-REQUESTS/_IG-REQUESTS/' /usr/lib/aarch64-linux-gnu/libxcb.so.1.1.0 | tee /usr/share/code/libxcb.so.1 > /dev/null
ADD supervisord.conf /etc/supervisor/conf.d/
CMD ["/usr/bin/supervisord"]
HEREEOF
(5) build the Dockfile
docker build -f Dockerfile -t arm64v8/android-sdk-vnc .
(6) Copy Mac host id_rsa.pub to authorized_keys and start the container
cp ~/.ssh/authorized_keys . cat ~/.ssh/id_rsa.pub >> authorized_keys
# To start the container as daemon
docker run -d --name android-sdk-vnc -p 5901:5901 -p 2222:22 -p 5037:5037 \ -v $(pwd)/authorized_keys:/root/.ssh/authorized_keys arm64v8/android-sdk-vnc
# To connect the container via ssh
ssh root@<IP address of your Mac M1> -p 2222
# To stop the container
docker container stop android-sdk-vnc
(7) To connect to the vnc of the docker image after starting the container
Use the Mac Finder "Go" -> "Connect To Server" and enter "vnc://0.0.0.0:5901"
For other machines in the network enter "vnc://<IP address of your Mac M1>:5901"
The passwords are in the vncpass.sh when building which are
password="android"
password_view_only="docker"
(8) There is a common problem if you are connecting remotely using Mac Terminal, so the solution is to not forward your locale. Edit /etc/ssh/ssh_config and comment out SendEnv LANG LC_* line.
(9) Testing swift
# attach to the running container
docker exec -it android-sdk-vnc bash
# test mkdir -p ${HOME}/Projects cd ${HOME}/Projects git clone https://github.com/apple/example-package-dealer.git cd example-package-dealer swift run Dealer
If you need port forwarding on macOS, see this article https://www.papercut.com/kb/Main/MacPortForwarding
No comments:
Post a Comment