initialize spk

This commit is contained in:
rustdesk
2021-04-03 23:52:29 +08:00
parent a10bb34f6e
commit fd09533e2b
15 changed files with 437 additions and 0 deletions

23
spk/scripts/RustDesk_Server.sc Executable file
View File

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

157
spk/scripts/installer Executable file
View File

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

3
spk/scripts/postinst Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
. "`dirname \"$0\"`/installer"
`basename "$0"` >$SYNOPKG_TEMP_LOGFILE

3
spk/scripts/postuninst Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
. "`dirname \"$0\"`/installer"
`basename "$0"` >$SYNOPKG_TEMP_LOGFILE

3
spk/scripts/postupgrade Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
. "`dirname \"$0\"`/installer"
`basename "$0"` >$SYNOPKG_TEMP_LOGFILE

3
spk/scripts/preinst Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
. "`dirname \"$0\"`/installer"
`basename "$0"` >$SYNOPKG_TEMP_LOGFILE

3
spk/scripts/preuninst Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
. "`dirname \"$0\"`/installer"
`basename "$0"` >$SYNOPKG_TEMP_LOGFILE

3
spk/scripts/preupgrade Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
. "`dirname \"$0\"`/installer"
`basename "$0"` >$SYNOPKG_TEMP_LOGFILE

156
spk/scripts/start-stop-status Executable file
View File

@@ -0,0 +1,156 @@
#!/bin/sh
sError="ERROR: "
[ ! -z "$SYNOPKG_PKGNAME" ] && sError="<br />${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