Add new entrypoint/config script

This commit is contained in:
Joe Groocock 2018-08-19 20:27:47 +01:00
parent 93aeb86ab0
commit f4602958fd
Signed by: frebib
GPG Key ID: E0B16BEACFBB6A86
4 changed files with 109 additions and 49 deletions

View File

@ -147,8 +147,9 @@ RUN find -exec sh -c 'file "{}" | grep -q ELF && strip --strip-debug "{}"' \; \
&& mv usr/bin/curl /output/usr/bin \
&& mv usr/bin/xml /output/usr/bin/xmlstarlet
ADD start_pms /output/usr/sbin/start_pms
RUN chmod +x /output/usr/sbin/start_pms
ADD entrypoint /output/usr/local/bin/
ADD *.sh /output/usr/local/bin/
RUN chmod +x /output/usr/local/bin/*
#=========================
@ -172,16 +173,26 @@ LABEL maintainer="Spritsail <plex@spritsail.io>" \
io.spritsail.version.libstdcpp=${LIBSTDCPP_VER} \
io.spritsail.version.xmlstarlet=${XMLSTAR_VER}
ENV SUID=900 SGID=900
WORKDIR /usr/lib/plexmediaserver
COPY --from=builder /output/ /
ENV SUID=900 SGID=900 \
PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="6" \
PLEX_MEDIA_SERVER_MAX_STACK_SIZE="3000" \
PLEX_MEDIA_SERVER_TMPDIR="/tmp" \
PLEX_MEDIA_SERVER_HOME="/usr/lib/plexmediaserver" \
PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR="/var/lib/plexmediaserver"
HEALTHCHECK --interval=10s --timeout=5s \
CMD [ "wget", "-O", "/dev/null", "-T", "10", "-q", "localhost:32400/identity" ]
WORKDIR /usr/lib/plexmediaserver
EXPOSE 32400
VOLUME ["/config", "/transcode"]
RUN mkdir -p "$PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR" \
&& ln -sfv /config "$PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR/Plex Media Server"
ENTRYPOINT ["/sbin/tini", "--"]
CMD ["/usr/sbin/start_pms"]
CMD ["/usr/local/bin/entrypoint"]

28
entrypoint Executable file
View File

@ -0,0 +1,28 @@
#!/bin/sh
set -e
if su-exec -e [ ! -w "/config" ]; then
2>&1 echo "Warning: No permission to write in '/config' directory."
2>&1 echo " Correcting permissions to prevent a crash"
2>&1 echo
(
set -x
chown $SUID:$SGID /config
chmod o+rw /config
)
fi
exec su-exec -e sh <<EOF
# Generate a default configuration, including some user-specified values
if [ ! -e "/config/Preferences.xml" ]; then
gen-config.sh
fi
# Duplicate the Plex logs to stdout (docker logs)
tail -Fn 0 "/config/Logs/Plex Media Server.log" 2>/dev/null &
# Use a random pidfile
export PLEX_MEDIA_SERVER_PIDFILE="\$(mktemp -ut pms-pid.XXXXXX)"
exec "\$PLEX_MEDIA_SERVER_HOME/Plex Media Server"
EOF

64
gen-config.sh Executable file
View File

@ -0,0 +1,64 @@
#!/bin/sh
set -e
PREF_FILE="${1:-/config/Preferences.xml}"
getPref() {
xmlstarlet sel -T -t -m "/Preferences" -v "@$1" -n "${PREF_FILE}"
}
setPref() {
count="$(xmlstarlet sel -t -v "count(/Preferences/@$1)" "${PREF_FILE}")"
if [ $(($count + 0)) -gt 0 ]; then
xmlstarlet ed --inplace --update "/Preferences/@$1" -v "$2" "${PREF_FILE}" 2>/dev/null
else
xmlstarlet ed --inplace --insert "/Preferences" --type attr -n "$1" -v "$2" "${PREF_FILE}" 2>/dev/null
fi
}
# Create a default config file allowing external access
echo -e $'<?xml version="1.0" encoding="utf-8"?>\n<Preferences />' > "/config/Preferences.xml"
# Enforced defaults. These can be changed manually afterwards.
setPref "AcceptedEULA" "1"
setPref "TranscoderTempDirectory" "/transcode"
# The following below is ripped directly from the official (inferior) Plex container:
# https://github.com/plexinc/pms-docker/blob/155f00c71b50f94c73ffea0aae16cc61ef957df7/root/etc/cont-init.d/40-plex-first-run
# Setup Server's client identifier
serial="$(getPref "MachineIdentifier")"
if [ -z "${serial}" ]; then
serial="$(cat /proc/sys/kernel/random/uuid)"
setPref "MachineIdentifier" "${serial}"
fi
clientId="$(getPref "ProcessedMachineIdentifier")"
if [ -z "${clientId}" ]; then
clientId="$(echo -n "${serial}- Plex Media Server" | sha1sum | cut -b 1-40)"
setPref "ProcessedMachineIdentifier" "${clientId}"
fi
# Get server token and only turn claim token into server token if we have former but not latter.
token="$(getPref "PlexOnlineToken")"
if [ ! -z "${PLEX_CLAIM}" ] && [ -z "${token}" ]; then
echo "Attempting to obtain server token from claim token"
loginInfo="$(curl -X POST \
-H 'X-Plex-Client-Identifier: '${clientId} \
-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}")"
token="$(echo "$loginInfo" | sed -n 's/.*<authentication-token>\(.*\)<\/authentication-token>.*/\1/p')"
if [ "$token" ]; then
echo "Token obtained successfully"
setPref "PlexOnlineToken" "${token}"
fi
fi
test -n "${ADVERTISE_IP}" && setPref "customConnections" "${ADVERTISE_IP}"
test -n "${ALLOWED_NETWORKS}" && setPref "allowedNetworks" "${ALLOWED_NETWORKS}"
test -n "${DISABLE_REMOTE_SEC}" && setPref "disableRemoteSecurity" "1"

