You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docker-plex/root/etc/s6-overlay/s6-rc.d/init-plex-update/run

143 lines
5.1 KiB

#!/usr/bin/with-contenv bash
# shellcheck shell=bash
if [[ -n ${LSIO_READ_ONLY_FS} ]] || [[ -n ${LSIO_NON_ROOT_USER} ]]; then
echo "Runtime update not supported with read-only or non-root operation, skipping."
exit 0
fi
# If docker manages versioning exit
if [[ -n "${VERSION}" ]] && [[ "${VERSION}" == "docker" ]]; then
echo "Docker is used for versioning skip update check"
exit 0
fi
# test if plex is installed and try re-pulling latest if not
if (dpkg --get-selections plexmediaserver | grep -wq "install"); then
:
else
echo "for some reason plex doesn't appear to be installed, pulling a new copy and exiting out of update script"
curl -o /tmp/plexmediaserver.deb -L \
"${PLEX_DOWNLOAD}/${REMOTE_VERSION}/debian/plexmediaserver_${REMOTE_VERSION}_${PLEX_ARCH}.deb"
dpkg -i --force-confold /tmp/plexmediaserver.deb
rm -f /tmp/plexmediaserver.deb
exit 0
fi
# set no update message
if [[ -e /tmp/no-version.nfo ]]; then
rm /tmp/no-version.nfo
fi
NOVERSION_SET='/tmp/no-version.nfo'
cat >"${NOVERSION_SET}" <<-EOFVERSION
#######################################################
# Update routine will not run because you haven't set #
# the VERSION variable or you opted out of updates. #
# For more information checkout :- #
# https://github.com/linuxserver/docker-plex #
#######################################################
EOFVERSION
# set update failed message
if [[ -e /tmp/update_fail.nfo ]]; then
rm /tmp/update_fail.nfo
fi
UPGRADE_FAIL='/tmp/update_fail.nfo'
cat >"${UPGRADE_FAIL}" <<-EOFFAIL
########################################################
# Upgrade attempt failed, this could be because either #
# plex update site is down, local network issues, or #
# you were trying to get a version that simply doesn't #
# exist, check over the VERSION variable thoroughly & #
# correct it or try again later. #
########################################################
EOFFAIL
# test for no version set or opt out for auto updates
if [[ -z "${VERSION}" ]] || [[ "${VERSION}" == "0" ]] || [[ -n "${ADVANCED_DISABLEUPDATES}" ]]; then
printf '\n\n\n%s\n\n\n' "$(</tmp/no-version.nfo)"
exit 0
fi
# set header for no preferences/token message
if [[ -e /tmp/no-token.nfo ]]; then
rm /tmp/no-token.nfo
fi
NOTOKEN_SET='/tmp/no-token.nfo'
cat >"${NOTOKEN_SET}" <<-EOFTOKEN
#####################################################
# Login via the webui at http://<ip>:32400/web #
# and restart the container, because there was no #
EOFTOKEN
# if preferences files doesn't exist, exit out
PLEX_MEDIA_SERVER_PREFERENCES="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}/Plex Media Server/Preferences.xml"
if [[ ! -e "${PLEX_MEDIA_SERVER_PREFERENCES}" ]]; then
cat >>"${NOTOKEN_SET}" <<-EOFTOKEN
# preference file found, possibly first startup. #
#####################################################
EOFTOKEN
printf '\n\n\n%s\n\n\n' "$(</tmp/no-token.nfo)"
exit 0
fi
# attempt to read plex token
PLEX_TOKEN=$(sed -n 's/.*PlexOnlineToken="//p' \
"${PLEX_MEDIA_SERVER_PREFERENCES}" |
sed "s/\".*//")
# if plex token isn't found, exit out
if [[ -z "${PLEX_TOKEN}" ]]; then
cat >>"${NOTOKEN_SET}" <<-EOFTOKEN
# plex token found in the preference file #
#####################################################
EOFTOKEN
printf '\n\n\n%s\n\n\n' "$(</tmp/no-token.nfo)"
exit 0
fi
# determine installed version of plex
INSTALLED_VERSION=$(dpkg-query -W -f='${Version}' plexmediaserver)
# start update routine
if [[ "${VERSION,,}" == "latest" ]] || [[ "${VERSION,,}" == "plexpass" ]] || [[ "${PLEXPASS}" == "1" ]]; then
if [[ "${PLEX_ARCH}" == "amd64" ]]; then
PLEX_URL_ARCH="x86_64"
elif [[ "${PLEX_ARCH}" == "armhf" ]]; then
PLEX_URL_ARCH="armv7hf_neon"
elif [[ "${PLEX_ARCH}" == "arm64" ]]; then
PLEX_URL_ARCH="aarch64"
fi
REMOTE_VERSION=$(curl -s "https://plex.tv/downloads/details/5?distro=debian&build=linux-${PLEX_URL_ARCH}&channel=8&X-Plex-Token=${PLEX_TOKEN}" | grep -oP 'version="\K[^"]+' | tail -n 1)
elif [[ "${VERSION,,}" == "public" ]]; then
REMOTE_VERSION=$(curl -s 'https://plex.tv/api/downloads/5.json' | jq -r '.computer.Linux.version')
else
REMOTE_VERSION="${VERSION}"
fi
if [[ "${REMOTE_VERSION}" == "${INSTALLED_VERSION}" ]]; then
echo "No update required"
exit 0
fi
if [[ -z "${REMOTE_VERSION}" ]]; then
echo "*** Unable to fetch version from Plex remote endpoint or empty VERSION supplied, please check your configuration ***"
exit 0
fi
echo "Attempting to upgrade to: ${REMOTE_VERSION}"
rm -f /tmp/plexmediaserver_*.deb
wget -nv -P /tmp \
"${PLEX_DOWNLOAD}/${REMOTE_VERSION}/debian/plexmediaserver_${REMOTE_VERSION}_${PLEX_ARCH}.deb"
last=$?
# test if deb file size is ok, or if download failed
if [[ "${last}" -gt "0" ]] || [[ $(stat -c %s "/tmp/plexmediaserver_${REMOTE_VERSION}_${PLEX_ARCH}.deb") -lt 10000 ]]; then
printf '\n\n\n%s\n\n\n' "$(</tmp/update_fail.nfo)"
exit 0
# if ok, try to install it.
else
dpkg -i --force-confold "/tmp/plexmediaserver_${REMOTE_VERSION}_${PLEX_ARCH}.deb"
rm -f /tmp/plexmediaserver_*.deb
fi