Przeglądaj źródła

Add Docker image and build script for DSM 7

Joseph Henry 3 lat temu
rodzic
commit
8ee8870c27

+ 2 - 0
synology/Dockerfile.spksrc

@@ -1,3 +1,5 @@
+# vim: ft=dockerfile
+
 FROM debian:buster
 
 ENV LANG C.UTF-8

+ 3 - 2
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

+ 32 - 0
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"]

+ 3 - 0
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)

+ 20 - 0
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
+}
+
+"$@"

+ 29 - 0
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