nzbgetcom / nzbget

Efficient usenet downloader
https://nzbget.com
GNU General Public License v2.0
347 stars 16 forks source link

QNAP package upgrade (manually) is overwritting existing nzbget.conf #279

Closed kouze closed 5 months ago

kouze commented 5 months ago

Is there already an issue for your problem?

NZBGet Version

v24.1-stable

Platform

NAS/Synology/QNAP

Environment

Device: QNAP TS-873A
OS version: QTS 5.1.6.2722 64bit
CPU architecture: x86 64bit
Running in Docer: No
Package installed: nzbget_24.0_x86_64_native.qpkg upgraded with nzbget_24.1_x86_64_native.qpkg

Current Behavior

When upgrading nzbget via package manager in QTS (App Center), the existing configuration of nzbget is getting overwritten by the new version

Expected Behavior

If a configuration already exists, it should not overwrite it

Steps To Reproduce

  1. install the package nzbget_24.0 manually on QTS
  2. make changes in the config, save
  3. upgrade nzbget using package nzbget_24.1
  4. previous configuration is lost

Logs

No response

Extra information

No response

OneCDOnly commented 5 months ago

Just had a look at this issue.

The problem is: the QPKG installer is overwriting the existing nzbget.conf file with the one contained within the new QPKG (this is normal behaviour for QPKGs). nzbget.conf really needs to be saved elsewhere, like a config path, and then that file specified when launching the daemon.

I'll see if I can throw something together to work around this.

OneCDOnly commented 5 months ago

Here's the shortest thing I could think-of without modifying the build script. The original nzbget.conf file is included in the QPKG, but, on first run of the service-script, is copied to nzbget.conf.qnap, thereafter, the .qnap file is used by the daemon:

#!/bin/sh
CONF=/etc/config/qpkg.conf
QPKG_NAME="nzbget"
QPKG_ROOT=`/sbin/getcfg $QPKG_NAME Install_Path -f ${CONF}`
APACHE_ROOT=`/sbin/getcfg SHARE_DEF defWeb -d Qweb -f /etc/config/def_share.info`
export QNAP_QPKG=$QPKG_NAME
DEFAULT_CONF_FILE=$QPKG_ROOT/nzbget/nzbget.conf
CONF_FILE=$DEFAULT_CONF_FILE.qnap

[[ -e $CONF_FILE ]] || cp "$DEFAULT_CONF_FILE" "$CONF_FILE"

case "$1" in
  start)
    ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $CONF)

    if [ "$ENABLED" != "TRUE" ]; then
        echo "$QPKG_NAME is disabled."
        exit 1
    fi

    if /bin/pidof nzbget &>/dev/null; then
        echo "$QPKG_NAME is already running."
        exit 0
    fi

    cd $QPKG_ROOT/nzbget
    $QPKG_ROOT/nzbget/nzbget -c "$CONF_FILE" -D
    ;;

  stop)
    $QPKG_ROOT/nzbget/nzbget -c "$CONF_FILE" -Q

    for ((i=0; i<=10; i++)); do
        /bin/pidof nzbget &>/dev/null || break
        sleep 1
    done
    ;;

  restart)
    $0 stop
    $0 start
    ;;

  remove)
    ;;

  *)
    echo "Usage: $0 {start|stop|restart|remove}"
    exit 1
esac

exit 0

Thoughts please?

Should probably mention: the next QPKG update (even if it includes the mods shown above) will also result in an overwritten nzbget.conf file. :(

edit: although, I do recall seeing a preinstall function in package_routines. It might be possible to autosave the existing conf file before this package is installed.

OneCDOnly commented 5 months ago

This'll prevent the next QPKG update overwriting the existing nzbget.conf. package_routines would need to be modified before the next build:

######################################################################
# Define any package specific operations that shall be performed when
# the package is installed.
######################################################################
pkg_pre_install(){

DEFAULT_CONF_FILE=$SYS_QPKG_INSTALL_PATH/nzbget/nzbget.conf
CONF_FILE=$DEFAULT_CONF_FILE.qnap

[[ ! -e $CONF_FILE && -e $DEFAULT_CONF_FILE ]] && cp "$DEFAULT_CONF_FILE" "$CONF_FILE"

true

}
OneCDOnly commented 5 months ago

Okiedoke, so I'll put these in a PR then. 🤓