From cae96ef348f2352d551491b5bebf76e9881ed15b Mon Sep 17 00:00:00 2001 From: mreid-tt Date: Mon, 12 Dec 2022 10:42:52 -0400 Subject: [PATCH] Sonarr: (dotNET) v4 build --- cross/sonarr/Makefile | 24 ++++-- cross/sonarr/digests | 12 ++- spk/sonarr/Makefile | 23 +++--- spk/sonarr/src/config.xml | 7 ++ spk/sonarr/src/service-setup.sh | 132 ++++++++++++++------------------ spk/sonarr/src/sonarr.png | Bin 15681 -> 11318 bytes 6 files changed, 105 insertions(+), 93 deletions(-) create mode 100644 spk/sonarr/src/config.xml diff --git a/cross/sonarr/Makefile b/cross/sonarr/Makefile index dd9d968a5f9a..3a2fb774aa89 100644 --- a/cross/sonarr/Makefile +++ b/cross/sonarr/Makefile @@ -1,21 +1,35 @@ PKG_NAME = Sonarr -PKG_VERS = 3.0.5.1144 +PKG_VERS = 4.0.0.87 PKG_EXT = tar.gz -PKG_DIST_NAME = $(PKG_NAME).main.$(PKG_VERS).linux.$(PKG_EXT) -PKG_DIST_SITE = https://download.sonarr.tv/v3/main/$(PKG_VERS) +PKG_DIST_NAME = $(PKG_NAME).widowmaker.$(PKG_VERS).linux-$(PKG_DIST_ARCH).$(PKG_EXT) +PKG_DIST_SITE = https://download.sonarr.tv/v4/widowmaker/$(PKG_VERS) PKG_DIR = $(PKG_NAME) DEPENDS = +UNSUPPORTED_ARCHS = $(i686_ARCHS) $(ARMv7L_ARCHS) $(ARMv5_ARCHS) $(PPC_ARCHS) + HOMEPAGE = https://sonarr.tv COMMENT = Sonarr is a PVR for newsgroup users. It can monitor multiple RSS feeds for new episodes of your favourite shows and will grab, sorts and rename them. It can also be configured to automatically upgrade the quality of files already downloaded if a better quality format becomes available. LICENSE = GNU GPL v3 INSTALL_TARGET = sonarr_install +# use digests with multiple files +PKG_DIST_ARCH_LIST = x64 arm arm64 + +include ../../mk/spksrc.archs.mk +PKG_DIST_ARCH = x64 +ifeq ($(findstring $(ARCH),$(ARMv7_ARCHS)),$(ARCH)) +PKG_DIST_ARCH = arm +else ifeq ($(findstring $(ARCH),$(ARMv8_ARCHS)),$(ARCH)) +PKG_DIST_ARCH = arm64 +endif + include ../../mk/spksrc.install-resources.mk .PHONY: sonarr_install sonarr_install: - mkdir -p $(STAGING_INSTALL_PREFIX)/share/$(PKG_DIR) - tar -cf - -C $(WORK_DIR)/$(PKG_DIR) . | tar -xf - -C $(STAGING_INSTALL_PREFIX)/share/$(PKG_DIR) + rm -rf $(WORK_DIR)/$(PKG_DIR)/Sonarr.Update + mkdir -p $(STAGING_INSTALL_PREFIX)/share/$(PKG_DIR)/bin + tar -cf - -C $(WORK_DIR)/$(PKG_DIR) . | tar -xf - -C $(STAGING_INSTALL_PREFIX)/share/$(PKG_DIR)/bin diff --git a/cross/sonarr/digests b/cross/sonarr/digests index 6f290ee677ad..66e1c8e58002 100644 --- a/cross/sonarr/digests +++ b/cross/sonarr/digests @@ -1,3 +1,9 @@ -Sonarr.main.3.0.5.1144.linux.tar.gz SHA1 2335133139a46f1ce0d1b2cb1f566d30285d3d1e -Sonarr.main.3.0.5.1144.linux.tar.gz SHA256 77aff6978d4dc80027979c815bd5a79579dd9bb50d39b1b2d14b3bb9e18058aa -Sonarr.main.3.0.5.1144.linux.tar.gz MD5 675ce0ab2f1e643860ab1daab45b2842 +Sonarr.widowmaker.4.0.0.87.linux-arm.tar.gz SHA1 c331ba587484d9407952f749d5f0a79e3ddeb9f0 +Sonarr.widowmaker.4.0.0.87.linux-arm.tar.gz SHA256 9601e29c8721ce74e93eaa3d31cbee5268b31b95df534ea53d588488e660482f +Sonarr.widowmaker.4.0.0.87.linux-arm.tar.gz MD5 1b75c84b80b14e2a18ea72c3f953f24e +Sonarr.widowmaker.4.0.0.87.linux-arm64.tar.gz SHA1 15fbd75b7e62d81e9027e94859996efe7ad48754 +Sonarr.widowmaker.4.0.0.87.linux-arm64.tar.gz SHA256 218e050b20d96655135327dac7282bef691212e99ad9ddd61038e62399671e37 +Sonarr.widowmaker.4.0.0.87.linux-arm64.tar.gz MD5 ab54102a461ad4d999e47d8eb8e2a553 +Sonarr.widowmaker.4.0.0.87.linux-x64.tar.gz SHA1 8e7fbe0a2b92364740a71d7e43f63ab6795b9cd0 +Sonarr.widowmaker.4.0.0.87.linux-x64.tar.gz SHA256 dfdac229953f2b6d4584ea95cc570a31a7d4478a3d7db41ef000bd04921cae18 +Sonarr.widowmaker.4.0.0.87.linux-x64.tar.gz MD5 38546f7562806c5d2d072b9df85950c8 diff --git a/spk/sonarr/Makefile b/spk/sonarr/Makefile index 9788bad93700..55d4bb3ed6cb 100644 --- a/spk/sonarr/Makefile +++ b/spk/sonarr/Makefile @@ -1,14 +1,11 @@ -SPK_NAME = nzbdrone +SPK_NAME = sonarr SPK_VERS = $(shell date +%Y%m%d) -SPK_REV = 20 +SPK_REV = 22 SPK_ICON = src/sonarr.png -# Mono not supported on ppc platforms. C.f. cross/mono/Makefile and references therein for details. -UNSUPPORTED_ARCHS = $(PPC_ARCHS) +DEPENDS = cross/sonarr cross/libstdc++ cross/sqlite -DEPENDS = cross/curl cross/mediainfo cross/sqlite cross/sonarr - -SPK_DEPENDS = "mono>3.6" +UNSUPPORTED_ARCHS = $(DOTNET_UNSUPPORTED_ARCHS) MAINTAINER = SynoCommunity DESCRIPTION = Sonarr is a PVR for newsgroup and torrent users. It can monitor multiple RSS feeds for new episodes of your favourite shows and will grab, sorts and rename them. It can also be configured to automatically upgrade the quality of files already downloaded if a better quality format becomes available. @@ -16,7 +13,7 @@ DESCRIPTION_FRE = Sonarr est un PVR pour les utilisateurs de groupes de discussi DESCRIPTION_SPN = Sonarr es un PVR para los usuarios de grupos de noticias y torrents. Se puede controlar múltiples canales RSS para nuevos episodios de sus programas favoritos y se agarra, tipo y les cambia el nombre. También puede ser configurado para actualizar automáticamente la calidad de los archivos ya descargados si un formato de mejor calidad disponible. DISPLAY_NAME = Sonarr STARTABLE = yes -CHANGELOG = "Enlarge the service start/stop timeout to 90 seconds." +CHANGELOG = "1. Enlarge the service start/stop timeout to 90 seconds
2. Avoid Sonarr downgrade on package update
3. Implement fix for alternate TMP directory
4. Upgrade to Sonarr 4.0.0.87" HOMEPAGE = https://sonarr.tv LICENSE = GPLv3 @@ -35,6 +32,14 @@ POST_STRIP_TARGET = sonarr_extra_install include ../../mk/spksrc.spk.mk +# use alternate TMPDIR as /tmp might be too small and not accessible on DSM >= 7.1. +USE_ALTERNATE_TMPDIR = 1 + +PACKAGE_VERSION = $(SPK_NAME_ARCH)-$(SPK_TCVERS)_$(SPK_VERS)-$(SPK_REV) +PACKAGE_AUTHOR = [SynoCommunity](https://synocommunity.com) + .PHONY: sonarr_extra_install sonarr_extra_install: - install -m 755 -d $(STAGING_DIR)/app + install -m 755 -d $(STAGING_DIR)/var/.config/Sonarr + install -m 644 src/config.xml $(STAGING_DIR)/var/.config/Sonarr/config.xml + @echo "PackageVersion=$(PACKAGE_VERSION)\nPackageAuthor=$(PACKAGE_AUTHOR)" > $(STAGING_DIR)/share/Sonarr/package_info diff --git a/spk/sonarr/src/config.xml b/spk/sonarr/src/config.xml new file mode 100644 index 000000000000..575b09483ea9 --- /dev/null +++ b/spk/sonarr/src/config.xml @@ -0,0 +1,7 @@ + + + main + False + True + BuiltIn + diff --git a/spk/sonarr/src/service-setup.sh b/spk/sonarr/src/service-setup.sh index f540d8e80464..3c6376d1812e 100644 --- a/spk/sonarr/src/service-setup.sh +++ b/spk/sonarr/src/service-setup.sh @@ -1,104 +1,84 @@ -PATH="${SYNOPKG_PKGDEST}/bin:${PATH}" -MONO_PATH="/var/packages/mono/target/bin" -MONO="${MONO_PATH}/mono" +SONARR="${SYNOPKG_PKGDEST}/share/Sonarr/bin/Sonarr" -# Sonarr uses the home directory to store it's ".config" +# Sonarr uses custom Config and PID directories HOME_DIR="${SYNOPKG_PKGVAR}" CONFIG_DIR="${SYNOPKG_PKGVAR}/.config" - -# Sonarr v2 -> v3 compatibility: -if [ -f "${SYNOPKG_PKGDEST}/share/NzbDrone/NzbDrone.exe" ]; then - # v2 installed - SONARR="${SYNOPKG_PKGDEST}/share/NzbDrone/NzbDrone.exe" - PID_FILE="${CONFIG_DIR}/NzbDrone/nzbdrone.pid" -else - # v3 installed - SONARR="${SYNOPKG_PKGDEST}/share/Sonarr/Sonarr.exe" - PID_FILE="${CONFIG_DIR}/Sonarr/sonarr.pid" -fi - -# Allow correct Sonarr SPK version checking (v2 or v3) -if [ -f "${SYNOPKG_PKGINST_TEMP_DIR}/share/NzbDrone/NzbDrone.exe" ]; then - # v2 SPK - SPK_SONARR="${SYNOPKG_PKGINST_TEMP_DIR}/share/NzbDrone/NzbDrone.exe" -else - # v3 SPK - SPK_SONARR="${SYNOPKG_PKGINST_TEMP_DIR}/share/Sonarr/Sonarr.exe" -fi +SONARR_CONFIG_DIR="${CONFIG_DIR}/Sonarr" +PID_FILE="${SONARR_CONFIG_DIR}/sonarr.pid" # Some have it stored in the root of package LEGACY_CONFIG_DIR="${SYNOPKG_PKGDEST}/.config" -# workaround for mono bug with armv5 (https://github.com/mono/mono/issues/12537) -if [ "$SYNOPKG_DSM_ARCH" == "88f6281" -o "$SYNOPKG_DSM_ARCH" == "88f6282" ]; then - MONO="MONO_ENV_OPTIONS='-O=-aot,-float32' ${MONO}" -fi - +# for DSM < 7 only: GROUP="sc-download" LEGACY_GROUP="sc-media" -SERVICE_COMMAND="env PATH=${MONO_PATH}:${PATH} HOME=${HOME_DIR} LD_LIBRARY_PATH=${SYNOPKG_PKGDEST}/lib ${MONO} ${SONARR}" +SERVICE_COMMAND="env HOME=${HOME_DIR} LD_LIBRARY_PATH=${SYNOPKG_PKGDEST}/lib ${SONARR}" SVC_BACKGROUND=y SVC_WAIT_TIMEOUT=90 +validate_preinst () +{ + # use install_log to write to installer log file. + install_log "validate_preinst ${SYNOPKG_PKG_STATUS}" + + # check if the installed distribution is a legacy version + if [ -f "${SYNOPKG_PKGDEST}/share/NzbDrone/NzbDrone.exe" ]; then + # v2 installed + exit 1 + fi +} + service_postinst () { - mkdir -p ${CONFIG_DIR} - set_unix_permissions "${CONFIG_DIR}" + echo "Set update required" + # Make Sonarr do an update check on start to avoid possible Sonarr + # downgrade when synocommunity package is updated + touch "${SONARR_CONFIG_DIR}/update_required" + + if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then + set_unix_permissions "${CONFIG_DIR}" + fi } service_preupgrade () { - # We have to account for legacy folder in the root - # It should go, after the upgrade, into /var/.config/ - # The /var/ folder gets automatically copied by service-installer after this - if [ -d "${LEGACY_CONFIG_DIR}" ]; then - echo "Moving ${LEGACY_CONFIG_DIR} to ${CONFIG_DIR}" - mv ${LEGACY_CONFIG_DIR} ${CONFIG_DIR} >> ${INST_LOG} 2>&1 - fi - if [ ! -d ${CONFIG_DIR} ]; then - # Create, in case it's missing for some reason - mkdir -p ${CONFIG_DIR} >> ${INST_LOG} 2>&1 + if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -ge 7 ]; then + # ensure config is in @appdata folder + if [ -d "${LEGACY_CONFIG_DIR}" ]; then + if [ "$(realpath "${LEGACY_CONFIG_DIR}")" != "$(realpath "${CONFIG_DIR}")" ]; then + echo "Move ${LEGACY_CONFIG_DIR} to ${CONFIG_DIR}" + mv "${LEGACY_CONFIG_DIR}" "${CONFIG_DIR}" 2>&1 + fi + fi fi - # Is Installed Sonarr Binary Ver. >= SPK Sonarr Binary Ver.? - CUR_VER=$(${MONO_PATH}/monodis --assembly ${SONARR} | grep "Version:" | awk '{print $2}') - echo "Installed Sonarr Binary: ${CUR_VER}" - SPK_VER=$(${MONO_PATH}/monodis --assembly ${SPK_SONARR} | grep "Version:" | awk '{print $2}') - echo "Requested Sonarr Binary: ${SPK_VER}" - function version_compare() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; } - if version_compare $CUR_VER $SPK_VER; then - echo 'KEEP_CUR="yes"' > ${CONFIG_DIR}/KEEP_VAR - echo "[KEEPING] Installed Sonarr Binary - Upgrading Package Only" - mv ${SYNOPKG_PKGDEST}/share ${SYNOPKG_PKGVAR} - else - echo 'KEEP_CUR="no"' > ${CONFIG_DIR}/KEEP_VAR - echo "[REPLACING] Installed Sonarr Binary" - fi + # never update Sonarr distribution, use internal updater only + [ -d "${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup" ] && rm -rf "${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup" + echo "Backup existing distribution to ${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup" + mkdir -p "${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup" 2>&1 + rsync -aX "${SYNOPKG_PKGDEST}/share" "${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup/" 2>&1 } service_postupgrade () { - # Restore Current Sonarr Binary If Current Ver. >= SPK Ver. - . ${CONFIG_DIR}/KEEP_VAR - if [ "$KEEP_CUR" == "yes" ]; then - echo "Restoring Sonarr version from before upgrade" - rm -fr ${SYNOPKG_PKGDEST}/share - mv ${SYNOPKG_PKGVAR}/share ${SYNOPKG_PKGDEST}/ - set_unix_permissions "${SYNOPKG_PKGDEST}/share" + # restore Sonarr distribution + if [ -d "${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup/share" ]; then + echo "Restore previous distribution from ${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup" + rm -rf "${SYNOPKG_PKGDEST}/share/Sonarr/bin" 2>&1 + # prevent overwrite of updated package_info + rsync -aX --exclude=package_info "${SYNOPKG_TEMP_UPGRADE_FOLDER}/backup/share/" "${SYNOPKG_PKGDEST}/share" 2>&1 fi - set_unix_permissions "${CONFIG_DIR}" - - # If backup was created before new-style packages - # new updates/backups will fail due to permissions (see #3185) - if [ -d "/tmp/nzbdrone_backup" ] || [ -d "/tmp/nzbdrone_update" ] || [ -d "/tmp/sonarr_backup" ] || [ -d "/tmp/sonarr_update" ]; then - set_unix_permissions "/tmp/nzbdrone_backup" - set_unix_permissions "/tmp/nzbdrone_update" - set_unix_permissions "/tmp/sonarr_backup" - set_unix_permissions "/tmp/sonarr_update" + if [ "${SYNOPKG_DSM_VERSION_MAJOR}" -lt 7 ]; then + set_unix_permissions "${SYNOPKG_PKGDEST}/share" + # If backup was created before new-style packages + # new updates/backups will fail due to permissions (see #3185) + if [ -d "/tmp/nzbdrone_backup" ] || [ -d "/tmp/nzbdrone_update" ] || [ -d "/tmp/sonarr_backup" ] || [ -d "/tmp/sonarr_update" ]; then + set_unix_permissions "/tmp/nzbdrone_backup" + set_unix_permissions "/tmp/nzbdrone_update" + set_unix_permissions "/tmp/sonarr_backup" + set_unix_permissions "/tmp/sonarr_update" + fi fi - - # Remove upgrade Flag - rm ${CONFIG_DIR}/KEEP_VAR -} +} \ No newline at end of file diff --git a/spk/sonarr/src/sonarr.png b/spk/sonarr/src/sonarr.png index 815750aa063546eeadf8f6295df5ffb3774cfc76..dba1774db70b852a30e07c6d468f4bdbbe4df468 100644 GIT binary patch literal 11318 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