2
0
mirror of https://github.com/spritsail/plex-media-server.git synced 2024-12-20 11:34:36 +00:00
plex-media-server/Dockerfile

212 lines
6.5 KiB
Docker
Raw Normal View History

2019-06-14 09:51:10 +00:00
ARG PLEX_VER=1.15.8.1198-eadbcbb45
ARG PLEX_SHA=dec46a5c3b97cd5d46c23d1b48de1b3b61a6b263
ARG LIBGCC1_VER=6.3.0-18+deb9u1
2018-08-09 09:59:39 +00:00
ARG XMLSTAR_VER=1.6.1
2019-06-14 09:51:10 +00:00
ARG CURL_VER=curl-7_65_1
2019-02-13 23:10:42 +00:00
ARG ZLIB_VER=1.2.11
2018-03-16 15:26:23 +00:00
2018-07-08 14:04:02 +00:00
FROM spritsail/debian-builder:stretch-slim as builder
ARG PLEX_VER
ARG PLEX_SHA
ARG LIBGCC1_VER
ARG LIBXML2_VER=v2.9.8
ARG LIBXSLT_VER=v1.1.32
2018-08-09 09:59:39 +00:00
ARG XMLSTAR_VER
2018-10-22 22:23:19 +00:00
ARG LIBRE_VER=2.8.2
2018-08-09 09:59:39 +00:00
ARG CURL_VER
2019-02-13 23:10:42 +00:00
ARG ZLIB_VER
2018-08-09 09:59:39 +00:00
2019-02-13 23:08:39 +00:00
ARG MAKEFLAGS=-j2
2018-08-09 09:59:39 +00:00
2019-02-13 23:10:42 +00:00
# Download and build zlib
WORKDIR /tmp/zlib
RUN curl -sSf https://www.zlib.net/zlib-$ZLIB_VER.tar.xz \
| tar xJ --strip-components=1 \
&& ./configure \
--prefix=/usr \
--shared \
&& make DESTDIR=/prefix install
2018-08-09 09:59:39 +00:00
# Download and build libxml2
WORKDIR /tmp/libxml2
RUN git clone https://gitlab.gnome.org/GNOME/libxml2.git --branch $LIBXML2_VER --depth 1 . \
&& ./autogen.sh \
--prefix=/usr \
2019-02-13 23:10:42 +00:00
--with-zlib=/prefix/usr \
--without-catalog \
--without-docbook \
--without-ftp \
--without-http \
--without-iconv \
--without-iso8859x \
--without-legacy \
--without-modules \
--without-python \
2019-02-13 23:08:39 +00:00
&& make DESTDIR=/prefix install
# Download and build libxslt
WORKDIR /tmp/libxslt
RUN git clone https://gitlab.gnome.org/GNOME/libxslt.git --branch $LIBXSLT_VER --depth 1 . \
&& ./autogen.sh \
--prefix=/usr \
2019-02-13 23:10:42 +00:00
--with-zlib=/prefix/usr \
--with-libxml-src="../libxml2" \
--without-crypto \
--without-plugins \
--without-python \
2019-02-13 23:08:39 +00:00
&& make DESTDIR=/prefix install
2018-08-09 09:59:39 +00:00
# Download and build xmlstarlet
2018-08-19 20:08:34 +00:00
ADD xmlstarlet-*.patch /tmp
2018-08-09 09:59:39 +00:00
WORKDIR /tmp/xmlstarlet
RUN git clone git://git.code.sf.net/p/xmlstar/code --branch $XMLSTAR_VER --depth 1 . \
&& git apply /tmp/xmlstarlet*.patch \
&& autoreconf -sif \
&& ./configure \
--prefix=/usr \
--disable-build-docs \
--with-libxml-prefix=/prefix/usr \
--with-libxslt-prefix=/prefix/usr \
2019-02-13 23:08:39 +00:00
&& make DESTDIR=/prefix install
2018-08-09 09:59:39 +00:00
# Download and build LibreSSL as a cURL dependency
WORKDIR /tmp/libressl
RUN curl -sSL https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-${LIBRE_VER}.tar.gz \
| tar xz --strip-components=1 \
# Install to the default system directories so cURL can find it
&& ./configure --prefix=/usr \
2019-02-13 23:08:39 +00:00
&& make install
2018-08-09 09:59:39 +00:00
# Download and build curl
WORKDIR /tmp/curl
RUN git clone https://github.com/curl/curl.git --branch $CURL_VER --depth 1 . \
&& autoreconf -sif \
&& ./configure \
--prefix=/usr \
--enable-ipv6 \
--enable-optimize \
--enable-symbol-hiding \
--enable-versioned-symbols \
--enable-threaded-resolver \
--with-ssl \
2019-02-13 23:10:42 +00:00
--with-zlib=/prefix/usr \
2018-08-09 09:59:39 +00:00
--disable-crypto-auth \
--disable-curldebug \
--disable-dependency-tracking \
--disable-dict \
--disable-gopher \
--disable-imap \
2018-08-19 17:07:40 +00:00
--disable-libcurl-option \
2018-08-09 09:59:39 +00:00
--disable-ldap \
--disable-ldaps \
--disable-manual \
--disable-ntlm-wb \
--disable-pop3 \
--disable-rtsp \
--disable-smb \
--disable-smtp \
--disable-sspi \
--disable-telnet \
--disable-tftp \
--disable-tls-srp \
--disable-verbose \
--without-axtls \
--without-libmetalink \
--without-libpsl \
--without-librtmp \
--without-winidn \
2019-02-13 23:08:39 +00:00
&& make DESTDIR=/prefix install
2018-08-09 09:59:39 +00:00
WORKDIR /prefix
# Fetch Plex and required libraries
2019-02-14 22:48:01 +00:00
RUN curl -fsSL http://ftp.de.debian.org/debian/pool/main/g/gcc-${LIBGCC1_VER:0:1}/libgcc1_${LIBGCC1_VER}_amd64.deb | dpkg-deb -x - . \
&& curl -fsSL -o plexmediaserver.deb https://downloads.plex.tv/plex-media-server-new/${PLEX_VER}/debian/plexmediaserver_${PLEX_VER}_amd64.deb \
2018-08-09 09:59:39 +00:00
\
2018-07-08 14:04:02 +00:00
&& echo "$PLEX_SHA plexmediaserver.deb" | sha1sum -c - \
&& dpkg-deb -x plexmediaserver.deb . \
2018-08-09 09:59:39 +00:00
\
&& cd usr/lib/plexmediaserver \
&& rm -f \
"Plex Media Server Tests" \
2018-08-20 19:40:47 +00:00
MigratePlexServerConfig.sh \
2019-02-14 22:48:01 +00:00
lib/libcrypto.so* \
lib/libcurl.so* \
lib/libssl.so* \
lib/libxml2.so* \
lib/libxslt.so* \
lib/libz.so* \
2018-08-20 18:53:37 +00:00
# I have no idea if these fonts are required however they take up ~35MB of space and ideally we could do without them.
Resources/Fonts/NotoNaskh* \
Resources/Fonts/NotoSans* \
Resources/Fonts/OpenSans* \
2018-08-20 19:40:47 +00:00
Resources/start.sh \
2018-08-09 09:59:39 +00:00
# Place shared libraries in usr/lib so they can be actually shared
2019-02-14 22:48:01 +00:00
&& mv lib/* ../
2018-08-09 09:59:39 +00:00
# Strip all unneeded symbols for optimum size
RUN find -exec sh -c 'file "{}" | grep -q ELF && strip --strip-debug "{}"' \; \
# Disable executable stack in all libraries. This should already be the case
# but it seems libgnsdk is not playing along
&& apt-get -y install execstack \
&& execstack -c usr/lib/*.so* \
2018-08-09 09:59:39 +00:00
\
&& mkdir -p /output/usr/lib /output/usr/bin \
2019-02-14 22:48:01 +00:00
&& mv lib/x86_64-linux-gnu/*.so* \
2018-08-09 09:59:39 +00:00
usr/lib/plexmediaserver \
usr/lib/*.so* \
/output/usr/lib \
&& mv usr/bin/curl /output/usr/bin \
&& mv usr/bin/xml /output/usr/bin/xmlstarlet
2018-07-08 14:04:02 +00:00
2018-08-19 19:27:47 +00:00
ADD entrypoint /output/usr/local/bin/
ADD *.sh /output/usr/local/bin/
RUN chmod +x /output/usr/local/bin/*
2018-07-08 14:04:02 +00:00
#=========================
FROM spritsail/libressl
ARG PLEX_VER
ARG LIBSTDCPP_VER
ARG LIBGCC1_VER
2018-08-09 09:59:39 +00:00
ARG CURL_VER
ARG XMLSTAR_VER
2018-07-08 14:04:02 +00:00
2018-03-16 15:26:23 +00:00
LABEL maintainer="Spritsail <plex@spritsail.io>" \
org.label-schema.vendor="Spritsail" \
org.label-schema.name="Plex Media Server" \
org.label-schema.url="https://www.plex.tv/downloads/" \
2018-07-08 13:30:52 +00:00
org.label-schema.description="Tiny Docker image for Plex Media Server, built on busybox" \
org.label-schema.version=${PLEX_VER} \
io.spritsail.version.plex=${PLEX_VER} \
2018-08-09 09:59:39 +00:00
io.spritsail.version.curl=${CURL_VER} \
io.spritsail.version.libgcc1=${LIBGCC1_VER} \
2018-07-08 13:30:52 +00:00
io.spritsail.version.libstdcpp=${LIBSTDCPP_VER} \
2018-08-09 09:59:39 +00:00
io.spritsail.version.xmlstarlet=${XMLSTAR_VER}
2016-08-26 21:26:39 +00:00
2018-08-19 19:27:47 +00:00
WORKDIR /usr/lib/plexmediaserver
2016-08-26 21:26:39 +00:00
2018-07-08 14:04:02 +00:00
COPY --from=builder /output/ /
2016-08-26 21:26:39 +00:00
2018-08-19 19:27:47 +00:00
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"
2018-03-16 15:26:23 +00:00
HEALTHCHECK --interval=10s --timeout=5s \
CMD [ "wget", "-O", "/dev/null", "-T", "10", "-q", "localhost:32400/identity" ]
2017-09-19 23:50:12 +00:00
2018-07-08 14:04:02 +00:00
EXPOSE 32400
2018-08-19 19:27:47 +00:00
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", "--"]
2018-08-19 19:27:47 +00:00
CMD ["/usr/local/bin/entrypoint"]