Giter VIP home page Giter VIP logo

jellyfin-packaging's Introduction

Jellyfin Packaging

Part of Jellyfin: The Free Software Media System


Logo Banner

GPL 3.0 License Current Release Translation Status Docker Pull Count
Donate Submit Feature Requests Chat on Matrix Join our Forum Release RSS Feed Master Commits RSS Feed


Jellyfin is the Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps.

This repository contains operating system and Docker packaging for Jellyfin, for use by manual builders and our release CI system with GitHub workflows. All packaging has henceforth been removed from the main code repositories for the Jellyfin Server and Primary WebUI and moved here.

Quickstart

To build Jellyfin packages for yourself, follow this quickstart guide. You will need to be running on a Linux system, preferably Debian- or Ubuntu-based, with Docker, Python3 and the Python packages PyYAML and git (python3-yaml and python3-git in Debian). Other systems including WSL are untested.

  1. Install Docker on your system. The build scripts leverage Docker containers to perform clean builds and avoid contaminating the host system with dependencies.

  2. Clone this repository somewhere on your system and enter it.

  3. Run git submodule update --init to check out the submodules (jellyfin-server, jellyfin-web).

  4. Run ./checkout.py to update the submodules to the correct HEADs. This command takes one argument, the tag or branch (i.e. master) of the repositories to check out; if nothing is specified, master is assumed. For example, ./checkout.py master checks out the current master branch of both jellyfin-server and jellyfin-web, ./checkout.py v10.8.13 checks out the v10.8.13 tag of both, etc. If a tag is used and one (or more) of the repositories are missing the tag, this command will error out.

Non-Docker Platforms

If you want a non-Docker image output (.deb, tar/zip archive, etc.) follow this process:

  1. Run ./build.py. This command takes up to 4 arguments, depending on what you're trying to build:

    • The first argument is the version you want to tag your build as. For our official releases, we use either dates for unstable builds (YYYYMMDDHH numerical format or auto for autogeneration) or the tag without v for stable release builds (10.8.13, 10.9.0, etc.), but you can use any version tag you wish here.

    • The second argument is the "platform" you want to build for. The available options are listed as top-level keys in the build.yaml configuration file or in the -h help output.

    • The third argument is, for all platforms except portable (DotNET portable), the architecture you want to build for. For each platform, the available architectures can be found as the keys under archmaps in the build.yaml configuration file.

    • The fourth argument is exclusive to debian and ubuntu .deb packages, and is the release codename of Debian or Ubuntu to build for. For each platform, the available releases can be found as the keys under releases in the build.yaml configuration file.

    NOTE: Your running user must have Docker privileges, or you should run build.py as root/with sudo.

  2. The output binaries will be in the out/ directory, ready for use. The exact format varies depending on the build type, and can be found, for each archive-based platform, as the values to the archivetypes key in the build.yaml configuration file.

Examples

Build .deb packages for Debian 12 "Bookworm" amd64:

./build.py auto debian amd64 bookworm

Build Linux .tar.xx archives for arm64-musl:

./build.py auto linux arm64-musl

Build Windows .zip for amd64:

./build.py auto windows amd64

Build a .NET portable .zip:

./build.py auto portable

Docker Image Platform

If you want a Docker image output follow this process:

  1. Run ./build.py. This command takes up to 4 arguments specific to Docker builds:

    • The first argument is the version you want to tag your build as. For our official releases, we use either dates for unstable builds (YYYYMMDDHH numerical format or auto for autogeneration) or the tag without v for stable release builds (10.8.13, 10.9.0, etc.), but you can use any version tag you wish here.

    • The second argument is the "platform" you want to build for. For Docker images, this should be docker.

    • The third argument is the architecture you wish to build for. This argument is optional, and not providing it will build images for all supported architectures (sequentially).

    • The fourth argument is --local, which should be provided to prevent the script from trying to generate image manifests and push the resulting images to our repositories.

  2. The output container image(s) will be present in your docker image ls as jellyfin/jellyfin with the tag(s) <jellyfin_version>-<build_arch>.

Examples

Build an amd64 Docker image:

./build.py auto docker amd64 --local

Design

Inside this repository are 7 major components:

  1. Submodules for the jellyfin (as jellyfin-server) and jellyfin-web repositories. These are dynamic submodules; the checkout.py script will check them out to the required HEAD on each build, and thus their actual committed value is irrelevant. Nonetheless, they should be bumped occasionally just to avoid excessive checkout times later.

  2. Debian/Ubuntu packaging configurations (under debian). These will build the 3 Jellyfin packages (jellyfin metapackage, jellyfin-server core server, and jellyfin-web web client) from a single Dockerfile and helper script (build.sh) under debian/docker/. Future packages (e.g. Vue) may be added here as well if and when they are promoted to a production build alongside the others, following one consistent versioning scheme.

  3. Docker image builder (under docker). Like the above two as well, only building the combined Docker images with a single Dockerfile as well as preparing the various manifests needed to push these to the container repos.

  4. Portable image builder (under portable), which covers all the "archive" builds (.NET portable, Linux, Windows, and MacOS) again from a single Dockerfile.

  5. NuGet package builder, to prepare NuGet packages for consumption by plugins and 3rd party clients.

  6. Script infrastructure to handle coordinating builds (build.py). This script takes basic arguments and, using its internal logic, fires the correct Dockerized builds for the given build type.

  7. The GitHub Actions CI to build all the above for every supported version and architecture.

