Move Snap and Synology packaging to new pkg dir

This commit is contained in:
Joseph Henry 2022-04-25 17:47:15 -07:00
parent dfb291090d
commit a74532fa0b
No known key found for this signature in database
GPG key ID: C45B33FF5EBC9344
20 changed files with 0 additions and 0 deletions

6
pkg/config.json Normal file
View file

@ -0,0 +1,6 @@
{
"version": "1.8.7",
"rev": "1",
"desc": "Securely connect any device, anywhere.",
"email": "support@zerotier.com"
}

88
pkg/snap/snapcraft.yaml Normal file
View file

@ -0,0 +1,88 @@
name: zerotier
summary: Securely connect any device, anywhere.
description: |
ZeroTier is a software-based managed Ethernet switch for planet Earth. Use it to connect your
desktop clients, servers, phones, NAS, or even individual applications (using our SDK).
This snap contains ZeroTier One, a service that provides ZeroTier network connectivity and
makes joining virtual networks as easy as joining IRC or Slack channels. Apps for Android
and iOS are available for free in the Google Play and Apple app stores.
ZeroTier eliminates the LAN/WAN distinction and makes VPNs, tunnels, proxies, and other kludges
arising from the inflexible nature of physical networks obsolete. Everything is encrypted
end-to-end and traffic takes the most direct (peer to peer) path available.
Install (be sure to use sudo)
sudo snap install zerotier
Join your network
sudo zerotier join <nwid>
sudo zerotier status
Approve your new node in ZeroTier Central (https://my.zerotier.com)! Welcome online!
adopt-info: one
confinement: strict
grade: stable
base: core18
apps:
one:
# Add -U to prevent attempting to drop privileges since snaps have their
# own containment mechanism. Otherwise, if a user named "zerotier-one"
# exists on the system, the setgid or related calls will fail.
command: usr/sbin/zerotier-one -U
daemon: simple
plugs:
- network
- network-bind
- network-control
# For backwards compatibility with old package (e.g. zerotier.cli)
# Should be removed someday
cli:
command: usr/sbin/zerotier-cli
plugs:
- network
zerotier:
command: usr/sbin/zerotier-cli
plugs:
- network
idtool:
command: usr/sbin/zerotier-idtool
plugs:
- network
layout:
/var/lib/zerotier-one:
bind: $SNAP_COMMON
parts:
one:
source: ./
plugin: dump
organize:
zerotier-one : usr/sbin/zerotier-one
zerotier-cli : usr/sbin/zerotier-cli
zerotier-idtool : usr/sbin/zerotier-idtool
filesets:
binaries:
- usr/sbin/zerotier-one
- usr/sbin/zerotier-cli
- usr/sbin/zerotier-idtool
prime:
- $binaries
override-build: |
snapcraftctl build
# Grab the version string from the newly-compiled binary.
snapcraftctl set-version "$(./zerotier-one -v)"
slots:
zerotier-control:
interface: content
read:
- $SNAP_COMMON

View file

@ -0,0 +1,20 @@
# vim: ft=dockerfile
FROM debian:buster
ENV LANG C.UTF-8
# Manage i386 arch
RUN dpkg --add-architecture i386
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
WORKDIR /spksrc
COPY syn-pkg-entrypoint.sh /syn-pkg-entrypoint.sh
ENTRYPOINT ["/syn-pkg-entrypoint.sh"]

8
pkg/synology/README.md Normal file
View file

@ -0,0 +1,8 @@
## Package for Synology's DSM 6
Documentation and downloads: [docs.zerotier.com/devices/synology](https://docs.zerotier.com/devices/synology)
```
./build.sh build
```

139
pkg/synology/build.sh Executable file
View file

@ -0,0 +1,139 @@
#!/bin/bash
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' synology/config.json)
echo $ZTO_DESC
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
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
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 contents
# Copy package scripts to spksrc so they're accessible to container
rm -rf spksrc/dsm6-pkg
cp -rf dsm6-pkg spksrc/dsm6-pkg
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
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/dsm6-pkg/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
SSS_SCRIPT = ../../dsm6-pkg/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()
{
pushd synology
build_environment
generate_package_sources
sudo docker run -it -v $(pwd)/spksrc:/spksrc zt-spksrc /bin/bash
popd
}
"$@"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

View file

@ -0,0 +1,3 @@
#!/bin/sh
exit 0

View file

@ -0,0 +1,3 @@
#!/bin/sh
exit 0

View file

@ -0,0 +1,2 @@
#!/bin/sh
exit 0

View file

@ -0,0 +1,2 @@
#!/bin/sh
exit 0

View file

@ -0,0 +1,3 @@
#!/bin/sh
exit 0

View file

@ -0,0 +1,2 @@
#!/bin/sh
exit 0

View file

@ -0,0 +1,30 @@
service_postinst()
{
exit 0
}
service_postuninst()
{
exit 0
}
service_postupgrade()
{
exit 0
}
service_preinst()
{
exit 0
}
service_preuninst()
{
exit 0
}
service_preupgrade()
{
exit 0
}

View file

@ -0,0 +1,162 @@
#!/bin/sh
PKGVAR=/var/packages/zerotier/var
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
}
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
rm -rf /var/lib/zerotier-one
ln -s /var/packages/zerotier/var /var/lib/zerotier-one
}
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, 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
fi
sleep 15
done
}
configure_routes()
{
if [ -r "${WAT_PID_FILE}" ]; then
exit 0
else
apply_routes &
fi
}
start_daemon()
{
${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
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

View file

@ -0,0 +1,30 @@
# vim: ft=dockerfile
FROM alpine:latest as builder
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 ${ZTO_COMMIT} \
&& cd /src \
&& make -f make-linux.mk
FROM alpine:latest
LABEL version=${ZTO_VER}
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"]

View file

@ -0,0 +1,3 @@
## Docker image for Synology's DSM7
Documentation: [docs.zerotier.com/devices/synology](https://docs.zerotier.com/devices/synology)

View file

@ -0,0 +1,21 @@
#!/bin/bash
ZTO_VER=$(git describe --abbrev=0 --tags)
ZTO_COMMIT=$(git rev-parse HEAD)
build()
{
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
}
push()
{
sudo docker login --username=${DOCKERHUB_USERNAME}
sudo docker push zerotier/zerotier-synology:${ZTO_VER}
sudo docker push zerotier/zerotier-synology:latest
}
"$@"

View file

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

View file

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