From 8e99b792b2b6604ed00e6363c54b289a5f46ac7d Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Wed, 18 Dec 2024 21:53:12 +0100 Subject: [PATCH] Add cross-platform docker images for armv7 and arm64 --- docker/build-all.sh | 2 +- docker/debian-12-bookworm-arm64/Dockerfile | 25 +++++++++++++++++++ docker/debian-12-bookworm-arm64/README.md | 17 +++++++++++++ .../debian-12-bookworm-arm64/docker_build.sh | 19 ++++++++++++++ docker/debian-12-bookworm-arm64/docker_conf | 3 +++ docker/debian-12-bookworm-arm64/docker_rm.sh | 5 ++++ docker/debian-12-bookworm-arm64/docker_run.sh | 10 ++++++++ docker/debian-12-bookworm-armhf/Dockerfile | 25 +++++++++++++++++++ docker/debian-12-bookworm-armhf/README.md | 17 +++++++++++++ .../debian-12-bookworm-armhf/docker_build.sh | 19 ++++++++++++++ docker/debian-12-bookworm-armhf/docker_conf | 3 +++ docker/debian-12-bookworm-armhf/docker_rm.sh | 5 ++++ docker/debian-12-bookworm-armhf/docker_run.sh | 10 ++++++++ 13 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 docker/debian-12-bookworm-arm64/Dockerfile create mode 100644 docker/debian-12-bookworm-arm64/README.md create mode 100755 docker/debian-12-bookworm-arm64/docker_build.sh create mode 100644 docker/debian-12-bookworm-arm64/docker_conf create mode 100644 docker/debian-12-bookworm-arm64/docker_rm.sh create mode 100755 docker/debian-12-bookworm-arm64/docker_run.sh create mode 100644 docker/debian-12-bookworm-armhf/Dockerfile create mode 100644 docker/debian-12-bookworm-armhf/README.md create mode 100755 docker/debian-12-bookworm-armhf/docker_build.sh create mode 100644 docker/debian-12-bookworm-armhf/docker_conf create mode 100644 docker/debian-12-bookworm-armhf/docker_rm.sh create mode 100755 docker/debian-12-bookworm-armhf/docker_run.sh diff --git a/docker/build-all.sh b/docker/build-all.sh index ed56a0972..b3c7a9905 100755 --- a/docker/build-all.sh +++ b/docker/build-all.sh @@ -1,5 +1,5 @@ #!/bin/bash -for os in archlinux debian-12-bookworm fedora-36 fedora-37 homebrew kali opensuse-leap opensuse-tumbleweed parrot-core-latest ubuntu-20.04 ubuntu-22.04; do +for os in archlinux debian-12-bookworm debian-12-bookworm-arm64 debian-12-bookworm-armhf debian-13-trixie fedora-36 fedora-37 homebrew kali opensuse-leap opensuse-tumbleweed parrot-core-latest ubuntu-20.04 ubuntu-22.04; do ( cd $os && ./docker_build.sh ) done diff --git a/docker/debian-12-bookworm-arm64/Dockerfile b/docker/debian-12-bookworm-arm64/Dockerfile new file mode 100644 index 000000000..6f1ab5226 --- /dev/null +++ b/docker/debian-12-bookworm-arm64/Dockerfile @@ -0,0 +1,25 @@ +FROM arm64v8/debian:bookworm-slim + +ENV LANG=C +ENV DEBIAN_FRONTEND=noninteractive +# qtbase5-dev skipped +RUN apt-get update && \ + apt-get dist-upgrade -y && \ + apt-get install -y --no-install-recommends git ca-certificates build-essential cmake pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev libssl-dev libgd-dev sudo && \ + apt-get clean + +# Create rrg user +RUN useradd -ms /bin/bash rrg +RUN passwd -d rrg +ARG UART_GID +# dialout group may already exist on another numeric ID than on host +RUN if [ -n "${UART_GID}" ]; then \ + groupadd -g ${UART_GID} mydialout || true; \ + usermod -aG ${UART_GID} rrg; \ + fi +RUN printf 'rrg ALL=(ALL) ALL\n' | tee -a /etc/sudoers + +#USER rrg +WORKDIR "/home/rrg" + +CMD ["/bin/bash"] diff --git a/docker/debian-12-bookworm-arm64/README.md b/docker/debian-12-bookworm-arm64/README.md new file mode 100644 index 000000000..2ffa42d1a --- /dev/null +++ b/docker/debian-12-bookworm-arm64/README.md @@ -0,0 +1,17 @@ +# Notes to run tests + +``` +sudo apt update +sudo apt install -y python3-minimal +sudo apt install -y python3-pip +sudo apt install python3.11-venv +python3 -m venv /tmp/venv +source /tmp/venv/bin/activate +python3 -m pip install --use-pep517 pyaes +python3 -m pip install ansicolors sslcrypto +git config --global --add safe.directory /home/rrg/proxmark3 +cd proxmark3 +make clean +make -j +tools/pm3_tests.sh --long +``` diff --git a/docker/debian-12-bookworm-arm64/docker_build.sh b/docker/debian-12-bookworm-arm64/docker_build.sh new file mode 100755 index 000000000..de56acca7 --- /dev/null +++ b/docker/debian-12-bookworm-arm64/docker_build.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +. docker_conf +# Make sure to connect a Proxmark3 when building if you want to be able to access it from within the Docker instance +UART_PORT="$(../../pm3 --list|grep /dev|head -n1|cut -d' ' -f2)" +if [ -n "$UART_PORT" ]; then + UART_GID="$(stat -c '%g' $UART_PORT)" + BUILDARG="--build-arg UART_GID=$UART_GID" +else + BUILDARG="" +fi + +# cf https://github.com/multiarch/qemu-user-static +#sudo apt install qemu-user-static +#docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +#docker buildx create --use +#docker buildx inspect --bootstrap +#docker buildx build $DOCKER_PLATFORM $BUILDARG -t "$DOCKER_IMAGE" --load . +docker build $DOCKER_PLATFORM $BUILDARG -t "$DOCKER_IMAGE" . diff --git a/docker/debian-12-bookworm-arm64/docker_conf b/docker/debian-12-bookworm-arm64/docker_conf new file mode 100644 index 000000000..67627ddaf --- /dev/null +++ b/docker/debian-12-bookworm-arm64/docker_conf @@ -0,0 +1,3 @@ +# sourceme +DOCKER_IMAGE=pm3-debian-bookworm-arm64:1.0 +DOCKER_PLATFORM="--platform linux/arm64" diff --git a/docker/debian-12-bookworm-arm64/docker_rm.sh b/docker/debian-12-bookworm-arm64/docker_rm.sh new file mode 100644 index 000000000..3705c37bb --- /dev/null +++ b/docker/debian-12-bookworm-arm64/docker_rm.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +. docker_conf +docker rm $(docker ps -aq --filter ancestor="$DOCKER_IMAGE") +docker image rm "$DOCKER_IMAGE" diff --git a/docker/debian-12-bookworm-arm64/docker_run.sh b/docker/debian-12-bookworm-arm64/docker_run.sh new file mode 100755 index 000000000..a62889fa0 --- /dev/null +++ b/docker/debian-12-bookworm-arm64/docker_run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +. docker_conf +UART_PORT="$(../../pm3 --list|grep dev|head -n1|cut -d' ' -f2)" +if [ -n "$UART_PORT" ]; then + DEV="--device=/dev/tty0 --device=$UART_PORT" +else + DEV="" +fi +docker run $DEV $DOCKER_PLATFORM --volume="$(pwd)/../..:/home/rrg/proxmark3" -w /home/rrg/proxmark3 -it "$DOCKER_IMAGE" diff --git a/docker/debian-12-bookworm-armhf/Dockerfile b/docker/debian-12-bookworm-armhf/Dockerfile new file mode 100644 index 000000000..c17e66926 --- /dev/null +++ b/docker/debian-12-bookworm-armhf/Dockerfile @@ -0,0 +1,25 @@ +FROM arm32v7/debian:bookworm-slim + +ENV LANG=C +ENV DEBIAN_FRONTEND=noninteractive +# qtbase5-dev skipped +RUN apt-get update && \ + apt-get dist-upgrade -y && \ + apt-get install -y --no-install-recommends git ca-certificates build-essential cmake pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev libssl-dev libgd-dev sudo && \ + apt-get clean + +# Create rrg user +RUN useradd -ms /bin/bash rrg +RUN passwd -d rrg +ARG UART_GID +# dialout group may already exist on another numeric ID than on host +RUN if [ -n "${UART_GID}" ]; then \ + groupadd -g ${UART_GID} mydialout || true; \ + usermod -aG ${UART_GID} rrg; \ + fi +RUN printf 'rrg ALL=(ALL) ALL\n' | tee -a /etc/sudoers + +#USER rrg +WORKDIR "/home/rrg" + +CMD ["/bin/bash"] diff --git a/docker/debian-12-bookworm-armhf/README.md b/docker/debian-12-bookworm-armhf/README.md new file mode 100644 index 000000000..2ffa42d1a --- /dev/null +++ b/docker/debian-12-bookworm-armhf/README.md @@ -0,0 +1,17 @@ +# Notes to run tests + +``` +sudo apt update +sudo apt install -y python3-minimal +sudo apt install -y python3-pip +sudo apt install python3.11-venv +python3 -m venv /tmp/venv +source /tmp/venv/bin/activate +python3 -m pip install --use-pep517 pyaes +python3 -m pip install ansicolors sslcrypto +git config --global --add safe.directory /home/rrg/proxmark3 +cd proxmark3 +make clean +make -j +tools/pm3_tests.sh --long +``` diff --git a/docker/debian-12-bookworm-armhf/docker_build.sh b/docker/debian-12-bookworm-armhf/docker_build.sh new file mode 100755 index 000000000..de56acca7 --- /dev/null +++ b/docker/debian-12-bookworm-armhf/docker_build.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +. docker_conf +# Make sure to connect a Proxmark3 when building if you want to be able to access it from within the Docker instance +UART_PORT="$(../../pm3 --list|grep /dev|head -n1|cut -d' ' -f2)" +if [ -n "$UART_PORT" ]; then + UART_GID="$(stat -c '%g' $UART_PORT)" + BUILDARG="--build-arg UART_GID=$UART_GID" +else + BUILDARG="" +fi + +# cf https://github.com/multiarch/qemu-user-static +#sudo apt install qemu-user-static +#docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +#docker buildx create --use +#docker buildx inspect --bootstrap +#docker buildx build $DOCKER_PLATFORM $BUILDARG -t "$DOCKER_IMAGE" --load . +docker build $DOCKER_PLATFORM $BUILDARG -t "$DOCKER_IMAGE" . diff --git a/docker/debian-12-bookworm-armhf/docker_conf b/docker/debian-12-bookworm-armhf/docker_conf new file mode 100644 index 000000000..55bb22582 --- /dev/null +++ b/docker/debian-12-bookworm-armhf/docker_conf @@ -0,0 +1,3 @@ +# sourceme +DOCKER_IMAGE=pm3-debian-bookworm-armhf:1.0 +DOCKER_PLATFORM="--platform linux/arm/v7" diff --git a/docker/debian-12-bookworm-armhf/docker_rm.sh b/docker/debian-12-bookworm-armhf/docker_rm.sh new file mode 100644 index 000000000..3705c37bb --- /dev/null +++ b/docker/debian-12-bookworm-armhf/docker_rm.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +. docker_conf +docker rm $(docker ps -aq --filter ancestor="$DOCKER_IMAGE") +docker image rm "$DOCKER_IMAGE" diff --git a/docker/debian-12-bookworm-armhf/docker_run.sh b/docker/debian-12-bookworm-armhf/docker_run.sh new file mode 100755 index 000000000..a62889fa0 --- /dev/null +++ b/docker/debian-12-bookworm-armhf/docker_run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +. docker_conf +UART_PORT="$(../../pm3 --list|grep dev|head -n1|cut -d' ' -f2)" +if [ -n "$UART_PORT" ]; then + DEV="--device=/dev/tty0 --device=$UART_PORT" +else + DEV="" +fi +docker run $DEV $DOCKER_PLATFORM --volume="$(pwd)/../..:/home/rrg/proxmark3" -w /home/rrg/proxmark3 -it "$DOCKER_IMAGE"