aboutsummaryrefslogtreecommitdiff
path: root/deployment/old
diff options
context:
space:
mode:
authorJoshua M. Boniface <joshua@boniface.me>2020-04-09 11:49:14 -0400
committerJoshua M. Boniface <joshua@boniface.me>2020-04-09 11:49:14 -0400
commited735522cfd4ab8edfd7be2e4f6ce52856eb43cd (patch)
tree249b220c381d5881f8f21985adfe20c47340fe96 /deployment/old
parent406d087a465dd62ad376124fcb53692b1f666aef (diff)
Revert "Remove old stuff"
This reverts commit b9fdd96ece39a6ff0f4ff37ecba36d7a0f65fcba.
Diffstat (limited to 'deployment/old')
-rw-r--r--deployment/old/README.md62
-rw-r--r--deployment/old/centos-package-x64/Dockerfile39
-rwxr-xr-xdeployment/old/centos-package-x64/clean.sh32
-rw-r--r--deployment/old/centos-package-x64/dependencies.txt1
-rwxr-xr-xdeployment/old/centos-package-x64/docker-build.sh18
-rwxr-xr-xdeployment/old/centos-package-x64/package.sh34
l---------deployment/old/centos-package-x64/pkg-src1
-rw-r--r--deployment/old/debian-package-arm64/Dockerfile.amd6443
-rw-r--r--deployment/old/debian-package-arm64/Dockerfile.arm6434
-rwxr-xr-xdeployment/old/debian-package-arm64/clean.sh27
-rw-r--r--deployment/old/debian-package-arm64/dependencies.txt1
-rwxr-xr-xdeployment/old/debian-package-arm64/docker-build.sh21
-rwxr-xr-xdeployment/old/debian-package-arm64/package.sh45
l---------deployment/old/debian-package-arm64/pkg-src1
-rw-r--r--deployment/old/debian-package-armhf/Dockerfile.amd6442
-rw-r--r--deployment/old/debian-package-armhf/Dockerfile.armhf34
-rwxr-xr-xdeployment/old/debian-package-armhf/clean.sh27
-rw-r--r--deployment/old/debian-package-armhf/dependencies.txt1
-rwxr-xr-xdeployment/old/debian-package-armhf/docker-build.sh21
-rwxr-xr-xdeployment/old/debian-package-armhf/package.sh45
l---------deployment/old/debian-package-armhf/pkg-src1
-rw-r--r--deployment/old/debian-package-x64/Dockerfile34
-rwxr-xr-xdeployment/old/debian-package-x64/clean.sh27
-rw-r--r--deployment/old/debian-package-x64/dependencies.txt1
-rwxr-xr-xdeployment/old/debian-package-x64/docker-build.sh20
-rwxr-xr-xdeployment/old/debian-package-x64/package.sh34
-rw-r--r--deployment/old/debian-package-x64/pkg-src/changelog59
-rw-r--r--deployment/old/debian-package-x64/pkg-src/compat1
-rw-r--r--deployment/old/debian-package-x64/pkg-src/conf/jellyfin40
-rw-r--r--deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers37
-rw-r--r--deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf7
-rw-r--r--deployment/old/debian-package-x64/pkg-src/conf/logging.json30
-rw-r--r--deployment/old/debian-package-x64/pkg-src/control31
-rw-r--r--deployment/old/debian-package-x64/pkg-src/copyright29
-rw-r--r--deployment/old/debian-package-x64/pkg-src/gbp.conf6
-rw-r--r--deployment/old/debian-package-x64/pkg-src/install6
-rw-r--r--deployment/old/debian-package-x64/pkg-src/jellyfin.init61
-rw-r--r--deployment/old/debian-package-x64/pkg-src/jellyfin.service14
-rw-r--r--deployment/old/debian-package-x64/pkg-src/jellyfin.upstart20
-rw-r--r--deployment/old/debian-package-x64/pkg-src/po/POTFILES.in1
-rw-r--r--deployment/old/debian-package-x64/pkg-src/po/templates.pot57
-rw-r--r--deployment/old/debian-package-x64/pkg-src/postinst92
-rw-r--r--deployment/old/debian-package-x64/pkg-src/postrm81
-rw-r--r--deployment/old/debian-package-x64/pkg-src/preinst78
-rw-r--r--deployment/old/debian-package-x64/pkg-src/prerm61
-rwxr-xr-xdeployment/old/debian-package-x64/pkg-src/rules66
-rw-r--r--deployment/old/debian-package-x64/pkg-src/source.lintian-overrides3
-rw-r--r--deployment/old/debian-package-x64/pkg-src/source/format1
-rw-r--r--deployment/old/debian-package-x64/pkg-src/source/options11
-rw-r--r--deployment/old/fedora-package-x64/Dockerfile33
-rwxr-xr-xdeployment/old/fedora-package-x64/clean.sh32
-rw-r--r--deployment/old/fedora-package-x64/dependencies.txt1
-rwxr-xr-xdeployment/old/fedora-package-x64/docker-build.sh18
-rwxr-xr-xdeployment/old/fedora-package-x64/package.sh34
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/.gitignore3
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/README.md43
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml9
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/jellyfin.env34
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf7
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/jellyfin.service15
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/jellyfin.spec181
-rw-r--r--deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers19
-rwxr-xr-xdeployment/old/fedora-package-x64/pkg-src/restart.sh36
-rw-r--r--deployment/old/linux-x64/Dockerfile37
-rwxr-xr-xdeployment/old/linux-x64/clean.sh27
-rw-r--r--deployment/old/linux-x64/dependencies.txt1
-rwxr-xr-xdeployment/old/linux-x64/docker-build.sh36
-rwxr-xr-xdeployment/old/linux-x64/package.sh34
-rw-r--r--deployment/old/macos/Dockerfile37
-rwxr-xr-xdeployment/old/macos/clean.sh27
-rw-r--r--deployment/old/macos/dependencies.txt1
-rwxr-xr-xdeployment/old/macos/docker-build.sh36
-rwxr-xr-xdeployment/old/macos/package.sh34
-rw-r--r--deployment/old/portable/Dockerfile37
-rwxr-xr-xdeployment/old/portable/clean.sh27
-rw-r--r--deployment/old/portable/dependencies.txt1
-rwxr-xr-xdeployment/old/portable/docker-build.sh36
-rwxr-xr-xdeployment/old/portable/package.sh34
-rw-r--r--deployment/old/ubuntu-package-arm64/Dockerfile.amd6459
-rw-r--r--deployment/old/ubuntu-package-arm64/Dockerfile.arm6440
-rwxr-xr-xdeployment/old/ubuntu-package-arm64/clean.sh27
-rw-r--r--deployment/old/ubuntu-package-arm64/dependencies.txt1
-rwxr-xr-xdeployment/old/ubuntu-package-arm64/docker-build.sh21
-rwxr-xr-xdeployment/old/ubuntu-package-arm64/package.sh45
l---------deployment/old/ubuntu-package-arm64/pkg-src1
-rw-r--r--deployment/old/ubuntu-package-armhf/Dockerfile.amd6459
-rw-r--r--deployment/old/ubuntu-package-armhf/Dockerfile.armhf40
-rwxr-xr-xdeployment/old/ubuntu-package-armhf/clean.sh27
-rw-r--r--deployment/old/ubuntu-package-armhf/dependencies.txt1
-rwxr-xr-xdeployment/old/ubuntu-package-armhf/docker-build.sh21
-rwxr-xr-xdeployment/old/ubuntu-package-armhf/package.sh45
l---------deployment/old/ubuntu-package-armhf/pkg-src1
-rw-r--r--deployment/old/ubuntu-package-x64/Dockerfile36
-rwxr-xr-xdeployment/old/ubuntu-package-x64/clean.sh27
-rw-r--r--deployment/old/ubuntu-package-x64/dependencies.txt1
-rwxr-xr-xdeployment/old/ubuntu-package-x64/docker-build.sh20
-rwxr-xr-xdeployment/old/ubuntu-package-x64/package.sh34
l---------deployment/old/ubuntu-package-x64/pkg-src1
-rw-r--r--deployment/old/unraid/docker-templates/README.md15
-rw-r--r--deployment/old/unraid/docker-templates/jellyfin.xml57
-rw-r--r--deployment/old/win-x64/Dockerfile37
-rwxr-xr-xdeployment/old/win-x64/clean.sh27
-rw-r--r--deployment/old/win-x64/dependencies.txt1
-rwxr-xr-xdeployment/old/win-x64/docker-build.sh61
-rwxr-xr-xdeployment/old/win-x64/package.sh34
-rw-r--r--deployment/old/win-x86/Dockerfile37
-rwxr-xr-xdeployment/old/win-x86/clean.sh27
-rw-r--r--deployment/old/win-x86/dependencies.txt1
-rwxr-xr-xdeployment/old/win-x86/docker-build.sh61
-rwxr-xr-xdeployment/old/win-x86/package.sh34
110 files changed, 3207 insertions, 0 deletions
diff --git a/deployment/old/README.md b/deployment/old/README.md
new file mode 100644
index 000000000..a805f59ca
--- /dev/null
+++ b/deployment/old/README.md
@@ -0,0 +1,62 @@
+# 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)
+
+* `linux-x64`: Portable binary archive for generic Linux amd64 systems.
+* `macos`: 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.
+
+* `portable`: Compiled `.dll` for use with .NET Core runtime on any system.
+* `docker`: Docker manifests for auto-publishing.
+* `unraid`: unRaid Docker template; not built by `build` but imported into unRaid directly.
+* `windows`: Support files and scripts for Windows CI build.
+
+## Package Specification
+
+### Dependencies
+
+* If a platform requires additional build dependencies, the required binary names, i.e. to validate `which <binary>`, should be specified in a `dependencies.txt` file 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>.sh` within the platform directory.
+
+* The list of valid actions are:
+
+ 1. `build`: Builds a set of binaries.
+ 2. `package`: Assembles the compiled binaries into a package.
+ 3. `sign`: Performs signing actions on a package.
+ 4. `publish`: Performs a publishing action for a package.
+ 5. `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 `clean` action.
+
+* Actions are executed in the order specified above, and later actions may depend on former actions.
+
+* Actions except for `clean` should `set -o errexit` to terminate on failed actions.
+
+* The `clean` action should always `exit 0` even if no work is done or it fails.
+
+* The `clean` action can be passed a variable as argument 1, named `keep_artifacts`, containing either the value `y` or `n`. It is indended to handle situations when the user runs `build --keep-artifacts` and 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-dist` directory.
+
+* Output files will be moved to the directory `jellyfin-build/<platform>` one directory above the repository root upon completion.
diff --git a/deployment/old/centos-package-x64/Dockerfile b/deployment/old/centos-package-x64/Dockerfile
new file mode 100644
index 000000000..08219a2e4
--- /dev/null
+++ b/deployment/old/centos-package-x64/Dockerfile
@@ -0,0 +1,39 @@
+FROM centos:7
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/centos-package-x64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+
+# Prepare CentOS environment
+RUN yum update -y \
+ && yum install -y epel-release
+
+# Install build dependencies
+RUN yum install -y @buildsys-build rpmdevtools yum-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel git
+
+# Install recent NodeJS and Yarn
+RUN curl -fSsLo /etc/yum.repos.d/yarn.repo https://dl.yarnpkg.com/rpm/yarn.repo \
+ && rpm -i https://rpm.nodesource.com/pub_10.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm \
+ && yum install -y yarn
+
+# Install DotNET SDK
+RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm \
+ && rpmdev-setuptree \
+ && yum install -y dotnet-sdk-${SDK_VERSION}
+
+# Create symlinks and directories
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh \
+ && mkdir -p ${SOURCE_DIR}/SPECS \
+ && ln -s ${PLATFORM_DIR}/pkg-src/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && mkdir -p ${SOURCE_DIR}/SOURCES \
+ && ln -s ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/SOURCES
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/centos-package-x64/clean.sh b/deployment/old/centos-package-x64/clean.sh
new file mode 100755
index 000000000..31455de0d
--- /dev/null
+++ b/deployment/old/centos-package-x64/clean.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+VERSION="$( grep -A1 '^Version:' ${WORKDIR}/pkg-src/jellyfin.spec | awk '{ print $NF }' )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+package_source_dir="${WORKDIR}/pkg-src"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-centos-build"
+
+rm -f "${package_source_dir}/jellyfin-${VERSION}.tar.gz" &>/dev/null \
+ || sudo rm -f "${package_source_dir}/jellyfin-${VERSION}.tar.gz" &>/dev/null
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/centos-package-x64/dependencies.txt b/deployment/old/centos-package-x64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/centos-package-x64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/centos-package-x64/docker-build.sh b/deployment/old/centos-package-x64/docker-build.sh
new file mode 100755
index 000000000..62dd144e5
--- /dev/null
+++ b/deployment/old/centos-package-x64/docker-build.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Builds the RPM inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Build RPM
+make -f .copr/Makefile srpm outdir=/root/rpmbuild/SRPMS
+rpmbuild --rebuild -bb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/rpm
+mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/rpm/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/centos-package-x64/package.sh b/deployment/old/centos-package-x64/package.sh
new file mode 100755
index 000000000..1b983f49d
--- /dev/null
+++ b/deployment/old/centos-package-x64/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-centos-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the RPMs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the RPMs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/rpm/* "${output_dir}"
diff --git a/deployment/old/centos-package-x64/pkg-src b/deployment/old/centos-package-x64/pkg-src
new file mode 120000
index 000000000..3ff4d3cbf
--- /dev/null
+++ b/deployment/old/centos-package-x64/pkg-src
@@ -0,0 +1 @@
+../fedora-package-x64/pkg-src/ \ No newline at end of file
diff --git a/deployment/old/debian-package-arm64/Dockerfile.amd64 b/deployment/old/debian-package-arm64/Dockerfile.amd64
new file mode 100644
index 000000000..b63e08b7d
--- /dev/null
+++ b/deployment/old/debian-package-arm64/Dockerfile.amd64
@@ -0,0 +1,43 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-arm64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Prepare the cross-toolchain
+RUN dpkg --add-architecture arm64 \
+ && apt-get update \
+ && apt-get install -y cross-gcc-dev \
+ && TARGET_LIST="arm64" cross-gcc-gensource 8 \
+ && cd cross-gcc-packages-amd64/cross-gcc-8-arm64 \
+ && apt-get install -y gcc-8-source libstdc++-8-dev-arm64-cross binutils-aarch64-linux-gnu bison flex libtool gdb sharutils netbase libmpc-dev libmpfr-dev libgmp-dev systemtap-sdt-dev autogen expect chrpath zlib1g-dev zip libc6-dev:arm64 linux-libc-dev:arm64 libgcc1:arm64 libcurl4-openssl-dev:arm64 libfontconfig1-dev:arm64 libfreetype6-dev:arm64 libssl-dev:arm64 liblttng-ust0:arm64 libstdc++-8-dev:arm64
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
+#ENTRYPOINT ["/bin/bash"]
diff --git a/deployment/old/debian-package-arm64/Dockerfile.arm64 b/deployment/old/debian-package-arm64/Dockerfile.arm64
new file mode 100644
index 000000000..9ca486844
--- /dev/null
+++ b/deployment/old/debian-package-arm64/Dockerfile.arm64
@@ -0,0 +1,34 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-arm64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=arm64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev liblttng-ust0
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/5a4c8f96-1c73-401c-a6de-8e100403188a/0ce6ab39747e2508366d498f9c0a0669/dotnet-sdk-3.1.100-linux-arm64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/debian-package-arm64/clean.sh b/deployment/old/debian-package-arm64/clean.sh
new file mode 100755
index 000000000..e7bfdf8b4
--- /dev/null
+++ b/deployment/old/debian-package-arm64/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-debian_arm64-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/debian-package-arm64/dependencies.txt b/deployment/old/debian-package-arm64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/debian-package-arm64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/debian-package-arm64/docker-build.sh b/deployment/old/debian-package-arm64/docker-build.sh
new file mode 100755
index 000000000..67ab6bd74
--- /dev/null
+++ b/deployment/old/debian-package-arm64/docker-build.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Builds the DEB inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Remove build-dep for dotnet-sdk-3.1, since it's not a package in this image
+sed -i '/dotnet-sdk-3.1,/d' debian/control
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -aarm64
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/deb
+mv /jellyfin[-_]* ${ARTIFACT_DIR}/deb/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/debian-package-arm64/package.sh b/deployment/old/debian-package-arm64/package.sh
new file mode 100755
index 000000000..209198218
--- /dev/null
+++ b/deployment/old/debian-package-arm64/package.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+ARCH="$( arch )"
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-debian_arm64-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Determine which Dockerfile to use
+case $ARCH in
+ 'x86_64')
+ DOCKERFILE="Dockerfile.amd64"
+ ;;
+ 'armv7l')
+ DOCKERFILE="Dockerfile.arm64"
+ ;;
+esac
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./${DOCKERFILE}
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/deb/* "${output_dir}"
diff --git a/deployment/old/debian-package-arm64/pkg-src b/deployment/old/debian-package-arm64/pkg-src
new file mode 120000
index 000000000..4c695fea1
--- /dev/null
+++ b/deployment/old/debian-package-arm64/pkg-src
@@ -0,0 +1 @@
+../debian-package-x64/pkg-src \ No newline at end of file
diff --git a/deployment/old/debian-package-armhf/Dockerfile.amd64 b/deployment/old/debian-package-armhf/Dockerfile.amd64
new file mode 100644
index 000000000..1b64b5314
--- /dev/null
+++ b/deployment/old/debian-package-armhf/Dockerfile.amd64
@@ -0,0 +1,42 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-armhf
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Prepare the cross-toolchain
+RUN dpkg --add-architecture armhf \
+ && apt-get update \
+ && apt-get install -y cross-gcc-dev \
+ && TARGET_LIST="armhf" cross-gcc-gensource 8 \
+ && cd cross-gcc-packages-amd64/cross-gcc-8-armhf \
+ && apt-get install -y gcc-8-source libstdc++-8-dev-armhf-cross binutils-aarch64-linux-gnu bison flex libtool gdb sharutils netbase libmpc-dev libmpfr-dev libgmp-dev systemtap-sdt-dev autogen expect chrpath zlib1g-dev zip binutils-arm-linux-gnueabihf libc6-dev:armhf linux-libc-dev:armhf libgcc1:armhf libcurl4-openssl-dev:armhf libfontconfig1-dev:armhf libfreetype6-dev:armhf libssl-dev:armhf liblttng-ust0:armhf libstdc++-8-dev:armhf
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/debian-package-armhf/Dockerfile.armhf b/deployment/old/debian-package-armhf/Dockerfile.armhf
new file mode 100644
index 000000000..dd398b5aa
--- /dev/null
+++ b/deployment/old/debian-package-armhf/Dockerfile.armhf
@@ -0,0 +1,34 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-armhf
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=armhf
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev liblttng-ust0
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/67766a96-eb8c-4cd2-bca4-ea63d2cc115c/7bf13840aa2ed88793b7315d5e0d74e6/dotnet-sdk-3.1.100-linux-arm.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/debian-package-armhf/clean.sh b/deployment/old/debian-package-armhf/clean.sh
new file mode 100755
index 000000000..35a3d3e9a
--- /dev/null
+++ b/deployment/old/debian-package-armhf/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-debian_armhf-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/debian-package-armhf/dependencies.txt b/deployment/old/debian-package-armhf/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/debian-package-armhf/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/debian-package-armhf/docker-build.sh b/deployment/old/debian-package-armhf/docker-build.sh
new file mode 100755
index 000000000..1bd7fb291
--- /dev/null
+++ b/deployment/old/debian-package-armhf/docker-build.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Builds the DEB inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Remove build-dep for dotnet-sdk-3.1, since it's not a package in this image
+sed -i '/dotnet-sdk-3.1,/d' debian/control
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -aarmhf
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/deb
+mv /jellyfin[-_]* ${ARTIFACT_DIR}/deb/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/debian-package-armhf/package.sh b/deployment/old/debian-package-armhf/package.sh
new file mode 100755
index 000000000..4a27dd828
--- /dev/null
+++ b/deployment/old/debian-package-armhf/package.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+ARCH="$( arch )"
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-debian_armhf-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Determine which Dockerfile to use
+case $ARCH in
+ 'x86_64')
+ DOCKERFILE="Dockerfile.amd64"
+ ;;
+ 'armv7l')
+ DOCKERFILE="Dockerfile.armhf"
+ ;;
+esac
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./${DOCKERFILE}
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/deb/* "${output_dir}"
diff --git a/deployment/old/debian-package-armhf/pkg-src b/deployment/old/debian-package-armhf/pkg-src
new file mode 120000
index 000000000..0bb6d5524
--- /dev/null
+++ b/deployment/old/debian-package-armhf/pkg-src
@@ -0,0 +1 @@
+../debian-package-x64/pkg-src/ \ No newline at end of file
diff --git a/deployment/old/debian-package-x64/Dockerfile b/deployment/old/debian-package-x64/Dockerfile
new file mode 100644
index 000000000..e863d1edf
--- /dev/null
+++ b/deployment/old/debian-package-x64/Dockerfile
@@ -0,0 +1,34 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/debian-package-x64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/debian-package-x64/clean.sh b/deployment/old/debian-package-x64/clean.sh
new file mode 100755
index 000000000..4e507bcb2
--- /dev/null
+++ b/deployment/old/debian-package-x64/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-debian-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/debian-package-x64/dependencies.txt b/deployment/old/debian-package-x64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/debian-package-x64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/debian-package-x64/docker-build.sh b/deployment/old/debian-package-x64/docker-build.sh
new file mode 100755
index 000000000..962a522eb
--- /dev/null
+++ b/deployment/old/debian-package-x64/docker-build.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Builds the DEB inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Remove build-dep for dotnet-sdk-3.1, since it's not a package in this image
+sed -i '/dotnet-sdk-3.1,/d' debian/control
+
+# Build DEB
+dpkg-buildpackage -us -uc
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/deb
+mv /jellyfin[-_]* ${ARTIFACT_DIR}/deb/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/debian-package-x64/package.sh b/deployment/old/debian-package-x64/package.sh
new file mode 100755
index 000000000..5a416959a
--- /dev/null
+++ b/deployment/old/debian-package-x64/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-debian-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/deb/* "${output_dir}"
diff --git a/deployment/old/debian-package-x64/pkg-src/changelog b/deployment/old/debian-package-x64/pkg-src/changelog
new file mode 100644
index 000000000..51c482237
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/changelog
@@ -0,0 +1,59 @@
+jellyfin (10.5.0-1) unstable; urgency=medium
+
+ * New upstream version 10.5.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.5.0
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Fri, 11 Oct 2019 20:12:38 -0400
+
+jellyfin (10.4.0-1) unstable; urgency=medium
+
+ * New upstream version 10.4.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.4.0
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Sat, 31 Aug 2019 21:38:56 -0400
+
+jellyfin (10.3.7-1) unstable; urgency=medium
+
+ * New upstream version 10.3.7; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.7
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Wed, 24 Jul 2019 10:48:28 -0400
+
+jellyfin (10.3.6-1) unstable; urgency=medium
+
+ * New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Sat, 06 Jul 2019 13:34:19 -0400
+
+jellyfin (10.3.5-1) unstable; urgency=medium
+
+ * New upstream version 10.3.5; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.5
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Sun, 09 Jun 2019 21:47:35 -0400
+
+jellyfin (10.3.4-1) unstable; urgency=medium
+
+ * New upstream version 10.3.4; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.4
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Thu, 06 Jun 2019 22:45:31 -0400
+
+jellyfin (10.3.3-1) unstable; urgency=medium
+
+ * New upstream version 10.3.3; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.3
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Fri, 17 May 2019 23:12:08 -0400
+
+jellyfin (10.3.2-1) unstable; urgency=medium
+
+ * New upstream version 10.3.2; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.2
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Tue, 30 Apr 2019 20:18:44 -0400
+
+jellyfin (10.3.1-1) unstable; urgency=medium
+
+ * New upstream version 10.3.1; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.1
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Sat, 20 Apr 2019 14:24:07 -0400
+
+jellyfin (10.3.0-1) unstable; urgency=medium
+
+ * New upstream version 10.3.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.0
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org> Fri, 19 Apr 2019 14:24:29 -0400
diff --git a/deployment/old/debian-package-x64/pkg-src/compat b/deployment/old/debian-package-x64/pkg-src/compat
new file mode 100644
index 000000000..45a4fb75d
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/compat
@@ -0,0 +1 @@
+8
diff --git a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin
new file mode 100644
index 000000000..c6e595f15
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin
@@ -0,0 +1,40 @@
+# Jellyfin default configuration options
+# This is a POSIX shell fragment
+
+# Use this file to override the default configurations; add additional
+# options with JELLYFIN_ADD_OPTS.
+
+# Under systemd, use
+# /etc/systemd/system/jellyfin.service.d/jellyfin.service.conf
+# to override the user or this config file's location.
+
+#
+# General options
+#
+
+# Program directories
+JELLYFIN_DATA_DIR="/var/lib/jellyfin"
+JELLYFIN_CONFIG_DIR="/etc/jellyfin"
+JELLYFIN_LOG_DIR="/var/log/jellyfin"
+JELLYFIN_CACHE_DIR="/var/cache/jellyfin"
+
+# Restart script for in-app server control
+JELLYFIN_RESTART_OPT="--restartpath=/usr/lib/jellyfin/restart.sh"
+
+# ffmpeg binary paths, overriding the system values
+JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"
+
+# [OPTIONAL] run Jellyfin as a headless service
+#JELLYFIN_SERVICE_OPT="--service"
+
+# [OPTIONAL] run Jellyfin without the web app
+#JELLYFIN_NOWEBAPP_OPT="--noautorunwebapp"
+
+#
+# SysV init/Upstart options
+#
+
+# Application username
+JELLYFIN_USER="jellyfin"
+# Full application command
+JELLYFIN_ARGS="$JELLYFIN_RESTART_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLFIN_NOWEBAPP_OPT"
diff --git a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
new file mode 100644
index 000000000..b481ba4ad
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
@@ -0,0 +1,37 @@
+#Allow jellyfin group to start, stop and restart itself
+Cmnd_Alias RESTARTSERVER_SYSV = /sbin/service jellyfin restart, /usr/sbin/service jellyfin restart
+Cmnd_Alias STARTSERVER_SYSV = /sbin/service jellyfin start, /usr/sbin/service jellyfin start
+Cmnd_Alias STOPSERVER_SYSV = /sbin/service jellyfin stop, /usr/sbin/service jellyfin stop
+Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
+Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
+Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
+Cmnd_Alias RESTARTSERVER_INITD = /etc/init.d/jellyfin restart
+Cmnd_Alias STARTSERVER_INITD = /etc/init.d/jellyfin start
+Cmnd_Alias STOPSERVER_INITD = /etc/init.d/jellyfin stop
+
+
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSV
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSV
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSV
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_INITD
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_INITD
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_INITD
+
+Defaults!RESTARTSERVER_SYSV !requiretty
+Defaults!STARTSERVER_SYSV !requiretty
+Defaults!STOPSERVER_SYSV !requiretty
+Defaults!RESTARTSERVER_SYSTEMD !requiretty
+Defaults!STARTSERVER_SYSTEMD !requiretty
+Defaults!STOPSERVER_SYSTEMD !requiretty
+Defaults!RESTARTSERVER_INITD !requiretty
+Defaults!STARTSERVER_INITD !requiretty
+Defaults!STOPSERVER_INITD !requiretty
+
+#Allow the server to mount iso images
+jellyfin ALL=(ALL) NOPASSWD: /bin/mount
+jellyfin ALL=(ALL) NOPASSWD: /bin/umount
+
+Defaults:jellyfin !requiretty
diff --git a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
new file mode 100644
index 000000000..1b69dd74e
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
@@ -0,0 +1,7 @@
+# Jellyfin systemd configuration options
+
+# Use this file to override the user or environment file location.
+
+[Service]
+#User = jellyfin
+#EnvironmentFile = /etc/default/jellyfin
diff --git a/deployment/old/debian-package-x64/pkg-src/conf/logging.json b/deployment/old/debian-package-x64/pkg-src/conf/logging.json
new file mode 100644
index 000000000..f32b2089e
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/conf/logging.json
@@ -0,0 +1,30 @@
+{
+ "Serilog": {
+ "MinimumLevel": "Information",
+ "WriteTo": [
+ {
+ "Name": "Console",
+ "Args": {
+ "outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] {Message:lj}{NewLine}{Exception}"
+ }
+ },
+ {
+ "Name": "Async",
+ "Args": {
+ "configure": [
+ {
+ "Name": "File",
+ "Args": {
+ "path": "%JELLYFIN_LOG_DIR%//jellyfin.log",
+ "fileSizeLimitBytes": 10485700,
+ "rollOnFileSizeLimit": true,
+ "retainedFileCountLimit": 10,
+ "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] {Message}{NewLine}{Exception}"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+}
diff --git a/deployment/old/debian-package-x64/pkg-src/control b/deployment/old/debian-package-x64/pkg-src/control
new file mode 100644
index 000000000..13fd3ecab
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/control
@@ -0,0 +1,31 @@
+Source: jellyfin
+Section: misc
+Priority: optional
+Maintainer: Jellyfin Team <team@jellyfin.org>
+Build-Depends: debhelper (>= 9),
+ dotnet-sdk-3.1,
+ libc6-dev,
+ libcurl4-openssl-dev,
+ libfontconfig1-dev,
+ libfreetype6-dev,
+ libssl-dev,
+ wget,
+ npm | nodejs
+Standards-Version: 3.9.4
+Homepage: https://jellyfin.media/
+Vcs-Git: https://github.org/jellyfin/jellyfin.git
+Vcs-Browser: https://github.org/jellyfin/jellyfin
+
+Package: jellyfin
+Replaces: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
+Breaks: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
+Conflicts: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
+Architecture: any
+Depends: at,
+ libsqlite3-0,
+ jellyfin-ffmpeg,
+ libfontconfig1,
+ libfreetype6,
+ libssl1.1
+Description: Jellyfin is a home media server.
+ It is built on top of other popular open source technologies such as Service Stack, jQuery, jQuery mobile, and Mono. It features a REST-based api with built-in documentation to facilitate client development. We also have client libraries for our api to enable rapid development.
diff --git a/deployment/old/debian-package-x64/pkg-src/copyright b/deployment/old/debian-package-x64/pkg-src/copyright
new file mode 100644
index 000000000..0d7a2a600
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/copyright
@@ -0,0 +1,29 @@
+Format: http://dep.debian.net/deps/dep5
+Upstream-Name: jellyfin
+Source: https://github.com/jellyfin/jellyfin
+
+Files: *
+Copyright: 2018 Jellyfin Team
+License: GPL-2.0+
+
+Files: debian/*
+Copyright: 2018 Joshua Boniface <joshua@boniface.me>
+Copyright: 2014 Carlos Hernandez <carlos@techbyte.ca>
+License: GPL-2.0+
+
+License: GPL-2.0+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
diff --git a/deployment/old/debian-package-x64/pkg-src/gbp.conf b/deployment/old/debian-package-x64/pkg-src/gbp.conf
new file mode 100644
index 000000000..60b3d2872
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/gbp.conf
@@ -0,0 +1,6 @@
+[DEFAULT]
+pristine-tar = False
+cleaner = fakeroot debian/rules clean
+
+[import-orig]
+filter = [ ".git*", ".hg*", ".vs*", ".vscode*" ]
diff --git a/deployment/old/debian-package-x64/pkg-src/install b/deployment/old/debian-package-x64/pkg-src/install
new file mode 100644
index 000000000..994322d14
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/install
@@ -0,0 +1,6 @@
+usr/lib/jellyfin usr/lib/
+debian/conf/jellyfin etc/default/
+debian/conf/logging.json etc/jellyfin/
+debian/conf/jellyfin.service.conf etc/systemd/system/jellyfin.service.d/
+debian/conf/jellyfin-sudoers etc/sudoers.d/
+debian/bin/restart.sh usr/lib/jellyfin/
diff --git a/deployment/old/debian-package-x64/pkg-src/jellyfin.init b/deployment/old/debian-package-x64/pkg-src/jellyfin.init
new file mode 100644
index 000000000..7f5642bac
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/jellyfin.init
@@ -0,0 +1,61 @@
+### BEGIN INIT INFO
+# Provides: Jellyfin Media Server
+# Required-Start: $local_fs $network
+# Required-Stop: $local_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Jellyfin Media Server
+# Description: Runs Jellyfin Server
+### END INIT INFO
+
+set -e
+
+# Carry out specific functions when asked to by the system
+
+if test -f /etc/default/jellyfin; then
+ . /etc/default/jellyfin
+fi
+
+. /lib/lsb/init-functions
+
+PIDFILE="/run/jellyfin.pid"
+
+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
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+
+ stop)
+ log_daemon_msg "Stopping Jellyfin Media Server" "jellyfin" || true
+ if start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --remove-pidfile; then
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+
+ 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
+ log_end_msg 0 || true
+ else
+ log_end_msg 1 || true
+ fi
+ ;;
+
+ status)
+ status_of_proc -p $PIDFILE /usr/bin/jellyfin jellyfin && exit 0 || exit $?
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|restart|status}"
+ exit 1
+ ;;
+esac
diff --git a/deployment/old/debian-package-x64/pkg-src/jellyfin.service b/deployment/old/debian-package-x64/pkg-src/jellyfin.service
new file mode 100644
index 000000000..1305e238b
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/jellyfin.service
@@ -0,0 +1,14 @@
+[Unit]
+Description = Jellyfin Media Server
+After = network.target
+
+[Service]
+Type = simple
+EnvironmentFile = /etc/default/jellyfin
+User = jellyfin
+ExecStart = /usr/bin/jellyfin ${JELLYFIN_RESTART_OPT} ${JELLYFIN_FFMPEG_OPT} ${JELLYFIN_SERVICE_OPT} ${JELLYFIN_NOWEBAPP_OPT}
+Restart = on-failure
+TimeoutSec = 15
+
+[Install]
+WantedBy = multi-user.target
diff --git a/deployment/old/debian-package-x64/pkg-src/jellyfin.upstart b/deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
new file mode 100644
index 000000000..ef5bc9bca
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
@@ -0,0 +1,20 @@
+description "jellyfin daemon"
+
+start on (local-filesystems and net-device-up IFACE!=lo)
+stop on runlevel [!2345]
+
+console log
+respawn
+respawn limit 10 5
+
+kill timeout 20
+
+script
+ set -x
+ echo "Starting $UPSTART_JOB"
+
+ # Log file
+ logger -t "$0" "DEBUG: `set`"
+ . /etc/default/jellyfin
+ exec su -u $JELLYFIN_USER -c /usr/bin/jellyfin $JELLYFIN_ARGS
+end script
diff --git a/deployment/old/debian-package-x64/pkg-src/po/POTFILES.in b/deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
new file mode 100644
index 000000000..cef83a340
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] templates
diff --git a/deployment/old/debian-package-x64/pkg-src/po/templates.pot b/deployment/old/debian-package-x64/pkg-src/po/templates.pot
new file mode 100644
index 000000000..2cdcae417
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/po/templates.pot
@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: jellyfin-server\n"
+"Report-Msgid-Bugs-To: jellyfin-server@packages.debian.org\n"
+"POT-Creation-Date: 2015-06-12 20:51-0600\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: note
+#. Description
+#: ../templates:1001
+msgid "Jellyfin permission info:"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:1001
+msgid ""
+"Jellyfin by default runs under a user named \"jellyfin\". Please ensure that the "
+"user jellyfin has read and write access to any folders you wish to add to your "
+"library. Otherwise please run jellyfin under a different user."
+msgstr ""
+
+#. Type: string
+#. Description
+#: ../templates:2001
+msgid "Username to run Jellyfin as:"
+msgstr ""
+
+#. Type: string
+#. Description
+#: ../templates:2001
+msgid "The user that jellyfin will run as."
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:3001
+msgid "Jellyfin still running"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:3001
+msgid "Jellyfin is currently running. Please close it and try again."
+msgstr ""
diff --git a/deployment/old/debian-package-x64/pkg-src/postinst b/deployment/old/debian-package-x64/pkg-src/postinst
new file mode 100644
index 000000000..860222e05
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/postinst
@@ -0,0 +1,92 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+ . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+case "$1" in
+ configure)
+ # create jellyfin group if it does not exist
+ if [[ -z "$(getent group jellyfin)" ]]; then
+ addgroup --quiet --system jellyfin > /dev/null 2>&1
+ fi
+ # create jellyfin user if it does not exist
+ if [[ -z "$(getent passwd jellyfin)" ]]; then
+ adduser --system --ingroup jellyfin --shell /bin/false jellyfin --no-create-home --home ${PROGRAMDATA} \
+ --gecos "Jellyfin default user" > /dev/null 2>&1
+ fi
+ # ensure $PROGRAMDATA exists
+ if [[ ! -d $PROGRAMDATA ]]; then
+ mkdir $PROGRAMDATA
+ fi
+ # ensure $CONFIGDATA exists
+ if [[ ! -d $CONFIGDATA ]]; then
+ mkdir $CONFIGDATA
+ fi
+ # ensure $LOGDATA exists
+ if [[ ! -d $LOGDATA ]]; then
+ mkdir $LOGDATA
+ fi
+ # ensure $CACHEDATA exists
+ if [[ ! -d $CACHEDATA ]]; then
+ mkdir $CACHEDATA
+ fi
+ # Ensure permissions are correct on all config directories
+ chown -R jellyfin $PROGRAMDATA $CONFIGDATA $LOGDATA $CACHEDATA
+ chgrp adm $PROGRAMDATA $CONFIGDATA $LOGDATA $CACHEDATA
+ chmod 0750 $PROGRAMDATA $CONFIGDATA $LOGDATA $CACHEDATA
+
+ chmod +x /usr/lib/jellyfin/restart.sh > /dev/null 2>&1 || true
+
+ # Install jellyfin symlink into /usr/bin
+ ln -sf /usr/lib/jellyfin/bin/jellyfin /usr/bin/jellyfin
+
+ ;;
+ abort-upgrade|abort-remove|abort-deconfigure)
+ ;;
+ *)
+ echo "postinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+#DEBHELPER
+
+if [[ -x "/usr/bin/deb-systemd-helper" ]]; then
+ # Manual init script handling
+ deb-systemd-helper unmask jellyfin.service >/dev/null || true
+ # was-enabled defaults to true, so new installations run enable.
+ if deb-systemd-helper --quiet was-enabled jellyfin.service; then
+ # Enables the unit on first installation, creates new
+ # symlinks on upgrades if the unit file has changed.
+ deb-systemd-helper enable jellyfin.service >/dev/null || true
+ else
+ # Update the statefile to add new symlinks (if any), which need to be
+ # cleaned up on purge. Also remove old symlinks.
+ deb-systemd-helper update-state jellyfin.service >/dev/null || true
+ fi
+fi
+
+# End automatically added section
+# Automatically added by dh_installinit
+if [[ "$1" == "configure" ]] || [[ "$1" == "abort-upgrade" ]]; then
+ if [[ -d "/run/systemd/systemd" ]]; then
+ systemctl --system daemon-reload >/dev/null || true
+ deb-systemd-invoke start jellyfin >/dev/null || true
+ elif [[ -x "/etc/init.d/jellyfin" ]] || [[ -e "/etc/init/jellyfin.conf" ]]; then
+ update-rc.d jellyfin defaults >/dev/null
+ invoke-rc.d jellyfin start || exit $?
+ fi
+fi
+exit 0
diff --git a/deployment/old/debian-package-x64/pkg-src/postrm b/deployment/old/debian-package-x64/pkg-src/postrm
new file mode 100644
index 000000000..1d00a984e
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/postrm
@@ -0,0 +1,81 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+ . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+# In case this system is running systemd, we make systemd reload the unit files
+# to pick up changes.
+if [[ -d /run/systemd/system ]] ; then
+ systemctl --system daemon-reload >/dev/null || true
+fi
+
+case "$1" in
+ purge)
+ echo PURGE | debconf-communicate $NAME > /dev/null 2>&1 || true
+
+ if [[ -x "/etc/init.d/jellyfin" ]] || [[ -e "/etc/init/jellyfin.connf" ]]; then
+ update-rc.d jellyfin remove >/dev/null 2>&1 || true
+ fi
+
+ if [[ -x "/usr/bin/deb-systemd-helper" ]]; then
+ deb-systemd-helper purge jellyfin.service >/dev/null
+ deb-systemd-helper unmask jellyfin.service >/dev/null
+ fi
+
+ # Remove user and group
+ userdel jellyfin > /dev/null 2>&1 || true
+ delgroup --quiet jellyfin > /dev/null 2>&1 || true
+ # Remove config dir
+ if [[ -d $CONFIGDATA ]]; then
+ rm -rf $CONFIGDATA
+ fi
+ # Remove log dir
+ if [[ -d $LOGDATA ]]; then
+ rm -rf $LOGDATA
+ fi
+ # Remove cache dir
+ if [[ -d $CACHEDATA ]]; then
+ rm -rf $CACHEDATA
+ fi
+ # Remove program data dir
+ if [[ -d $PROGRAMDATA ]]; then
+ rm -rf $PROGRAMDATA
+ fi
+ # Remove binary symlink
+ [[ -f /usr/bin/jellyfin ]] && rm /usr/bin/jellyfin
+ # Remove sudoers config
+ [[ -f /etc/sudoers.d/jellyfin-sudoers ]] && rm /etc/sudoers.d/jellyfin-sudoers
+ # Remove anything at the default locations; catches situations where the user moved the defaults
+ [[ -e /etc/jellyfin ]] && rm -rf /etc/jellyfin
+ [[ -e /var/log/jellyfin ]] && rm -rf /var/log/jellyfin
+ [[ -e /var/cache/jellyfin ]] && rm -rf /var/cache/jellyfin
+ [[ -e /var/lib/jellyfin ]] && rm -rf /var/lib/jellyfin
+ ;;
+ remove)
+ if [[ -x "/usr/bin/deb-systemd-helper" ]]; then
+ deb-systemd-helper mask jellyfin.service >/dev/null
+ fi
+ ;;
+ upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+ ;;
+ *)
+ echo "postrm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/deployment/old/debian-package-x64/pkg-src/preinst b/deployment/old/debian-package-x64/pkg-src/preinst
new file mode 100644
index 000000000..2713fb9b8
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/preinst
@@ -0,0 +1,78 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+ . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+# In case this system is running systemd, we make systemd reload the unit files
+# to pick up changes.
+if [[ -d /run/systemd/system ]] ; then
+ systemctl --system daemon-reload >/dev/null || true
+fi
+
+case "$1" in
+ install|upgrade)
+ # try graceful termination;
+ if [[ -d /run/systemd/system ]]; then
+ deb-systemd-invoke stop ${NAME}.service > /dev/null 2>&1 || true
+ elif [ -x "/etc/init.d/${NAME}" ] || [ -e "/etc/init/${NAME}.conf" ]; then
+ invoke-rc.d ${NAME} stop > /dev/null 2>&1 || true
+ fi
+ # try and figure out if jellyfin is running
+ PIDFILE=$(find /var/run/ -maxdepth 1 -mindepth 1 -name "jellyfin*.pid" -print -quit)
+ [[ -n "$PIDFILE" ]] && [[ -s "$PIDFILE" ]] && JELLYFIN_PID=$(cat ${PIDFILE})
+ # if its running, let's stop it
+ if [[ -n "$JELLYFIN_PID" ]]; then
+ echo "Stopping Jellyfin!"
+ # if jellyfin is still running, kill it
+ if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+ CPIDS=$(pgrep -P $JELLYFIN_PID)
+ sleep 2 && kill -KILL $CPIDS
+ kill -TERM $CPIDS > /dev/null 2>&1
+ fi
+ sleep 1
+ # if it's still running, show error
+ if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+ echo "Could not successfully stop JellyfinServer, please do so before uninstalling."
+ exit 1
+ else
+ [[ -f $PIDFILE ]] && rm $PIDFILE
+ fi
+ fi
+
+ # Clean up old Emby cruft that can break the user's system
+ [[ -f /etc/sudoers.d/emby ]] && rm -f /etc/sudoers.d/emby
+
+ # If we have existing config, log, or cache dirs in /var/lib/jellyfin, move them into the right place
+ if [[ -d $PROGRAMDATA/config ]]; then
+ mv $PROGRAMDATA/config $CONFIGDATA
+ fi
+ if [[ -d $PROGRAMDATA/logs ]]; then
+ mv $PROGRAMDATA/logs $LOGDATA
+ fi
+ if [[ -d $PROGRAMDATA/logs ]]; then
+ mv $PROGRAMDATA/cache $CACHEDATA
+ fi
+
+ ;;
+ abort-upgrade)
+ ;;
+ *)
+ echo "preinst called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+#DEBHELPER#
+
+exit 0
diff --git a/deployment/old/debian-package-x64/pkg-src/prerm b/deployment/old/debian-package-x64/pkg-src/prerm
new file mode 100644
index 000000000..e965cb7d7
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/prerm
@@ -0,0 +1,61 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+ . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+case "$1" in
+ remove|upgrade|deconfigure)
+ echo "Stopping Jellyfin!"
+ # try graceful termination;
+ if [[ -d /run/systemd/system ]]; then
+ deb-systemd-invoke stop ${NAME}.service > /dev/null 2>&1 || true
+ elif [ -x "/etc/init.d/${NAME}" ] || [ -e "/etc/init/${NAME}.conf" ]; then
+ invoke-rc.d ${NAME} stop > /dev/null 2>&1 || true
+ fi
+ # Ensure that it is shutdown
+ PIDFILE=$(find /var/run/ -maxdepth 1 -mindepth 1 -name "jellyfin*.pid" -print -quit)
+ [[ -n "$PIDFILE" ]] && [[ -s "$PIDFILE" ]] && JELLYFIN_PID=$(cat ${PIDFILE})
+ # if its running, let's stop it
+ if [[ -n "$JELLYFIN_PID" ]]; then
+ # if jellyfin is still running, kill it
+ if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+ CPIDS=$(pgrep -P $JELLYFIN_PID)
+ sleep 2 && kill -KILL $CPIDS
+ kill -TERM $CPIDS > /dev/null 2>&1
+ fi
+ sleep 1
+ # if it's still running, show error
+ if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+ echo "Could not successfully stop Jellyfin, please do so before uninstalling."
+ exit 1
+ else
+ [[ -f $PIDFILE ]] && rm $PIDFILE
+ fi
+ fi
+ if [[ -f /usr/lib/jellyfin/bin/MediaBrowser.Server.Mono.exe.so ]]; then
+ rm /usr/lib/jellyfin/bin/MediaBrowser.Server.Mono.exe.so
+ fi
+ ;;
+ failed-upgrade)
+ ;;
+ *)
+ echo "prerm called with unknown argument \`$1'" >&2
+ exit 1
+ ;;
+esac
+
+#DEBHELPER#
+
+exit 0
diff --git a/deployment/old/debian-package-x64/pkg-src/rules b/deployment/old/debian-package-x64/pkg-src/rules
new file mode 100755
index 000000000..c2d57dfb2
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/rules
@@ -0,0 +1,66 @@
+#! /usr/bin/make -f
+CONFIG := Release
+TERM := xterm
+SHELL := /bin/bash
+WEB_TARGET := $(CURDIR)/MediaBrowser.WebDashboard/jellyfin-web
+WEB_VERSION := $(shell sed -n -e 's/^version: "\(.*\)"/\1/p' $(CURDIR)/build.yaml)
+
+HOST_ARCH := $(shell arch)
+BUILD_ARCH := ${DEB_HOST_MULTIARCH}
+ifeq ($(HOST_ARCH),x86_64)
+ # Building AMD64
+ DOTNETRUNTIME := debian-x64
+ ifeq ($(BUILD_ARCH),arm-linux-gnueabihf)
+ # Cross-building ARM on AMD64
+ DOTNETRUNTIME := debian-arm
+ endif
+ ifeq ($(BUILD_ARCH),aarch64-linux-gnu)
+ # Cross-building ARM on AMD64
+ DOTNETRUNTIME := debian-arm64
+ endif
+endif
+ifeq ($(HOST_ARCH),armv7l)
+ # Building ARM
+ DOTNETRUNTIME := debian-arm
+endif
+ifeq ($(HOST_ARCH),arm64)
+ # Building ARM
+ DOTNETRUNTIME := debian-arm64
+endif
+
+export DH_VERBOSE=1
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+
+%:
+ dh $@
+
+# disable "make check"
+override_dh_auto_test:
+
+# disable stripping debugging symbols
+override_dh_clistrip:
+
+override_dh_auto_build:
+ echo $(WEB_VERSION)
+ # Clone down and build Web frontend
+ mkdir -p $(WEB_TARGET)
+ wget -O web-src.tgz https://github.com/jellyfin/jellyfin-web/archive/v$(WEB_VERSION).tar.gz || wget -O web-src.tgz https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz
+ mkdir -p $(CURDIR)/web
+ tar -xzf web-src.tgz -C $(CURDIR)/web/ --strip 1
+ cd $(CURDIR)/web/ && npm install yarn
+ cd $(CURDIR)/web/ && node_modules/yarn/bin/yarn install
+ mv $(CURDIR)/web/dist/* $(WEB_TARGET)/
+ # Build the application
+ dotnet publish --configuration $(CONFIG) --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) \
+ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
+
+override_dh_auto_clean:
+ dotnet clean -maxcpucount:1 --configuration $(CONFIG) Jellyfin.Server || true
+ rm -f '$(CURDIR)/web-src.tgz'
+ rm -rf '$(CURDIR)/usr'
+ rm -rf '$(CURDIR)/web'
+ rm -rf '$(WEB_TARGET)'
+
+# Force the service name to jellyfin even if we're building jellyfin-nightly
+override_dh_installinit:
+ dh_installinit --name=jellyfin
diff --git a/deployment/old/debian-package-x64/pkg-src/source.lintian-overrides b/deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
new file mode 100644
index 000000000..aeb332f13
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
@@ -0,0 +1,3 @@
+# This is an override for the following lintian errors:
+jellyfin source: license-problem-md5sum-non-free-file Emby.Drawing/ImageMagick/fonts/webdings.ttf*
+jellyfin source: source-is-missing
diff --git a/deployment/old/debian-package-x64/pkg-src/source/format b/deployment/old/debian-package-x64/pkg-src/source/format
new file mode 100644
index 000000000..d3827e75a
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/source/format
@@ -0,0 +1 @@
+1.0
diff --git a/deployment/old/debian-package-x64/pkg-src/source/options b/deployment/old/debian-package-x64/pkg-src/source/options
new file mode 100644
index 000000000..17b5373d5
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/source/options
@@ -0,0 +1,11 @@
+tar-ignore='.git*'
+tar-ignore='**/.git'
+tar-ignore='**/.hg'
+tar-ignore='**/.vs'
+tar-ignore='**/.vscode'
+tar-ignore='deployment'
+tar-ignore='**/bin'
+tar-ignore='**/obj'
+tar-ignore='**/.nuget'
+tar-ignore='*.deb'
+tar-ignore='ThirdParty'
diff --git a/deployment/old/fedora-package-x64/Dockerfile b/deployment/old/fedora-package-x64/Dockerfile
new file mode 100644
index 000000000..87120f3a0
--- /dev/null
+++ b/deployment/old/fedora-package-x64/Dockerfile
@@ -0,0 +1,33 @@
+FROM fedora:31
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/fedora-package-x64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+
+# Prepare Fedora environment
+RUN dnf update -y
+
+# Install build dependencies
+RUN dnf install -y @buildsys-build rpmdevtools git dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel nodejs-yarn
+
+# Install DotNET SDK
+RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc \
+ && curl -o /etc/yum.repos.d/microsoft-prod.repo https://packages.microsoft.com/config/fedora/$(rpm -E %fedora)/prod.repo \
+ && dnf install -y dotnet-sdk-${SDK_VERSION} dotnet-runtime-${SDK_VERSION}
+
+# Create symlinks and directories
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh \
+ && mkdir -p ${SOURCE_DIR}/SPECS \
+ && ln -s ${PLATFORM_DIR}/pkg-src/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && mkdir -p ${SOURCE_DIR}/SOURCES \
+ && ln -s ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/SOURCES
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/fedora-package-x64/clean.sh b/deployment/old/fedora-package-x64/clean.sh
new file mode 100755
index 000000000..700c8f1bb
--- /dev/null
+++ b/deployment/old/fedora-package-x64/clean.sh
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+VERSION="$( grep -A1 '^Version:' ${WORKDIR}/pkg-src/jellyfin.spec | awk '{ print $NF }' )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+package_source_dir="${WORKDIR}/pkg-src"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-fedora-build"
+
+rm -f "${package_source_dir}/jellyfin-${VERSION}.tar.gz" &>/dev/null \
+ || sudo rm -f "${package_source_dir}/jellyfin-${VERSION}.tar.gz" &>/dev/null
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/fedora-package-x64/dependencies.txt b/deployment/old/fedora-package-x64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/fedora-package-x64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/fedora-package-x64/docker-build.sh b/deployment/old/fedora-package-x64/docker-build.sh
new file mode 100755
index 000000000..740e8d35c
--- /dev/null
+++ b/deployment/old/fedora-package-x64/docker-build.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+# Builds the RPM inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Build RPM
+make -f .copr/Makefile srpm outdir=/root/rpmbuild/SRPMS
+rpmbuild -rb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/rpm
+mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/rpm/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/fedora-package-x64/package.sh b/deployment/old/fedora-package-x64/package.sh
new file mode 100755
index 000000000..ae6962dd1
--- /dev/null
+++ b/deployment/old/fedora-package-x64/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-fedora-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the RPMs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the RPMs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/rpm/* "${output_dir}"
diff --git a/deployment/old/fedora-package-x64/pkg-src/.gitignore b/deployment/old/fedora-package-x64/pkg-src/.gitignore
new file mode 100644
index 000000000..6019b98c2
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/.gitignore
@@ -0,0 +1,3 @@
+*.rpm
+*.zip
+*.tar.gz \ No newline at end of file
diff --git a/deployment/old/fedora-package-x64/pkg-src/README.md b/deployment/old/fedora-package-x64/pkg-src/README.md
new file mode 100644
index 000000000..7ed6f7efc
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/README.md
@@ -0,0 +1,43 @@
+# Jellyfin RPM
+
+## Build Fedora Package with docker
+
+Change into this directory `cd rpm-package`
+Run the build script `./build-fedora-rpm.sh`.
+Resulting RPM and src.rpm will be in `../../jellyfin-*.rpm`
+
+## ffmpeg
+
+The RPM package for Fedora/CentOS requires some additional repositories as ffmpeg is not in the main repositories.
+
+```shell
+# ffmpeg from RPMfusion free
+# Fedora
+$ sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
+# CentOS 7
+$ sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
+```
+
+## ISO mounting
+
+To allow Jellyfin to mount/umount ISO files uncomment these two lines in `/etc/sudoers.d/jellyfin-sudoers`
+```
+# %jellyfin ALL=(ALL) NOPASSWD: /bin/mount
+# %jellyfin ALL=(ALL) NOPASSWD: /bin/umount
+```
+
+## Building with dotnet
+
+Jellyfin is build with `--self-contained` so no dotnet required for runtime.
+
+```shell
+# dotnet required for building the RPM
+# Fedora
+$ sudo dnf copr enable @dotnet-sig/dotnet
+# CentOS
+$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
+```
+
+## TODO
+
+- [ ] OpenSUSE \ No newline at end of file
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml b/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
new file mode 100644
index 000000000..538c5d65f
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<service>
+ <short>Jellyfin</short>
+ <description>The Free Software Media System.</description>
+ <port protocol="tcp" port="8096"/>
+ <port protocol="tcp" port="8920"/>
+ <port protocol="udp" port="1900"/>
+ <port protocol="udp" port="7359"/>
+</service>
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.env b/deployment/old/fedora-package-x64/pkg-src/jellyfin.env
new file mode 100644
index 000000000..de48f13af
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin.env
@@ -0,0 +1,34 @@
+# Jellyfin default configuration options
+
+# Use this file to override the default configurations; add additional
+# options with JELLYFIN_ADD_OPTS.
+
+# To override the user or this config file's location, use
+# /etc/systemd/system/jellyfin.service.d/override.conf
+
+#
+# This is a POSIX shell fragment
+#
+
+#
+# General options
+#
+
+# Program directories
+JELLYFIN_DATA_DIR="/var/lib/jellyfin"
+JELLYFIN_CONFIG_DIR="/etc/jellyfin"
+JELLYFIN_LOG_DIR="/var/log/jellyfin"
+JELLYFIN_CACHE_DIR="/var/cache/jellyfin"
+
+# In-App service control
+JELLYFIN_RESTART_OPT="--restartpath=/usr/libexec/jellyfin/restart.sh"
+
+# [OPTIONAL] ffmpeg binary paths, overriding the UI-configured values
+#JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/bin/ffmpeg"
+
+# [OPTIONAL] run Jellyfin as a headless service
+#JELLYFIN_SERVICE_OPT="--service"
+
+# [OPTIONAL] run Jellyfin without the web app
+#JELLYFIN_NOWEBAPP_OPT="--noautorunwebapp"
+
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf b/deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
new file mode 100644
index 000000000..8652450bb
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
@@ -0,0 +1,7 @@
+# Jellyfin systemd configuration options
+
+# Use this file to override the user or environment file location.
+
+[Service]
+#User = jellyfin
+#EnvironmentFile = /etc/sysconfig/jellyfin
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.service b/deployment/old/fedora-package-x64/pkg-src/jellyfin.service
new file mode 100644
index 000000000..f3dc594b1
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin.service
@@ -0,0 +1,15 @@
+[Unit]
+After=network.target
+Description=Jellyfin is a free software media system that puts you in control of managing and streaming your media.
+
+[Service]
+EnvironmentFile=/etc/sysconfig/jellyfin
+WorkingDirectory=/var/lib/jellyfin
+ExecStart=/usr/bin/jellyfin ${JELLYFIN_RESTART_OPT} ${JELLYFIN_FFMPEG_OPT} ${JELLYFIN_SERVICE_OPT} ${JELLYFIN_NOWEBAPP_OPT}
+TimeoutSec=15
+Restart=on-failure
+User=jellyfin
+Group=jellyfin
+
+[Install]
+WantedBy=multi-user.target
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.spec b/deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
new file mode 100644
index 000000000..33c6f6f64
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
@@ -0,0 +1,181 @@
+%global debug_package %{nil}
+# Set the dotnet runtime
+%if 0%{?fedora}
+%global dotnet_runtime fedora-x64
+%else
+%global dotnet_runtime centos-x64
+%endif
+
+Name: jellyfin
+Version: 10.5.0
+Release: 1%{?dist}
+Summary: The Free Software Media Browser
+License: GPLv2
+URL: https://jellyfin.media
+# Jellyfin Server tarball created by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
+Source0: https://github.com/%{name}/%{name}/archive/%{name}-%{version}.tar.gz
+# Jellyfin Webinterface downloaded by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
+Source1: https://github.com/%{name}/%{name}-web/archive/%{name}-web-%{version}.tar.gz
+Source11: jellyfin.service
+Source12: jellyfin.env
+Source13: jellyfin.sudoers
+Source14: restart.sh
+Source15: jellyfin.override.conf
+Source16: jellyfin-firewalld.xml
+
+%{?systemd_requires}
+BuildRequires: systemd
+Requires(pre): shadow-utils
+BuildRequires: libcurl-devel, fontconfig-devel, freetype-devel, openssl-devel, glibc-devel, libicu-devel, git
+%if 0%{?fedora}
+BuildRequires: nodejs-yarn, git
+%else
+# Requirements not packaged in main repos
+# From https://rpm.nodesource.com/pub_10.x/el/7/x86_64/
+BuildRequires: nodejs >= 10 yarn
+%endif
+Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
+# Requirements not packaged in main repos
+# COPR @dotnet-sig/dotnet or
+# https://packages.microsoft.com/rhel/7/prod/
+BuildRequires: dotnet-runtime-3.1, dotnet-sdk-3.1
+# RPMfusion free
+Requires: ffmpeg
+
+# Disable Automatic Dependency Processing
+AutoReqProv: no
+
+%description
+Jellyfin is a free software media system that puts you in control of managing and streaming your media.
+
+
+%prep
+%autosetup -n %{name}-%{version} -b 0 -b 1
+web_build_dir="$(mktemp -d)"
+web_target="$PWD/MediaBrowser.WebDashboard/jellyfin-web"
+pushd ../jellyfin-web-%{version} || pushd ../jellyfin-web-master
+%if 0%{?fedora}
+nodejs-yarn install
+%else
+yarn install
+%endif
+mkdir -p ${web_target}
+mv dist/* ${web_target}/
+popd
+
+%build
+
+%install
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime %{dotnet_runtime} \
+ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
+%{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE
+%{__install} -D -m 0644 %{SOURCE15} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf
+%{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json
+%{__mkdir} -p %{buildroot}%{_bindir}
+tee %{buildroot}%{_bindir}/jellyfin << EOF
+#!/bin/sh
+exec %{_libdir}/%{name}/%{name} \${@}
+EOF
+%{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin
+%{__mkdir} -p %{buildroot}%{_sysconfdir}/%{name}
+%{__mkdir} -p %{buildroot}%{_var}/log/jellyfin
+%{__mkdir} -p %{buildroot}%{_var}/cache/jellyfin
+
+%{__install} -D -m 0644 %{SOURCE11} %{buildroot}%{_unitdir}/%{name}.service
+%{__install} -D -m 0644 %{SOURCE12} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
+%{__install} -D -m 0600 %{SOURCE13} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers
+%{__install} -D -m 0755 %{SOURCE14} %{buildroot}%{_libexecdir}/%{name}/restart.sh
+%{__install} -D -m 0644 %{SOURCE16} %{buildroot}%{_prefix}/lib/firewalld/services/%{name}.xml
+
+%files
+%{_libdir}/%{name}/jellyfin-web/*
+%attr(755,root,root) %{_bindir}/%{name}
+%{_libdir}/%{name}/*.json
+%{_libdir}/%{name}/*.dll
+%{_libdir}/%{name}/*.so
+%{_libdir}/%{name}/*.a
+%{_libdir}/%{name}/createdump
+# Needs 755 else only root can run it since binary build by dotnet is 722
+%attr(755,root,root) %{_libdir}/%{name}/jellyfin
+%{_libdir}/%{name}/SOS_README.md
+%{_unitdir}/%{name}.service
+%{_libexecdir}/%{name}/restart.sh
+%{_prefix}/lib/firewalld/services/%{name}.xml
+%attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name}
+%config %{_sysconfdir}/sysconfig/%{name}
+%config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers
+%config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf
+%config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/%{name}/logging.json
+%attr(750,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin
+%attr(-,jellyfin,jellyfin) %dir %{_var}/log/jellyfin
+%attr(750,jellyfin,jellyfin) %dir %{_var}/cache/jellyfin
+%if 0%{?fedora}
+%license LICENSE
+%else
+%{_datadir}/licenses/%{name}/LICENSE
+%endif
+
+%pre
+getent group jellyfin >/dev/null || groupadd -r jellyfin
+getent passwd jellyfin >/dev/null || \
+ useradd -r -g jellyfin -d %{_sharedstatedir}/jellyfin -s /sbin/nologin \
+ -c "Jellyfin default user" jellyfin
+exit 0
+
+%post
+# Move existing configuration cache and logs to their new locations and symlink them.
+if [ $1 -gt 1 ] ; then
+ service_state=$(systemctl is-active jellyfin.service)
+ if [ "${service_state}" = "active" ]; then
+ systemctl stop jellyfin.service
+ fi
+ if [ ! -L %{_sharedstatedir}/%{name}/config ]; then
+ mv %{_sharedstatedir}/%{name}/config/* %{_sysconfdir}/%{name}/
+ rmdir %{_sharedstatedir}/%{name}/config
+ ln -sf %{_sysconfdir}/%{name} %{_sharedstatedir}/%{name}/config
+ fi
+ if [ ! -L %{_sharedstatedir}/%{name}/logs ]; then
+ mv %{_sharedstatedir}/%{name}/logs/* %{_var}/log/jellyfin
+ rmdir %{_sharedstatedir}/%{name}/logs
+ ln -sf %{_var}/log/jellyfin %{_sharedstatedir}/%{name}/logs
+ fi
+ if [ ! -L %{_sharedstatedir}/%{name}/cache ]; then
+ mv %{_sharedstatedir}/%{name}/cache/* %{_var}/cache/jellyfin
+ rmdir %{_sharedstatedir}/%{name}/cache
+ ln -sf %{_var}/cache/jellyfin %{_sharedstatedir}/%{name}/cache
+ fi
+ if [ "${service_state}" = "active" ]; then
+ systemctl start jellyfin.service
+ fi
+fi
+%systemd_post jellyfin.service
+
+%preun
+%systemd_preun jellyfin.service
+
+%postun
+%systemd_postun_with_restart jellyfin.service
+
+%changelog
+* Fri Oct 11 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.5.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.5.0
+* Sat Aug 31 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.4.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.4.0
+* Wed Jul 24 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.7; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.7
+* Sat Jul 06 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
+* Sun Jun 09 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.5; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.5
+* Thu Jun 06 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.4; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.4
+* Fri May 17 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.3; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.3
+* Tue Apr 30 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.2; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.2
+* Sat Apr 20 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.1; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.1
+* Fri Apr 19 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
+- New upstream version 10.3.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.0
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers b/deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
new file mode 100644
index 000000000..dd245af4b
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
@@ -0,0 +1,19 @@
+# Allow jellyfin group to start, stop and restart itself
+Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
+Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
+Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
+
+
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSTEMD
+
+Defaults!RESTARTSERVER_SYSTEMD !requiretty
+Defaults!STARTSERVER_SYSTEMD !requiretty
+Defaults!STOPSERVER_SYSTEMD !requiretty
+
+# Allow the server to mount iso images
+jellyfin ALL=(ALL) NOPASSWD: /bin/mount
+jellyfin ALL=(ALL) NOPASSWD: /bin/umount
+
+Defaults:jellyfin !requiretty
diff --git a/deployment/old/fedora-package-x64/pkg-src/restart.sh b/deployment/old/fedora-package-x64/pkg-src/restart.sh
new file mode 100755
index 000000000..9b64b6d72
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/restart.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# restart.sh - Jellyfin server restart script
+# Part of the Jellyfin project (https://github.com/jellyfin)
+#
+# This script restarts the Jellyfin daemon on Linux when using
+# the Restart button on the admin dashboard. It supports the
+# systemctl, service, and traditional /etc/init.d (sysv) restart
+# methods, chosen automatically by which one is found first (in
+# that order).
+#
+# This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
+
+get_service_command() {
+ for command in systemctl service; do
+ if which $command &>/dev/null; then
+ echo $command && return
+ fi
+ done
+ echo "sysv"
+}
+
+cmd="$( get_service_command )"
+echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
+case $cmd in
+ 'systemctl')
+ echo "sleep 2; /usr/bin/sudo $( which systemctl ) restart jellyfin" | at now
+ ;;
+ 'service')
+ echo "sleep 2; /usr/bin/sudo $( which service ) jellyfin restart" | at now
+ ;;
+ 'sysv')
+ echo "sleep 2; /usr/bin/sudo /etc/init.d/jellyfin restart" | at now
+ ;;
+esac
+exit 0
diff --git a/deployment/old/linux-x64/Dockerfile b/deployment/old/linux-x64/Dockerfile
new file mode 100644
index 000000000..c47057546
--- /dev/null
+++ b/deployment/old/linux-x64/Dockerfile
@@ -0,0 +1,37 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/linux-x64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install yarn package manager
+RUN wget -q -O- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
+ && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
+ && apt update \
+ && apt install -y yarn
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/linux-x64/clean.sh b/deployment/old/linux-x64/clean.sh
new file mode 100755
index 000000000..c07501a7b
--- /dev/null
+++ b/deployment/old/linux-x64/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-linux-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/linux-x64/dependencies.txt b/deployment/old/linux-x64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/linux-x64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/linux-x64/docker-build.sh b/deployment/old/linux-x64/docker-build.sh
new file mode 100755
index 000000000..e33328a36
--- /dev/null
+++ b/deployment/old/linux-x64/docker-build.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# Builds the TAR archive inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Clone down and build Web frontend
+web_build_dir="$( mktemp -d )"
+web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
+git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
+pushd ${web_build_dir}
+if [[ -n ${web_branch} ]]; then
+ checkout -b origin/${web_branch}
+fi
+yarn install
+mkdir -p ${web_target}
+mv dist/* ${web_target}/
+popd
+rm -rf ${web_build_dir}
+
+# Get version
+version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
+
+# Build archives
+dotnet publish Jellyfin.Server --configuration Release --self-contained --runtime linux-x64 --output /dist/jellyfin_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+tar -cvzf /jellyfin_${version}.portable.tar.gz -C /dist jellyfin_${version}
+rm -rf /dist/jellyfin_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv /jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/linux-x64/package.sh b/deployment/old/linux-x64/package.sh
new file mode 100755
index 000000000..dfe8a9aa4
--- /dev/null
+++ b/deployment/old/linux-x64/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-linux-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/* "${output_dir}"
diff --git a/deployment/old/macos/Dockerfile b/deployment/old/macos/Dockerfile
new file mode 100644
index 000000000..b522df884
--- /dev/null
+++ b/deployment/old/macos/Dockerfile
@@ -0,0 +1,37 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/macos
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install yarn package manager
+RUN wget -q -O- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
+ && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
+ && apt update \
+ && apt install -y yarn
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/macos/clean.sh b/deployment/old/macos/clean.sh
new file mode 100755
index 000000000..c07501a7b
--- /dev/null
+++ b/deployment/old/macos/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-linux-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/macos/dependencies.txt b/deployment/old/macos/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/macos/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/macos/docker-build.sh b/deployment/old/macos/docker-build.sh
new file mode 100755
index 000000000..f9417388d
--- /dev/null
+++ b/deployment/old/macos/docker-build.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# Builds the TAR archive inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Clone down and build Web frontend
+web_build_dir="$( mktemp -d )"
+web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
+git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
+pushd ${web_build_dir}
+if [[ -n ${web_branch} ]]; then
+ checkout -b origin/${web_branch}
+fi
+yarn install
+mkdir -p ${web_target}
+mv dist/* ${web_target}/
+popd
+rm -rf ${web_build_dir}
+
+# Get version
+version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
+
+# Build archives
+dotnet publish Jellyfin.Server --configuration Release --self-contained --runtime osx-x64 --output /dist/jellyfin_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+tar -cvzf /jellyfin_${version}.portable.tar.gz -C /dist jellyfin_${version}
+rm -rf /dist/jellyfin_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv /jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/macos/package.sh b/deployment/old/macos/package.sh
new file mode 100755
index 000000000..464c0d382
--- /dev/null
+++ b/deployment/old/macos/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-macos-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/* "${output_dir}"
diff --git a/deployment/old/portable/Dockerfile b/deployment/old/portable/Dockerfile
new file mode 100644
index 000000000..965eb82b8
--- /dev/null
+++ b/deployment/old/portable/Dockerfile
@@ -0,0 +1,37 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/portable
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install yarn package manager
+RUN wget -q -O- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
+ && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
+ && apt update \
+ && apt install -y yarn
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/portable/clean.sh b/deployment/old/portable/clean.sh
new file mode 100755
index 000000000..c07501a7b
--- /dev/null
+++ b/deployment/old/portable/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-linux-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/portable/dependencies.txt b/deployment/old/portable/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/portable/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/portable/docker-build.sh b/deployment/old/portable/docker-build.sh
new file mode 100755
index 000000000..094190bbf
--- /dev/null
+++ b/deployment/old/portable/docker-build.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# Builds the TAR archive inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Clone down and build Web frontend
+web_build_dir="$( mktemp -d )"
+web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
+git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
+pushd ${web_build_dir}
+if [[ -n ${web_branch} ]]; then
+ checkout -b origin/${web_branch}
+fi
+yarn install
+mkdir -p ${web_target}
+mv dist/* ${web_target}/
+popd
+rm -rf ${web_build_dir}
+
+# Get version
+version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
+
+# Build archives
+dotnet publish Jellyfin.Server --configuration Release --output /dist/jellyfin_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none"
+tar -cvzf /jellyfin_${version}.portable.tar.gz -C /dist jellyfin_${version}
+rm -rf /dist/jellyfin_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv /jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/portable/package.sh b/deployment/old/portable/package.sh
new file mode 100755
index 000000000..0ceb54dda
--- /dev/null
+++ b/deployment/old/portable/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-portable-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/* "${output_dir}"
diff --git a/deployment/old/ubuntu-package-arm64/Dockerfile.amd64 b/deployment/old/ubuntu-package-arm64/Dockerfile.amd64
new file mode 100644
index 000000000..b11994a18
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/Dockerfile.amd64
@@ -0,0 +1,59 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/ubuntu-package-arm64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install npm package manager
+RUN wget -q -O- https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \
+ && echo "deb https://deb.nodesource.com/node_10.x $(lsb_release -s -c) main" > /etc/apt/sources.list.d/npm.list \
+ && apt update \
+ && apt install -y nodejs
+
+# Prepare the cross-toolchain
+RUN rm /etc/apt/sources.list \
+ && export CODENAME="$( lsb_release -c -s )" \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME} main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME}-updates main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME}-backports main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME}-security main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=arm64] http://ports.ubuntu.com/ ${CODENAME} main restricted universe multiverse" >>/etc/apt/sources.list.d/arm64.list \
+ && echo "deb [arch=arm64] http://ports.ubuntu.com/ ${CODENAME}-updates main restricted universe multiverse" >>/etc/apt/sources.list.d/arm64.list \
+ && echo "deb [arch=arm64] http://ports.ubuntu.com/ ${CODENAME}-backports main restricted universe multiverse" >>/etc/apt/sources.list.d/arm64.list \
+ && echo "deb [arch=arm64] http://ports.ubuntu.com/ ${CODENAME}-security main restricted universe multiverse" >>/etc/apt/sources.list.d/arm64.list \
+ && dpkg --add-architecture arm64 \
+ && apt-get update \
+ && apt-get install -y cross-gcc-dev \
+ && TARGET_LIST="arm64" cross-gcc-gensource 6 \
+ && cd cross-gcc-packages-amd64/cross-gcc-6-arm64 \
+ && ln -fs /usr/share/zoneinfo/America/Toronto /etc/localtime \
+ && apt-get install -y gcc-6-source libstdc++6-arm64-cross binutils-aarch64-linux-gnu bison flex libtool gdb sharutils netbase libcloog-isl-dev libmpc-dev libmpfr-dev libgmp-dev systemtap-sdt-dev autogen expect chrpath zlib1g-dev zip libc6-dev:arm64 linux-libc-dev:arm64 libgcc1:arm64 libcurl4-openssl-dev:arm64 libfontconfig1-dev:arm64 libfreetype6-dev:arm64 liblttng-ust0:arm64 libstdc++6:arm64 libssl-dev:arm64
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/ubuntu-package-arm64/Dockerfile.arm64 b/deployment/old/ubuntu-package-arm64/Dockerfile.arm64
new file mode 100644
index 000000000..8f004b2f1
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/Dockerfile.arm64
@@ -0,0 +1,40 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/ubuntu-package-arm64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=arm64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev liblttng-ust0 libssl-dev
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/5a4c8f96-1c73-401c-a6de-8e100403188a/0ce6ab39747e2508366d498f9c0a0669/dotnet-sdk-3.1.100-linux-arm64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install npm package manager
+RUN wget -q -O- https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \
+ && echo "deb https://deb.nodesource.com/node_10.x $(lsb_release -s -c) main" > /etc/apt/sources.list.d/npm.list \
+ && apt update \
+ && apt install -y nodejs
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/ubuntu-package-arm64/clean.sh b/deployment/old/ubuntu-package-arm64/clean.sh
new file mode 100755
index 000000000..82d427f9e
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-ubuntu-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/ubuntu-package-arm64/dependencies.txt b/deployment/old/ubuntu-package-arm64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/ubuntu-package-arm64/docker-build.sh b/deployment/old/ubuntu-package-arm64/docker-build.sh
new file mode 100755
index 000000000..67ab6bd74
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/docker-build.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Builds the DEB inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Remove build-dep for dotnet-sdk-3.1, since it's not a package in this image
+sed -i '/dotnet-sdk-3.1,/d' debian/control
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -aarm64
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/deb
+mv /jellyfin[-_]* ${ARTIFACT_DIR}/deb/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/ubuntu-package-arm64/package.sh b/deployment/old/ubuntu-package-arm64/package.sh
new file mode 100755
index 000000000..d1140a727
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/package.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+ARCH="$( arch )"
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-ubuntu_arm64-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Determine which Dockerfile to use
+case $ARCH in
+ 'x86_64')
+ DOCKERFILE="Dockerfile.amd64"
+ ;;
+ 'armv7l')
+ DOCKERFILE="Dockerfile.arm64"
+ ;;
+esac
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./${DOCKERFILE}
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/deb/* "${output_dir}"
diff --git a/deployment/old/ubuntu-package-arm64/pkg-src b/deployment/old/ubuntu-package-arm64/pkg-src
new file mode 120000
index 000000000..4c695fea1
--- /dev/null
+++ b/deployment/old/ubuntu-package-arm64/pkg-src
@@ -0,0 +1 @@
+../debian-package-x64/pkg-src \ No newline at end of file
diff --git a/deployment/old/ubuntu-package-armhf/Dockerfile.amd64 b/deployment/old/ubuntu-package-armhf/Dockerfile.amd64
new file mode 100644
index 000000000..e475b1438
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/Dockerfile.amd64
@@ -0,0 +1,59 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/ubuntu-package-armhf
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install npm package manager
+RUN wget -q -O- https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \
+ && echo "deb https://deb.nodesource.com/node_10.x $(lsb_release -s -c) main" > /etc/apt/sources.list.d/npm.list \
+ && apt update \
+ && apt install -y nodejs
+
+# Prepare the cross-toolchain
+RUN rm /etc/apt/sources.list \
+ && export CODENAME="$( lsb_release -c -s )" \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME} main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME}-updates main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME}-backports main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ ${CODENAME}-security main restricted universe multiverse" >>/etc/apt/sources.list.d/amd64.list \
+ && echo "deb [arch=armhf] http://ports.ubuntu.com/ ${CODENAME} main restricted universe multiverse" >>/etc/apt/sources.list.d/armhf.list \
+ && echo "deb [arch=armhf] http://ports.ubuntu.com/ ${CODENAME}-updates main restricted universe multiverse" >>/etc/apt/sources.list.d/armhf.list \
+ && echo "deb [arch=armhf] http://ports.ubuntu.com/ ${CODENAME}-backports main restricted universe multiverse" >>/etc/apt/sources.list.d/armhf.list \
+ && echo "deb [arch=armhf] http://ports.ubuntu.com/ ${CODENAME}-security main restricted universe multiverse" >>/etc/apt/sources.list.d/armhf.list \
+ && dpkg --add-architecture armhf \
+ && apt-get update \
+ && apt-get install -y cross-gcc-dev \
+ && TARGET_LIST="armhf" cross-gcc-gensource 6 \
+ && cd cross-gcc-packages-amd64/cross-gcc-6-armhf \
+ && ln -fs /usr/share/zoneinfo/America/Toronto /etc/localtime \
+ && apt-get install -y gcc-6-source libstdc++6-armhf-cross binutils-arm-linux-gnueabihf bison flex libtool gdb sharutils netbase libcloog-isl-dev libmpc-dev libmpfr-dev libgmp-dev systemtap-sdt-dev autogen expect chrpath zlib1g-dev zip libc6-dev:armhf linux-libc-dev:armhf libgcc1:armhf libcurl4-openssl-dev:armhf libfontconfig1-dev:armhf libfreetype6-dev:armhf liblttng-ust0:armhf libstdc++6:armhf libssl-dev:armhf
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/ubuntu-package-armhf/Dockerfile.armhf b/deployment/old/ubuntu-package-armhf/Dockerfile.armhf
new file mode 100644
index 000000000..0e71fa693
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/Dockerfile.armhf
@@ -0,0 +1,40 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/ubuntu-package-armhf
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=armhf
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev liblttng-ust0 libssl-dev
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/67766a96-eb8c-4cd2-bca4-ea63d2cc115c/7bf13840aa2ed88793b7315d5e0d74e6/dotnet-sdk-3.1.100-linux-arm.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install npm package manager
+RUN wget -q -O- https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \
+ && echo "deb https://deb.nodesource.com/node_10.x $(lsb_release -s -c) main" > /etc/apt/sources.list.d/npm.list \
+ && apt update \
+ && apt install -y nodejs
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+# Link to Debian source dir; mkdir needed or it fails, can't force dest
+RUN mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/ubuntu-package-armhf/clean.sh b/deployment/old/ubuntu-package-armhf/clean.sh
new file mode 100755
index 000000000..82d427f9e
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-ubuntu-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/ubuntu-package-armhf/dependencies.txt b/deployment/old/ubuntu-package-armhf/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/ubuntu-package-armhf/docker-build.sh b/deployment/old/ubuntu-package-armhf/docker-build.sh
new file mode 100755
index 000000000..1bd7fb291
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/docker-build.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+# Builds the DEB inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Remove build-dep for dotnet-sdk-3.1, since it's not a package in this image
+sed -i '/dotnet-sdk-3.1,/d' debian/control
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -aarmhf
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/deb
+mv /jellyfin[-_]* ${ARTIFACT_DIR}/deb/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/ubuntu-package-armhf/package.sh b/deployment/old/ubuntu-package-armhf/package.sh
new file mode 100755
index 000000000..2ceb3e816
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/package.sh
@@ -0,0 +1,45 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+ARCH="$( arch )"
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-ubuntu_armhf-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Determine which Dockerfile to use
+case $ARCH in
+ 'x86_64')
+ DOCKERFILE="Dockerfile.amd64"
+ ;;
+ 'armv7l')
+ DOCKERFILE="Dockerfile.armhf"
+ ;;
+esac
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./${DOCKERFILE}
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/deb/* "${output_dir}"
diff --git a/deployment/old/ubuntu-package-armhf/pkg-src b/deployment/old/ubuntu-package-armhf/pkg-src
new file mode 120000
index 000000000..4c695fea1
--- /dev/null
+++ b/deployment/old/ubuntu-package-armhf/pkg-src
@@ -0,0 +1 @@
+../debian-package-x64/pkg-src \ No newline at end of file
diff --git a/deployment/old/ubuntu-package-x64/Dockerfile b/deployment/old/ubuntu-package-x64/Dockerfile
new file mode 100644
index 000000000..e2dda6392
--- /dev/null
+++ b/deployment/old/ubuntu-package-x64/Dockerfile
@@ -0,0 +1,36 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/ubuntu-package-x64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Ubuntu build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev liblttng-ust0 \
+ && ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh \
+ && mkdir -p ${SOURCE_DIR} && ln -sf ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/debian
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install npm package manager
+RUN wget -q -O- https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \
+ && echo "deb https://deb.nodesource.com/node_10.x $(lsb_release -s -c) main" > /etc/apt/sources.list.d/npm.list \
+ && apt update \
+ && apt install -y nodejs
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/ubuntu-package-x64/clean.sh b/deployment/old/ubuntu-package-x64/clean.sh
new file mode 100755
index 000000000..82d427f9e
--- /dev/null
+++ b/deployment/old/ubuntu-package-x64/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-ubuntu-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/ubuntu-package-x64/dependencies.txt b/deployment/old/ubuntu-package-x64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/ubuntu-package-x64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/ubuntu-package-x64/docker-build.sh b/deployment/old/ubuntu-package-x64/docker-build.sh
new file mode 100755
index 000000000..962a522eb
--- /dev/null
+++ b/deployment/old/ubuntu-package-x64/docker-build.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+# Builds the DEB inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Remove build-dep for dotnet-sdk-3.1, since it's not a package in this image
+sed -i '/dotnet-sdk-3.1,/d' debian/control
+
+# Build DEB
+dpkg-buildpackage -us -uc
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/deb
+mv /jellyfin[-_]* ${ARTIFACT_DIR}/deb/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/ubuntu-package-x64/package.sh b/deployment/old/ubuntu-package-x64/package.sh
new file mode 100755
index 000000000..08c003778
--- /dev/null
+++ b/deployment/old/ubuntu-package-x64/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-ubuntu-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/deb/* "${output_dir}"
diff --git a/deployment/old/ubuntu-package-x64/pkg-src b/deployment/old/ubuntu-package-x64/pkg-src
new file mode 120000
index 000000000..0bb6d5524
--- /dev/null
+++ b/deployment/old/ubuntu-package-x64/pkg-src
@@ -0,0 +1 @@
+../debian-package-x64/pkg-src/ \ No newline at end of file
diff --git a/deployment/old/unraid/docker-templates/README.md b/deployment/old/unraid/docker-templates/README.md
new file mode 100644
index 000000000..2c268e8b3
--- /dev/null
+++ b/deployment/old/unraid/docker-templates/README.md
@@ -0,0 +1,15 @@
+# docker-templates
+
+### Installation:
+
+Open unRaid GUI (at least unRaid 6.5)
+
+Click on the Docker tab
+
+Add the following line under "Template Repositories"
+
+https://github.com/jellyfin/jellyfin/blob/master/deployment/unraid/docker-templates
+
+Click save than click on Add Container and select jellyfin.
+
+Adjust to your paths to your liking and off you go!
diff --git a/deployment/old/unraid/docker-templates/jellyfin.xml b/deployment/old/unraid/docker-templates/jellyfin.xml
new file mode 100644
index 000000000..57b4cc5ae
--- /dev/null
+++ b/deployment/old/unraid/docker-templates/jellyfin.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Containers>
+ <TemplateURL>https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml</TemplateURL>
+ <Beta>False</Beta>
+ <Category>MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos</Category>
+ <Name>Jellyfin</Name>
+ <Description>
+ Jellyfin is The Free Software Media Browser Converted By Community Applications Always verify this template (and values) against the dockerhub support page for the container!![br][br]
+ You can add as many mount points as needed for recordings, movies ,etc. [br][br]
+ [b][span style='color: #E80000;']Directions:[/span][/b][br]
+ [b]/config[/b] : This is where Jellyfin will store it's databases and configuration.[br][br]
+ [b]Port[/b] : This is the default port for Jellyfin. (Will add ssl port later)[br][br]
+ [b]Media[/b] : This is the mounting point of your media. When you access it in Jellyfin it will be /media or whatever you chose for a mount point[br][br]
+ [b]Cache[/b] : This is where Jellyfin will store and manage cached files like images to serve to clients. This is not where all images are stored.[br][br]
+ [b]Tip:[/b] You can add more volume mappings if you wish Jellyfin has access to it.
+ </Description>
+ <Overview>
+ Jellyfin Server is a home media server built on top of other popular open source technologies such as Service Stack, jQuery, jQuery mobile, and Mono and will remain completely free!
+ </Overview>
+ <Support>https://www.reddit.com/r/jellyfin/</Support>
+ <Registry>https://hub.docker.com/r/jellyfin/jellyfin/</Registry>
+ <GitHub>https://github.com/jellyfin/jellyfin/></GitHub>
+ <Repository>jellyfin/jellyfin</Repository>
+ <Project>https://jellyfin.media/</Project>
+ <BindTime>true</BindTime>
+ <Privileged>false</Privileged>
+ <Networking>
+ <Mode>host</Mode>
+ <Publish>
+ <Port>
+ <HostPort>8096</HostPort>
+ <ContainerPort>8096</ContainerPort>
+ <Protocol>tcp</Protocol>
+ </Port>
+ </Publish>
+ </Networking>
+ <Data>
+ <Volume>
+ <HostDir>/mnt/user/appdata/Jellyfin</HostDir>
+ <ContainerDir>/config</ContainerDir>
+ <Mode>rw</Mode>
+ </Volume>
+ <Volume>
+ <HostDir>/mnt/user</HostDir>
+ <ContainerDir>/media</ContainerDir>
+ <Mode>rw</Mode>
+ </Volume>
+ <Volume>
+ <HostDir>/mnt/user/appdata/Jellyfin/cache/</HostDir>
+ <ContainerDir>/cache</ContainerDir>
+ <Mode>rw</Mode>
+ </Volume>
+ </Data>
+ <WebUI>http://[IP]:[PORT:8096]/</WebUI>
+ <Icon>https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png</Icon>
+ <ExtraParams></ExtraParams>
+</Containers>
diff --git a/deployment/old/win-x64/Dockerfile b/deployment/old/win-x64/Dockerfile
new file mode 100644
index 000000000..8a3374954
--- /dev/null
+++ b/deployment/old/win-x64/Dockerfile
@@ -0,0 +1,37 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/win-x64
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0 zip
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install yarn package manager
+RUN wget -q -O- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
+ && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
+ && apt update \
+ && apt install -y yarn
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/win-x64/clean.sh b/deployment/old/win-x64/clean.sh
new file mode 100755
index 000000000..6c183f337
--- /dev/null
+++ b/deployment/old/win-x64/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-windows-x64-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/win-x64/dependencies.txt b/deployment/old/win-x64/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/win-x64/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/win-x64/docker-build.sh b/deployment/old/win-x64/docker-build.sh
new file mode 100755
index 000000000..79e5fb0bc
--- /dev/null
+++ b/deployment/old/win-x64/docker-build.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+# Builds the ZIP archive inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Version variables
+NSSM_VERSION="nssm-2.24-101-g897c7ad"
+NSSM_URL="http://files.evilt.win/nssm/${NSSM_VERSION}.zip"
+FFMPEG_VERSION="ffmpeg-4.2.1-win64-static"
+FFMPEG_URL="https://ffmpeg.zeranoe.com/builds/win64/static/${FFMPEG_VERSION}.zip"
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Clone down and build Web frontend
+web_build_dir="$( mktemp -d )"
+web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
+git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
+pushd ${web_build_dir}
+if [[ -n ${web_branch} ]]; then
+ checkout -b origin/${web_branch}
+fi
+yarn install
+mkdir -p ${web_target}
+mv dist/* ${web_target}/
+popd
+rm -rf ${web_build_dir}
+
+# Get version
+version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
+
+# Build binary
+dotnet publish Jellyfin.Server --configuration Release --self-contained --runtime win-x64 --output /dist/jellyfin_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+
+# Prepare addins
+addin_build_dir="$( mktemp -d )"
+wget ${NSSM_URL} -O ${addin_build_dir}/nssm.zip
+wget ${FFMPEG_URL} -O ${addin_build_dir}/ffmpeg.zip
+unzip ${addin_build_dir}/nssm.zip -d ${addin_build_dir}
+cp ${addin_build_dir}/${NSSM_VERSION}/win64/nssm.exe /dist/jellyfin_${version}/nssm.exe
+unzip ${addin_build_dir}/ffmpeg.zip -d ${addin_build_dir}
+cp ${addin_build_dir}/${FFMPEG_VERSION}/bin/ffmpeg.exe /dist/jellyfin_${version}/ffmpeg.exe
+cp ${addin_build_dir}/${FFMPEG_VERSION}/bin/ffprobe.exe /dist/jellyfin_${version}/ffprobe.exe
+rm -rf ${addin_build_dir}
+
+# Prepare scripts
+cp ${SOURCE_DIR}/deployment/windows/legacy/install-jellyfin.ps1 /dist/jellyfin_${version}/install-jellyfin.ps1
+cp ${SOURCE_DIR}/deployment/windows/legacy/install.bat /dist/jellyfin_${version}/install.bat
+
+# Create zip package
+pushd /dist
+zip -r /jellyfin_${version}.portable.zip jellyfin_${version}
+popd
+rm -rf /dist/jellyfin_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv /jellyfin[-_]*.zip ${ARTIFACT_DIR}/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/win-x64/package.sh b/deployment/old/win-x64/package.sh
new file mode 100755
index 000000000..a8ab190fa
--- /dev/null
+++ b/deployment/old/win-x64/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-windows-x64-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/* "${output_dir}"
diff --git a/deployment/old/win-x86/Dockerfile b/deployment/old/win-x86/Dockerfile
new file mode 100644
index 000000000..f8dc5be83
--- /dev/null
+++ b/deployment/old/win-x86/Dockerfile
@@ -0,0 +1,37 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG PLATFORM_DIR=/jellyfin/deployment/win-x86
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV DEB_BUILD_OPTIONS=noddebs
+ENV ARCH=amd64
+
+# Prepare Debian build environment
+RUN apt-get update \
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0 zip
+
+# Install dotnet repository
+# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
+RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4c7c-8ea0-fad5605b077a/49497b5420eecbd905158d86d738af64/dotnet-sdk-3.1.100-linux-x64.tar.gz -O dotnet-sdk.tar.gz \
+ && mkdir -p dotnet-sdk \
+ && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
+ && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
+
+# Install yarn package manager
+RUN wget -q -O- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
+ && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
+ && apt update \
+ && apt install -y yarn
+
+# Link to docker-build script
+RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/docker-build.sh"]
diff --git a/deployment/old/win-x86/clean.sh b/deployment/old/win-x86/clean.sh
new file mode 100755
index 000000000..8b78c5e4b
--- /dev/null
+++ b/deployment/old/win-x86/clean.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+keep_artifacts="${1}"
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-windows-x86-build"
+
+rm -rf "${package_temporary_dir}" &>/dev/null \
+ || sudo rm -rf "${package_temporary_dir}" &>/dev/null
+
+rm -rf "${output_dir}" &>/dev/null \
+ || sudo rm -rf "${output_dir}" &>/dev/null
+
+if [[ ${keep_artifacts} == 'n' ]]; then
+ docker_sudo=""
+ if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo=sudo
+ fi
+ ${docker_sudo} docker image rm ${image_name} --force
+fi
diff --git a/deployment/old/win-x86/dependencies.txt b/deployment/old/win-x86/dependencies.txt
new file mode 100644
index 000000000..bdb967096
--- /dev/null
+++ b/deployment/old/win-x86/dependencies.txt
@@ -0,0 +1 @@
+docker
diff --git a/deployment/old/win-x86/docker-build.sh b/deployment/old/win-x86/docker-build.sh
new file mode 100755
index 000000000..977dcf78f
--- /dev/null
+++ b/deployment/old/win-x86/docker-build.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+# Builds the ZIP archive inside the Docker container
+
+set -o errexit
+set -o xtrace
+
+# Version variables
+NSSM_VERSION="nssm-2.24-101-g897c7ad"
+NSSM_URL="http://files.evilt.win/nssm/${NSSM_VERSION}.zip"
+FFMPEG_VERSION="ffmpeg-4.2.1-win32-static"
+FFMPEG_URL="https://ffmpeg.zeranoe.com/builds/win32/static/${FFMPEG_VERSION}.zip"
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Clone down and build Web frontend
+web_build_dir="$( mktemp -d )"
+web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
+git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
+pushd ${web_build_dir}
+if [[ -n ${web_branch} ]]; then
+ checkout -b origin/${web_branch}
+fi
+yarn install
+mkdir -p ${web_target}
+mv dist/* ${web_target}/
+popd
+rm -rf ${web_build_dir}
+
+# Get version
+version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
+
+# Build binary
+dotnet publish Jellyfin.Server --configuration Release --self-contained --runtime win-x86 --output /dist/jellyfin_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+
+# Prepare addins
+addin_build_dir="$( mktemp -d )"
+wget ${NSSM_URL} -O ${addin_build_dir}/nssm.zip
+wget ${FFMPEG_URL} -O ${addin_build_dir}/ffmpeg.zip
+unzip ${addin_build_dir}/nssm.zip -d ${addin_build_dir}
+cp ${addin_build_dir}/${NSSM_VERSION}/win64/nssm.exe /dist/jellyfin_${version}/nssm.exe
+unzip ${addin_build_dir}/ffmpeg.zip -d ${addin_build_dir}
+cp ${addin_build_dir}/${FFMPEG_VERSION}/bin/ffmpeg.exe /dist/jellyfin_${version}/ffmpeg.exe
+cp ${addin_build_dir}/${FFMPEG_VERSION}/bin/ffprobe.exe /dist/jellyfin_${version}/ffprobe.exe
+rm -rf ${addin_build_dir}
+
+# Prepare scripts
+cp ${SOURCE_DIR}/deployment/windows/legacy/install-jellyfin.ps1 /dist/jellyfin_${version}/install-jellyfin.ps1
+cp ${SOURCE_DIR}/deployment/windows/legacy/install.bat /dist/jellyfin_${version}/install.bat
+
+# Create zip package
+pushd /dist
+zip -r /jellyfin_${version}.portable.zip jellyfin_${version}
+popd
+rm -rf /dist/jellyfin_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv /jellyfin[-_]*.zip ${ARTIFACT_DIR}/
+chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
diff --git a/deployment/old/win-x86/package.sh b/deployment/old/win-x86/package.sh
new file mode 100755
index 000000000..65e7e2928
--- /dev/null
+++ b/deployment/old/win-x86/package.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+args="${@}"
+declare -a docker_envvars
+for arg in ${args}; do
+ docker_envvars+=("-e ${arg}")
+done
+
+WORKDIR="$( pwd )"
+
+package_temporary_dir="${WORKDIR}/pkg-dist-tmp"
+output_dir="${WORKDIR}/pkg-dist"
+current_user="$( whoami )"
+image_name="jellyfin-windows-x86-build"
+
+# Determine if sudo should be used for Docker
+if [[ ! -z $(id -Gn | grep -q 'docker') ]] \
+ && [[ ! ${EUID:-1000} -eq 0 ]] \
+ && [[ ! ${USER} == "root" ]] \
+ && [[ ! -z $( echo "${OSTYPE}" | grep -q "darwin" ) ]]; then
+ docker_sudo="sudo"
+else
+ docker_sudo=""
+fi
+
+# Prepare temporary package dir
+mkdir -p "${package_temporary_dir}"
+# Set up the build environment Docker image
+${docker_sudo} docker build ../.. -t "${image_name}" -f ./Dockerfile
+# Build the DEBs and copy out to ${package_temporary_dir}
+${docker_sudo} docker run --rm -v "${package_temporary_dir}:/dist" "${image_name}" ${docker_envvars}
+# Move the DEBs to the output directory
+mkdir -p "${output_dir}"
+mv "${package_temporary_dir}"/* "${output_dir}"