From 8d21f72cf0779dc2a74c30d654ddb134c9a113fa Mon Sep 17 00:00:00 2001 From: Marcin K Szczodrak Date: Tue, 12 Jun 2018 09:18:39 -0700 Subject: [PATCH] [docker] dockerfiles for openthread sim and wpantund (#2760) --- etc/docker/Makefile | 32 ++++++++++++ etc/docker/README.md | 27 ++++++++++ etc/docker/arm32v7_ubuntu_wpantund/Dockerfile | 50 +++++++++++++++++++ etc/docker/ot_sim/Dockerfile | 19 +++++++ etc/docker/ot_sim/README.md | 36 +++++++++++++ etc/docker/ot_sim/add_node | 2 + etc/docker/ot_sim/start_sim | 2 + etc/docker/ot_sim/stop_sim | 2 + etc/docker/x86_ubuntu_wpantund/Dockerfile | 50 +++++++++++++++++++ 9 files changed, 220 insertions(+) create mode 100644 etc/docker/Makefile create mode 100644 etc/docker/README.md create mode 100644 etc/docker/arm32v7_ubuntu_wpantund/Dockerfile create mode 100644 etc/docker/ot_sim/Dockerfile create mode 100644 etc/docker/ot_sim/README.md create mode 100755 etc/docker/ot_sim/add_node create mode 100755 etc/docker/ot_sim/start_sim create mode 100755 etc/docker/ot_sim/stop_sim create mode 100644 etc/docker/x86_ubuntu_wpantund/Dockerfile diff --git a/etc/docker/Makefile b/etc/docker/Makefile new file mode 100644 index 000000000..1d105a96a --- /dev/null +++ b/etc/docker/Makefile @@ -0,0 +1,32 @@ + +VERSION=0.1 + +all: arm32v7_linux x86_linux sim + +arm32v7_linux: arm32v7_ubuntu_wpantund + docker build -t openthread/wpantund_arm32v7_linux arm32v7_ubuntu_wpantund && \ + docker push openthread/wpantund_arm32v7_linux && \ + docker tag openthread/wpantund_arm32v7_linux openthread/wpantund_arm32v7_linux:$(VERSION) && \ + docker push openthread/wpantund_arm32v7_linux:$(VERSION) + +x86_linux: x86_ubuntu_wpantund + docker build -t openthread/wpantund_amd64_linux x86_ubuntu_wpantund && \ + docker push openthread/wpantund_amd64_linux && \ + docker tag openthread/wpantund_amd64_linux openthread/wpantund_amd64_linux:$(VERSION) && \ + docker push openthread/wpantund_amd64_linux:$(VERSION) + +sim: ot_sim + docker build -t openthread/sim ot_sim && \ + docker push openthread/sim && \ + docker tag openthread/sim openthread/sim:$(VERSION) && \ + docker push openthread/sim:$(VERSION) + +publish_manifest: + docker manifest create openthread/wpantund openthread/wpantund_arm32v7_linux openthread/wpantund_amd64_linux + docker manifest annotate openthread/wpantund openthread/wpantund_arm32v7_linux --os linux --arch arm --variant 7 + docker manifest annotate openthread/wpantund openthread/wpantund_amd64_linux --os linux --arch amd64 + docker manifest push --purge openthread/wpantund + docker manifest create openthread/wpantund:$(VERSION) openthread/wpantund_arm32v7_linux:$(VERSION) openthread/wpantund_amd64_linux:$(VERSION) + docker manifest annotate openthread/wpantund:$(VERSION) openthread/wpantund_arm32v7_linux:$(VERSION) --os linux --arch arm --variant 7 + docker manifest annotate openthread/wpantund:$(VERSION) openthread/wpantund_amd64_linux:$(VERSION) --os linux --arch amd64 + docker manifest push --purge openthread/wpantund:$(VERSION) diff --git a/etc/docker/README.md b/etc/docker/README.md new file mode 100644 index 000000000..18b51bba4 --- /dev/null +++ b/etc/docker/README.md @@ -0,0 +1,27 @@ + +## Running wpantund from a Docker container: + +For a device that has a Thread radio attached to port /dev/ttyUSB0, start wpantund as follows: + +``` +docker run --rm --detach -e "OPENTHREAD_DEVICE_PORT=/dev/ttyUSB0" --cap-add=NET_ADMIN --device=/dev/ttyUSB0 --name=wpantund openthread/wpantund +``` + +Once wpantund is running, one can control the Thread interface with wpanctl as follows: + +``` +docker exec -it wpantund wpanctl +``` + + +## Content + +arm32v7_ubuntu_wpantund +- wpantund running on ARMv7 (e.g. Raspberry Pi) + +x86_ubuntu_wpantund +- wpantund running on x86 + +ot_sim +- OpenThread Posix simulator + diff --git a/etc/docker/arm32v7_ubuntu_wpantund/Dockerfile b/etc/docker/arm32v7_ubuntu_wpantund/Dockerfile new file mode 100644 index 000000000..75dbaf730 --- /dev/null +++ b/etc/docker/arm32v7_ubuntu_wpantund/Dockerfile @@ -0,0 +1,50 @@ +# Ubuntu image with tools required to build OpenThread +FROM arm32v7/ubuntu:18.04 as wpantund-dev + +LABEL maintainer="Marcin K Szczodrak" + +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update +RUN apt-get install -y apt-utils +RUN apt-get install -y build-essential git make autoconf autoconf-archive \ + automake dbus libtool gcc g++ libreadline-dev libdbus-1-dev libboost-dev + +# wpantund +RUN mkdir -p ~/src && \ + cd ~/src && \ + git clone --recursive https://github.com/openthread/wpantund.git && \ + cd wpantund && \ + git checkout full/master && \ + ./configure --sysconfdir=/etc --enable-shared=no && \ + make && \ + make install + +#FROM debian:stretch-slim +FROM arm32v7/ubuntu:18.04 + +LABEL maintainer="Marcin K Szczodrak" + +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update + +RUN apt-get install -y libdbus-1-3 libreadline-dev net-tools + +RUN mkdir -p /dev/net && \ + mknod /dev/net/tun c 10 200 && \ + chmod 600 /dev/net/tun + +COPY --from=wpantund-dev /usr/local/share/man/man1/wpanctl.1 /usr/local/share/man/man1/wpanctl.1 +COPY --from=wpantund-dev /usr/local/share/man/man1/wpantund.1 /usr/local/share/man/man1/wpantund.1 +COPY --from=wpantund-dev /usr/local/share/wpantund /usr/local/share/wpantund +COPY --from=wpantund-dev /usr/local/include/wpantund /usr/local/include/wpantund +COPY --from=wpantund-dev /usr/local/bin/wpanctl /usr/local/bin/wpanctl +COPY --from=wpantund-dev /usr/local/sbin/wpantund /usr/local/sbin/wpantund +COPY --from=wpantund-dev /etc/dbus-1/system.d/wpantund.conf /etc/dbus-1/system.d/wpantund.conf +COPY --from=wpantund-dev /etc/wpantund.conf /etc/wpantund.conf + +ENTRYPOINT mkdir -p /dev/net && mknod /dev/net/tun c 10 200 && chmod 600 /dev/net/tun && \ + service dbus start && \ + start-stop-daemon --start --background --quiet --exe /usr/local/sbin/wpantund -- -s $OPENTHREAD_DEVICE_PORT && \ + tail -F /dev/null + diff --git a/etc/docker/ot_sim/Dockerfile b/etc/docker/ot_sim/Dockerfile new file mode 100644 index 000000000..4387603c3 --- /dev/null +++ b/etc/docker/ot_sim/Dockerfile @@ -0,0 +1,19 @@ +FROM alpine:3.6 as openthread-dev +LABEL maintainer="Marcin K Szczodrak" + +RUN apk add -U autoconf automake ca-certificates flex git g++ libtool linux-headers make + +# openthread +RUN git clone --recursive https://github.com/openthread/openthread.git && \ + cd /openthread && \ + ./bootstrap && \ + make -f examples/Makefile-posix + + +FROM alpine:3.6 +LABEL maintainer="Marcin K Szczodrak" + +RUN apk add --no-cache libstdc++ +COPY --from=openthread-dev /openthread/output/x86_64-unknown-linux-gnu/bin/ot-cli-ftd /bin/ot-cli-ftd +COPY --from=openthread-dev /openthread/output/x86_64-unknown-linux-gnu/bin/ot-cli-mtd /bin/ot-cli-mtd +RUN ln -s /bin/ot-cli-ftd /bin/node diff --git a/etc/docker/ot_sim/README.md b/etc/docker/ot_sim/README.md new file mode 100644 index 000000000..6fb47916f --- /dev/null +++ b/etc/docker/ot_sim/README.md @@ -0,0 +1,36 @@ + +## Starting simulator + +To start the OpenThread simulator, run: +``` +docker run --rm -d --name otsim openthread/sim tail -F /dev/null +``` +or +``` +./start_sim +``` +This runs in background a docker container with environment setup to simulate OpenThread nodes. + +## Adding a Thread node + +To start simulating an OpenThread node #1, run: +``` +docker exec -it otsim node 1 +``` +or +``` +./add_node 1 +``` +This runs a program called node, which is an OpenThread FTD binary, inside the docker container's simulator environment. + +## Stopping simulator + +To stop the OpenThread simualtor, run: +``` +docker stop otsim +``` +or +``` +./stop_sim +``` +This stop the docker daemon process. diff --git a/etc/docker/ot_sim/add_node b/etc/docker/ot_sim/add_node new file mode 100755 index 000000000..262527927 --- /dev/null +++ b/etc/docker/ot_sim/add_node @@ -0,0 +1,2 @@ +#!/bin/bash +docker exec -it otsim node $1 diff --git a/etc/docker/ot_sim/start_sim b/etc/docker/ot_sim/start_sim new file mode 100755 index 000000000..ad774917d --- /dev/null +++ b/etc/docker/ot_sim/start_sim @@ -0,0 +1,2 @@ +#!/bin/bash +docker run --rm -d --name otsim openthread/sim tail -F /dev/null diff --git a/etc/docker/ot_sim/stop_sim b/etc/docker/ot_sim/stop_sim new file mode 100755 index 000000000..0446362cc --- /dev/null +++ b/etc/docker/ot_sim/stop_sim @@ -0,0 +1,2 @@ +#!/bin/bash +docker stop otsim diff --git a/etc/docker/x86_ubuntu_wpantund/Dockerfile b/etc/docker/x86_ubuntu_wpantund/Dockerfile new file mode 100644 index 000000000..895673338 --- /dev/null +++ b/etc/docker/x86_ubuntu_wpantund/Dockerfile @@ -0,0 +1,50 @@ +# Ubuntu image with tools required to build OpenThread +FROM ubuntu:18.04 as wpantund-dev + +LABEL maintainer="Marcin K Szczodrak" + +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update +RUN apt-get install -y apt-utils +RUN apt-get install -y build-essential git make autoconf autoconf-archive \ + automake dbus libtool gcc g++ libreadline-dev libdbus-1-dev libboost-dev + +# wpantund +RUN mkdir -p ~/src && \ + cd ~/src && \ + git clone --recursive https://github.com/openthread/wpantund.git && \ + cd wpantund && \ + git checkout full/master && \ + ./configure --sysconfdir=/etc --enable-shared=no && \ + make && \ + make install + +#FROM debian:stretch-slim +FROM ubuntu:18.04 + +LABEL maintainer="Marcin K Szczodrak" + +ENV DEBIAN_FRONTEND noninteractive + +RUN apt-get update + +RUN apt-get install -y libdbus-1-3 libreadline7 net-tools + +RUN mkdir -p /dev/net && \ + mknod /dev/net/tun c 10 200 && \ + chmod 600 /dev/net/tun + +COPY --from=wpantund-dev /usr/local/share/man/man1/wpanctl.1 /usr/local/share/man/man1/wpanctl.1 +COPY --from=wpantund-dev /usr/local/share/man/man1/wpantund.1 /usr/local/share/man/man1/wpantund.1 +COPY --from=wpantund-dev /usr/local/share/wpantund /usr/local/share/wpantund +COPY --from=wpantund-dev /usr/local/include/wpantund /usr/local/include/wpantund +COPY --from=wpantund-dev /usr/local/bin/wpanctl /usr/local/bin/wpanctl +COPY --from=wpantund-dev /usr/local/sbin/wpantund /usr/local/sbin/wpantund +COPY --from=wpantund-dev /etc/dbus-1/system.d/wpantund.conf /etc/dbus-1/system.d/wpantund.conf +COPY --from=wpantund-dev /etc/wpantund.conf /etc/wpantund.conf + +ENTRYPOINT mkdir -p /dev/net && mknod /dev/net/tun c 10 200 && chmod 600 /dev/net/tun && \ + service dbus start && \ + start-stop-daemon --start --background --quiet --exe /usr/local/sbin/wpantund -- -s $OPENTHREAD_DEVICE_PORT && \ + tail -F /dev/null +