Files
surveillance-station-9/official/official.sh
T
2026-02-06 11:20:22 +08:00

113 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
ROOT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
TOOL_PATH="$(realpath "${ROOT_PATH}/syno-archive")"
function synoArchive() {
CACHE_DIR="/tmp/pat"
echo "Getting syno archive"
rm -rf "${TOOL_PATH}"
mkdir -p "${TOOL_PATH}"
rm -rf "${CACHE_DIR}"
mkdir -p "${CACHE_DIR}"
OLDPAT_URL="https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat"
OLDPAT_FILE="DSM_DS3622xs+_42218.pat"
STATUS=$(curl -# -w "%{http_code}" -kL "${OLDPAT_URL}" -o "${CACHE_DIR}/${OLDPAT_FILE}")
if [ $? -ne 0 ] || [ ${STATUS} -ne 200 ]; then
echo "[E] DSM_DS3622xs%2B_42218.pat download error!"
rm -rf ${CACHE_DIR}
exit 1
fi
mkdir -p "${CACHE_DIR}/ramdisk"
tar -C "${CACHE_DIR}/ramdisk/" -xf "${CACHE_DIR}/${OLDPAT_FILE}" hda1.tgz 2>&1
if [ $? -ne 0 ]; then
echo "[E] extractor rd.gz error!"
rm -rf ${CACHE_DIR}
exit 1
fi
(cd "${CACHE_DIR}/ramdisk" && xz -dc <"hda1.tgz" | cpio -idm) >/dev/null 2>&1 || true
solist=(
"lib/libboost_filesystem.so.1.68.0 libboost_filesystem.so.1.68.0"
"lib/libboost_system.so.1.68.0 libboost_system.so.1.68.0"
"lib/libcrypto.so.1.1 libcrypto.so.1.1"
"lib/libicudata.so.64.2 libicudata.so.64"
"lib/libicui18n.so.64.2 libicui18n.so.64"
"lib/libicuio.so.64.2 libicuio.so.64"
"lib/libicuuc.so.64.2 libicuuc.so.64"
"lib/libjson.so.1 libjson.so"
"lib/libmsgpackc.so.2.0.0 libmsgpackc.so.2"
"lib/libsodium.so libsodium.so"
"lib/libsynocodesign.so.7 libsynocodesign.so.7"
"lib/libsynocore.so.7 libsynocore.so.7"
"lib/libsynocredentials.so.7 libsynocredentials.so.7"
"lib/libsynocrypto.so.7 libsynocrypto.so.7"
"syno/sbin/synoarchive synoarchive"
)
# Copy only necessary files
for item in "${solist[@]}"; do
IFS=' ' read -r S D <<<"${item}"
cp -f "${CACHE_DIR}/ramdisk/usr/${S}" "${TOOL_PATH}/${D}"
done
rm -rf "${CACHE_DIR}" 2>/dev/null
}
function getOfficiallibs() {
local VERSION="${1}"
local SPK_URL="${2}"
SS_NAME="$(basename "${SPK_URL}")"
SS_PATH="$(basename "${SPK_URL}" .spk)"
echo "Download ${SS_NAME}"
curl -#kLO "${SPK_URL}"
echo "extract ${SS_NAME}"
mkdir -p "${ROOT_PATH}/extract"
chmod -R +x "${TOOL_PATH}"
LD_LIBRARY_PATH="${TOOL_PATH}" "${TOOL_PATH}/synoarchive" -vxf "${SS_NAME}" -C "${ROOT_PATH}/extract"
if [ ! -f "${ROOT_PATH}/extract/package.tgz" ]; then
echo "[E] ${SS_NAME} is not a valid package!"
exit 1
fi
echo "extract ${ROOT_PATH}/extract/package.tgz"
mkdir -p "${ROOT_PATH}/extract/package"
(cd "${ROOT_PATH}/extract/package" && xz -dc <"${ROOT_PATH}/extract/package.tgz" | cpio -idmv ${PATCH_LIST} 2>&1) || true
mkdir -p "${ROOT_PATH}/${VERSION}/${SS_PATH}"
rm -rf "${ROOT_PATH:?}/${VERSION:?}/${SS_PATH:?}"
mv -f "${ROOT_PATH}/extract/package" "${ROOT_PATH}/${VERSION}/${SS_PATH}"
rm -rf "${ROOT_PATH}/extract"
rm -f "${SS_NAME}"
}
[ ! -f "${TOOL_PATH}/synoarchive" ] && synoArchive
RE_VERSION="${RE_VERSION:-"9.2"}"
PATCH_LIST="${PATCH_LIST:-"lib/libssffmpegutils.so lib/libssutils.so sbin/ssnotifyd sbin/sscmshostd sbin/sscored sbin/sscamerad sbin/ssdaemonmonitord sbin/ssexechelperd sbin/ssroutined sbin/ssmessaged sbin/ssrtmpclientd webapi/Camera/src/SYNO.SurveillanceStation.Camera.so"}"
SS_URL="https://archive.synology.com/download/Package/SurveillanceStation"
VER_LIST="$(curl -skL "${SS_URL}" | grep -oP '(?<=href="/download/Package/SurveillanceStation/)[^"]*' | awk -v ver="${RE_VERSION}" -F"-" '$1 >= ver')"
for V in ${VER_LIST}; do
SPK_LSIT="$(curl -skL "${SS_URL}/${V}" | grep -oP '(?<=href=")http[^"]+\.spk')"
for S in ${SPK_LSIT}; do
getOfficiallibs "${V}" "${S}"
done
done