diff --git a/root/etc/s6-overlay/s6-rc.d/init-plex-chown/run b/root/etc/s6-overlay/s6-rc.d/init-plex-chown/run index 1a50eab..e7863da 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-plex-chown/run +++ b/root/etc/s6-overlay/s6-rc.d/init-plex-chown/run @@ -1,18 +1,19 @@ #!/usr/bin/with-contenv bash +# shellcheck shell=bash # create folders -if [ ! -d "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" ]; then \ +if [[ ! -d "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" ]]; then mkdir -p "${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" lsiown -R abc:abc /config fi # check Library permissions PUID=${PUID:-911} -if [ ! "$(stat -c %u /config/Library)" = "$PUID" ]; then +if [[ ! "$(stat -c %u /config/Library)" == "${PUID}" ]]; then echo "Change in ownership detected, please be patient while we chown existing files" echo "This could take some time" lsiown abc:abc -R \ - /config/Library + /config/Library fi # remove plex pid after unclean stop @@ -21,15 +22,15 @@ if [[ -f "/config/Library/Application Support/Plex Media Server/plexmediaserver. fi # set permissions on Plex Transcoder Temp Directory -PREFNAME="/config/Library/Application Support/Plex Media Server/Preferences.xml" -if [[ -f "${PREFNAME}" ]]; then +PLEX_MEDIA_SERVER_PREFERENCES="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}/Plex Media Server/Preferences.xml" +if [[ -f "${PLEX_MEDIA_SERVER_PREFERENCES}" ]]; then TranscoderTempDirectory='\bTranscoderTempDirectory="([^"]+)"' while IFS= read -r line; do if [[ ${line} =~ ${TranscoderTempDirectory} ]] && [[ -d "${BASH_REMATCH[1]}" ]]; then echo "Setting permissions on ${BASH_REMATCH[1]}" lsiown -R abc:abc "${BASH_REMATCH[1]}" fi - done <"${PREFNAME}" + done <"${PLEX_MEDIA_SERVER_PREFERENCES}" fi # permissions (non-recursive) on config root and folders diff --git a/root/etc/s6-overlay/s6-rc.d/init-plex-claim/run b/root/etc/s6-overlay/s6-rc.d/init-plex-claim/run index c597876..a94451e 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-plex-claim/run +++ b/root/etc/s6-overlay/s6-rc.d/init-plex-claim/run @@ -1,83 +1,89 @@ #!/usr/bin/with-contenv bash +# shellcheck shell=bash -if grep -qs "PlexOnlineToken" "/config/Library/Application Support/Plex Media Server/Preferences.xml"; then +PLEX_MEDIA_SERVER_PREFERENCES="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}/Plex Media Server/Preferences.xml" + +if grep -qs "PlexOnlineToken" "${PLEX_MEDIA_SERVER_PREFERENCES}"; then echo "**** Server already claimed ****" exit 0 -elif [ -z "$PLEX_CLAIM" ]; then +elif [[ -z "$PLEX_CLAIM" ]]; then echo "**** Server is unclaimed, but no claim token has been set ****" exit 0 fi -PREFNAME="/config/Library/Application Support/Plex Media Server/Preferences.xml" -if [ ! -f "${PREFNAME}" ]; then + +if [[ ! -f "${PLEX_MEDIA_SERVER_PREFERENCES}" ]]; then UMASK_SET="${UMASK_SET:-022}" umask "$UMASK_SET" echo "Temporarily starting Plex Media Server." - export PLEX_MEDIA_SERVER_INFO_MODEL=$(uname -m) - export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION=$(uname -r) + PLEX_MEDIA_SERVER_INFO_MODEL=$(uname -m) + export PLEX_MEDIA_SERVER_INFO_MODEL + PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION=$(uname -r) + export PLEX_MEDIA_SERVER_INFO_PLATFORM_VERSION s6-setuidgid abc /bin/bash -c \ - 'LD_LIBRARY_PATH=/usr/lib/plexmediaserver:/usr/lib/plexmediaserver/lib /usr/lib/plexmediaserver/Plex\ Media\ Server' & PID=$! + 'LD_LIBRARY_PATH=/usr/lib/plexmediaserver:/usr/lib/plexmediaserver/lib /usr/lib/plexmediaserver/Plex\ Media\ Server' & + PID=$! echo "Waiting for Plex to generate its config" DBNAME="/config/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db-wal" - until [ -f "${DBNAME}" ]; do + until [[ -f "${DBNAME}" ]]; do sleep 1 done while true; do echo "Waiting for database creation to complete..." - if [ -z "${COMPARE_MD5+x}" ]; then - COMPARE_MD5=$(md5sum "${DBNAME}"| cut -c1-8) + if [[ -z "${COMPARE_MD5+x}" ]]; then + COMPARE_MD5=$(md5sum "${DBNAME}" | cut -c1-8) sleep 3 else sleep 3 - CURRENT_MD5=$(md5sum "${DBNAME}"| cut -c1-8) - if [ "${CURRENT_MD5}" == "${COMPARE_MD5}" ]; then + CURRENT_MD5=$(md5sum "${DBNAME}" | cut -c1-8) + if [[ "${CURRENT_MD5}" == "${COMPARE_MD5}" ]]; then break else - COMPARE_MD5=$(md5sum "${DBNAME}"| cut -c1-8) + COMPARE_MD5=$(md5sum "${DBNAME}" | cut -c1-8) fi fi done - until grep -qs "ProcessedMachineIdentifier" "${PREFNAME}"; do + until grep -qs "ProcessedMachineIdentifier" "${PLEX_MEDIA_SERVER_PREFERENCES}"; do sleep 1 done while true; do echo "Waiting for pref file creation to complete..." - if [ -z "${PREF_COMPARE_MD5+x}" ]; then - PREF_COMPARE_MD5=$(md5sum "${PREFNAME}"| cut -c1-8) + if [[ -z "${PREF_COMPARE_MD5+x}" ]]; then + PREF_COMPARE_MD5=$(md5sum "${PLEX_MEDIA_SERVER_PREFERENCES}" | cut -c1-8) sleep 3 else sleep 3 - PREF_CURRENT_MD5=$(md5sum "${PREFNAME}"| cut -c1-8) - if [ "${PREF_CURRENT_MD5}" == "${PREF_COMPARE_MD5}" ]; then + PREF_CURRENT_MD5=$(md5sum "${PLEX_MEDIA_SERVER_PREFERENCES}" | cut -c1-8) + if [[ "${PREF_CURRENT_MD5}" == "${PREF_COMPARE_MD5}" ]]; then break else - PREF_COMPARE_MD5=$(md5sum "${PREFNAME}"| cut -c1-8) + PREF_COMPARE_MD5=$(md5sum "${PLEX_MEDIA_SERVER_PREFERENCES}" | cut -c1-8) fi fi done echo "Stopping Plex to claim server" - while ps -p $PID > /dev/null; do + while ps -p $PID >/dev/null; do kill $PID sleep 1 done echo "Plex stopped" fi -ProcessedMachineIdentifier=$(sed -n "s/^.*ProcessedMachineIdentifier=\"\([^\"]*\)\".*$/\1/p" "${PREFNAME}") +ProcessedMachineIdentifier=$(sed -n "s/^.*ProcessedMachineIdentifier=\"\([^\"]*\)\".*$/\1/p" "${PLEX_MEDIA_SERVER_PREFERENCES}") PlexOnlineToken="$(curl -X POST \ -H 'X-Plex-Client-Identifier: '"${ProcessedMachineIdentifier}" \ - -H 'X-Plex-Product: Plex Media Server'\ + -H 'X-Plex-Product: Plex Media Server' \ -H 'X-Plex-Version: 1.1' \ -H 'X-Plex-Provides: server' \ -H 'X-Plex-Platform: Linux' \ -H 'X-Plex-Platform-Version: 1.0' \ -H 'X-Plex-Device-Name: PlexMediaServer' \ -H 'X-Plex-Device: Linux' \ - "https://plex.tv/api/claim/exchange?token=${PLEX_CLAIM}" \ - | sed -n 's/.*\(.*\)<\/authentication-token>.*/\1/p')" + "https://plex.tv/api/claim/exchange?token=${PLEX_CLAIM}" | + sed -n 's/.*\(.*\)<\/authentication-token>.*/\1/p')" -if [ -n "$PlexOnlineToken" ]; then +if [[ -n "$PlexOnlineToken" ]]; then echo "Server claimed successfully, navigate to http://serverip:32400/web to complete plex setup." - sed -i "s/\/>/ PlexOnlineToken=\"${PlexOnlineToken}\"\/>/g" "${PREFNAME}" + sed -i "s/\/>/ PlexOnlineToken=\"${PlexOnlineToken}\"\/>/g" "${PLEX_MEDIA_SERVER_PREFERENCES}" else echo "Unable to claim Plex server. Either manually claim by connecting to http://serverip:32400/web from the same network subnet, or recreate container with a new claim token." fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-plex-gid-video/run b/root/etc/s6-overlay/s6-rc.d/init-plex-gid-video/run index c07fe60..cd01d81 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-plex-gid-video/run +++ b/root/etc/s6-overlay/s6-rc.d/init-plex-gid-video/run @@ -1,9 +1,9 @@ #!/usr/bin/with-contenv bash +# shellcheck shell=bash FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null) -for i in $FILES -do +for i in ${FILES}; do VIDEO_GID=$(stat -c '%g' "${i}") VIDEO_UID=$(stat -c '%u' "${i}") # check if user matches device @@ -11,13 +11,13 @@ do echo "**** permissions for ${i} are good ****" else # check if group matches and that device has group rw - if id -G abc | grep -qw "${VIDEO_GID}" && [ $(stat -c '%A' "${i}" | cut -b 5,6) = "rw" ]; then + if id -G abc | grep -qw "${VIDEO_GID}" && [[ $(stat -c '%A' "${i}" | cut -b 5,6) == "rw" ]]; then echo "**** permissions for ${i} are good ****" # check if device needs to be added to video group elif ! id -G abc | grep -qw "${VIDEO_GID}"; then # check if video group needs to be created VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}') - if [ -z "${VIDEO_NAME}" ]; then + if [[ -z "${VIDEO_NAME}" ]]; then VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c4)" groupadd "${VIDEO_NAME}" groupmod -g "${VIDEO_GID}" "${VIDEO_NAME}" @@ -27,7 +27,7 @@ do usermod -a -G "${VIDEO_NAME}" abc fi # check if device has group rw - if [ $(stat -c '%A' "${i}" | cut -b 5,6) != "rw" ]; then + if [[ $(stat -c '%A' "${i}" | cut -b 5,6) != "rw" ]]; then echo -e "**** The device ${i} does not have group read/write permissions, attempting to fix inside the container. ****" chmod g+rw "${i}" fi diff --git a/root/etc/s6-overlay/s6-rc.d/init-plex-update/run b/root/etc/s6-overlay/s6-rc.d/init-plex-update/run index 6e2b65b..33b9968 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-plex-update/run +++ b/root/etc/s6-overlay/s6-rc.d/init-plex-update/run @@ -1,7 +1,8 @@ #!/usr/bin/with-contenv bash +# shellcheck shell=bash # If docker manages versioning exit -if [ "${VERSION}" ] && [ "${VERSION}" == 'docker' ]; then +if [[ -n "${VERSION}" ]] && [[ "${VERSION}" == "docker" ]]; then echo "Docker is used for versioning skip update check" exit 0 fi @@ -12,19 +13,20 @@ 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" && \ + "${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 -[[ -e /tmp/no-version.nfo ]] && \ +if [[ -e /tmp/no-version.nfo ]]; then rm /tmp/no-version.nfo +fi NOVERSION_SET='/tmp/no-version.nfo' -cat > "${NOVERSION_SET}" <<-EOFVERSION +cat >"${NOVERSION_SET}" <<-EOFVERSION ####################################################### -# Update routine will not run because you havent set # +# 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 # @@ -32,10 +34,11 @@ cat > "${NOVERSION_SET}" <<-EOFVERSION EOFVERSION # set update failed message -[[ -e /tmp/update_fail.nfo ]] && \ +if [[ -e /tmp/update_fail.nfo ]]; then rm /tmp/update_fail.nfo +fi UPGRADE_FAIL='/tmp/update_fail.nfo' -cat > "${UPGRADE_FAIL}" <<-EOFFAIL +cat >"${UPGRADE_FAIL}" <<-EOFFAIL ######################################################## # Upgrade attempt failed, this could be because either # # plex update site is down, local network issues, or # @@ -45,25 +48,27 @@ cat > "${UPGRADE_FAIL}" <<-EOFFAIL ######################################################## EOFFAIL -# test for no version set or opt out for autoupdates -if [[ -z "$VERSION" ]] || [[ "$VERSION" == "0" ]] || [[ -n "$ADVANCED_DISABLEUPDATES" ]]; then +# 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' "$( "${NOTOKEN_SET}" <<-EOFTOKEN +cat >"${NOTOKEN_SET}" <<-EOFTOKEN ##################################################### # Login via the webui at http://:32400/web # # and restart the container, because there was no # EOFTOKEN # if preferences files doesn't exist, exit out -if [ ! -e "/config/Library/Application Support/Plex Media Server/Preferences.xml" ]; then - cat >> "${NOTOKEN_SET}" <<-EOFTOKEN +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 @@ -72,13 +77,13 @@ EOFTOKEN fi # attempt to read plex token -PLEX_TOKEN=$( sed -n 's/.*PlexOnlineToken="//p' \ - "/config/Library/Application Support/Plex Media Server/Preferences.xml" \ - | sed "s/\".*//") +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 +if [[ -z "${PLEX_TOKEN}" ]]; then + cat >>"${NOTOKEN_SET}" <<-EOFTOKEN # plex token found in the preference file # ##################################################### EOFTOKEN @@ -90,22 +95,22 @@ fi INSTALLED_VERSION=$(dpkg-query -W -f='${Version}' plexmediaserver) # start update routine -if [[ "${VERSION,,}" = latest ]] || [[ "${VERSION,,}" = plexpass ]] || [[ "$PLEXPASS" == "1" ]]; then - if [[ "${PLEX_ARCH}" = amd64 ]]; then +if [[ "${VERSION,,}" == "latest" ]] || [[ "${VERSION,,}" == "plexpass" ]] || [[ "${PLEXPASS}" == "1" ]]; then + if [[ "${PLEX_ARCH}" == "amd64" ]]; then PLEX_URL_ARCH="x86_64" - elif [[ "${PLEX_ARCH}" = armhf ]]; then + elif [[ "${PLEX_ARCH}" == "armhf" ]]; then PLEX_URL_ARCH="armv7hf_neon" - elif [[ "${PLEX_ARCH}" = arm64 ]]; then + 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/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 +if [[ "${REMOTE_VERSION}" == "${INSTALLED_VERSION}" ]]; then echo "No update required" exit 0 fi @@ -115,18 +120,18 @@ if [[ -z "${REMOTE_VERSION}" ]]; then exit 0 fi -echo "Atempting to upgrade to: $REMOTE_VERSION" +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 +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' "$(