aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua M. Boniface <joshua@boniface.me>2024-02-23 12:41:22 -0500
committerGitHub <noreply@github.com>2024-02-23 12:41:22 -0500
commit0631c2d5546f49922dff17143acc4d949fae0e86 (patch)
tree4e38113afed2d057ee1d9140d77fee9d44ce1000
parentUpdate repository script to use BASEDIR (diff)
parentApply suggestions (diff)
downloadjellyfin-packaging-0631c2d5546f49922dff17143acc4d949fae0e86.tar.gz
jellyfin-packaging-0631c2d5546f49922dff17143acc4d949fae0e86.tar.bz2
jellyfin-packaging-0631c2d5546f49922dff17143acc4d949fae0e86.zip
Merge pull request #1 from Gauvino/master
Refactor jellyfin-packaging
-rw-r--r--README.md4
-rw-r--r--debian/conf/jellyfin.init4
-rw-r--r--debian/docker/Dockerfile62
-rwxr-xr-xdebian/rules2
-rw-r--r--docker/Dockerfile25
-rw-r--r--portable/Dockerfile23
6 files changed, 86 insertions, 34 deletions
diff --git a/README.md b/README.md
index b3b485e..c761432 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,7 @@ Inside this repository are 7 major components:
* Unified packaging: all packaging is in this repository (vs. within the `jellyfin-server` and `jellyfin-web` repositories)
This helps ensure two things:
- 1. There is a single source of truth for packaging. Previously, there were at least 3 sources of truth and this became very confusing to update.
+ 1. There is a single source of truth for packaging. Previously, there were at least 3 sources of truth, and this became very confusing to update.
2. Packaging can be run and managed independently of actual code, simplifying the release and build process.
* GitHub Actions for CI: all builds use the GitHub Actions system instead of Azure DevOps
@@ -104,7 +104,7 @@ Inside this repository are 7 major components:
* Ubuntu LTS-only support: non-LTS Ubuntu versions have been dropped
- This simplifies our builds as we do not need to then track many 9-month-only releases of Ubuntu, and also reduces the build burden. Users of non-LTS Ubuntu releases can use either the closest Ubuntu LTS version, or use Docker containers instead.
+ This simplifies our builds as we do not need to then track many 9-month-only releases of Ubuntu, and also reduces the build burden. Users of non-LTS Ubuntu releases can use either the closest Ubuntu LTS version or use Docker containers instead.
### Fedora/CentOS Packages
diff --git a/debian/conf/jellyfin.init b/debian/conf/jellyfin.init
index 784536d..02c15ad 100644
--- a/debian/conf/jellyfin.init
+++ b/debian/conf/jellyfin.init
@@ -25,7 +25,7 @@ case "$1" in
start)
log_daemon_msg "Starting Jellyfin Media Server" "jellyfin" || true
- if start-stop-daemon --start --quiet --oknodo --background --pidfile $PIDFILE --make-pidfile --user $JELLYFIN_USER --chuid $JELLYFIN_USER --exec /usr/bin/jellyfin -- $JELLYFIN_ARGS; then
+ if start-stop-daemon --start --quiet --oknodo --background --chdir $JELLYFIN_DATA_DIR --pidfile $PIDFILE --make-pidfile --user $JELLYFIN_USER --chuid $JELLYFIN_USER --exec /usr/bin/jellyfin -- $JELLYFIN_ARGS; then
log_end_msg 0 || true
else
log_end_msg 1 || true
@@ -44,7 +44,7 @@ case "$1" in
restart)
log_daemon_msg "Restarting Jellyfin Media Server" "jellyfin" || true
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE --remove-pidfile
- if start-stop-daemon --start --quiet --oknodo --background --pidfile $PIDFILE --make-pidfile --user $JELLYFIN_USER --chuid $JELLYFIN_USER --exec /usr/bin/jellyfin -- $JELLYFIN_ARGS; then
+ if start-stop-daemon --start --quiet --oknodo --background --chdir $JELLYFIN_DATA_DIR --pidfile $PIDFILE --make-pidfile --user $JELLYFIN_USER --chuid $JELLYFIN_USER --exec /usr/bin/jellyfin -- $JELLYFIN_ARGS; then
log_end_msg 0 || true
else
log_end_msg 1 || true
diff --git a/debian/docker/Dockerfile b/debian/docker/Dockerfile
index 02caa7b..f73a459 100644
--- a/debian/docker/Dockerfile
+++ b/debian/docker/Dockerfile
@@ -31,12 +31,22 @@ ENV ARCH=${PACKAGE_ARCH}
RUN apt-get update -y \
&& DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC \
apt-get install --no-install-recommends -y \
- wget debhelper gnupg devscripts build-essential mmv lsb-release \
- libssl*.* liblttng-ust* \
- libfontconfig*-dev libcurl*openssl-dev libfreetype*-dev libssl-dev \
+ wget \
+ debhelper \
+ gnupg \
+ devscripts \
+ build-essential \
+ mmv \
+ lsb-release \
+ libssl*.* \
+ liblttng-ust* \
+ libfontconfig*-dev \
+ libcurl*openssl-dev \
+ libfreetype*-dev \
+ libssl-dev \
&& apt-get clean autoclean -y \
&& apt-get autoremove -y \
- && rm -rf /var/lib/apt/lists/*
+ && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
# Prepare the cross-toolchain
RUN if test "${PACKAGE_ARCH}" != "$( dpkg --print-architecture )"; then \
@@ -60,16 +70,38 @@ RUN if test "${PACKAGE_ARCH}" != "$( dpkg --print-architecture )"; then \
&& cd cross-gcc-packages-amd64/cross-gcc-${GCC_VERSION}-${PACKAGE_ARCH} \
&& DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC \
apt-get -f install --no-install-recommends -o Dpkg::Options::="--force-overwrite" -y \
- bison flex libtool gdb sharutils netbase libmpc-dev libmpfr-dev libgmp-dev \
- systemtap-sdt-dev autogen expect chrpath zlib1g-dev zip \
- binutils-aarch64-linux-gnu binutils-arm-linux-gnueabihf \
- gcc-${GCC_VERSION}-source libstdc++-${GCC_VERSION}-dev-${PACKAGE_ARCH}-cross \
- libc6-dev:${PACKAGE_ARCH} linux-libc-dev:${PACKAGE_ARCH} libgcc1:${PACKAGE_ARCH} libstdc++-${GCC_VERSION}-dev:${PACKAGE_ARCH} \
- libfontconfig*-dev:${PACKAGE_ARCH} libcurl*openssl-dev:${PACKAGE_ARCH} libfreetype*-dev:${PACKAGE_ARCH} libssl-dev:${PACKAGE_ARCH} \
- libssl[13].*:${PACKAGE_ARCH} liblttng-ust*:${PACKAGE_ARCH} \
+ bison \
+ flex \
+ libtool \
+ gdb \
+ sharutils \
+ netbase \
+ libmpc-dev \
+ libmpfr-dev \
+ libgmp-dev \
+ systemtap-sdt-dev \
+ autogen \
+ expect \
+ chrpath \
+ zlib1g-dev \
+ zip \
+ binutils-aarch64-linux-gnu \
+ binutils-arm-linux-gnueabihf \
+ gcc-${GCC_VERSION}-source \
+ libstdc++-${GCC_VERSION}-dev-${PACKAGE_ARCH}-cross \
+ libc6-dev:${PACKAGE_ARCH} \
+ linux-libc-dev:${PACKAGE_ARCH} \
+ libgcc1:${PACKAGE_ARCH} \
+ libstdc++-${GCC_VERSION}-dev:${PACKAGE_ARCH} \
+ libfontconfig*-dev:${PACKAGE_ARCH} \
+ libcurl*openssl-dev:${PACKAGE_ARCH} \
+ libfreetype*-dev:${PACKAGE_ARCH} \
+ libssl-dev:${PACKAGE_ARCH} \
+ libssl[13].*:${PACKAGE_ARCH} \
+ liblttng-ust*:${PACKAGE_ARCH} \
&& apt-get clean autoclean -y \
&& apt-get autoremove -y \
- && rm -rf /var/lib/apt/lists/* \
+ && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
; fi
# Prepare dotnet SDK
@@ -86,6 +118,12 @@ RUN wget https://deb.nodesource.com/setup_${NODEJS_VERSION}.x -O nodejs-install.
&& apt-get install -y \
nodejs
+# Clean up dependencies
+RUN apt-get remove wget -y \
+ && apt-get clean autoclean -y \
+ && apt-get autoremove -y \
+ && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
+
# Link to build script
RUN ln -sf ${SOURCE_DIR}/debian/docker/build.sh /build.sh
diff --git a/debian/rules b/debian/rules
index 678c4d8..e8a07bb 100755
--- a/debian/rules
+++ b/debian/rules
@@ -42,7 +42,7 @@ override_dh_auto_build:
cd jellyfin-server && dotnet publish -maxcpucount:1 --configuration $(CONFIG) \
--output='$(CURDIR)/build/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) \
-p:DebugSymbols=false -p:DebugType=none Jellyfin.Server
- rm $(CURDIR)/build/usr/lib/jellyfin/bin/libcoreclrtraceptprovider.so
+ rm -f $(CURDIR)/build/usr/lib/jellyfin/bin/libcoreclrtraceptprovider.so
cd jellyfin-web && npm ci --no-audit --unsafe-perm && \
npm run build:production && mv $(CURDIR)/jellyfin-web/dist $(CURDIR)/build/web
diff --git a/docker/Dockerfile b/docker/Dockerfile
index a8ab0a1..b69015d 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -9,10 +9,10 @@ ARG OS_VERSION=bookworm
ARG FFMPEG_PACKAGE=jellyfin-ffmpeg6
# https://github.com/intel/compute-runtime/releases
-ARG GMMLIB_VERSION=22.3.0
-ARG IGC_VERSION=1.0.14828.8
-ARG NEO_VERSION=23.30.26918.9
-ARG LEVEL_ZERO_VERSION=1.3.26918.9
+ARG GMMLIB_VERSION=22.3.11
+ARG IGC_VERSION=1.0.15985.7
+ARG NEO_VERSION=24.05.28454.6
+ARG LEVEL_ZERO_VERSION=1.3.28454.6
# Debian architecture (amd64, arm64, armhf), set by build script
ARG PACKAGE_ARCH
@@ -46,7 +46,6 @@ RUN apk add \
alpine-sdk \
automake \
libtool \
- make \
gcc \
musl-dev \
nasm \
@@ -122,13 +121,11 @@ ENV NVIDIA_VISIBLE_DEVICES="all"
ENV NVIDIA_DRIVER_CAPABILITIES="compute,video,utility"
# Install dependencies:
-# curl: healthcheck
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests --yes \
ca-certificates \
gnupg \
curl \
- wget \
apt-transport-https \
&& curl -fsSL https://repo.jellyfin.org/jellyfin_team.gpg.key \
| gpg --dearmor -o /etc/apt/trusted.gpg.d/debian-jellyfin.gpg \
@@ -153,16 +150,15 @@ RUN apt-get update \
RUN if [[ ${PACKAGE_ARCH} == "amd64" ]]; then \
mkdir intel-compute-runtime \
&& pushd intel-compute-runtime \
- && wget https://github.com/intel/compute-runtime/releases/download/${NEO_VERSION}/libigdgmm12_${GMMLIB_VERSION}_amd64.deb \
- && wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-${IGC_VERSION}/intel-igc-core_${IGC_VERSION}_amd64.deb \
- && wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-${IGC_VERSION}/intel-igc-opencl_${IGC_VERSION}_amd64.deb \
- && wget https://github.com/intel/compute-runtime/releases/download/${NEO_VERSION}/intel-opencl-icd_${NEO_VERSION}_amd64.deb \
- && wget https://github.com/intel/compute-runtime/releases/download/${NEO_VERSION}/intel-level-zero-gpu_${LEVEL_ZERO_VERSION}_amd64.deb \
+ && curl -LO https://github.com/intel/intel-graphics-compiler/releases/download/igc-${IGC_VERSION}/intel-igc-core_${IGC_VERSION}_amd64.deb \
+ -LO https://github.com/intel/intel-graphics-compiler/releases/download/igc-${IGC_VERSION}/intel-igc-opencl_${IGC_VERSION}_amd64.deb \
+ -LO https://github.com/intel/compute-runtime/releases/download/${NEO_VERSION}/intel-opencl-icd_${NEO_VERSION}_amd64.deb \
+ -LO https://github.com/intel/compute-runtime/releases/download/${NEO_VERSION}/intel-level-zero-gpu_${LEVEL_ZERO_VERSION}_amd64.deb \
+ -LO https://github.com/intel/compute-runtime/releases/download/${NEO_VERSION}/libigdgmm12_${GMMLIB_VERSION}_amd64.deb \
&& dpkg -i *.deb \
&& popd \
&& rm -rf intel-compute-runtime \
; fi \
- && apt-get remove wget --yes \
&& apt-get clean autoclean --yes \
&& apt-get autoremove --yes \
&& rm -rf /var/cache/apt/archives* /var/lib/apt/lists/*
@@ -175,7 +171,8 @@ COPY --from=web /web /jellyfin/jellyfin-web
EXPOSE 8096
VOLUME ${JELLYFIN_DATA_DIR} ${JELLYFIN_CACHE_DIR}
-ENTRYPOINT [ "/jellyfin/jellyfin" ]
+ENTRYPOINT [ "/jellyfin/jellyfin", \
+ "--ffmpeg", "/usr/lib/jellyfin-ffmpeg/ffmpeg" ]
HEALTHCHECK --interval=30s --timeout=30s --start-period=10s --retries=3 \
CMD curl -Lk -fsS "${HEALTHCHECK_URL}" || exit 1
diff --git a/portable/Dockerfile b/portable/Dockerfile
index afe33d7..a2fd069 100644
--- a/portable/Dockerfile
+++ b/portable/Dockerfile
@@ -25,9 +25,20 @@ ENV ARCHIVE_TYPES=targz
RUN apt-get update -y \
&& DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC \
apt-get install --no-install-recommends -y \
- wget debhelper gnupg devscripts build-essential mmv lsb-release zip \
- libssl*.* liblttng-ust* \
- libfontconfig*-dev libcurl*openssl-dev libfreetype*-dev libssl-dev \
+ wget \
+ debhelper \
+ gnupg \
+ devscripts \
+ build-essential \
+ mmv \
+ lsb-release\
+ zip \
+ libssl*.* \
+ liblttng-ust*\
+ libssl-dev \
+ libfontconfig*-dev \
+ libcurl*openssl-dev \
+ libfreetype*-dev \
&& apt-get clean autoclean -y \
&& apt-get autoremove -y \
&& rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
@@ -46,6 +57,12 @@ RUN wget https://deb.nodesource.com/setup_${NODEJS_VERSION}.x -O nodejs-install.
&& apt-get install -y \
nodejs
+# Clean up dependencies
+RUN apt-get remove wget -y \
+ && apt-get clean autoclean -y \
+ && apt-get autoremove -y \
+ && rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*
+
# Link to build script
RUN ln -sf ${SOURCE_DIR}/portable/build.sh /build.sh
bgstack15