Design Decisions

General

  • 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.
    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

    This helps ensure that CI is visible in a "single pane of glass" (GitHub) and is easier to manage long-term.

  • Python script-based builds: Building actually happens via the build.py script

    This helps reduce the complexity of the builds by ensuring that the logic to actually generate specific builds is handled in one place in a consistent, well-known language, instead of the CI definitions.

  • Git Submodules to handle code (vs. cross-repo builds)

    This ensures that the code checked out is consistent to both repositories, and allows for the unified builds described below without extra steps to combine.

  • Remote manual-only triggers: CI workers are triggered by a remote bot

    This reduces the complexity of triggering builds; while it can be done manually in this repo, using an external bot allows for more release wrapper actions to occur before triggering builds.

Debian/Ubuntu Packages

  • Unified package build: this entire repo is the "source" and the source package is named "jellyfin".

    This was chosen to simplify the source package system and simplify building. Now, there is only a single "jellyfin" source package rather than 2. There may be more in the future as other repos might be included (e.g. "jellyfin-ffmpeg", "jellyfin-vue", etc.)

  • Dockerized build (debian/docker/): the build is run inside a Docker container that matches the target OS release

    This was chosen to ensure a clean slate for every build, as well as enable release-specific builds due to the complexities of our shared dependencies (e.g. libssl).

  • Per-release/version builds: package versions contain the specific OS version (e.g. -deb11, -ubu2204)

    This enables support for different builds and packages for each OS release, simplifying shared dependency handling as mentioned above.

  • 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.

Docker

  • Single unified Docker build: the entirety of our Docker images are built as one container from one Dockerfile.

    This was chosen to keep our Docker builds as simple as possible without requiring 2 intervening images (as was the case with our previous CI).

  • Push to both DockerHub and GHCR (GitHub Packages)

    This ensures flexibility for container users to fetch the containers from whatever repository they choose.

  • Seamless rebuilds: The root images are appended with the build date to keep them unique

    This ensures we can trigger rebuilds of the Docker containers arbitrarily, in response to things like base OS updates or packaging changes (e.g. a new version of the Intel compute engine for instance).

  • Based on Debian 12 ("Bookworm"): the latest base Debian release

    While possibly not as "up-to-date" as Ubuntu, this release is quite current and should cover all major compatibility issues we had with the old images based on Debian 11.