View File

@ -1,43 +0,0 @@
#!/bin/sh
# Default values
export PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS="${PLEX_MEDIA_SERVER_MAX_PLUGIN_PROCS:-6}"
export PLEX_MEDIA_SERVER_HOME="${PLEX_MEDIA_SERVER_HOME:-/usr/lib/plexmediaserver}"
export PLEX_MEDIA_SERVER_MAX_STACK_SIZE="${PLEX_MEDIA_SERVER_MAX_STACK_SIZE:-3000}"
export PLEX_MEDIA_SERVER_TMPDIR="${PLEX_MEDIA_SERVER_TMPDIR:-/tmp}"
export PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR:-/config}"
export PLEX_MEDIA_SERVER_CONFIG_DIR="${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}/Plex Media Server"
export TMPDIR="${PLEX_MEDIA_SERVER_TMPDIR}"
if [ ! -d "$PLEX_MEDIA_SERVER_CONFIG_DIR" ]; then
mkdir -p "$PLEX_MEDIA_SERVER_CONFIG_DIR" && \
chown $SUID:$SGID "$PLEX_MEDIA_SERVER_CONFIG_DIR"
if [ ! $? -eq 0 ]; then
echo "WARNING COULDN'T CREATE $PLEX_MEDIA_SERVER_CONFIG_DIR, MAKE SURE I HAVE PERMISSON TO DO THAT!"
exit 1
fi
fi
if su-exec -e [ ! -w "$PLEX_MEDIA_SERVER_CONFIG_DIR" ]; then
echo "ERROR: CANNOT WRITE IN $PLEX_MEDIA_SERVER_CONFIG_DIR, MAKE SURE I HAVE PERMISSION TO DO THAT!"
exit 2
fi
if [ ! -e "$PLEX_MEDIA_SERVER_CONFIG_DIR/Preferences.xml" ]; then
# Create a default config file allowing external access
echo -e '<?xml version="1.0" encoding="utf-8"?>\n<Preferences disableRemoteSecurity="1" />' \
>> "$PLEX_MEDIA_SERVER_CONFIG_DIR/Preferences.xml"
fi
# Allow Plex group to write to tmpdir
chgrp $SGID "$TMPDIR"
chmod g+rwx "$TMPDIR"
PIDFILE="${PLEX_MEDIA_SERVER_CONFIG_DIR}/plexmediaserver.pid"
if [ -f "$PIDFILE" ]; then
rm -f "$PIDFILE"
fi
tail -F "$PLEX_MEDIA_SERVER_CONFIG_DIR/Logs/Plex Media Server.log" >/proc/1/fd/1 2>/dev/null &
exec su-exec -e "$PLEX_MEDIA_SERVER_HOME/Plex Media Server"