diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml index a4c1c55..08526f8 100644 --- a/.github/workflows/build-images.yaml +++ b/.github/workflows/build-images.yaml @@ -3,6 +3,7 @@ on: push: branches: - main + - jellyfin-chiseled schedule: - cron: '0 0 * * *' diff --git a/images/jellyfin/Dockerfile b/images/jellyfin/Dockerfile new file mode 100644 index 0000000..9636d67 --- /dev/null +++ b/images/jellyfin/Dockerfile @@ -0,0 +1,94 @@ +ARG GOLANG_VERSION +FROM golang:$GOLANG_VERSION AS builder + +ARG TARGETARCH +ARG VERSION +ARG FFMPEG_VERSION=6.0.1-8 +ARG CHISEL_VERSION + +# Install chisel and build rootfs with jellyfin dependencies +RUN \ + go install github.com/canonical/chisel/cmd/chisel@${CHISEL_VERSION} \ + && curl -LO https://raw.githubusercontent.com/canonical/rocks-toolbox/main/chisel-wrapper \ + && chmod +x ./chisel-wrapper \ + && apt update \ + && apt install file --yes \ + && mkdir -p /rootfs/var/lib/dpkg \ + && git clone -b jellyfin https://github.com/HadrienPatte/chisel-releases.git \ + && ./chisel-wrapper --generate-dpkg-status /rootfs/var/lib/dpkg/status -- \ + --release ./chisel-releases \ + --root /rootfs \ + base-files_base \ + ca-certificates_data \ + dotnet-runtime-8.0_libs \ + libsqlite3-0_libs \ + \ + libbluray2_libs \ + libbz2-1.0_libs \ + libc6_libs \ + libelf1t64_libs \ + libexpat1_libs \ + libgcc-s1_libs \ + libgmp10_libs \ + libgnutls30t64_libs \ + libllvm17t64_libs \ + libmp3lame0_libs \ + libopenmpt0t64_libs \ + libopus0_libs \ + libpciaccess0_libs \ + libstdc++6_libs \ + libtheora0_libs \ + libudev1_libs \ + libvorbis0a_libs \ + libvorbisenc2_libs \ + libvpx9_libs \ + libwebp7_libs \ + libwebpmux3_libs \ + libx11-xcb1_libs \ + libx264-164_libs \ + libx265-199_libs \ + libxcb-dri2-0_libs \ + libxcb-dri3-0_libs \ + libxcb-present0_libs \ + libxcb-randr0_libs \ + libxcb-shm0_libs \ + libxcb-sync1_libs \ + libxcb-xfixes0_libs \ + libxcb1_libs \ + libxshmfence1_libs \ + libzstd1_libs \ + libzvbi0t64_libs \ + ocl-icd-libopencl1_libs \ + && useradd \ + --root /rootfs \ + --system \ + --no-create-home \ + --uid 1000 \ + nonroot \ + && rm /rootfs/etc/.pwd.lock \ + && mkdir /rootfs/config \ + && chown 1000 /rootfs/config + +# Install jellyfin +RUN \ + mkdir /jellyfin \ + && curl -LO https://repo.jellyfin.org/files/ffmpeg/ubuntu/6.x/${FFMPEG_VERSION}/${TARGETARCH}/jellyfin-ffmpeg6_${FFMPEG_VERSION}-noble_${TARGETARCH}.deb \ + && dpkg --extract jellyfin-ffmpeg6_*.deb /jellyfin \ + \ + && curl -LO https://repo.jellyfin.org/files/server/ubuntu/stable/v${VERSION}/${TARGETARCH}/jellyfin-web_${VERSION}+ubu2404_all.deb \ + && dpkg --extract jellyfin-web_*.deb /jellyfin \ + \ + && curl -LO https://repo.jellyfin.org/files/server/ubuntu/stable/v${VERSION}/${TARGETARCH}/jellyfin-server_${VERSION}+ubu2404_${TARGETARCH}.deb \ + && dpkg --extract jellyfin-server_*.deb /jellyfin \ + \ + && rm \ + /jellyfin/usr/share/doc/*/changelog*.gz + +FROM scratch +COPY --from=builder /rootfs / +COPY --from=builder /jellyfin/usr /usr + +USER nonroot +ENV XDG_CACHE_HOME=/config/cache +ENTRYPOINT ["/usr/lib/jellyfin/bin/jellyfin", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg", "--webdir=/usr/share/jellyfin/web", "--datadir=/config"] + diff --git a/images/jellyfin/metadata.json b/images/jellyfin/metadata.json new file mode 100644 index 0000000..1b70d14 --- /dev/null +++ b/images/jellyfin/metadata.json @@ -0,0 +1,3 @@ +{ + "repository": "jellyfin/jellyfin" +}