From d67f59f5b55c8460c3c9ba9ccbf3882c85c0ed2c Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Thu, 31 Mar 2022 09:43:06 -0700 Subject: [PATCH 01/15] Fix ARMv6 arch moniker --- make-linux.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/make-linux.mk b/make-linux.mk index c5daa0b36..f3d54b99b 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -306,8 +306,8 @@ ifeq ($(ZT_ARCHITECTURE),3) override CXXFLAGS+=-march=armv5t -mfloat-abi=soft -msoft-float -mno-unaligned-access -marm ZT_USE_ARM32_NEON_ASM_CRYPTO=0 else - override CFLAGS+=-mfloat-abi=hard -march=armv6kz -marm -mfpu=vfp -mno-unaligned-access -mtp=cp15 -mcpu=arm1176jzf-s - override CXXFLAGS+=-mfloat-abi=hard -march=armv6kz -marm -mfpu=vfp -fexceptions -mno-unaligned-access -mtp=cp15 -mcpu=arm1176jzf-s + override CFLAGS+=-mfloat-abi=hard -march=armv6zk -marm -mfpu=vfp -mno-unaligned-access -mtp=cp15 -mcpu=arm1176jzf-s + override CXXFLAGS+=-mfloat-abi=hard -march=armv6zk -marm -mfpu=vfp -fexceptions -mno-unaligned-access -mtp=cp15 -mcpu=arm1176jzf-s ZT_USE_ARM32_NEON_ASM_CRYPTO=0 endif endif From 6f4a69703b72f8556ffae4f3312bf46d856debc0 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Thu, 31 Mar 2022 21:45:38 -0700 Subject: [PATCH 02/15] Fix ZT_SSO_SUPPORTED flag behavior. Allow disabling for embedded targets. --- make-linux.mk | 34 +++++++++++++++++++++------------- node/Constants.hpp | 19 ++++++++++++------- service/OneService.cpp | 20 ++++++++++---------- 3 files changed, 43 insertions(+), 30 deletions(-) diff --git a/make-linux.mk b/make-linux.mk index f3d54b99b..08ca1f990 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -1,12 +1,12 @@ # Automagically pick CLANG or RH/CentOS newer GCC if present # This is only done if we have not overridden these with an environment or CLI variable ifeq ($(origin CC),default) - CC:=$(shell if [ -e /usr/bin/clang ]; then echo clang; else echo gcc; fi) - CC:=$(shell if [ -e /opt/rh/devtoolset-8/root/usr/bin/gcc ]; then echo /opt/rh/devtoolset-8/root/usr/bin/gcc; else echo $(CC); fi) + CC:=$(shell if [ -e /usr/bin/clang ]; then echo clang; else echo gcc; fi) + CC:=$(shell if [ -e /opt/rh/devtoolset-8/root/usr/bin/gcc ]; then echo /opt/rh/devtoolset-8/root/usr/bin/gcc; else echo $(CC); fi) endif ifeq ($(origin CXX),default) - CXX:=$(shell if [ -e /usr/bin/clang++ ]; then echo clang++; else echo g++; fi) - CXX:=$(shell if [ -e /opt/rh/devtoolset-8/root/usr/bin/g++ ]; then echo /opt/rh/devtoolset-8/root/usr/bin/g++; else echo $(CXX); fi) + CXX:=$(shell if [ -e /usr/bin/clang++ ]; then echo clang++; else echo g++; fi) + CXX:=$(shell if [ -e /opt/rh/devtoolset-8/root/usr/bin/g++ ]; then echo /opt/rh/devtoolset-8/root/usr/bin/g++; else echo $(CXX); fi) endif INCLUDES?=-Izeroidc/target @@ -75,16 +75,19 @@ else endif ifeq ($(ZT_QNAP), 1) - override DEFS+=-D__QNAP__ + override DEFS+=-D__QNAP__ + ZT_EMBEDDED=1 endif ifeq ($(ZT_UBIQUITI), 1) - override DEFS+=-D__UBIQUITI__ + override DEFS+=-D__UBIQUITI__ + ZT_EMBEDDED=1 endif ifeq ($(ZT_SYNOLOGY), 1) override CFLAGS+=-fPIC override CXXFLAGS+=-fPIC override DEFS+=-D__SYNOLOGY__ + ZT_EMBEDDED=1 endif ifeq ($(ZT_DISABLE_COMPRESSION), 1) @@ -213,9 +216,9 @@ ifeq ($(CC_MACH),armv7hl) ZT_USE_ARM32_NEON_ASM_CRYPTO=1 endif ifeq ($(CC_MACH),armv7ve) - ZT_ARCHITECTURE=3 - override DEFS+=-DZT_NO_TYPE_PUNNING - ZT_USE_ARM32_NEON_ASM_CRYPTO=1 + ZT_ARCHITECTURE=3 + override DEFS+=-DZT_NO_TYPE_PUNNING + ZT_USE_ARM32_NEON_ASM_CRYPTO=1 endif ifeq ($(CC_MACH),arm64) ZT_ARCHITECTURE=4 @@ -268,10 +271,13 @@ ifeq ($(ZT_IA32),1) endif ifeq ($(ZT_SSO_SUPPORTED), 1) - ifeq ($(ZT_DEBUG),1) - LDLIBS+=zeroidc/target/debug/libzeroidc.a -ldl -lssl -lcrypto - else - LDLIBS+=zeroidc/target/release/libzeroidc.a -ldl -lssl -lcrypto + ifeq ($(ZT_EMBEDDED),) + override DEFS+=-DZT_SSO_SUPPORTED=1 + ifeq ($(ZT_DEBUG),1) + LDLIBS+=zeroidc/target/debug/libzeroidc.a -ldl -lssl -lcrypto + else + LDLIBS+=zeroidc/target/release/libzeroidc.a -ldl -lssl -lcrypto + endif endif endif @@ -384,9 +390,11 @@ debug: FORCE make ZT_DEBUG=1 selftest ifeq ($(ZT_SSO_SUPPORTED), 1) +ifeq ($(ZT_EMBEDDED),) zeroidc: FORCE # export PATH=/root/.cargo/bin:$$PATH; cd zeroidc && cargo build -j1 $(RUSTFLAGS) export PATH=/root/.cargo/bin:$$PATH; cd zeroidc && cargo build $(RUSTFLAGS) +endif else zeroidc: endif diff --git a/node/Constants.hpp b/node/Constants.hpp index d9a3e7964..2df2f8d5f 100644 --- a/node/Constants.hpp +++ b/node/Constants.hpp @@ -50,16 +50,17 @@ #define __UNIX_LIKE__ #endif #include - #if (defined(__amd64) || defined(__amd64__) || defined(__x86_64) || defined(__x86_64__) || defined(__AMD64) || defined(__AMD64__) || defined(_M_X64) || defined(__aarch64__)) -#define OIDC_SUPPORTED 1 -#else -#define OIDC_SUPPORTED 0 +#ifdef ZT_SSO_SUPPORTED +#define ZT_SSO_ENABLED 1 +#endif #endif #endif #ifdef __APPLE__ -#define OIDC_SUPPORTED 1 +#ifdef ZT_SSO_SUPPORTED +#define ZT_SSO_ENABLED 1 +#endif #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) #include @@ -73,7 +74,9 @@ #endif #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) -#define OIDC_SUPPORTED 0 +#ifdef ZT_SSO_SUPPORTED +#define ZT_SSO_ENABLED 0 +#endif #ifndef __UNIX_LIKE__ #define __UNIX_LIKE__ #endif @@ -89,7 +92,9 @@ #endif #if defined(_WIN32) || defined(_WIN64) -#define OIDC_SUPPORTED 1 +#ifdef ZT_SSO_SUPPORTED +#define ZT_SSO_ENABLED 1 +#endif #ifndef __WINDOWS__ #define __WINDOWS__ #endif diff --git a/service/OneService.cpp b/service/OneService.cpp index 8072a764b..b16bccbe3 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -53,7 +53,7 @@ #include "OneService.hpp" #include "SoftwareUpdater.hpp" -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED #include #endif @@ -195,7 +195,7 @@ public: NetworkState() : _webPort(9993) , _tap((EthernetTap *)0) -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED , _idc(nullptr) #endif { @@ -212,7 +212,7 @@ public: this->_managedRoutes.clear(); this->_tap.reset(); -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED if (_idc) { zeroidc::zeroidc_stop(_idc); zeroidc::zeroidc_delete(_idc); @@ -296,7 +296,7 @@ public: if (_config.ssoEnabled && _config.ssoVersion == 1) { // fprintf(stderr, "ssoEnabled for %s\n", nwid); -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED if (_idc == nullptr) { assert(_config.issuerURL != nullptr); @@ -353,7 +353,7 @@ public: } const char* getAuthURL() { -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED if (_idc != nullptr) { return zeroidc::zeroidc_get_auth_url(_idc); } @@ -363,7 +363,7 @@ public: } const char* doTokenExchange(const char *code) { -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED if (_idc == nullptr) { fprintf(stderr, "ainfo or idc null\n"); return ""; @@ -386,7 +386,7 @@ public: } uint64_t getExpiryTime() { -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED if (_idc == nullptr) { fprintf(stderr, "idc is null\n"); return 0; @@ -404,7 +404,7 @@ private: std::vector _managedIps; std::map< InetAddress, SharedPtr > _managedRoutes; OneService::NetworkSettings _settings; -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED zeroidc::ZeroIDC *_idc; #endif }; @@ -1705,7 +1705,7 @@ public: scode = _controller->handleControlPlaneHttpGET(std::vector(ps.begin()+1,ps.end()),urlArgs,headers,body,responseBody,responseContentType); } else scode = 404; } -#if OIDC_SUPPORTED +#if ZT_SSO_ENABLED } else if (ps[0] == "sso") { char resBuf[4096] = {0}; const char *error = zeroidc::zeroidc_get_url_param_value("error", path.c_str()); @@ -2308,11 +2308,11 @@ public: fprintf(stderr,"ERROR: unable to add ip address %s" ZT_EOL_S, ip->toString(ipbuf)); } } +#endif #ifdef __APPLE__ if (!MacDNSHelper::addIps(n.config().nwid, n.config().mac, n.tap()->deviceName().c_str(), newManagedIps)) fprintf(stderr, "ERROR: unable to add v6 addresses to system configuration" ZT_EOL_S); -#endif #endif n.setManagedIps(newManagedIps); } From 04b77773c4cd384c359e3a48f40307b288233194 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Thu, 31 Mar 2022 22:01:50 -0700 Subject: [PATCH 03/15] Remove Synology-specific IP add block --- service/OneService.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index b16bccbe3..f01b479df 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -2298,17 +2298,13 @@ public: fprintf(stderr,"ERROR: unable to remove ip address %s" ZT_EOL_S, ip->toString(ipbuf)); } } -#ifdef __SYNOLOGY__ - if (!n.tap->addIpSyn(newManagedIps)) - fprintf(stderr,"ERROR: unable to add ip addresses to ifcfg" ZT_EOL_S); -#else + for(std::vector::iterator ip(newManagedIps.begin());ip!=newManagedIps.end();++ip) { if (std::find(n.managedIps().begin(),n.managedIps().end(),*ip) == n.managedIps().end()) { if (!n.tap()->addIp(*ip)) fprintf(stderr,"ERROR: unable to add ip address %s" ZT_EOL_S, ip->toString(ipbuf)); } } -#endif #ifdef __APPLE__ if (!MacDNSHelper::addIps(n.config().nwid, n.config().mac, n.tap()->deviceName().c_str(), newManagedIps)) From 26dbebbba7db5b0d7f01909eb364b73c31be9d07 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 08:54:16 -0700 Subject: [PATCH 04/15] Add Synology packaging --- synology/Dockerfile.spksrc | 73 ++++++++++ synology/README.md | 7 + synology/build.sh | 142 ++++++++++++++++++++ synology/config.json | 6 + synology/syn-pkg-entrypoint.sh | 38 ++++++ synology/ztpkg-dsm6/PACKAGE_ICON.png | Bin 0 -> 2274 bytes synology/ztpkg-dsm6/PACKAGE_ICON_256.png | Bin 0 -> 9134 bytes synology/ztpkg-dsm6/scripts/postinst | 3 + synology/ztpkg-dsm6/scripts/postuninst | 3 + synology/ztpkg-dsm6/scripts/postupgrade | 2 + synology/ztpkg-dsm6/scripts/preinst | 2 + synology/ztpkg-dsm6/scripts/preuninst | 3 + synology/ztpkg-dsm6/scripts/preupgrade | 2 + synology/ztpkg-dsm6/service-setup.sh | 32 +++++ synology/ztpkg-dsm6/start-stop-status.sh | 164 +++++++++++++++++++++++ 15 files changed, 477 insertions(+) create mode 100644 synology/Dockerfile.spksrc create mode 100644 synology/README.md create mode 100755 synology/build.sh create mode 100644 synology/config.json create mode 100755 synology/syn-pkg-entrypoint.sh create mode 100644 synology/ztpkg-dsm6/PACKAGE_ICON.png create mode 100644 synology/ztpkg-dsm6/PACKAGE_ICON_256.png create mode 100644 synology/ztpkg-dsm6/scripts/postinst create mode 100644 synology/ztpkg-dsm6/scripts/postuninst create mode 100644 synology/ztpkg-dsm6/scripts/postupgrade create mode 100644 synology/ztpkg-dsm6/scripts/preinst create mode 100644 synology/ztpkg-dsm6/scripts/preuninst create mode 100644 synology/ztpkg-dsm6/scripts/preupgrade create mode 100644 synology/ztpkg-dsm6/service-setup.sh create mode 100755 synology/ztpkg-dsm6/start-stop-status.sh diff --git a/synology/Dockerfile.spksrc b/synology/Dockerfile.spksrc new file mode 100644 index 000000000..0ea42afb3 --- /dev/null +++ b/synology/Dockerfile.spksrc @@ -0,0 +1,73 @@ +FROM debian:buster + +ENV LANG C.UTF-8 + +# Manage i386 arch +RUN dpkg --add-architecture i386 + +# Install required packages (in sync with README.rst instructions) +RUN apt-get update && apt-get install --no-install-recommends -y \ + autoconf-archive \ + autogen \ + automake \ + bc \ + bison \ + build-essential \ + check \ + cmake \ + curl \ + cython \ + debootstrap \ + ed \ + expect \ + fakeroot \ + flex \ + g++-multilib \ + gawk \ + gettext \ + git \ + gperf \ + imagemagick \ + intltool \ + jq \ + libbz2-dev \ + libc6-i386 \ + libcppunit-dev \ + libffi-dev \ + libgc-dev \ + libgmp3-dev \ + libltdl-dev \ + libmount-dev \ + libncurses-dev \ + libpcre3-dev \ + libssl-dev \ + libtool \ + libunistring-dev \ + lzip \ + moreutils \ + pkg-config \ + python3 \ + python3-distutils \ + rename \ + rsync \ + scons \ + subversion \ + sudo \ + swig \ + texinfo \ + unzip \ + xmlto \ + zlib1g-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ + adduser --disabled-password --gecos '' user && \ + adduser user sudo && \ + echo "%users ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/users + +# Volume pointing to spksrc sources +VOLUME /spksrc + +WORKDIR /spksrc + +COPY syn-pkg-entrypoint.sh /syn-pkg-entrypoint.sh +ENTRYPOINT ["/syn-pkg-entrypoint.sh"] diff --git a/synology/README.md b/synology/README.md new file mode 100644 index 000000000..cdef46c6c --- /dev/null +++ b/synology/README.md @@ -0,0 +1,7 @@ +## Synology + +### DSM 6 Packaging procedure + +``` +./build.sh build +``` diff --git a/synology/build.sh b/synology/build.sh new file mode 100755 index 000000000..47e9285a9 --- /dev/null +++ b/synology/build.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +ZTO_VER=$(jq -r '.version' config.json) +PKG_REV=$(jq -r '.rev' config.json) +echo $ZTO_VER-$PKG_REV +ZTO_DESC=$(jq -r '.desc' config.json) +echo $ZTO_DESC +ZTO_EMAIL=$(jq -r '.email' config.json) +echo $ZTO_EMAIL +read -p "Confirm details [y/n] ? " -n 1 -r; echo; if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Exiting."; exit; fi + +build_environment() +{ + git clone https://github.com/SynoCommunity/spksrc.git + sudo docker build --load -t zt-spksrc -f Dockerfile.spksrc . +} + +generate_package_sources() +{ + # Clean up any intermediate files + make -C spksrc clean + rm -rf spksrc/distrib/* + rm -rf spksrc/packages/* + rm -rf spksrc/distrib/*source.tar.gz* + + # Generate the SPK + + # Copy package scripts to spksrc so they're accessible to container + rm -rf spksrc/ztpkg-dsm6 + cp -rf ztpkg-dsm6 spksrc/ztpkg-dsm6 + + TAB="$(printf '\t')" + + cd .. + + # Generate ZTO source tarball used by spksrc + git ls-files -z | xargs -0 tar -czvf source.tar.gz + mkdir -p synology/spksrc/distrib + cp source.tar.gz synology/spksrc/distrib/source.tar.gz + + # + # Set up (cross) directory contents + # + rm -rf spksrc/cross/* + mkdir -p spksrc/cross/zerotier + +cat > synology/spksrc/cross/zerotier/digests <<- EOM +source.tar.gz SHA1 $(sha1sum source.tar.gz | awk '{print $1}') +source.tar.gz SHA256 $(sha256sum source.tar.gz | awk '{print $1}') +source.tar.gz MD5 $(md5sum source.tar.gz | awk '{print $1}') +EOM + + cd - + + + STAGING_DIR='$(STAGING_DIR)' + RUN='$(RUN)' + +cat > spksrc/cross/zerotier/Makefile <<- EOM +PKG_NAME = ZeroTierOne +PKG_VERS = $ZTO_VER +PKG_EXT = tar.gz +PKG_DIST_NAME = source.tar.gz +PKG_DIR = +PKG_DIST_SITE = http://localhost:8000 +DEPENDS = +GNU_CONFIGURE = 1 +CONFIGURE_ARGS = HAVE_CXX=yes + +INSTALL_TARGET = zerotier_custom_install +CONFIGURE_TARGET = zerotier_custom_configure + +ENV += ZT_SYNOLOGY=1 + +include ../../mk/spksrc.cross-cc.mk + +.PHONY: zerotier_custom_install +zerotier_custom_install: +${TAB}$RUN mkdir -p $STAGING_DIR/bin +${TAB}$RUN cp zerotier-one $STAGING_DIR/bin/zerotier-one +EOM + +cat > spksrc/cross/zerotier/PLIST <<- EOM +bin:bin/zerotier-one +EOM + + # + # Set up (spk) directory contents + # + rm -rf spksrc/spk/* + mkdir -p spksrc/spk/zerotier + + STAGING_DIR='$(STAGING_DIR)' + WORK_DIR='$(WORK_DIR)' + PRODUCT_DIR='$(PRODUCT_DIR)' + +cat > spksrc/spk/zerotier/Makefile <<- EOM +SPK_NAME = zerotier +SPK_VERS = $ZTO_VER +SPK_REV = $PKG_REV +SPK_ICON = /spksrc/ztpkg-dsm6/PACKAGE_ICON_256.png +DEPENDS = cross/zerotier +MAINTAINER = ZeroTier, Inc. +DESCRIPTION = $ZTO_DESC +LICENSE = BUSL-1.1 +CHANGELOG = +HOMEPAGE = https://my.zerotier.com +REPORT_URL = https://github.com/zerotier/ZeroTierOne/issues +DISPLAY_NAME = ZeroTier +PRODUCT_DIR = $WORK_DIR + +STARTABLE = yes +REQUIRED_DSM = 6.2.4 + +ENV += ZT_SYNOLOGY=1 + +SERVICE_SETUP = ../../ztpkg-dsm6/service-setup.sh +SSS_SCRIPT = ../../ztpkg-dsm6/start-stop-status.sh + +PRE_STRIP_TARGET = zerotier_install + +include ../../mk/spksrc.spk.mk + +.PHONY: zerotier_install +zerotier_install: +${TAB}install -m 755 -d $STAGING_DIR/bin +${TAB}install -m 755 $PRODUCT_DIR/zerotier-one $STAGING_DIR/bin/zerotier-one +EOM + +cat > spksrc/spk/zerotier/PLIST <<- EOM +bin:bin/zerotier-one +EOM +} + +build() +{ + build_environment + generate_package_sources + sudo docker run -it -v $(pwd)/spksrc:/spksrc zt-spksrc /bin/bash +} + +"$@" diff --git a/synology/config.json b/synology/config.json new file mode 100644 index 000000000..0b99541bc --- /dev/null +++ b/synology/config.json @@ -0,0 +1,6 @@ +{ + "version": "1.8.7", + "rev": "0", + "desc": "Securely connect any device, anywhere.", + "email": "support@zerotier.com" +} diff --git a/synology/syn-pkg-entrypoint.sh b/synology/syn-pkg-entrypoint.sh new file mode 100755 index 000000000..1764e8e6c --- /dev/null +++ b/synology/syn-pkg-entrypoint.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +pushd spk/zerotier + +make arch-x64-6.2.4 +make arch-braswell-6.2.4 +# make arch-88f6281-6.2.4 #(std11) +# make arch-monaco-6.2.4 #(ZT_AES_NO_ACCEL=1) +# make arch-hi3535-6.2.4 #(take out -mfloat-abi=hard) +# make arch-comcerto2k-6.2.4 #(ZT_AES_NO_ACCEL=1, remove all flags from arm hf section) +# make arch-alpine4k-6.2.4 #(problem?) +# make arch-alpine-6.2.4 #(problem?) +make arch-aarch64-6.2.4 +make arch-apollolake-6.2.4 +make arch-armada370-6.2.4 +make arch-armada375-6.2.4 +make arch-armada37xx-6.2.4 +make arch-armada38x-6.2.4 +make arch-armadaxp-6.2.4 +make arch-armv7-6.2.4 +make arch-avoton-6.2.4 +make arch-broadwell-6.2.4 +make arch-broadwellnk-6.2.4 +make arch-bromolow-6.2.4 +make arch-cedarview-6.2.4 +make arch-denverton-6.2.4 +make arch-evansport-6.2.4 +make arch-geminilake-6.2.4 +make arch-grantley-6.2.4 +make arch-kvmx64-6.2.4 +make arch-dockerx64-6.2.3 +make arch-purley-6.2.4 +make arch-qoriq-6.2.4 +make arch-rtd1296-6.2.4 +make arch-v1000-6.2.4 +make arch-x86-6.2.4 + +popd diff --git a/synology/ztpkg-dsm6/PACKAGE_ICON.png b/synology/ztpkg-dsm6/PACKAGE_ICON.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7785f0893ec7e6919b74eca699b236c7721396 GIT binary patch literal 2274 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 literal 0 HcmV?d00001 diff --git a/synology/ztpkg-dsm6/scripts/postinst b/synology/ztpkg-dsm6/scripts/postinst new file mode 100644 index 000000000..c52d3c26b --- /dev/null +++ b/synology/ztpkg-dsm6/scripts/postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 0 diff --git a/synology/ztpkg-dsm6/scripts/postuninst b/synology/ztpkg-dsm6/scripts/postuninst new file mode 100644 index 000000000..c52d3c26b --- /dev/null +++ b/synology/ztpkg-dsm6/scripts/postuninst @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 0 diff --git a/synology/ztpkg-dsm6/scripts/postupgrade b/synology/ztpkg-dsm6/scripts/postupgrade new file mode 100644 index 000000000..039e4d006 --- /dev/null +++ b/synology/ztpkg-dsm6/scripts/postupgrade @@ -0,0 +1,2 @@ +#!/bin/sh +exit 0 diff --git a/synology/ztpkg-dsm6/scripts/preinst b/synology/ztpkg-dsm6/scripts/preinst new file mode 100644 index 000000000..039e4d006 --- /dev/null +++ b/synology/ztpkg-dsm6/scripts/preinst @@ -0,0 +1,2 @@ +#!/bin/sh +exit 0 diff --git a/synology/ztpkg-dsm6/scripts/preuninst b/synology/ztpkg-dsm6/scripts/preuninst new file mode 100644 index 000000000..c52d3c26b --- /dev/null +++ b/synology/ztpkg-dsm6/scripts/preuninst @@ -0,0 +1,3 @@ +#!/bin/sh + +exit 0 diff --git a/synology/ztpkg-dsm6/scripts/preupgrade b/synology/ztpkg-dsm6/scripts/preupgrade new file mode 100644 index 000000000..039e4d006 --- /dev/null +++ b/synology/ztpkg-dsm6/scripts/preupgrade @@ -0,0 +1,2 @@ +#!/bin/sh +exit 0 diff --git a/synology/ztpkg-dsm6/service-setup.sh b/synology/ztpkg-dsm6/service-setup.sh new file mode 100644 index 000000000..10988beb2 --- /dev/null +++ b/synology/ztpkg-dsm6/service-setup.sh @@ -0,0 +1,32 @@ + +service_postinst() +{ + exit 0 +} + +service_postuninst() +{ + # remove all files except for identity files and network config files (for future convenience) + find /var/lib/zerotier-one/* -type f -o -type d ! -name 'identity.*' -delete + exit 0 +} + +service_postupgrade() +{ + exit 0 +} + +service_preinst() +{ + exit 0 +} + +service_preuninst() +{ + exit 0 +} + +service_preupgrade() +{ + exit 0 +} diff --git a/synology/ztpkg-dsm6/start-stop-status.sh b/synology/ztpkg-dsm6/start-stop-status.sh new file mode 100755 index 000000000..8cd7c4ff6 --- /dev/null +++ b/synology/ztpkg-dsm6/start-stop-status.sh @@ -0,0 +1,164 @@ +#!/bin/sh + +if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -eq "6" ]; then + PKGDIR="/var/packages/zerotier/var" +else + PKGDIR="${SYNOPKG_PKGVAR}" +fi + +ZTO_PID_FILE="${PKGDIR}/zerotier-one.pid" +WAT_PID_FILE="${PKGDIR}/zerotier-watchdog.pid" +ZTO_LOG_FILE="${PKGDIR}/zerotier-one.log" + +log() +{ + local timestamp=$(date --iso-8601=second) + echo "${timestamp} $1" >> ${ZTO_LOG_FILE} +} + +configure_tun() +{ + log "Checking for TUN device" + # Create /dev/net/tun if needed + if ( [ ! -c /dev/net/tun ] ); then + if ( [ ! -d /dev/net ] ); then + mkdir -m 755 /dev/net + fi + log "Adding TUN device" + mknod /dev/net/tun c 10 200 + chmod 0755 /dev/net/tun + fi + + # Load TUN kernel module + if ( !( lsmod | grep -q "^tun\s" ) ); then + log "Loading TUN kernel module" + insmod /lib/modules/tun.ko + fi +} + +configure_cli() +{ + # Create ZT CLI symlinks if needed + mkdir -p /usr/local/bin/ + ln -s ${SYNOPKG_PKGDEST}/bin/zerotier-one /usr/local/bin/zerotier-cli + ln -s ${SYNOPKG_PKGDEST}/bin/zerotier-one /usr/local/bin/zerotier-idtool +} + +apply_routes() +{ + echo $BASHPID >> ${WAT_PID_FILE} + log "Started Watchdog ($(cat $WAT_PID_FILE))" + + # Wait for ZT service to come online before attempting queries + sleep 15 + + # Loop until killed, every two minutes check for required routes and add if needed + 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 + log "Added route $ROUTE to dev $IFNAME" + # Routes will be deleted when ZT brings the interface down + fi + done + done + sleep 15 + fi + done +} + +configure_routes() +{ + if [ -r "${WAT_PID_FILE}" ]; then + exit 0 + else + apply_routes & + fi +} + +start_daemon() +{ + ${SYNOPKG_PKGDEST}/bin/zerotier-one -d + echo $(pidof zerotier-one) > ${ZTO_PID_FILE} + log "Started ZeroTier ($(cat $ZTO_PID_FILE))" +} + +stop_daemon() { + if [ -r "${ZTO_PID_FILE}" ]; then + local ZTO_PID=$(cat "${ZTO_PID_FILE}") + log "Stopped ZeroTier ($(cat $ZTO_PID_FILE))" + kill -TERM $ZTO_PID + wait_for_status 1 || kill -KILL $PID >> ${LOG_FILE} 2>&1 + rm -f $ZTO_PID_FILE > /dev/null + fi + if [ -r "${WAT_PID_FILE}" ]; then + local WAT_PID=$(cat "${WAT_PID_FILE}") + log "Stopped Watchdog ($(cat $WAT_PID_FILE))" + kill -TERM $WAT_PID + rm -f $WAT_PID_FILE > /dev/null + fi +} + +daemon_status() +{ + if [ -f ${ZTO_PID_FILE} ] && kill -0 `cat ${ZTO_PID_FILE}` > /dev/null 2>&1; then + return + fi + rm -f ${ZTO_PID_FILE} + return 1 +} + +wait_for_status() +{ + counter=$2 + while [ ${counter} -gt 0 ]; do + daemon_status + [ $? -eq $1 ] && return + let counter=counter-1 + sleep 1 + done + return 1 +} + +case "$1" in + start) + if ( pidof zerotier-one ); then + exit 0 + else + configure_tun + configure_cli + start_daemon + configure_routes + fi + ;; + stop) + if ( pidof zerotier-one ); then + stop_daemon + else + exit 0 + fi + ;; + status) + if ( pidof zerotier-one ); then + exit 0 + else + exit 1 + fi + ;; + *) + exit 1 + ;; +esac + +exit 0 From a3604166551968b78bc5192c7037dbb0c89d9b99 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 09:51:35 -0700 Subject: [PATCH 05/15] Move Synology home-dir to /var/packages/zerotier/var --- synology/build.sh | 1 - synology/ztpkg-dsm6/service-setup.sh | 2 -- synology/ztpkg-dsm6/start-stop-status.sh | 34 +++++++++++------------- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/synology/build.sh b/synology/build.sh index 47e9285a9..172d06341 100755 --- a/synology/build.sh +++ b/synology/build.sh @@ -114,7 +114,6 @@ REQUIRED_DSM = 6.2.4 ENV += ZT_SYNOLOGY=1 -SERVICE_SETUP = ../../ztpkg-dsm6/service-setup.sh SSS_SCRIPT = ../../ztpkg-dsm6/start-stop-status.sh PRE_STRIP_TARGET = zerotier_install diff --git a/synology/ztpkg-dsm6/service-setup.sh b/synology/ztpkg-dsm6/service-setup.sh index 10988beb2..136072cb7 100644 --- a/synology/ztpkg-dsm6/service-setup.sh +++ b/synology/ztpkg-dsm6/service-setup.sh @@ -6,8 +6,6 @@ service_postinst() service_postuninst() { - # remove all files except for identity files and network config files (for future convenience) - find /var/lib/zerotier-one/* -type f -o -type d ! -name 'identity.*' -delete exit 0 } diff --git a/synology/ztpkg-dsm6/start-stop-status.sh b/synology/ztpkg-dsm6/start-stop-status.sh index 8cd7c4ff6..701058924 100755 --- a/synology/ztpkg-dsm6/start-stop-status.sh +++ b/synology/ztpkg-dsm6/start-stop-status.sh @@ -1,19 +1,15 @@ #!/bin/sh -if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -eq "6" ]; then - PKGDIR="/var/packages/zerotier/var" -else - PKGDIR="${SYNOPKG_PKGVAR}" -fi +PKGVAR=/var/packages/zerotier/var -ZTO_PID_FILE="${PKGDIR}/zerotier-one.pid" -WAT_PID_FILE="${PKGDIR}/zerotier-watchdog.pid" -ZTO_LOG_FILE="${PKGDIR}/zerotier-one.log" +ZTO_PID_FILE="$PKGVAR/zerotier-one.pid" +WAT_PID_FILE="$PKGVAR/zerotier-watchdog.pid" +ZTO_LOG_FILE="$PKGVAR/zerotier-one.log" log() { local timestamp=$(date --iso-8601=second) - echo "${timestamp} $1" >> ${ZTO_LOG_FILE} + echo "$timestamp $1" >> $ZTO_LOG_FILE } configure_tun() @@ -40,13 +36,13 @@ configure_cli() { # Create ZT CLI symlinks if needed mkdir -p /usr/local/bin/ - ln -s ${SYNOPKG_PKGDEST}/bin/zerotier-one /usr/local/bin/zerotier-cli - ln -s ${SYNOPKG_PKGDEST}/bin/zerotier-one /usr/local/bin/zerotier-idtool + ln -s $SYNOPKG_PKGDEST/bin/zerotier-one /usr/local/bin/zerotier-cli + ln -s $SYNOPKG_PKGDEST/bin/zerotier-one /usr/local/bin/zerotier-idtool } apply_routes() { - echo $BASHPID >> ${WAT_PID_FILE} + echo $BASHPID >> $WAT_PID_FILE log "Started Watchdog ($(cat $WAT_PID_FILE))" # Wait for ZT service to come online before attempting queries @@ -89,20 +85,20 @@ configure_routes() start_daemon() { - ${SYNOPKG_PKGDEST}/bin/zerotier-one -d + ${SYNOPKG_PKGDEST}/bin/zerotier-one $PKGVAR -d echo $(pidof zerotier-one) > ${ZTO_PID_FILE} log "Started ZeroTier ($(cat $ZTO_PID_FILE))" } stop_daemon() { - if [ -r "${ZTO_PID_FILE}" ]; then + if [ -r "$ZTO_PID_FILE" ]; then local ZTO_PID=$(cat "${ZTO_PID_FILE}") log "Stopped ZeroTier ($(cat $ZTO_PID_FILE))" kill -TERM $ZTO_PID - wait_for_status 1 || kill -KILL $PID >> ${LOG_FILE} 2>&1 + wait_for_status 1 || kill -KILL $PID >> $LOG_FILE 2>&1 rm -f $ZTO_PID_FILE > /dev/null fi - if [ -r "${WAT_PID_FILE}" ]; then + if [ -r "$WAT_PID_FILE" ]; then local WAT_PID=$(cat "${WAT_PID_FILE}") log "Stopped Watchdog ($(cat $WAT_PID_FILE))" kill -TERM $WAT_PID @@ -112,17 +108,17 @@ stop_daemon() { daemon_status() { - if [ -f ${ZTO_PID_FILE} ] && kill -0 `cat ${ZTO_PID_FILE}` > /dev/null 2>&1; then + if [ -f $ZTO_PID_FILE ] && kill -0 `cat $ZTO_PID_FILE` > /dev/null 2>&1; then return fi - rm -f ${ZTO_PID_FILE} + rm -f $ZTO_PID_FILE return 1 } wait_for_status() { counter=$2 - while [ ${counter} -gt 0 ]; do + while [ $counter -gt 0 ]; do daemon_status [ $? -eq $1 ] && return let counter=counter-1 From b4f7a9a4f4e5e8d4d9c4274791c4bc9e817841d5 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 09:52:25 -0700 Subject: [PATCH 06/15] Temporarily disable certain arch builds on Synology --- synology/syn-pkg-entrypoint.sh | 50 +++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/synology/syn-pkg-entrypoint.sh b/synology/syn-pkg-entrypoint.sh index 1764e8e6c..beb171215 100755 --- a/synology/syn-pkg-entrypoint.sh +++ b/synology/syn-pkg-entrypoint.sh @@ -3,36 +3,36 @@ pushd spk/zerotier make arch-x64-6.2.4 -make arch-braswell-6.2.4 +# make arch-braswell-6.2.4 # make arch-88f6281-6.2.4 #(std11) # make arch-monaco-6.2.4 #(ZT_AES_NO_ACCEL=1) # make arch-hi3535-6.2.4 #(take out -mfloat-abi=hard) # make arch-comcerto2k-6.2.4 #(ZT_AES_NO_ACCEL=1, remove all flags from arm hf section) # make arch-alpine4k-6.2.4 #(problem?) # make arch-alpine-6.2.4 #(problem?) -make arch-aarch64-6.2.4 -make arch-apollolake-6.2.4 -make arch-armada370-6.2.4 -make arch-armada375-6.2.4 -make arch-armada37xx-6.2.4 -make arch-armada38x-6.2.4 -make arch-armadaxp-6.2.4 -make arch-armv7-6.2.4 -make arch-avoton-6.2.4 -make arch-broadwell-6.2.4 -make arch-broadwellnk-6.2.4 -make arch-bromolow-6.2.4 -make arch-cedarview-6.2.4 -make arch-denverton-6.2.4 -make arch-evansport-6.2.4 -make arch-geminilake-6.2.4 -make arch-grantley-6.2.4 -make arch-kvmx64-6.2.4 -make arch-dockerx64-6.2.3 -make arch-purley-6.2.4 -make arch-qoriq-6.2.4 -make arch-rtd1296-6.2.4 -make arch-v1000-6.2.4 -make arch-x86-6.2.4 +# make arch-aarch64-6.2.4 +# make arch-apollolake-6.2.4 +# make arch-armada370-6.2.4 +# make arch-armada375-6.2.4 +# make arch-armada37xx-6.2.4 +# make arch-armada38x-6.2.4 +# make arch-armadaxp-6.2.4 +# make arch-armv7-6.2.4 +# make arch-avoton-6.2.4 +# make arch-broadwell-6.2.4 +# make arch-broadwellnk-6.2.4 +# make arch-bromolow-6.2.4 +# make arch-cedarview-6.2.4 +# make arch-denverton-6.2.4 +# make arch-evansport-6.2.4 +# make arch-geminilake-6.2.4 +# make arch-grantley-6.2.4 +# make arch-kvmx64-6.2.4 +# make arch-dockerx64-6.2.3 +# make arch-purley-6.2.4 +# make arch-qoriq-6.2.4 +# make arch-rtd1296-6.2.4 +# make arch-v1000-6.2.4 +# make arch-x86-6.2.4 popd From e87bf8704664ae79ef214b5d86ff083e4dc102ec Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 14:20:51 -0700 Subject: [PATCH 07/15] Remove unnecessary packages from Synology Dockerfile --- synology/Dockerfile.spksrc | 61 ++------------------------------------ 1 file changed, 3 insertions(+), 58 deletions(-) diff --git a/synology/Dockerfile.spksrc b/synology/Dockerfile.spksrc index 0ea42afb3..257a53ed0 100644 --- a/synology/Dockerfile.spksrc +++ b/synology/Dockerfile.spksrc @@ -5,64 +5,9 @@ ENV LANG C.UTF-8 # Manage i386 arch RUN dpkg --add-architecture i386 -# Install required packages (in sync with README.rst instructions) -RUN apt-get update && apt-get install --no-install-recommends -y \ - autoconf-archive \ - autogen \ - automake \ - bc \ - bison \ - build-essential \ - check \ - cmake \ - curl \ - cython \ - debootstrap \ - ed \ - expect \ - fakeroot \ - flex \ - g++-multilib \ - gawk \ - gettext \ - git \ - gperf \ - imagemagick \ - intltool \ - jq \ - libbz2-dev \ - libc6-i386 \ - libcppunit-dev \ - libffi-dev \ - libgc-dev \ - libgmp3-dev \ - libltdl-dev \ - libmount-dev \ - libncurses-dev \ - libpcre3-dev \ - libssl-dev \ - libtool \ - libunistring-dev \ - lzip \ - moreutils \ - pkg-config \ - python3 \ - python3-distutils \ - rename \ - rsync \ - scons \ - subversion \ - sudo \ - swig \ - texinfo \ - unzip \ - xmlto \ - zlib1g-dev && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ - adduser --disabled-password --gecos '' user && \ - adduser user sudo && \ - echo "%users ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/users +RUN apt-get update && apt-get install --no-install-recommends -y make imagemagick curl jq wget procps intltool + +RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* # Volume pointing to spksrc sources VOLUME /spksrc From 3c59de7c00e2571e504296082e43f6c181a3d3a6 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 15:27:35 -0700 Subject: [PATCH 08/15] Change directory structure for DSM packages --- synology/build.sh | 8 ++++---- synology/{ztpkg-dsm6 => dsm6-pkg}/PACKAGE_ICON.png | Bin .../{ztpkg-dsm6 => dsm6-pkg}/PACKAGE_ICON_256.png | Bin synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/postinst | 0 .../{ztpkg-dsm6 => dsm6-pkg}/scripts/postuninst | 0 .../{ztpkg-dsm6 => dsm6-pkg}/scripts/postupgrade | 0 synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/preinst | 0 synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/preuninst | 0 .../{ztpkg-dsm6 => dsm6-pkg}/scripts/preupgrade | 0 synology/{ztpkg-dsm6 => dsm6-pkg}/service-setup.sh | 0 .../{ztpkg-dsm6 => dsm6-pkg}/start-stop-status.sh | 2 +- 11 files changed, 5 insertions(+), 5 deletions(-) rename synology/{ztpkg-dsm6 => dsm6-pkg}/PACKAGE_ICON.png (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/PACKAGE_ICON_256.png (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/postinst (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/postuninst (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/postupgrade (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/preinst (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/preuninst (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/scripts/preupgrade (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/service-setup.sh (100%) rename synology/{ztpkg-dsm6 => dsm6-pkg}/start-stop-status.sh (97%) diff --git a/synology/build.sh b/synology/build.sh index 172d06341..b5b1c0246 100755 --- a/synology/build.sh +++ b/synology/build.sh @@ -26,8 +26,8 @@ generate_package_sources() # Generate the SPK # Copy package scripts to spksrc so they're accessible to container - rm -rf spksrc/ztpkg-dsm6 - cp -rf ztpkg-dsm6 spksrc/ztpkg-dsm6 + rm -rf spksrc/dsm6-pkg + cp -rf dsm6-pkg spksrc/dsm6-pkg TAB="$(printf '\t')" @@ -98,7 +98,7 @@ cat > spksrc/spk/zerotier/Makefile <<- EOM SPK_NAME = zerotier SPK_VERS = $ZTO_VER SPK_REV = $PKG_REV -SPK_ICON = /spksrc/ztpkg-dsm6/PACKAGE_ICON_256.png +SPK_ICON = /spksrc/dsm6-pkg/PACKAGE_ICON_256.png DEPENDS = cross/zerotier MAINTAINER = ZeroTier, Inc. DESCRIPTION = $ZTO_DESC @@ -114,7 +114,7 @@ REQUIRED_DSM = 6.2.4 ENV += ZT_SYNOLOGY=1 -SSS_SCRIPT = ../../ztpkg-dsm6/start-stop-status.sh +SSS_SCRIPT = ../../dsm6-pkg/start-stop-status.sh PRE_STRIP_TARGET = zerotier_install diff --git a/synology/ztpkg-dsm6/PACKAGE_ICON.png b/synology/dsm6-pkg/PACKAGE_ICON.png similarity index 100% rename from synology/ztpkg-dsm6/PACKAGE_ICON.png rename to synology/dsm6-pkg/PACKAGE_ICON.png diff --git a/synology/ztpkg-dsm6/PACKAGE_ICON_256.png b/synology/dsm6-pkg/PACKAGE_ICON_256.png similarity index 100% rename from synology/ztpkg-dsm6/PACKAGE_ICON_256.png rename to synology/dsm6-pkg/PACKAGE_ICON_256.png diff --git a/synology/ztpkg-dsm6/scripts/postinst b/synology/dsm6-pkg/scripts/postinst similarity index 100% rename from synology/ztpkg-dsm6/scripts/postinst rename to synology/dsm6-pkg/scripts/postinst diff --git a/synology/ztpkg-dsm6/scripts/postuninst b/synology/dsm6-pkg/scripts/postuninst similarity index 100% rename from synology/ztpkg-dsm6/scripts/postuninst rename to synology/dsm6-pkg/scripts/postuninst diff --git a/synology/ztpkg-dsm6/scripts/postupgrade b/synology/dsm6-pkg/scripts/postupgrade similarity index 100% rename from synology/ztpkg-dsm6/scripts/postupgrade rename to synology/dsm6-pkg/scripts/postupgrade diff --git a/synology/ztpkg-dsm6/scripts/preinst b/synology/dsm6-pkg/scripts/preinst similarity index 100% rename from synology/ztpkg-dsm6/scripts/preinst rename to synology/dsm6-pkg/scripts/preinst diff --git a/synology/ztpkg-dsm6/scripts/preuninst b/synology/dsm6-pkg/scripts/preuninst similarity index 100% rename from synology/ztpkg-dsm6/scripts/preuninst rename to synology/dsm6-pkg/scripts/preuninst diff --git a/synology/ztpkg-dsm6/scripts/preupgrade b/synology/dsm6-pkg/scripts/preupgrade similarity index 100% rename from synology/ztpkg-dsm6/scripts/preupgrade rename to synology/dsm6-pkg/scripts/preupgrade diff --git a/synology/ztpkg-dsm6/service-setup.sh b/synology/dsm6-pkg/service-setup.sh similarity index 100% rename from synology/ztpkg-dsm6/service-setup.sh rename to synology/dsm6-pkg/service-setup.sh diff --git a/synology/ztpkg-dsm6/start-stop-status.sh b/synology/dsm6-pkg/start-stop-status.sh similarity index 97% rename from synology/ztpkg-dsm6/start-stop-status.sh rename to synology/dsm6-pkg/start-stop-status.sh index 701058924..9eea4a4bf 100755 --- a/synology/ztpkg-dsm6/start-stop-status.sh +++ b/synology/dsm6-pkg/start-stop-status.sh @@ -48,7 +48,7 @@ apply_routes() # Wait for ZT service to come online before attempting queries sleep 15 - # Loop until killed, every two minutes check for required routes and add if needed + # Loop until killed, check for required routes and add if needed while true do NETWORK_COUNT=$(zerotier-cli -j listnetworks | jq -r '. | length') From 8ee8870c27e5410b1842730ccc4589e2f220aaea Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 16:38:20 -0700 Subject: [PATCH 09/15] Add Docker image and build script for DSM 7 --- synology/Dockerfile.spksrc | 2 ++ synology/README.md | 5 +++-- synology/dsm7-docker/Dockerfile | 32 ++++++++++++++++++++++++++++++ synology/dsm7-docker/README.md | 3 +++ synology/dsm7-docker/build.sh | 20 +++++++++++++++++++ synology/dsm7-docker/entrypoint.sh | 29 +++++++++++++++++++++++++++ 6 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 synology/dsm7-docker/Dockerfile create mode 100644 synology/dsm7-docker/README.md create mode 100755 synology/dsm7-docker/build.sh create mode 100755 synology/dsm7-docker/entrypoint.sh 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 From 29566bfe7d726d825e823fada9908b3165b15d3f Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Sun, 10 Apr 2022 22:50:53 -0700 Subject: [PATCH 10/15] Add Synology target to Linux makefile --- make-linux.mk | 3 ++ synology/build.sh | 22 +++++++-------- synology/syn-pkg-entrypoint.sh | 50 +++++++++++++++++----------------- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/make-linux.mk b/make-linux.mk index 08ca1f990..ab11cba10 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -486,4 +486,7 @@ snap-upload-stable: FORCE snapcraft upload --release=stable $${SNAPFILE};\ done +synology: FORCE + ./synology/build.sh build + FORCE: diff --git a/synology/build.sh b/synology/build.sh index b5b1c0246..c59757fd2 100755 --- a/synology/build.sh +++ b/synology/build.sh @@ -1,11 +1,11 @@ #!/bin/bash -ZTO_VER=$(jq -r '.version' config.json) -PKG_REV=$(jq -r '.rev' config.json) +ZTO_VER=$(jq -r '.version' synology/config.json) +PKG_REV=$(jq -r '.rev' synology/config.json) echo $ZTO_VER-$PKG_REV -ZTO_DESC=$(jq -r '.desc' config.json) +ZTO_DESC=$(jq -r '.desc' synology/config.json) echo $ZTO_DESC -ZTO_EMAIL=$(jq -r '.email' config.json) +ZTO_EMAIL=$(jq -r '.email' synology/config.json) echo $ZTO_EMAIL read -p "Confirm details [y/n] ? " -n 1 -r; echo; if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Exiting."; exit; fi @@ -18,12 +18,14 @@ build_environment() generate_package_sources() { # Clean up any intermediate files - make -C spksrc clean + sudo make -C spksrc clean rm -rf spksrc/distrib/* rm -rf spksrc/packages/* rm -rf spksrc/distrib/*source.tar.gz* + rm -rf spksrc/cross/* + mkdir -p spksrc/cross/zerotier - # Generate the SPK + # Generate the SPK contents # Copy package scripts to spksrc so they're accessible to container rm -rf spksrc/dsm6-pkg @@ -38,12 +40,6 @@ generate_package_sources() mkdir -p synology/spksrc/distrib cp source.tar.gz synology/spksrc/distrib/source.tar.gz - # - # Set up (cross) directory contents - # - rm -rf spksrc/cross/* - mkdir -p spksrc/cross/zerotier - cat > synology/spksrc/cross/zerotier/digests <<- EOM source.tar.gz SHA1 $(sha1sum source.tar.gz | awk '{print $1}') source.tar.gz SHA256 $(sha256sum source.tar.gz | awk '{print $1}') @@ -133,9 +129,11 @@ EOM build() { + pushd synology build_environment generate_package_sources sudo docker run -it -v $(pwd)/spksrc:/spksrc zt-spksrc /bin/bash + popd } "$@" diff --git a/synology/syn-pkg-entrypoint.sh b/synology/syn-pkg-entrypoint.sh index beb171215..1764e8e6c 100755 --- a/synology/syn-pkg-entrypoint.sh +++ b/synology/syn-pkg-entrypoint.sh @@ -3,36 +3,36 @@ pushd spk/zerotier make arch-x64-6.2.4 -# make arch-braswell-6.2.4 +make arch-braswell-6.2.4 # make arch-88f6281-6.2.4 #(std11) # make arch-monaco-6.2.4 #(ZT_AES_NO_ACCEL=1) # make arch-hi3535-6.2.4 #(take out -mfloat-abi=hard) # make arch-comcerto2k-6.2.4 #(ZT_AES_NO_ACCEL=1, remove all flags from arm hf section) # make arch-alpine4k-6.2.4 #(problem?) # make arch-alpine-6.2.4 #(problem?) -# make arch-aarch64-6.2.4 -# make arch-apollolake-6.2.4 -# make arch-armada370-6.2.4 -# make arch-armada375-6.2.4 -# make arch-armada37xx-6.2.4 -# make arch-armada38x-6.2.4 -# make arch-armadaxp-6.2.4 -# make arch-armv7-6.2.4 -# make arch-avoton-6.2.4 -# make arch-broadwell-6.2.4 -# make arch-broadwellnk-6.2.4 -# make arch-bromolow-6.2.4 -# make arch-cedarview-6.2.4 -# make arch-denverton-6.2.4 -# make arch-evansport-6.2.4 -# make arch-geminilake-6.2.4 -# make arch-grantley-6.2.4 -# make arch-kvmx64-6.2.4 -# make arch-dockerx64-6.2.3 -# make arch-purley-6.2.4 -# make arch-qoriq-6.2.4 -# make arch-rtd1296-6.2.4 -# make arch-v1000-6.2.4 -# make arch-x86-6.2.4 +make arch-aarch64-6.2.4 +make arch-apollolake-6.2.4 +make arch-armada370-6.2.4 +make arch-armada375-6.2.4 +make arch-armada37xx-6.2.4 +make arch-armada38x-6.2.4 +make arch-armadaxp-6.2.4 +make arch-armv7-6.2.4 +make arch-avoton-6.2.4 +make arch-broadwell-6.2.4 +make arch-broadwellnk-6.2.4 +make arch-bromolow-6.2.4 +make arch-cedarview-6.2.4 +make arch-denverton-6.2.4 +make arch-evansport-6.2.4 +make arch-geminilake-6.2.4 +make arch-grantley-6.2.4 +make arch-kvmx64-6.2.4 +make arch-dockerx64-6.2.3 +make arch-purley-6.2.4 +make arch-qoriq-6.2.4 +make arch-rtd1296-6.2.4 +make arch-v1000-6.2.4 +make arch-x86-6.2.4 popd From 4dbdfb69725491a123ae8ce3164925afaeebd661 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Mon, 11 Apr 2022 15:22:13 -0700 Subject: [PATCH 11/15] Fix missing symlink and high CPU usage of route watchdog on Synology --- synology/config.json | 2 +- synology/dsm6-pkg/start-stop-status.sh | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/synology/config.json b/synology/config.json index 0b99541bc..33cf05e15 100644 --- a/synology/config.json +++ b/synology/config.json @@ -1,6 +1,6 @@ { "version": "1.8.7", - "rev": "0", + "rev": "1", "desc": "Securely connect any device, anywhere.", "email": "support@zerotier.com" } diff --git a/synology/dsm6-pkg/start-stop-status.sh b/synology/dsm6-pkg/start-stop-status.sh index 9eea4a4bf..c03f7e2ff 100755 --- a/synology/dsm6-pkg/start-stop-status.sh +++ b/synology/dsm6-pkg/start-stop-status.sh @@ -38,6 +38,8 @@ configure_cli() mkdir -p /usr/local/bin/ ln -s $SYNOPKG_PKGDEST/bin/zerotier-one /usr/local/bin/zerotier-cli ln -s $SYNOPKG_PKGDEST/bin/zerotier-one /usr/local/bin/zerotier-idtool + rm -rf /var/lib/zerotier-one + ln -s /var/packages/zerotier/var /var/lib/zerotier-one } apply_routes() @@ -69,8 +71,8 @@ apply_routes() fi done done - sleep 15 fi + sleep 15 done } From 40681328ec3225bc99483bd31ff92971ed39bed1 Mon Sep 17 00:00:00 2001 From: fuowang <1106694860@qq.com> Date: Tue, 12 Apr 2022 11:33:40 +0800 Subject: [PATCH 12/15] Add loongarch64 support (#1614) * add loongarch64 support --- include/ZeroTierOne.h | 3 ++- make-linux.mk | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/ZeroTierOne.h b/include/ZeroTierOne.h index e16d23f87..2d103d847 100644 --- a/include/ZeroTierOne.h +++ b/include/ZeroTierOne.h @@ -1079,7 +1079,8 @@ enum ZT_Architecture ZT_ARCHITECTURE_DOTNET_CLR = 13, ZT_ARCHITECTURE_JAVA_JVM = 14, ZT_ARCHITECTURE_WEB = 15, - ZT_ARCHITECTURE_S390X = 16 + ZT_ARCHITECTURE_S390X = 16, + ZT_ARCHITECTURE_LOONGARCH64 = 17 }; /** diff --git a/make-linux.mk b/make-linux.mk index ab11cba10..49ada04bd 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -252,6 +252,10 @@ endif ifeq ($(CC_MACH),riscv64) ZT_ARCHITECTURE=0 endif +ifeq ($(CC_MACH),loongarch64) + ZT_ARCHITECTURE=17 + override DEFS+=-DZT_NO_TYPE_PUNNING +endif # Fail if system architecture could not be determined ifeq ($(ZT_ARCHITECTURE),999) From de04240ca68b5c604c2a0b1d1e4f46a80c34fc73 Mon Sep 17 00:00:00 2001 From: Sean McAvoy Date: Tue, 12 Apr 2022 00:24:57 -0400 Subject: [PATCH 13/15] update alpine linux release to current supported (#1599) --- dockerbuild/Dockerfile.alpine | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerbuild/Dockerfile.alpine b/dockerbuild/Dockerfile.alpine index 1610ce52e..04c298d15 100644 --- a/dockerbuild/Dockerfile.alpine +++ b/dockerbuild/Dockerfile.alpine @@ -1,4 +1,4 @@ -FROM alpine:3.11.3 +FROM alpine:3.15 ARG go_pkg_url From 0e658828fb2bf2f1e1c81dfea3618839e80a7ae0 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 12 Apr 2022 17:45:54 -0700 Subject: [PATCH 14/15] Add Synology Docker target to Linux makefile --- make-linux.mk | 7 +++++-- synology/dsm7-docker/Dockerfile | 6 ++---- synology/dsm7-docker/build.sh | 5 +++-- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/make-linux.mk b/make-linux.mk index ab11cba10..cf30fbb0e 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -486,7 +486,10 @@ snap-upload-stable: FORCE snapcraft upload --release=stable $${SNAPFILE};\ done -synology: FORCE - ./synology/build.sh build +synology-pkg: FORCE + cd synology ; ./build.sh build + +synology-docker: FORCE + cd synology/dsm7-docker/; ./build.sh build FORCE: diff --git a/synology/dsm7-docker/Dockerfile b/synology/dsm7-docker/Dockerfile index f98a22a09..56fd0b448 100644 --- a/synology/dsm7-docker/Dockerfile +++ b/synology/dsm7-docker/Dockerfile @@ -2,19 +2,17 @@ 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} \ + && git -C src reset --quiet --hard ${ZTO_COMMIT} \ && cd /src \ && make -f make-linux.mk FROM alpine:latest -LABEL version="1.8.7" +LABEL version=${ZTO_VER} LABEL description="ZeroTier One docker image for Synology NAS" RUN apk add --update --no-cache bash jq libc6-compat libstdc++ diff --git a/synology/dsm7-docker/build.sh b/synology/dsm7-docker/build.sh index d55ef44f9..2b1fadd00 100755 --- a/synology/dsm7-docker/build.sh +++ b/synology/dsm7-docker/build.sh @@ -1,10 +1,11 @@ #!/bin/bash -ZTO_VER=$(jq -r '.version' ../config.json) +ZTO_VER=$(git describe --abbrev=0 --tags) +ZTO_COMMIT=$(git rev-parse HEAD) build() { - sudo docker build --load --rm -t zerotier-synology . + sudo docker build --load --rm -t zerotier-synology . --build-arg ZTO_COMMIT=${ZTO_COMMIT} --build-arg ZTO_VER=${ZTO_VER} 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 From 23ef742e08215d467369c81c66f68e58fbe92d6b Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 13 Apr 2022 13:53:42 -0700 Subject: [PATCH 15/15] Fix for #1626 Port used for PortMapping was not properly randomized causing multiple clients on the same lan to request the same UPnP port, and not all routers handle this gracefully. Also fixes issue where the portmapper wasn't started at all if a secondary port wasn't specified, or if the tertiary port was manually specified. --- service/OneService.cpp | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/service/OneService.cpp b/service/OneService.cpp index f01b479df..e585a464e 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -1002,27 +1002,16 @@ public: // If we're running uPnP/NAT-PMP, bind a *third* port for that. We can't // use the other two ports for that because some NATs do really funky // stuff with ports that are explicitly mapped that breaks things. - if (_ports[1]) { - if (_tertiaryPort) { - _ports[2] = _tertiaryPort; - } else { - _ports[2] = 20000 + (_ports[0] % 40000); - for(int i=0;;++i) { - if (i > 1000) { - _ports[2] = 0; - break; - } else if (++_ports[2] >= 65536) { - _ports[2] = 20000; - } - if (_trialBind(_ports[2])) - break; - } - if (_ports[2]) { - char uniqueName[64]; - OSUtils::ztsnprintf(uniqueName,sizeof(uniqueName),"ZeroTier/%.10llx@%u",_node->address(),_ports[2]); - _portMapper = new PortMapper(_ports[2],uniqueName); - } - } + if (_tertiaryPort) { + _ports[2] = _tertiaryPort; + } else { + _ports[2] = _getRandomPort(); + } + + if (_ports[2]) { + char uniqueName[64]; + OSUtils::ztsnprintf(uniqueName,sizeof(uniqueName),"ZeroTier/%.10llx@%u",_node->address(),_ports[2]); + _portMapper = new PortMapper(_ports[2],uniqueName); } } #endif