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 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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