Jellyfin Packaging
This directory contains the packaging configuration of Jellyfin for multiple platforms. The specification is below; all package platforms must follow the specification to be compatable with the central build script.
Package List
Operating System Packages
debian-package-x64: Package for Debian and Ubuntu amd64 systems.fedora-package-x64: Package for Fedora, CentOS, and Red Hat Enterprise Linux amd64 systems.
Portable Builds (archives)
debian-x64: Portable binary archive for Debian amd64 systems.ubuntu-x64: Portable binary archive for Ubuntu amd64 systems.linux-x64: Portable binary archive for generic Linux amd64 systems.osx-x64: Portable binary archive for MacOS amd64 systems.win-x64: Portable binary archive for Windows amd64 systems.win-x86: Portable binary archive for Windows i386 systems.
Other Builds
These builds are not necessarily run from the build script, but are present for other platforms.
framework: Compiled.dllfor use with .NET Core runtime on any system.docker: Docker manifests for auto-publishing.unraid: unRaid Docker template; not built bybuildbut imported into unRaid directly.win-generic: Portable binary for generic Windows systems.
Package Specification
Dependencies
-
If a platform requires additional build dependencies, the required binary names, i.e. to validate
which <binary>, should be specified in adependencies.txtfile inside the platform directory. -
Each dependency should be present on its own line.
Action Scripts
-
Actions are defined in BASH scripts with the name
<action>.shwithin the platform directory. -
The list of valid actions are:
build: Builds a set of binaries.package: Assembles the compiled binaries into a package.sign: Performs signing actions on a package.publish: Performs a publishing action for a package.clean: Cleans up any artifacts from the previous actions.
-
All package actions are optional, however at least one should generate output files, and any that do should contain a
cleanaction. -
Actions are executed in the order specified above, and later actions may depend on former actions.
-
Actions except for
cleanshouldset -o errexitto terminate on failed actions. -
The
cleanaction should alwaysexit 0even if no work is done or it fails. -
The
cleanaction can be passed a variable as argument 1, namedkeep_artifacts, containing either the valueyorn. It is indended to handle situations when the user runsbuild --keep-artifactsand should be handled intelligently. Usually, this is used to preserve Docker images while still removing temporary directories.
Output Files
-
Upon completion of the defined actions, at least one output file must be created in the
<platform>/pkg-distdirectory. -
Output files will be moved to the directory
jellyfin-build/<platform>one directory above the repository root upon completion.
Common Functions
-
A number of common functions are defined in
deployment/common.build.shfor use by platform scripts. -
Each action script should import the common functions to define a number of standard variables.
-
The common variables are:
ROOT: The Jellyfin repostiory root, usually../...CONFIG: The .NET config, usuallyRelease.DOTNETRUNTIME: The .NET--runtimevalue, platform-dependent.OUTPUT_DIR: The intermediate output dir, usually./dist/jellyfin_${VERSION}.BUILD_CONTEXT: The Docker build context, usually../...DOCKERFILE: The Dockerfile, usuallyDockerfilein the platform directory.IMAGE_TAG: A tag for the built Docker image.PKG_DIR: The final binary output directory for collection, invariablypkg-dist.ARCHIVE_CMD: The compression/archive command for release archives, usuallytar -xvzforzip.
get_version
Reads the version information from SharedVersion.cs.
Arguments: ROOT
build_jellyfin
Build a standard self-contained binary in the current OS context.
Arguments: ROOT CONFIG DOTNETRUNTIME OUTPUT_DIR
build_jellyfin_docker
Build a standard self-contained binary in a Docker image.
Arguments: BUILD_CONTEXT DOCKERFILE IMAGE_TAG
clean_jellyfin
Clean up a build for housekeeping.
Arguments: ROOT CONFIG OUTPUT_DIR PKG_DIR
package_portable
Produce a compressed archive.
Arguments: ROOT OUTPUT_DIR PKG_DIR ARCHIVE_CMD