From 26dbebbba7db5b0d7f01909eb364b73c31be9d07 Mon Sep 17 00:00:00 2001 From: Joseph Henry Date: Tue, 5 Apr 2022 08:54:16 -0700 Subject: [PATCH] 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 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D5Icr%@y13aCb6#|O#(=u~X z85k^jdqZP0WI{#kb{D5BtDFnYF=;JXVb80|J2}i`;g((Xcki0zP4hInrSu}@+q-i! zPM)(c-u-u>ziU8^;j7sqNA_=TP|*0wf7@=0{!}j2TUQh`?6&-94tUYM?Db4*53aYDsJ!Zu+^T>(!M~PZDDwztaj{5 zA0{(@?((hC_ni+_$KSkq_uu@r+udYE6$<5(Ha}az-OQm;fQ|Kj)%$D4;S0j^=76$(Rp;agEcfbt7E!A|Cysd+<1N)Znze|z&Gplsuxce zCCx6qyI^C%`^10qa}Q>;e$G9-{QS)Mb}jD{V}5I!sy=@hc*J|vr1@@tI38u^)^3w| zaC_S9iGucQ6YkubwSJl4dzY9sx7kgd7qv?ePuf9bakc6pI>__J-*cz&9{8}vgXC- zmT9`|f0j<4(kyzUxubreo8!0VkN$1E<0Zf>nI-kqvtDn~V!mko$FaG~UYz&l5jVdg z?=ANFS7XqE|1O)miyGEPvaJs6>Gi**yYtoSpMgiuiPy}pX*FBjSig^VGbgLY41@N) zT)q*^f+-pfZ1=@(WUOrFV>1$2D?9hF6YjoQ?Ulzk7O&gO<&9y=%E;_kx7~##%lx!PnR5@NH{TKCStiHFocxWAPhf zUh0?!ZhIs-cUSnipYcCm|1tWe{U>Y5gZd}oAGa4Bk2p;EbQkHtP* zoO!hKsO;y$k59t+-Rh>DocVnHmsp#~d_6w5HPcytW&I43^y_t5^QHMq`xc$O>a`kw zkL^8Md#d(q?YY{6u}l-KPtSe4@1b6Sd~y7-Z&{zEqV89VRZ476e>p9CjhCWwj;Nei z(IK;kfr&<+)Ok3PodRz(PFwr>x7d9BdA72A$@0&Z|Bl(G7slB6dn3~q-+!T@AukK2 zXv&7=`&#UC6z)-RPU)Fq7V>>Z_~(U6Q~jR?WeNma2Me#zht@2*;o)s! zUuGNa<`<6EbD#5@=fFPuk8ghKJ?h)SFiobR@wjrH#Q9U~_gF1Hx7^xv`=IPZj~ea= zSH8dbw*Qw=Mcv;kFYg>FUh`bHVXL|I-2M08mt3=R_`jMVy|x+d3UR_NcLR@EgPAxYOe6?^vy9y6yO{Wrv^J4y{ zDvl)2<`eAI96fSEN=h0_HELFPaB(?tcR9J9afvMXe5dqSaryhZh2`h rH}|NYEN z>*s&Y=RYg^er}y%THg#7qd8T~jb-u0h5zH1?<@J5DqH>TgwiR?+k5S&tP_|P6t1En zz2GTdJM)nVEDFr+k2&XCF7e5bvM96Ik;-_8FS(ubgX`pzyv)aDHbgp}i)kru-4N4r z=dpfl)uqF>m$#ayDW{L!*2{dxHuE~&fr4WE`v^37YLK6`n?9IoR6NjGcOTwh?rXd=tA z@zJtfSpF^d71hZDBanRC@N^kGWajo+Y&&2)Oho>c$i{O9lN01q`=O*Q{B$=t`EKAN$VP zUwpVulrQq{xV*K!N8>WY+P#nDj`_ z-z&&*(G*D>0n!je=f!Sv%zKzw|D6GSi|O&yZNgkoT!74a?pg z{Wo=5)<$pH{j29b`^xlOnX%=5ptt|ao6^S?-F@@j*+hSZg&n5?$BWba`PF_tVDY(c zdehljX21H@)R5BPmjC+pH<78w4cgq7t+}^2bair!XuY_kf=6%qyQug5Kd!1+FxkuO z^2_rw==y9B@FM2j1Ou4|f~*{K76xb}zpKmrv3>7@2sU>WiMUP53imjl?|gUby`q@cy*3^( n=Nx{v)33Limf7`*ezWh)7ZI4aFWr@afq}u()z4*}Q$iB}+txtc literal 0 HcmV?d00001 diff --git a/synology/ztpkg-dsm6/PACKAGE_ICON_256.png b/synology/ztpkg-dsm6/PACKAGE_ICON_256.png new file mode 100644 index 0000000000000000000000000000000000000000..bf89cb127c11636002f7e4ba981f28450cd95ef0 GIT binary patch literal 9134 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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