diff --git a/synology/Dockerfile.spksrc b/synology/Dockerfile.spksrc index 257a53ed0..70f0532e6 100644 --- a/synology/Dockerfile.spksrc +++ b/synology/Dockerfile.spksrc @@ -1,3 +1,5 @@ +# vim: ft=dockerfile + FROM debian:buster ENV LANG C.UTF-8 diff --git a/synology/README.md b/synology/README.md index cdef46c6c..242e9e0db 100644 --- a/synology/README.md +++ b/synology/README.md @@ -1,6 +1,7 @@ -## Synology +## Package for Synology's DSM 6 + +Documentation and downloads: [docs.zerotier.com/devices/synology](https://docs.zerotier.com/devices/synology) -### DSM 6 Packaging procedure ``` ./build.sh build diff --git a/synology/dsm7-docker/Dockerfile b/synology/dsm7-docker/Dockerfile new file mode 100644 index 000000000..f98a22a09 --- /dev/null +++ b/synology/dsm7-docker/Dockerfile @@ -0,0 +1,32 @@ +# vim: ft=dockerfile + +FROM alpine:latest as builder + +ARG COMMIT=04b77773c4cd384c359e3a48f40307b288233194 + +RUN apk add --no-cache rust cargo +RUN apk add openssl-dev + +RUN apk add --update alpine-sdk linux-headers \ + && git clone --quiet https://github.com/zerotier/ZeroTierOne.git /src \ + && git -C src reset --quiet --hard ${COMMIT} \ + && cd /src \ + && make -f make-linux.mk + +FROM alpine:latest +LABEL version="1.8.7" +LABEL description="ZeroTier One docker image for Synology NAS" + +RUN apk add --update --no-cache bash jq libc6-compat libstdc++ + +EXPOSE 9993/udp + +COPY --from=builder /src/zerotier-one /usr/sbin/ +RUN mkdir -p /var/lib/zerotier-one \ + && ln -s /usr/sbin/zerotier-one /usr/sbin/zerotier-idtool \ + && ln -s /usr/sbin/zerotier-one /usr/sbin/zerotier-cli + +COPY entrypoint.sh /entrypoint.sh +RUN chmod 755 /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/synology/dsm7-docker/README.md b/synology/dsm7-docker/README.md new file mode 100644 index 000000000..14bacde76 --- /dev/null +++ b/synology/dsm7-docker/README.md @@ -0,0 +1,3 @@ +## Docker image for Synology's DSM7 + +Documentation: [docs.zerotier.com/devices/synology](https://docs.zerotier.com/devices/synology) diff --git a/synology/dsm7-docker/build.sh b/synology/dsm7-docker/build.sh new file mode 100755 index 000000000..d55ef44f9 --- /dev/null +++ b/synology/dsm7-docker/build.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +ZTO_VER=$(jq -r '.version' ../config.json) + +build() +{ + sudo docker build --load --rm -t zerotier-synology . + LATEST_DOCKER_IMAGE_HASH=$(sudo docker images -q zerotier-synology) + sudo docker tag ${LATEST_DOCKER_IMAGE_HASH} zerotier/zerotier-synology:${ZTO_VER} + sudo docker tag ${LATEST_DOCKER_IMAGE_HASH} zerotier/zerotier-synology:latest +} + +push() +{ + sudo docker login --username=${DOCKERHUB_USERNAME} + sudo docker push zerotier/zerotier-synology:${ZTO_VER} + sudo docker push zerotier/zerotier-synology:latest +} + +"$@" diff --git a/synology/dsm7-docker/entrypoint.sh b/synology/dsm7-docker/entrypoint.sh new file mode 100755 index 000000000..6b7c1187f --- /dev/null +++ b/synology/dsm7-docker/entrypoint.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +zerotier-one -d + +# Wait for ZT service to come online before attempting queries +sleep 15 + +while true +do + NETWORK_COUNT=$(zerotier-cli -j listnetworks | jq -r '. | length') + if [ "$NETWORK_COUNT" -gt 0 ]; then + for ((j=0; j<=$((NETWORK_COUNT-1)); j++)) + do + ROUTE_COUNT=$(zerotier-cli -j listnetworks | jq -r '.['$j'].routes | length') + for ((k=0; k<=$((ROUTE_COUNT-1)); k++)) + do + ROUTE=$(zerotier-cli -j listnetworks | jq -r '.['$j'].routes['$k'].target') + EXIST=$(ip route show $ROUTE | wc -l) + if [ $EXIST -eq 0 ]; + then + IFNAME=$(zerotier-cli -j listnetworks | jq -r '.['$j'] | .portDeviceName') + ip route add $ROUTE dev $IFNAME + # Routes will be deleted when ZT brings the interface down + fi + done + done + sleep 15 + fi +done