Portable Builds (Portable .NET, Linux, MacOS, Windows)

  • Single unified build: the entirety of the output package is built in one container from one Dockerfile

    This was chosen to keep the portable builds as simple as possible without requiring complex archive combining (as was the case with our previous CI).

  • Multiple archive type support (.tar.gz vs. .zip)

    The output archive type (.tar.gz or .zip) is chosen based on the build target, with Portable providing both for maximum compatibility, Windows providing .zip, and Linux and MacOS providing .tar.gz. This can be changed later, for example to add more formats (e.g. .tar.xz) or change what produces what, without major complications.

  • Full architecture support

    The portable builds support all major architectures now, specifically adding arm64 Windows builds (I'm certain that someone out there uses it), and making it quite trivial to add new architectures in the future if needed.

jellyfin-packaging's People

Contributors

crobibero avatar felix920506 avatar gauvino avatar gnattu avatar joshuaboniface avatar nvllsvm avatar nyanmisaka avatar renovate[bot] avatar s-t-e-v-e-n-k avatar shadowghost avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jellyfin-packaging's Issues

Can't build local Docker image

[jellyfin-packaging]$ git submodule status 
+e36738c8f194e7e045ce11285209f4e568df2848 jellyfin-server (v10.8.0-alpha5-3257-ge36738c8f) (https://github.com/vessd/jellyfin/tree/amd-transcoding)
 ffc1ffb7c869beb409b8c52a5fc3d3b5edec6f1e jellyfin-server-windows (10.8.10-18-gffc1ffb)
+e0ad798610c6307801802bc16e2b786fc954431c jellyfin-web (v10.8.0-alpha5-5737-ge0ad79861)
[jellyfin-packaging]$ ./build.py auto docker amd64 --local
...
Step 48/63 : COPY --from=qemu /usr/bin/* /usr/bin
COPY failed: no source files were specified
full log
[jellyfin-packaging]$ ./build.py auto docker amd64 --local
NOTE: Autocorrecting 'master' version to 2024033023
> Building Docker images...

NOTE: Building only for arch amd64

>> Building Docker image for amd64...

>>> docker run --rm --privileged multiarch/qemu-user-static:register --reset
Setting /usr/bin/qemu-alpha-static as binfmt interpreter for alpha
Setting /usr/bin/qemu-arm-static as binfmt interpreter for arm
Setting /usr/bin/qemu-armeb-static as binfmt interpreter for armeb
Setting /usr/bin/qemu-sparc-static as binfmt interpreter for sparc
Setting /usr/bin/qemu-sparc32plus-static as binfmt interpreter for sparc32plus
Setting /usr/bin/qemu-sparc64-static as binfmt interpreter for sparc64
Setting /usr/bin/qemu-ppc-static as binfmt interpreter for ppc
Setting /usr/bin/qemu-ppc64-static as binfmt interpreter for ppc64
Setting /usr/bin/qemu-ppc64le-static as binfmt interpreter for ppc64le
Setting /usr/bin/qemu-m68k-static as binfmt interpreter for m68k
Setting /usr/bin/qemu-mips-static as binfmt interpreter for mips
Setting /usr/bin/qemu-mipsel-static as binfmt interpreter for mipsel
Setting /usr/bin/qemu-mipsn32-static as binfmt interpreter for mipsn32
Setting /usr/bin/qemu-mipsn32el-static as binfmt interpreter for mipsn32el
Setting /usr/bin/qemu-mips64-static as binfmt interpreter for mips64
Setting /usr/bin/qemu-mips64el-static as binfmt interpreter for mips64el
Setting /usr/bin/qemu-sh4-static as binfmt interpreter for sh4
Setting /usr/bin/qemu-sh4eb-static as binfmt interpreter for sh4eb
Setting /usr/bin/qemu-s390x-static as binfmt interpreter for s390x
Setting /usr/bin/qemu-aarch64-static as binfmt interpreter for aarch64
Setting /usr/bin/qemu-aarch64_be-static as binfmt interpreter for aarch64_be
Setting /usr/bin/qemu-hppa-static as binfmt interpreter for hppa
Setting /usr/bin/qemu-riscv32-static as binfmt interpreter for riscv32
Setting /usr/bin/qemu-riscv64-static as binfmt interpreter for riscv64
Setting /usr/bin/qemu-xtensa-static as binfmt interpreter for xtensa
Setting /usr/bin/qemu-xtensaeb-static as binfmt interpreter for xtensaeb
Setting /usr/bin/qemu-microblaze-static as binfmt interpreter for microblaze
Setting /usr/bin/qemu-microblazeel-static as binfmt interpreter for microblazeel
Setting /usr/bin/qemu-or1k-static as binfmt interpreter for or1k
Setting /usr/bin/qemu-hexagon-static as binfmt interpreter for hexagon

>>> docker build --no-cache --build-arg PACKAGE_ARCH=amd64 --build-arg DOTNET_ARCH=x64 --build-arg QEMU_ARCH=x86_64 --build-arg IMAGE_ARCH=amd64 --build-arg JELLYFIN_VERSION=2024033023 --file /home/sergey/projects/jellyfin-packaging/docker/Dockerfile --tag jellyfin/jellyfin:2024033023-amd64 /home/sergey/projects/jellyfin-packaging
DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon    248MB
Step 1/63 : ARG DOTNET_VERSION=8.0
Step 2/63 : ARG NODEJS_VERSION=20
Step 3/63 : ARG OS_VERSION=bookworm
Step 4/63 : ARG FFMPEG_PACKAGE=jellyfin-ffmpeg6
Step 5/63 : ARG GMMLIB_VERSION=22.3.17
Step 6/63 : ARG IGC_VERSION=1.0.16238.4
Step 7/63 : ARG NEO_VERSION=24.09.28717.12
Step 8/63 : ARG LEVEL_ZERO_VERSION=1.3.28717.12
Step 9/63 : ARG MALI_PKG_VER=1.9-1_arm64
Step 10/63 : ARG MALI_PKG_TAG=v1.9-1-b5d7972
Step 11/63 : ARG MALI_PKG_CFG=valhall-g610-g13p0-gbm
Step 12/63 : ARG PACKAGE_ARCH
Step 13/63 : ARG DOTNET_ARCH
Step 14/63 : ARG QEMU_ARCH
Step 15/63 : ARG IMAGE_ARCH
Step 16/63 : ARG JELLYFIN_VERSION
Step 17/63 : FROM node:${NODEJS_VERSION}-alpine as web
 ---> 09c27ad02af8
Step 18/63 : ARG SOURCE_DIR=/src
 ---> Running in be8b393496f1
 ---> Removed intermediate container be8b393496f1
 ---> 1c1f32286b4f
Step 19/63 : ARG ARTIFACT_DIR=/web
 ---> Running in 210ed6496072
 ---> Removed intermediate container 210ed6496072
 ---> 74320190ec6d
Step 20/63 : ARG JELLYFIN_VERSION
 ---> Running in de6eadf0ae4f
 ---> Removed intermediate container de6eadf0ae4f
 ---> fff0201a4a1e
Step 21/63 : ENV JELLYFIN_VERSION=${JELLYFIN_VERSION}
 ---> Running in 9134da22365d
 ---> Removed intermediate container 9134da22365d
 ---> 87d24699f48e
Step 22/63 : RUN apk add     autoconf     g++     make     libpng-dev     gifsicle     alpine-sdk     automake     libtool     gcc     musl-dev     nasm     python3
 ---> Running in 06b9cd86ab48
fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz
fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz
(1/77) Installing libattr (2.5.1-r5)
(2/77) Installing attr (2.5.1-r5)
(3/77) Installing libcap2 (2.69-r1)
(4/77) Installing libcap-getcap (2.69-r1)
(5/77) Installing fakeroot (1.32.1-r0)
(6/77) Installing lzip (1.23-r1)
(7/77) Installing openssl (3.1.4-r5)
(8/77) Installing patch (2.7.6-r10)
(9/77) Installing pkgconf (2.1.0-r0)
(10/77) Installing libacl (2.3.1-r4)
(11/77) Installing tar (1.35-r2)
(12/77) Installing ca-certificates (20240226-r0)
(13/77) Installing brotli-libs (1.1.0-r1)
(14/77) Installing c-ares (1.27.0-r0)
(15/77) Installing libunistring (1.1-r2)
(16/77) Installing libidn2 (2.3.4-r4)
(17/77) Installing nghttp2-libs (1.58.0-r0)
(18/77) Installing libcurl (8.5.0-r0)
(19/77) Installing curl (8.5.0-r0)
(20/77) Installing abuild (3.12.0-r0)
Executing abuild-3.12.0-r0.pre-install
(21/77) Installing jansson (2.14-r4)
(22/77) Installing zstd-libs (1.5.5-r8)
(23/77) Installing binutils (2.41-r0)
(24/77) Installing libmagic (5.45-r1)
(25/77) Installing file (5.45-r1)
(26/77) Installing libgomp (13.2.1_git20231014-r0)
(27/77) Installing libatomic (13.2.1_git20231014-r0)
(28/77) Installing gmp (6.3.0-r0)
(29/77) Installing isl26 (0.26-r1)
(30/77) Installing mpfr4 (4.2.1-r0)
(31/77) Installing mpc1 (1.3.1-r1)
(32/77) Installing gcc (13.2.1_git20231014-r0)
(33/77) Installing libstdc++-dev (13.2.1_git20231014-r0)
(34/77) Installing musl-dev (1.2.4_git20230717-r4)
(35/77) Installing libc-dev (0.7.2-r5)
(36/77) Installing g++ (13.2.1_git20231014-r0)
(37/77) Installing make (4.4.1-r2)
(38/77) Installing fortify-headers (1.1-r3)
(39/77) Installing build-base (0.5-r3)
(40/77) Installing libexpat (2.6.2-r0)
(41/77) Installing pcre2 (10.42-r2)
(42/77) Installing git (2.43.0-r0)
(43/77) Installing alpine-sdk (1.0-r1)
(44/77) Installing m4 (1.4.19-r3)
(45/77) Installing libbz2 (1.0.8-r6)
(46/77) Installing perl (5.38.2-r0)
(47/77) Installing perl-error (0.17029-r2)
(48/77) Installing perl-git (2.43.0-r0)
(49/77) Installing git-perl (2.43.0-r0)
(50/77) Installing autoconf (2.71-r2)
(51/77) Installing automake (1.16.5-r2)
(52/77) Installing libxau (1.0.11-r3)
(53/77) Installing libmd (1.1.0-r0)
(54/77) Installing libbsd (0.11.7-r3)
(55/77) Installing libxdmcp (1.1.4-r3)
(56/77) Installing libxcb (1.16-r0)
(57/77) Installing libx11 (1.8.7-r0)
(58/77) Installing gifsicle (1.94-r1)
(59/77) Installing libpng (1.6.40-r0)
(60/77) Installing zlib-dev (1.3.1-r0)
(61/77) Installing libpng-dev (1.6.40-r0)
(62/77) Installing libltdl (2.4.7-r3)
(63/77) Installing libtool (2.4.7-r3)
(64/77) Installing nasm (2.16.01-r2)
(65/77) Installing libffi (3.4.4-r3)
(66/77) Installing gdbm (1.23-r1)
(67/77) Installing xz-libs (5.4.5-r0)
(68/77) Installing mpdecimal (2.5.1-r2)
(69/77) Installing ncurses-terminfo-base (6.4_p20231125-r0)
(70/77) Installing libncursesw (6.4_p20231125-r0)
(71/77) Installing libpanelw (6.4_p20231125-r0)
(72/77) Installing readline (8.2.1-r2)
(73/77) Installing sqlite-libs (3.44.2-r0)
(74/77) Installing python3 (3.11.8-r0)
(75/77) Installing python3-pycache-pyc0 (3.11.8-r0)
(76/77) Installing pyc (3.11.8-r0)
(77/77) Installing python3-pyc (3.11.8-r0)
Executing busybox-1.36.1-r15.trigger
Executing ca-certificates-20240226-r0.trigger
OK: 332 MiB in 94 packages
 ---> Removed intermediate container 06b9cd86ab48
 ---> 803cfca228e4
Step 23/63 : WORKDIR ${SOURCE_DIR}
 ---> Running in cdfb8d558518
 ---> Removed intermediate container cdfb8d558518
 ---> 7cd365b46fbb
Step 24/63 : COPY jellyfin-web .
 ---> d373f8a2818f
Step 25/63 : RUN npm ci --no-audit --unsafe-perm  && npm run build:production  && mv dist ${ARTIFACT_DIR}
 ---> Running in 003163be2e63
npm WARN deprecated [email protected]: flatten is deprecated in favor of utility frameworks such as lodash.
npm WARN deprecated @types/[email protected]: This is a stub types definition. vfile-message provides its own type definitions, so you do not need this installed.
npm WARN deprecated [email protected]: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
npm WARN deprecated [email protected]: Please see https://github.com/lydell/urix#deprecated
npm WARN deprecated [email protected]: See https://github.com/lydell/source-map-resolve#deprecated
npm WARN deprecated [email protected]: See https://github.com/lydell/source-map-url#deprecated
npm WARN deprecated @stylelint/[email protected]: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
npm WARN deprecated @stylelint/[email protected]: Use the original unforked package instead: postcss-markdown
npm WARN deprecated @types/[email protected]: This is a stub types definition for localforage (https://github.com/localForage/localForage). localforage provides its own type definitions, so you don't need @types/localforage installed!
npm WARN deprecated [email protected]: https://github.com/lydell/resolve-url#deprecated

added 1763 packages in 1m

> [email protected] build:production
> cross-env NODE_ENV="production" webpack --config webpack.prod.js

[BABEL] Note: The code generator has deoptimised the styling of /src/node_modules/pdfjs-dist/build/pdf.js as it exceeds the max of 500KB.
assets by info 39 MiB [immutable] 2111 assets
assets by path *.css 1.71 MiB 158 assets
assets by path assets/ 744 KiB 48 assets
assets by path libraries/ 8.9 MiB
  assets by status 8.62 MiB [big] 5 assets
  + 4 assets
assets by path themes/ 125 KiB 9 assets
assets by path *.ts 20 KiB
  asset apiclient.d.ts 19.4 KiB [emitted] [from: apiclient.d.ts] [copied]
  asset global.d.ts 541 bytes [emitted] [from: global.d.ts] [copied]
  asset index.d.ts 67 bytes [emitted] [from: index.d.ts] [copied]
assets by path *.tsx 2.5 KiB
  asset RootApp.tsx 1.39 KiB [emitted] [from: RootApp.tsx] [copied]
  asset RootAppRouter.tsx 1.11 KiB [emitted] [from: RootAppRouter.tsx] [copied]
+ 38 assets
Entrypoint main.jellyfin [big] 2.21 MiB = 26 assets
Entrypoint serviceworker 219 KiB = runtime.bundle.js 45.7 KiB node_modules.core-js.bundle.js 173 KiB serviceworker.js 768 bytes
orphan modules 15.5 MiB (javascript) 24.5 MiB (asset) 83.3 KiB (runtime) [orphan] 14862 modules
runtime modules 55.8 KiB 15 modules
built modules 24.6 MiB (javascript) 1.27 MiB (css/mini-extract) 46.9 KiB (asset) [built]
  modules by path ../node_modules/ 14.9 MiB (javascript) 158 KiB (css/mini-extract)
    javascript modules 14.9 MiB 1952 modules
    json modules 30 KiB 4 modules
    css modules 158 KiB 3 modules
  modules by path ./ 9.63 MiB (javascript) 1.12 MiB (css/mini-extract) 46.9 KiB (asset)
    javascript modules 3.93 MiB 440 modules
    json modules 5.7 MiB 92 modules
    css modules 1.12 MiB 82 modules
    asset modules 126 bytes (javascript) 46.9 KiB (asset) 3 modules
  + 6 modules

WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
This can impact web performance.
Assets: 
  698bd8550d863c20a3e1.ttf (339 KiB)
  main.jellyfin.bundle.js (383 KiB)
  43091.css (967 KiB)
  [email protected] (550 KiB)
  [email protected] (287 KiB)
  libraries/subtitles-octopus-worker.js (352 KiB)
  libraries/subtitles-octopus-worker.wasm (2.18 MiB)
  libraries/pdf.worker.js (1 MiB)
  libraries/subtitles-octopus-worker-legacy.js (4.25 MiB)
  libraries/wasm-gen/libarchive.wasm (875 KiB)
  [email protected] (285 KiB)
  node_modules.hls.js.970a5cb5618e7282c138.chunk.js (403 KiB)
  node_modules.pdfjs-dist.5bb4bdfda8b7a44bea07.chunk.js (434 KiB)

WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.
Entrypoints:
  main.jellyfin (2.21 MiB)
      runtime.bundle.js
      [email protected]
      [email protected]
      [email protected]
      [email protected]
      [email protected]
      [email protected]
      [email protected]
      node_modules.lodash-es.bundle.js
      node_modules.date-fns.esm.bundle.js
      [email protected]
      node_modules.core-js.bundle.js
      node_modules.axios.bundle.js
      node_modules.react-dom.bundle.js
      node_modules.jquery.bundle.js
      node_modules.webcomponents.js.bundle.js
      node_modules.resize-observer-polyfill.bundle.js
      node_modules.regenerator-runtime.bundle.js
      node_modules.jellyfin-apiclient.bundle.js
      node_modules.intersection-observer.bundle.js
      node_modules.history.bundle.js
      node_modules.dompurify.bundle.js
      14926.css
      14926.bundle.js
      main.jellyfin.css
      main.jellyfin.bundle.js

webpack 5.91.0 compiled with 2 warnings in 59665 ms
 ---> Removed intermediate container 003163be2e63
 ---> 5e109e88fbe1
Step 26/63 : FROM mcr.microsoft.com/dotnet/sdk:${DOTNET_VERSION}-${OS_VERSION}-slim as server
 ---> 7dd073a82957
Step 27/63 : ARG DOTNET_ARCH
 ---> Running in f4f1e5cfb688
 ---> Removed intermediate container f4f1e5cfb688
 ---> 7a6dbe691daa
Step 28/63 : ARG SOURCE_DIR=/src
 ---> Running in ff0cee7a0694
 ---> Removed intermediate container ff0cee7a0694
 ---> 367ccbd7e9ed
Step 29/63 : ARG ARTIFACT_DIR=/server
 ---> Running in 89c9a58efb3c
 ---> Removed intermediate container 89c9a58efb3c
 ---> e0935adb2a23
Step 30/63 : WORKDIR ${SOURCE_DIR}
 ---> Running in d71937242b96
 ---> Removed intermediate container d71937242b96
 ---> 334885c78ca8
Step 31/63 : COPY jellyfin-server .
 ---> f333ec4e0428
Step 32/63 : ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
 ---> Running in f6ec7be2355d
 ---> Removed intermediate container f6ec7be2355d
 ---> dfd7a213f22a
Step 33/63 : RUN dotnet publish Jellyfin.Server --configuration Release     --output="${ARTIFACT_DIR}" --self-contained     --runtime linux-${DOTNET_ARCH} -p:DebugSymbols=false -p:DebugType=none
 ---> Running in c0469b285227
MSBuild version 17.9.6+a4ecab324 for .NET
  Determining projects to restore...
  Restored /src/src/Jellyfin.MediaEncoding.Keyframes/Jellyfin.MediaEncoding.Keyframes.csproj (in 24.75 sec).
  Restored /src/src/Jellyfin.Extensions/Jellyfin.Extensions.csproj (in 24.75 sec).
  Restored /src/Jellyfin.Data/Jellyfin.Data.csproj (in 24.75 sec).
  Restored /src/MediaBrowser.Common/MediaBrowser.Common.csproj (in 25.21 sec).
  Restored /src/Emby.Naming/Emby.Naming.csproj (in 25.21 sec).
  Restored /src/MediaBrowser.XbmcMetadata/MediaBrowser.XbmcMetadata.csproj (in 360 ms).
  Restored /src/MediaBrowser.Controller/MediaBrowser.Controller.csproj (in 25.21 sec).
  Restored /src/src/Jellyfin.Drawing/Jellyfin.Drawing.csproj (in 25.21 sec).
  Restored /src/Emby.Photos/Emby.Photos.csproj (in 25.21 sec).
  Restored /src/src/Jellyfin.LiveTv/Jellyfin.LiveTv.csproj (in 25.21 sec).
  Restored /src/MediaBrowser.LocalMetadata/MediaBrowser.LocalMetadata.csproj (in 25.21 sec).
  Restored /src/src/Jellyfin.MediaEncoding.Hls/Jellyfin.MediaEncoding.Hls.csproj (in 364 ms).
  Restored /src/src/Jellyfin.Drawing.Skia/Jellyfin.Drawing.Skia.csproj (in 25.21 sec).
  Restored /src/MediaBrowser.Providers/MediaBrowser.Providers.csproj (in 25.21 sec).
  Restored /src/MediaBrowser.Model/MediaBrowser.Model.csproj (in 365 ms).
  Restored /src/src/Jellyfin.Networking/Jellyfin.Networking.csproj (in 6 ms).
  Restored /src/Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj (in 25.22 sec).
  Restored /src/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj (in 2.4 sec).
  Restored /src/Jellyfin.Api/Jellyfin.Api.csproj (in 27.61 sec).
  Restored /src/Emby.Server.Implementations/Emby.Server.Implementations.csproj (in 27.61 sec).
  Restored /src/Jellyfin.Server/Jellyfin.Server.csproj (in 27.62 sec).
  Jellyfin.MediaEncoding.Keyframes -> /src/src/Jellyfin.MediaEncoding.Keyframes/bin/Release/net8.0/Jellyfin.MediaEncoding.Keyframes.dll
  Jellyfin.Data -> /src/Jellyfin.Data/bin/Release/net8.0/Jellyfin.Data.dll
  Jellyfin.Extensions -> /src/src/Jellyfin.Extensions/bin/Release/net8.0/Jellyfin.Extensions.dll
  MediaBrowser.Model -> /src/MediaBrowser.Model/bin/Release/net8.0/MediaBrowser.Model.dll
  MediaBrowser.Common -> /src/MediaBrowser.Common/bin/Release/net8.0/MediaBrowser.Common.dll
  Emby.Naming -> /src/Emby.Naming/bin/Release/net8.0/Emby.Naming.dll
  MediaBrowser.Controller -> /src/MediaBrowser.Controller/bin/Release/net8.0/MediaBrowser.Controller.dll
  Jellyfin.Drawing -> /src/src/Jellyfin.Drawing/bin/Release/net8.0/Jellyfin.Drawing.dll
  MediaBrowser.LocalMetadata -> /src/MediaBrowser.LocalMetadata/bin/Release/net8.0/MediaBrowser.LocalMetadata.dll
  MediaBrowser.XbmcMetadata -> /src/MediaBrowser.XbmcMetadata/bin/Release/net8.0/MediaBrowser.XbmcMetadata.dll
  Jellyfin.Networking -> /src/src/Jellyfin.Networking/bin/Release/net8.0/Jellyfin.Networking.dll
  Jellyfin.Drawing.Skia -> /src/src/Jellyfin.Drawing.Skia/bin/Release/net8.0/Jellyfin.Drawing.Skia.dll
  MediaBrowser.MediaEncoding -> /src/MediaBrowser.MediaEncoding/bin/Release/net8.0/MediaBrowser.MediaEncoding.dll
  Jellyfin.LiveTv -> /src/src/Jellyfin.LiveTv/bin/Release/net8.0/Jellyfin.LiveTv.dll
  Emby.Photos -> /src/Emby.Photos/bin/Release/net8.0/Emby.Photos.dll
  MediaBrowser.Providers -> /src/MediaBrowser.Providers/bin/Release/net8.0/MediaBrowser.Providers.dll
  Jellyfin.MediaEncoding.Hls -> /src/src/Jellyfin.MediaEncoding.Hls/bin/Release/net8.0/Jellyfin.MediaEncoding.Hls.dll
  Jellyfin.Server.Implementations -> /src/Jellyfin.Server.Implementations/bin/Release/net8.0/Jellyfin.Server.Implementations.dll
  Jellyfin.Api -> /src/Jellyfin.Api/bin/Release/net8.0/Jellyfin.Api.dll
  Emby.Server.Implementations -> /src/Emby.Server.Implementations/bin/Release/net8.0/Emby.Server.Implementations.dll
  Jellyfin.Server -> /src/Jellyfin.Server/bin/Release/net8.0/linux-x64/jellyfin.dll
  Jellyfin.Server -> /server/
 ---> Removed intermediate container c0469b285227
 ---> 28daf14ec0d1
Step 34/63 : FROM multiarch/qemu-user-static:x86_64-${QEMU_ARCH} as qemu
 ---> 6f1ad9baf3ab
Step 35/63 : FROM ${IMAGE_ARCH}/debian:${OS_VERSION}-slim as combined
 ---> dd8416105e9e
Step 36/63 : ARG OS_VERSION
 ---> Running in f48b11e00426
 ---> Removed intermediate container f48b11e00426
 ---> 28783b118f19
Step 37/63 : ARG FFMPEG_PACKAGE
 ---> Running in 8e178e143bdc
 ---> Removed intermediate container 8e178e143bdc
 ---> 195437d31114
Step 38/63 : ARG GMMLIB_VERSION
 ---> Running in 6d74b23194fa
 ---> Removed intermediate container 6d74b23194fa
 ---> 040ab89fbea6
Step 39/63 : ARG IGC_VERSION
 ---> Running in 27377e628372
 ---> Removed intermediate container 27377e628372
 ---> ed0cb5cd0b9a
Step 40/63 : ARG NEO_VERSION
 ---> Running in f4ee80d80a77
 ---> Removed intermediate container f4ee80d80a77
 ---> 36156a7bf1db
Step 41/63 : ARG LEVEL_ZERO_VERSION
 ---> Running in 653f811a2a1e
 ---> Removed intermediate container 653f811a2a1e
 ---> 77351252a2dd
Step 42/63 : ARG MALI_PKG_VER
 ---> Running in bb6a4d4b9bba
 ---> Removed intermediate container bb6a4d4b9bba
 ---> deb5d538bf06
Step 43/63 : ARG MALI_PKG_TAG
 ---> Running in 26211f537dba
 ---> Removed intermediate container 26211f537dba
 ---> ee8efd97e6fc
Step 44/63 : ARG MALI_PKG_CFG
 ---> Running in 5a439fa0becd
 ---> Removed intermediate container 5a439fa0becd
 ---> 9a0d91bbaf9a
Step 45/63 : ARG PACKAGE_ARCH
 ---> Running in a15a7e640805
 ---> Removed intermediate container a15a7e640805
 ---> 0f2dcb36cfaa
Step 46/63 : ARG DOTNET_ARCH
 ---> Running in 4f0e7a9b2501
 ---> Removed intermediate container 4f0e7a9b2501
 ---> 75d766d7ffdf
Step 47/63 : ARG QEMU_ARCH
 ---> Running in d7de4c7d79d1
 ---> Removed intermediate container d7de4c7d79d1
 ---> ef48de77e76f
Step 48/63 : COPY --from=qemu /usr/bin/* /usr/bin
COPY failed: no source files were specified

[Issue]: DEB Files Are Not Being Signed (Nor Are .changes Or .dsc Files)

Please describe your bug

Currently the DEB file is failing verification. It's been a while but based on my install scripts that I used, I'm fairly certain that the DEB file used to verify. The issue is that the DEB file itself is not being signed.

The solution is to add a step to the build process that runs something like:

debsigs --sign=origin -k 49023CD01DE21A7B <jellyfin_deb_file>.deb

This will add a file to the DEB file that includes a signature.

It should also be straightforward to sign the .changes and .dsc files as well which would be useful for others. Although for my purposes I only really care about verifying the actual DEB that I'm going to install directly.

Reproduction Steps

  1. Install the public key to /usr/share/debsig/keyrings/49023CD01DE21A7B/debsig.gpg
  2. Install the debsig policy file to /etc/debsig/policies/49023CD01DE21A7B/debsig.pol
  3. Run debsig-verify ./<jellyfin_deb_file>.deb

Example debsig.pol file:

<?xml version="1.0"?>
<!DOCTYPE Policy SYSTEM "https://www.debian.org/debsig/1.0/policy.dtd">
<Policy xmlns="https://www.debian.org/debsig/1.0/">
  <Origin Name="Jellyfin" id="49023CD01DE21A7B" Description="Jellyfin Media Server"/>
    <Selection>
      <Required Type="origin" File="debsig.gpg" id="49023CD01DE21A7B"/>
    </Selection>
    <Verification MinOptional="0">
      <Required Type="origin" File="debsig.gpg" id="49023CD01DE21A7B"/>
    </Verification>
</Policy>

Actual Behavior

Message stating:

Origin Signature check failed. This deb might not be signed.

Expected Behavior

I expect that there will be a message stating that the DEB file is valid.

Jellyfin Version

10.8.13

if other:

No response

Environment

- OS: Linux (Ubuntu)
- Linux Kernel: N/A
- Virtualization: N/A

Jellyfin logs

N/A

FFmpeg logs

No response

Please attach any browser or client logs here

No response

Please attach any screenshots here

No response

Code of Conduct

  • I agree to follow this project's Code of Conduct

Package for Ubuntu - unmet dependencies to jellfin-ffmpeg5

I tried to install jellyfin on a virtual machine (VirtualBox) with Ubuntu 22.04.4 LTS jammy. I run the command that is mentioned in the download section of the website:

curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

This leads to an error, because of a missing dependency:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 jellyfin : Depends: jellyfin-ffmpeg5 (>= 5.0.0) but it is not installable
E: Unable to correct problems, you have held broken packages.
ERROR: Faild to install Jellfin. Use https://jellyfin.org/contact to find us for troubleshooting.

Is there maybe some bug in the repo, because of recently released ffmpeg6 for jellyfin, so that the jellyfin package still requires the ffmpeg5 package but these does not exist anymore?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.