From 7e7a45a8a6bed4183de39ff09e86d6b224b56371 Mon Sep 17 00:00:00 2001 From: Stefaan Ghysels Date: Wed, 6 Mar 2019 17:49:34 +0100 Subject: [PATCH] Added Syncthing Minor installation fixes --- wdpk/syncthing/apkg.rc | 19 ++++++++++++++ wdpk/syncthing/before_apkg.sh | 5 ++++ wdpk/syncthing/build.sh | 27 +++++++++++++++++++ wdpk/syncthing/clean.sh | 13 ++++++++++ wdpk/syncthing/env | 5 ++++ wdpk/syncthing/init.sh | 16 ++++++++++++ wdpk/syncthing/install.sh | 47 ++++++++++++++++++++++++++++++++++ wdpk/syncthing/preinst.sh | 17 ++++++++++++ wdpk/syncthing/remove.sh | 13 ++++++++++ wdpk/syncthing/start.sh | 16 ++++++++++++ wdpk/syncthing/stop.sh | 10 ++++++++ wdpk/syncthing/web/index.php | 1 + wdpk/syncthing/web/logo.png | Bin 0 -> 11332 bytes 13 files changed, 189 insertions(+) create mode 100644 wdpk/syncthing/apkg.rc create mode 100755 wdpk/syncthing/before_apkg.sh create mode 100755 wdpk/syncthing/build.sh create mode 100755 wdpk/syncthing/clean.sh create mode 100644 wdpk/syncthing/env create mode 100755 wdpk/syncthing/init.sh create mode 100755 wdpk/syncthing/install.sh create mode 100755 wdpk/syncthing/preinst.sh create mode 100755 wdpk/syncthing/remove.sh create mode 100755 wdpk/syncthing/start.sh create mode 100755 wdpk/syncthing/stop.sh create mode 100644 wdpk/syncthing/web/index.php create mode 100644 wdpk/syncthing/web/logo.png diff --git a/wdpk/syncthing/apkg.rc b/wdpk/syncthing/apkg.rc new file mode 100644 index 0000000..f4fb5be --- /dev/null +++ b/wdpk/syncthing/apkg.rc @@ -0,0 +1,19 @@ +Package: syncthing +Version: 1.1.0 +Packager: TFL +Email: +Homepage: https://www.syncthing.net +Description: Open Source Continuous File Synchronization +Icon: logo.png +AddonShowName: Syncthing +AddonIndexPage: index.php +AddonUsedPort: +InstDepend: +InstConflict: +StartDepend: +StartConflict: +CenterType: +UserControl: +MinFWVer: +MaxFWVer: +IndividualFlag: 0 diff --git a/wdpk/syncthing/before_apkg.sh b/wdpk/syncthing/before_apkg.sh new file mode 100755 index 0000000..f48b086 --- /dev/null +++ b/wdpk/syncthing/before_apkg.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +[ -f /tmp/debug_apkg ] && echo "APKG_DEBUG: $0 $@" >> /tmp/debug_apkg + +# DO NOT REMOVE diff --git a/wdpk/syncthing/build.sh b/wdpk/syncthing/build.sh new file mode 100755 index 0000000..9d7b731 --- /dev/null +++ b/wdpk/syncthing/build.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +APP_NAME="$(basename $(pwd))" +DATE="$(date +"%m%d%Y")" +CWD="$(pwd)" +VERSION="$(awk '/Version/{print $NF}' apkg.rc)" + +echo "Building ${APP_NAME} version ${VERSION}" + +MODELS="WDMyCloudDL4100 WDMyCloudDL2100 MyCloudPR4100 MyCloudPR2100" + +for model in $MODELS; do + ../../mksapkg -E -s -m $model > /dev/null +done + +echo "Move binaries" + +RELEASE_DIR="../../packages/${APP_NAME}" +mkdir -p "${RELEASE_DIR}" +find .. -maxdepth 1 -name "*.bin*" -exec rename 's#\('$DATE'\)##' {} \; +mv ../*.bin "${RELEASE_DIR}" + +echo "Bundle sources" +SRC_TAR="${RELEASE_DIR}/${APP_NAME}_src_${VERSION}.tar.gz" +tar -czf $SRC_TAR . + + diff --git a/wdpk/syncthing/clean.sh b/wdpk/syncthing/clean.sh new file mode 100755 index 0000000..2660e65 --- /dev/null +++ b/wdpk/syncthing/clean.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +[ -f /tmp/debug_apkg ] && echo "APKG_DEBUG: $0 $@" >> /tmp/debug_apkg + +APKG_PATH=$(readlink -f $1) +. ${APKG_PATH}/env + +WEBPATH="/var/www/${APKG_NAME}" + +# remove lib + +# remove web +rm -rf $WEBPATH diff --git a/wdpk/syncthing/env b/wdpk/syncthing/env new file mode 100644 index 0000000..a98956c --- /dev/null +++ b/wdpk/syncthing/env @@ -0,0 +1,5 @@ +APKG_NAME="syncthing" +BINARY="syncthing" + +WEBGUI_ADDR=$(grep -m1 Require /usr/local/apache2/conf/httpd.conf | awk '{print $NF}' | cut -d/ -f1) +PORT=8384 diff --git a/wdpk/syncthing/init.sh b/wdpk/syncthing/init.sh new file mode 100755 index 0000000..eb36ee9 --- /dev/null +++ b/wdpk/syncthing/init.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +[ -f /tmp/debug_apkg ] && echo "APKG_DEBUG: $0 $@" >> /tmp/debug_apkg + +APKG_PATH=$(readlink -f $1) +. ${APKG_PATH}/env + +LOG=/tmp/${APKG_NAME}.log + +echo "INIT linking files from path: ${APKG_PATH}" >> $LOG + +# create directory for the webpage TODO FIX ME +WEBDIR="/var/www/${APKG_NAME}/" +mkdir -p ${WEBDIR} +ln -sf ${APKG_PATH}/web/* ${WEBDIR} + diff --git a/wdpk/syncthing/install.sh b/wdpk/syncthing/install.sh new file mode 100755 index 0000000..9a10bbc --- /dev/null +++ b/wdpk/syncthing/install.sh @@ -0,0 +1,47 @@ +#!/bin/sh + +[ -f /tmp/debug_apkg ] && echo "APKG_DEBUG: $0 $@" >> /tmp/debug_apkg + +INSTALL_DIR=$(readlink -f $1) +. ${INSTALL_DIR}/env + +NAS_PROG=$(readlink -f $2) + +log=/tmp/debug_apkg + +APKG_PATH="${NAS_PROG}/${APKG_NAME}" + +# move package data +mv ${INSTALL_DIR} ${NAS_PROG} + +# setup secure downloads +if [ ! -e /etc/ssl/cert.pem ]; then + curl --remote-name --time-cond cacert.pem https://curl.haxx.se/ca/cacert.pem + mv cacert.pem /etc/ssl/cert.pem +fi + +PLATFORM=$(uname -m) +if [ "${PLATFORM}" = "x86_64" ]; then + PLATFORM="amd64" +else + PLATFORM="arm" +fi +VERSION="v1.1.0" + +MAINDIR="syncthing-linux-${PLATFORM}-${VERSION}" +PACKAGE="${MAINDIR}.tar.gz" +URL="https://github.com/syncthing/syncthing/releases/download/${VERSION}/${PACKAGE}" + +/usr/bin/wget ${URL} + +[[ ! $? -eq 0 ]] && exit 1 + +tar xf ${PACKAGE} -C ${APKG_PATH} + +[[ ! $? -eq 0 ]] && exit 2 + +rm ${PACKAGE} + +mv ${APKG_PATH}/${MAINDIR} ${APKG_PATH}/${APKG_NAME} + +# TODO: restore config diff --git a/wdpk/syncthing/preinst.sh b/wdpk/syncthing/preinst.sh new file mode 100755 index 0000000..4f5559c --- /dev/null +++ b/wdpk/syncthing/preinst.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +[ -f /tmp/debug_apkg ] && echo "APKG_DEBUG: $0 $@" >> /tmp/debug_apkg + +NAS_PROG="/shares/Volume_1/Nas_Prog" + +APKG_MODULE="medusa" +APKG_PATH="${NAS_PROG}/${APKG_MODULE}" +APKG_BACKUP_PATH="${NAS_PROG}/${APKG_MODULE}_backup" +APKG_CONFIG="${APKG_PATH}/settings.conf" + +# backup config files and user settings +if [ -f $APKG_CONFIG ] ; then + # copy config to /tmp + mkdir -p ${APKG_BACKUP_PATH} + mv -f ${APKG_CONFIG} ${APKG_BACKUP_PATH} +fi diff --git a/wdpk/syncthing/remove.sh b/wdpk/syncthing/remove.sh new file mode 100755 index 0000000..8df3714 --- /dev/null +++ b/wdpk/syncthing/remove.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +[ -f /tmp/debug_apkg ] && echo "APKG_DEBUG: $0 $@" >> /tmp/debug_apkg + +APKG_PATH=$(readlink -f $1) +. ${APKG_PATH}/env + +rm -rf ${APKG_PATH} + +# remove lib + +# remove web +rm -rf /var/www/${APKG_NAME} diff --git a/wdpk/syncthing/start.sh b/wdpk/syncthing/start.sh new file mode 100755 index 0000000..ba7a338 --- /dev/null +++ b/wdpk/syncthing/start.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +APKG_PATH=$1 +. ${APKG_PATH}/env + +ADDRESS=$(grep -m1 'Require ip' /usr/local/apache2/conf/httpd.conf | awk '{print $NF}' | cut -d/ -f1) + +# disable creation of default folder +export STNODEFAULTFOLDER=0 + +# keep all persistent data in the syncthing home dir +ST_HOME=${APKG_PATH}/var + +# start the binary +${APKG_PATH}/syncthing/syncthing -no-browser -home=${ST_HOME} -gui-address="http://${ADDRESS}:${PORT}" + diff --git a/wdpk/syncthing/stop.sh b/wdpk/syncthing/stop.sh new file mode 100755 index 0000000..7fab345 --- /dev/null +++ b/wdpk/syncthing/stop.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# stop daemon +APKG_DIR=$(readlink -f $1) +. ${APKG_DIR}/env + +if pidof ${BINARY} > /dev/null ; then + echo "Stopping ${APKG_NAME}" + kill $(pidof ${BINARY}) +fi diff --git a/wdpk/syncthing/web/index.php b/wdpk/syncthing/web/index.php new file mode 100644 index 0000000..040c173 --- /dev/null +++ b/wdpk/syncthing/web/index.php @@ -0,0 +1 @@ + diff --git a/wdpk/syncthing/web/logo.png b/wdpk/syncthing/web/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2d45fffe07e339282e851bd6903bc4662f3a1481 GIT binary patch literal 11332 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