From fd09533e2b6066390c55608878b9d9c7e0c37558 Mon Sep 17 00:00:00 2001 From: rustdesk Date: Sat, 3 Apr 2021 23:52:29 +0800 Subject: [PATCH] initialize spk --- spk/INFO | 19 ++++ spk/PACKAGE_ICON.PNG | Bin 0 -> 7482 bytes spk/PACKAGE_ICON_256.PNG | Bin 0 -> 31376 bytes spk/WIZARD_UIFILES/install_uifile | 34 +++++++ spk/pubkey | 30 ++++++ spk/scripts/RustDesk_Server.sc | 23 +++++ spk/scripts/installer | 157 ++++++++++++++++++++++++++++++ spk/scripts/postinst | 3 + spk/scripts/postuninst | 3 + spk/scripts/postupgrade | 3 + spk/scripts/preinst | 3 + spk/scripts/preuninst | 3 + spk/scripts/preupgrade | 3 + spk/scripts/start-stop-status | 156 +++++++++++++++++++++++++++++ spk/syno_signature.asc | 0 15 files changed, 437 insertions(+) create mode 100755 spk/INFO create mode 100755 spk/PACKAGE_ICON.PNG create mode 100755 spk/PACKAGE_ICON_256.PNG create mode 100755 spk/WIZARD_UIFILES/install_uifile create mode 100644 spk/pubkey create mode 100755 spk/scripts/RustDesk_Server.sc create mode 100755 spk/scripts/installer create mode 100755 spk/scripts/postinst create mode 100755 spk/scripts/postuninst create mode 100755 spk/scripts/postupgrade create mode 100755 spk/scripts/preinst create mode 100755 spk/scripts/preuninst create mode 100755 spk/scripts/preupgrade create mode 100755 spk/scripts/start-stop-status create mode 100644 spk/syno_signature.asc diff --git a/spk/INFO b/spk/INFO new file mode 100755 index 0000000..49671af --- /dev/null +++ b/spk/INFO @@ -0,0 +1,19 @@ +package="RustDesk Server" +version="1.1.3" +description="RustDesk是一款可以完全由用户定义的远程桌面软件。您可以使用RustDesk服务器自建中继服务器,先尝试打洞加密直连,不行再由服务器转发。此服务需要三个端口,NAT测试端口:21115(tcp),ID/注册端口:21116(tcp/udp) ,中继端口:21117(tcp)。" +displayname="RustDesk服务器" +maintainer="CarrieZ Studio" +maintainer_url="https://rustdesk.com/zh/" +distributor="RustDesk & 裙下孤魂" +support_url="https://rustdesk.com/contact/" +arch="apollolake avoton braswell broadwell broadwellnk bromolow cedarview denverton dockerx64 geminilake grantley kvmx64 purley v1000 x86 x86_64" +os_min_ver="6.1" +reloadui="yes" +startable="yes" +thirdparty="yes" +install_reboot="no" +install_dep_packages="" +install_conflict_packages="" +checksum="b66b5f9f889229092ed76e42b23878e4" +extractsize="" +checkport="no" diff --git a/spk/PACKAGE_ICON.PNG b/spk/PACKAGE_ICON.PNG new file mode 100755 index 0000000000000000000000000000000000000000..c6c036741f8899f9b31e72e2d022ed94f61a820b GIT binary patch literal 7482 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 literal 0 HcmV?d00001 diff --git a/spk/PACKAGE_ICON_256.PNG b/spk/PACKAGE_ICON_256.PNG new file mode 100755 index 0000000000000000000000000000000000000000..a80abd53ef96e3b0fb68a95b1d919945a9acc0fa GIT binary patch literal 31376 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 IM6N<$f}iQ^umAu6 literal 0 HcmV?d00001 diff --git a/spk/WIZARD_UIFILES/install_uifile b/spk/WIZARD_UIFILES/install_uifile new file mode 100755 index 0000000..ce55fab --- /dev/null +++ b/spk/WIZARD_UIFILES/install_uifile @@ -0,0 +1,34 @@ +[{ + "step_title": "Install Settings", + "items": [{ + "type": "textfield", + "desc": "RustDesk中继服务器端口", + "subitems": [{ + "key": "hbbr_port", + "desc": "TCP", + "defaultValue": "21117", + "validator": { + "allowBlank": false, + "regex": { + "expr": "/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/", + "errorText": "端口号必须为数字" + } + } + }] + }, { + "type": "textfield", + "desc": "RustDesk ID/注册服务器端口", + "subitems": [{ + "key": "hbbs_port", + "desc": "ID/注册服务端口TCP/UDP", + "defaultValue": "21116", + "validator": { + "allowBlank": false, + "regex": { + "expr": "/^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$/", + "errorText": "端口号必须为数字" + } + } + }] + } + }] diff --git a/spk/pubkey b/spk/pubkey new file mode 100644 index 0000000..5ba935b --- /dev/null +++ b/spk/pubkey @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.11 (GNU/Linux) + +mQENBFPXh7wBCAClaiu5REwBu9ow0OYam+wWp3PTHIcuy1KAuOJaOoGAPPpJ+df1 +xvVpql5bMlUWLE6OiWHPdSojrw0T6yx47R5F6rPVyT19+/uKrWpVoLQHu4WZRAIF +yhd1ptbClvdJGu3h1YGXsGNCMB4L1Ytbzg3mIatsqJwwY6H0fc88/HbSwnF5xyM2 +C6r6AzHwVNl0RPYzOrMMaizaYIHEIC0xvOvL94paqPZPfMZ8S2PsiHD8rhpZ46+k +pbrpCNgeas7i6ix1I8mT/pGmjhqcPhsT0OK8gqKWfa8ZVltX5fkL6g3M+g6BKsYT +Qr+II8wQGX0ZHfFUjqFcPBPekiksixkwbHgPABEBAAG0GVN5bm9sb2d5IEluYy4g +KFRpbWVzdGFtcCmJATgEEwECACIFAlPXh7wCGwMGCwkIBwMCBhUIAgkKCwQWAgMB +Ah4BAheAAAoJEDjoaiswnoiw2U0H/jIsC7fkF6B1TSYPntmZ/DTAIDPvH5GX3a5O +XugCbBpFlLYgbrDf9ZD6iu8lYWwdIYlGiNnIpJ+aw/F6hClc1/sfwBIjW9AtWLWI +GPOsrqlcEETcAooCnAV8wsQ6cIBPxQJmZRoQYI71IrY/mXsrFh1MNc3nMoiMC/Hx +dKcWFUSVeHE3goWkZ8k68c466blj8nQZ5IKA64qt0s3WkwG2k3bheh5KxFwX4Uyq +QWPAHhTzepJvJi5DMMla+JN6+PtDsQXyqWmJy/W0Aes7BvcY1ilnKRQj7P0BvVk5 +Lv2eBz4tSBb7WvwU+VRHufLSqhJrEnS8RcRPci2+jNXqq3trnwu5AQ0EU9eHvAEI +ALugjXKwQqSSecmsOaDtT/3jGIr/xtGX/cNfmhOR7cqrf30E2F+3POjpiQWAApG4 +twx5tgkv1mOAxpuMYMVb4fbv+mkWYPZvro9+iEqjAUb0ttKdZTUUpb37JNE/3eow +ByRiNq92DIpERzzUsqOPVstxnekp03wTCyJzgW+oBaevbujDdGCuOXFXhSKppCBl +BLVjffJ1QOnCYIAfCQoe+z7F+AbDTrLIdCg5nc8xmgc4C3JYQtk6MzCakbh4TOOU +kMG8Zcm5QEWGB1AXzlrEExTxsZEdxyBR7LtR3r15stCEh9EhixZRYR2jO8xx9A4P +RlCPKYAy7yHl4X6NoYyJ02UAEQEAAYkBHwQYAQIACQUCU9eHvAIbDAAKCRA46Gor +MJ6IsCDHCACI6bacSQFMIf9zUTs6TIUMQFgs52GD5CzEJ4yXmTcldAs8gEnv01zg +sKqSu/MxB8Dox51gesaUrHmX0EBdw37jZSFCE940ErzPEI2zhLzdOwimqXs5+a9H +L7xl9wqQI1awubHnYQTb9rnzcphEhdepN+5Qv/K3mguuLffp1GI8Pa6KdKzvttLi +qAHRMqq1lPAqr8EmwacUYNQ7DTjz5fEw7+SBkLjB+CJFj4gjOTn8s4DYmWrQjUoS +bwXph6pkrn84if8gzY7xJX3+4UGC/U/8O2my2H/XdcmkPkl5shyiDkhb+wDdNqXS +d/I7NIpmY3Pgu1sKNwr1dXBEHGez8ooi +=n+fM +-----END PGP PUBLIC KEY BLOCK----- diff --git a/spk/scripts/RustDesk_Server.sc b/spk/scripts/RustDesk_Server.sc new file mode 100755 index 0000000..37eb1f4 --- /dev/null +++ b/spk/scripts/RustDesk_Server.sc @@ -0,0 +1,23 @@ +[RustDesk_Server_HBBR] +title="RustDesk Server (HBBR_TCP)" +desc="RustDesk Server" +port_forward="yes" +dst.ports="21117/tcp" + +[RustDesk_Server_HBBS_TCP] +title="RustDesk Server (HBBS_TCP)" +desc="RustDesk Server" +port_forward="yes" +dst.ports="21116/tcp" + +[RustDesk_Server_HBBS_UDP] +title="RustDesk Server (HBBS_UDP)" +desc="RustDesk Server" +port_forward="yes" +dst.ports="21116/udp" + +[RustDesk_Server_NAT_TCP] +title="RustDesk Server (NAT_TCP)" +desc="RustDesk Server" +port_forward="yes" +dst.ports="21115/tcp" diff --git a/spk/scripts/installer b/spk/scripts/installer new file mode 100755 index 0000000..af9f033 --- /dev/null +++ b/spk/scripts/installer @@ -0,0 +1,157 @@ +#!/bin/sh + +PACKAGE_NAME="$SYNOPKG_PKGNAME" +PACKAGE_BASE="/var/packages/${PACKAGE_NAME}/target" +PACKAGE_SSS="/var/packages/${PACKAGE_NAME}/scripts/start-stop-status" + +SERVICETOOL="/usr/syno/bin/servicetool" +GETKEYVALUE="/usr/syno/bin/synogetkeyvalue" +SETKEYVALUE="/usr/syno/bin/synosetkeyvalue" +FWFILENAME="RustDesk_Server.sc" + +[ "${hbbr_port}" == "" ] && hbbr_port="21117" +[ "${hbbs_port}" == "" ] && hbbs_port="21116" +nat_port=`expr ${hbbs_port} - 1` + +preinst() { + exit 0 +} + +postinst() { + if [ "${SYNOPKG_PKG_STATUS}" == "INSTALL" ]; then + # 导入另一个RustDesk服务器数据 + import_db="false" + import_all="false" + if [ "${rds_old_import_all}" == "true" ]; then + rds_old_import_db="true" + import_all="true" + elif [ "${rds_import_all}" == "true" ]; then + rds_import_db="true" + import_all="true" + fi + if [ "${rds_old_import_db}" == "true" ]; then + import_db="true" + PACKAGE_IMPORT_DIR="/var/packages/RustDesk_Server" + elif [ "${rds_import_db}" == "true" ]; then + import_db="true" + PACKAGE_IMPORT_DIR="/var/packages/RustDesk Server" + fi + if [ "${import_db}" == "true" ]; then + [ -x "${PACKAGE_IMPORT_DIR}/scripts/start-stop-status" ] \ + && SYNOPKG_PKGNAME="RustDesk Server" "${PACKAGE_IMPORT_DIR}/scripts/start-stop-status" stop 2>&1 + [ -f "${PACKAGE_IMPORT_DIR}/enabled" ] && rm -f "${PACKAGE_IMPORT_DIR}/enabled" + [ -d "${PACKAGE_IMPORT_DIR}/target/hbbs.db" ] && cp -prf "${PACKAGE_IMPORT_DIR}/target/hbbs.db" "${PACKAGE_BASE}" + fi + if [ "${import_all}" == "true" ]; then + [ -d "${PACKAGE_IMPORT_DIR}/target/logs" ] && cp -prf "${PACKAGE_IMPORT_DIR}/target/logs" "${PACKAGE_BASE}" + fi + + # 添加应用配置 + sed -i "s/中继端口:21117/中继端口:${hbbr_port}/" "/var/packages/${PACKAGE_NAME}/INFO" + sed -i "s/ID\/注册端口:21116/ID\/注册端口:${hbbs_port}/" "/var/packages/${PACKAGE_NAME}/INFO" + sed -i "s/NAT测试端口:21115/NAT测试端口:${nat_port}/" "/var/packages/${PACKAGE_NAME}/INFO" + sed -i "s/21117/${hbbr_port}/" "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" + sed -i "s/21116/${hbbs_port}/" "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" + sed -i "s/21115/${nat_port}/" "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" + sed -i "s/port=[^ ]*/port=${hbbr_port}/g" "${PACKAGE_BASE}/config/hbbr.conf" + sed -i "s/port=[^ ]*/port=${hbbs_port}/g" "${PACKAGE_BASE}/config/hbbs.conf" + + # 添加防火墙配置 + cat "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" >"/tmp/${FWFILENAME}" + ${SERVICETOOL} --install-configure-file --package "/tmp/${FWFILENAME}" >/dev/null + rm -f "/tmp/${FWFILENAME}" + + # 设置文件权限 + chmod -R 755 "${PACKAGE_BASE}"/* + chmod -R 755 "/var/packages/${PACKAGE_NAME}/scripts"/* + chmod -R 755 "/var/packages/${PACKAGE_NAME}/WIZARD_UIFILES"/* + chmod 644 "/var/packages/${PACKAGE_NAME}/INFO" + fi + + exit 0 +} + +preuninst() { + # 停用套件 + "${PACKAGE_SSS}" stop + + # 删除防火墙配置 + if [ "${SYNOPKG_PKG_STATUS}" == "UNINSTALL" ]; then + ${SERVICETOOL} --remove-configure-file --package "${FWFILENAME}" >/dev/null + fi + + exit 0 +} + +postuninst() { + # 删除不必要的目录... + if [ -d "/usr/syno/etc/packages/${PACKAGE_NAME}" ]; then + rm -rf "/usr/syno/etc/packages/${PACKAGE_NAME}" + fi + + exit 0 +} + +preupgrade() { + # 停用套件 + "${PACKAGE_SSS}" stop + +# Not working yet... +# # 检索旧设置... +# hbbr_port=`${GETKEYVALUE} "${PACKAGE_BASE}/config/hbbr.conf" port` +# hbbs_port=`${GETKEYVALUE} "${PACKAGE_BASE}/config/hbbs.conf" port` +# sed -i "s/21117/${hbbr_port}/" "/var/packages/${PACKAGE_NAME}/WIZARD_UIFILES/upgrade_uifile" +# sed -i "s/21116/${hbbs_port}/" "/var/packages/${PACKAGE_NAME}/WIZARD_UIFILES/upgrade_uifile" +## Not working yet... + + # 备份数据文件... + if [ -d "${SYNOPKG_PKGDEST}" ]; then + DIRS4BACKUP="data logs hbbs.db config" + for DIR in $DIRS4BACKUP; do + if [ -d "${SYNOPKG_PKGDEST}/${DIR}" ]; then + mkdir -p "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}" + mv "${SYNOPKG_PKGDEST}/${DIR}"/* "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}" + rmdir "${SYNOPKG_PKGDEST}/${DIR}" + elif [ -f "${SYNOPKG_PKGDEST}/${DIR}" ]; then + mv "${SYNOPKG_PKGDEST}/${DIR}" "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade" + fi + done + fi + + exit 0 +} + +postupgrade() { + # 恢复数据文件... + if [ -d "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade" ]; then + for DIR in `ls "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade"` + do + if [ -d "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}" ]; then + [ ! -d "${SYNOPKG_PKGDEST}/${DIR}" ] && mkdir "${SYNOPKG_PKGDEST}/${DIR}" + mv "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}"/* "${SYNOPKG_PKGDEST}/${DIR}" + rmdir "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}" + elif [ -f "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}" ]; then + mv "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade/${DIR}" "${SYNOPKG_PKGDEST}" + fi + done + rmdir "${SYNOPKG_PKGDEST}/../${PACKAGE_NAME}_upgrade" + fi + + # 恢复设置... + hbbr_port=`${GETKEYVALUE} "${PACKAGE_BASE}/config/hbbr.conf" port` >>/tmp/wakko.txt + hbbs_port=`${GETKEYVALUE} "${PACKAGE_BASE}/config/hbbs.conf" port` >>/tmp/wakko.txt + nat_port=`expr ${hbbs_port} - 1` + sed -i "s/中继端口:21117/中继端口:${hbbr_port}/" "/var/packages/${PACKAGE_NAME}/INFO" >>/tmp/wakko.txt + sed -i "s/ID\/注册端口:21116/ID\/注册端口:${hbbs_port}/" "/var/packages/${PACKAGE_NAME}/INFO" >>/tmp/wakko.txt + sed -i "s/NAT测试端口:21115/NAT测试端口:${nat_port}/" "/var/packages/${PACKAGE_NAME}/INFO" >>/tmp/wakko.txt + sed -i "s/21117/${hbbr_port}/" "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" >>/tmp/wakko.txt + sed -i "s/21116/${hbbs_port}/" "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" >>/tmp/wakko.txt + sed -i "s/21115/${nat_port}/" "/var/packages/${PACKAGE_NAME}/scripts/${FWFILENAME}" >>/tmp/wakko.txt + + # 设置文件权限 + chmod -R 755 "/var/packages/${PACKAGE_NAME}/scripts"/* + chmod -R 755 "/var/packages/${PACKAGE_NAME}/WIZARD_UIFILES"/* + chmod 644 "/var/packages/${PACKAGE_NAME}/INFO" + + exit 0 +} diff --git a/spk/scripts/postinst b/spk/scripts/postinst new file mode 100755 index 0000000..f6c4bd9 --- /dev/null +++ b/spk/scripts/postinst @@ -0,0 +1,3 @@ +#!/bin/sh +. "`dirname \"$0\"`/installer" +`basename "$0"` >$SYNOPKG_TEMP_LOGFILE diff --git a/spk/scripts/postuninst b/spk/scripts/postuninst new file mode 100755 index 0000000..f6c4bd9 --- /dev/null +++ b/spk/scripts/postuninst @@ -0,0 +1,3 @@ +#!/bin/sh +. "`dirname \"$0\"`/installer" +`basename "$0"` >$SYNOPKG_TEMP_LOGFILE diff --git a/spk/scripts/postupgrade b/spk/scripts/postupgrade new file mode 100755 index 0000000..f6c4bd9 --- /dev/null +++ b/spk/scripts/postupgrade @@ -0,0 +1,3 @@ +#!/bin/sh +. "`dirname \"$0\"`/installer" +`basename "$0"` >$SYNOPKG_TEMP_LOGFILE diff --git a/spk/scripts/preinst b/spk/scripts/preinst new file mode 100755 index 0000000..f6c4bd9 --- /dev/null +++ b/spk/scripts/preinst @@ -0,0 +1,3 @@ +#!/bin/sh +. "`dirname \"$0\"`/installer" +`basename "$0"` >$SYNOPKG_TEMP_LOGFILE diff --git a/spk/scripts/preuninst b/spk/scripts/preuninst new file mode 100755 index 0000000..f6c4bd9 --- /dev/null +++ b/spk/scripts/preuninst @@ -0,0 +1,3 @@ +#!/bin/sh +. "`dirname \"$0\"`/installer" +`basename "$0"` >$SYNOPKG_TEMP_LOGFILE diff --git a/spk/scripts/preupgrade b/spk/scripts/preupgrade new file mode 100755 index 0000000..f6c4bd9 --- /dev/null +++ b/spk/scripts/preupgrade @@ -0,0 +1,3 @@ +#!/bin/sh +. "`dirname \"$0\"`/installer" +`basename "$0"` >$SYNOPKG_TEMP_LOGFILE diff --git a/spk/scripts/start-stop-status b/spk/scripts/start-stop-status new file mode 100755 index 0000000..ea0bf88 --- /dev/null +++ b/spk/scripts/start-stop-status @@ -0,0 +1,156 @@ +#!/bin/sh + + +sError="ERROR: " +[ ! -z "$SYNOPKG_PKGNAME" ] && sError="
${sError}" +TIMEOUT=120 +PACKAGE_NAME="RustDesk Server" +PACKAGE_BASE="/var/packages/${PACKAGE_NAME}/target" +HBBR_BIN="${PACKAGE_BASE}/bin/hbbr" +HBBR_PORT=`synogetkeyvalue "${PACKAGE_BASE}/config/hbbr.conf" port` +HBBR_LOG="${PACKAGE_BASE}/logs/hbbr.log" +HBBS_BIN="${PACKAGE_BASE}/bin/hbbs" +HBBS_PORT=`synogetkeyvalue "${PACKAGE_BASE}/config/hbbs.conf" port` +HBBS_LOG="${PACKAGE_BASE}/logs/hbbs.log" +PACKAGE_ENABLED="/var/packages/${PACKAGE_NAME}/enabled" +PS_CMD="/bin/ps -w" +DSM_MAJORVERSION=`synogetkeyvalue /etc.defaults/VERSION majorversion` +if [[ $DSM_MAJORVERSION -gt 5 ]]; then + PS_CMD="$PS_CMD -x" +fi + +CheckIfDaemonAlive() { + local PID="$1" + PROCESS_ALIVE="0" + [ -z "$PID" ] && return 1 + + kill -0 "$PID" + [ "0" == "$?" ] && PROCESS_ALIVE="1" +} + +running_hbbr() { + local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbr | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ') + CheckIfDaemonAlive $PID + [ "0" == "$PROCESS_ALIVE" ] && return 1 + return 0 +} + +running_hbbs() { + local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbs | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ') + CheckIfDaemonAlive $PID + [ "0" == "$PROCESS_ALIVE" ] && return 1 + return 0 +} + +start() { + [ "$SYNOPKG_TEMP_LOGFILE" == "" ] && SYNOPKG_TEMP_LOGFILE="/var/log/rustdeskserver.start.log" + LANG=C cd "$PACKAGE_BASE" && (nohup "$HBBR_BIN" -p $HBBR_PORT > "$HBBR_LOG" 2>&1 &) && (nohup "$HBBS_BIN" -r 127.0.0.1 -p $HBBS_PORT > "$HBBS_LOG" 2>&1 &) + + + i=0 + while true; do + if ! running_hbbr || ! running_hbbs ; then +# echo "WAIT: ${i}s of ${TIMEOUT}s" + sleep 5s + i=$((i+5)) + else + break + fi + [ $i -ge $TIMEOUT ] && break + done + + # 检查hbbr进程状态 + if ! running_hbbr ; then + echo -e "${sError}hbbr进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE + stop + return 1 + fi + + # 检查hbbs进程状态 + if ! running_hbbs ; then + echo -e "${sError}hbbs进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE + stop + return 1 + fi + + return 0 +} + +stop() { + [ "$SYNOPKG_TEMP_LOGFILE" == "" ] && SYNOPKG_TEMP_LOGFILE="/var/log/rustdeskserver.stop.log" + # 检查hbbr进程状态 + if running_hbbr ; then + local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbr | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ') + [ -z "$PID" ] && return 0 + kill -15 $PID + sleep 5s + + # 检查hbbr进程状态 + if running_hbbr ; then + kill -9 $PID + sleep 5s + if running_hbbr ; then + echo "${sError}无法关闭hbbr进程 (pid=$PID)!" | tee -a $SYNOPKG_TEMP_LOGFILE + return 1 + fi + fi + fi + + # 检查hbbs进程状态 + if running_hbbs ; then + local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbs | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ') + [ -z "$PID" ] && return 0 + kill -15 $PID + sleep 5s + + # 检查hbbs进程状态 + if running_hbbs ; then + kill -9 $PID + sleep 5s + if running_hbbs ; then + echo "${sError}无法关闭hbbs进程 (pid=$PID)!" | tee -a $SYNOPKG_TEMP_LOGFILE + return 1 + fi + fi + fi + + return 0 +} + +case $1 in + start) + # 启动服务器 + start + exit $? + ;; + stop) + # 关闭服务器 + stop + exit $? + ;; + status) + # 检查套件开关 + if [ ! -f "${PACKAGE_ENABLED}" ]; then + echo "${sError}套件没有开启" | tee -a $SYNOPKG_TEMP_LOGFILE + exit 0 + fi + + # 检查hbbr进程状态 + if ! running_hbbr ; then + echo "${sError}hbbr进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE + exit 1 + fi + + # 检查hbbs进程状态 + if ! running_hbbs ; then + echo "${sError}hbbs进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE + exit 1 + fi + + exit 0 + ;; + log) + echo "$PACKAGE_BASE/logs/server.log" + exit 0 + ;; +esac diff --git a/spk/syno_signature.asc b/spk/syno_signature.asc new file mode 100644 index 0000000..e69de29