From 85da15685f7a761af3a34f1c591bf129aa5deb5f Mon Sep 17 00:00:00 2001
From: Andreas B <6439218+YouKnowBlom@users.noreply.github.com>
Date: Sun, 15 Mar 2020 15:06:38 +0100
Subject: Refactor DynamicHlsService.AppendPlaylist to use StringBuilder
---
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index 262f517869..8787eb2a3f 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -724,7 +724,10 @@ namespace MediaBrowser.Api.Playback.Hls
private void AppendPlaylist(StringBuilder builder, StreamState state, string url, int bitrate, string subtitleGroup)
{
- var header = "#EXT-X-STREAM-INF:BANDWIDTH=" + bitrate.ToString(CultureInfo.InvariantCulture) + ",AVERAGE-BANDWIDTH=" + bitrate.ToString(CultureInfo.InvariantCulture);
+ builder.Append("#EXT-X-STREAM-INF:BANDWIDTH=")
+ .Append(bitrate.ToString(CultureInfo.InvariantCulture))
+ .Append(",AVERAGE-BANDWIDTH=")
+ .Append(bitrate.ToString(CultureInfo.InvariantCulture));
// tvos wants resolution, codecs, framerate
//if (state.TargetFramerate.HasValue)
@@ -734,10 +737,12 @@ namespace MediaBrowser.Api.Playback.Hls
if (!string.IsNullOrWhiteSpace(subtitleGroup))
{
- header += string.Format(",SUBTITLES=\"{0}\"", subtitleGroup);
+ builder.Append(",SUBTITLES=\"")
+ .Append(subtitleGroup)
+ .Append('"');
}
- builder.AppendLine(header);
+ builder.Append(Environment.NewLine);
builder.AppendLine(url);
}
--
cgit v1.2.3
From f2858878d166df214aee20f2dc0710b766285c91 Mon Sep 17 00:00:00 2001
From: Andreas B <6439218+YouKnowBlom@users.noreply.github.com>
Date: Wed, 11 Mar 2020 18:14:36 +0100
Subject: Add CODECS field to HLS master playlist
---
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 110 ++++++++++++++++++
.../Playback/Hls/HlsCodecStringFactory.cs | 126 +++++++++++++++++++++
2 files changed, 236 insertions(+)
create mode 100644 MediaBrowser.Api/Playback/Hls/HlsCodecStringFactory.cs
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index 8787eb2a3f..e6c9213912 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -722,6 +722,114 @@ namespace MediaBrowser.Api.Playback.Hls
//return state.VideoRequest.VideoBitRate.HasValue;
}
+ ///
+ /// Gets a formatted string of the output audio codec, for use in the CODECS field.
+ ///
+ ///
+ ///
+ /// StreamState of the current stream.
+ /// Formatted audio codec string.
+ private string GetPlaylistAudioCodecs(StreamState state)
+ {
+
+ if (string.Equals(state.ActualOutputAudioCodec, "aac", StringComparison.OrdinalIgnoreCase))
+ {
+ string profile = state.GetRequestedProfiles("aac").FirstOrDefault();
+
+ return HlsCodecStringFactory.GetAACString(profile);
+ }
+ else if (string.Equals(state.ActualOutputAudioCodec, "mp3", StringComparison.OrdinalIgnoreCase))
+ {
+ return HlsCodecStringFactory.GetMP3String();
+ }
+ else if (string.Equals(state.ActualOutputAudioCodec, "ac3", StringComparison.OrdinalIgnoreCase))
+ {
+ return HlsCodecStringFactory.GetAC3String();
+ }
+ else if (string.Equals(state.ActualOutputAudioCodec, "eac3", StringComparison.OrdinalIgnoreCase))
+ {
+ return HlsCodecStringFactory.GetEAC3String();
+ }
+
+ return string.Empty;
+ }
+
+ ///
+ /// Gets a formatted string of the output video codec, for use in the CODECS field.
+ ///
+ ///
+ ///
+ /// StreamState of the current stream.
+ /// Formatted video codec string.
+ private string GetPlaylistVideoCodecs(StreamState state)
+ {
+ int level = Convert.ToInt32(state.GetRequestedLevel(state.ActualOutputVideoCodec));
+
+ if (string.Equals(state.ActualOutputVideoCodec, "h264", StringComparison.OrdinalIgnoreCase))
+ {
+ string profile = state.GetRequestedProfiles("h264").FirstOrDefault();
+
+ return HlsCodecStringFactory.GetH264String(profile, level);
+ }
+ else if (string.Equals(state.ActualOutputVideoCodec, "h265", StringComparison.OrdinalIgnoreCase)
+ || string.Equals(state.ActualOutputVideoCodec, "hevc", StringComparison.OrdinalIgnoreCase))
+ {
+ string profile = state.GetRequestedProfiles("h265").FirstOrDefault();
+
+ return HlsCodecStringFactory.GetH265String(profile, level);
+ }
+
+ return string.Empty;
+ }
+
+ ///
+ /// Appends a CODECS field containing formatted strings of
+ /// the active streams output video and audio codecs.
+ ///
+ ///
+ ///
+ ///
+ /// StringBuilder to append the field to.
+ /// StreamState of the current stream.
+ private void AppendPlaylistCodecsField(StringBuilder builder, StreamState state)
+ {
+ // Video
+ string videoCodecs = string.Empty;
+ if (!string.IsNullOrEmpty(state.ActualOutputVideoCodec))
+ {
+ videoCodecs = GetPlaylistVideoCodecs(state);
+ }
+
+ // Audio
+ string audioCodecs = string.Empty;
+ if (!string.IsNullOrEmpty(state.ActualOutputAudioCodec))
+ {
+ audioCodecs = GetPlaylistAudioCodecs(state);
+ }
+
+ if (!string.IsNullOrEmpty(videoCodecs) || !string.IsNullOrEmpty(audioCodecs))
+ {
+ builder.Append(",CODECS=\"");
+
+ if (!string.IsNullOrEmpty(videoCodecs) && !string.IsNullOrEmpty(audioCodecs))
+ {
+ builder.Append(videoCodecs)
+ .Append(',')
+ .Append(audioCodecs);
+ }
+ else if (!string.IsNullOrEmpty(videoCodecs))
+ {
+ builder.Append(videoCodecs);
+ }
+ else if (!string.IsNullOrEmpty(audioCodecs))
+ {
+ builder.Append(audioCodecs);
+ }
+
+ builder.Append('"');
+ }
+ }
+
private void AppendPlaylist(StringBuilder builder, StreamState state, string url, int bitrate, string subtitleGroup)
{
builder.Append("#EXT-X-STREAM-INF:BANDWIDTH=")
@@ -735,6 +843,8 @@ namespace MediaBrowser.Api.Playback.Hls
// header += string.Format(",FRAME-RATE=\"{0}\"", state.TargetFramerate.Value.ToString(CultureInfo.InvariantCulture));
//}
+ AppendPlaylistCodecsField(builder, state);
+
if (!string.IsNullOrWhiteSpace(subtitleGroup))
{
builder.Append(",SUBTITLES=\"")
diff --git a/MediaBrowser.Api/Playback/Hls/HlsCodecStringFactory.cs b/MediaBrowser.Api/Playback/Hls/HlsCodecStringFactory.cs
new file mode 100644
index 0000000000..3bbb77a65e
--- /dev/null
+++ b/MediaBrowser.Api/Playback/Hls/HlsCodecStringFactory.cs
@@ -0,0 +1,126 @@
+using System;
+using System.Text;
+
+
+namespace MediaBrowser.Api.Playback
+{
+ ///
+ /// Get various codec strings for use in HLS playlists.
+ ///
+ static class HlsCodecStringFactory
+ {
+
+ ///
+ /// Gets a MP3 codec string.
+ ///
+ /// MP3 codec string.
+ public static string GetMP3String()
+ {
+ return "mp4a.40.34";
+ }
+
+ ///
+ /// Gets an AAC codec string.
+ ///
+ /// AAC profile.
+ /// AAC codec string.
+ public static string GetAACString(string profile)
+ {
+ StringBuilder result = new StringBuilder("mp4a", 9);
+
+ if (string.Equals(profile, "HE", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".40.5");
+ }
+ else
+ {
+ // Default to LC if profile is invalid
+ result.Append(".40.2");
+ }
+
+ return result.ToString();
+ }
+
+ ///
+ /// Gets a H.264 codec string.
+ ///
+ /// H.264 profile.
+ /// H.264 level.
+ /// H.264 string.
+ public static string GetH264String(string profile, int level)
+ {
+ StringBuilder result = new StringBuilder("avc1", 11);
+
+ if (string.Equals(profile, "high", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".6400");
+ }
+ else if (string.Equals(profile, "main", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".4D40");
+ }
+ else if (string.Equals(profile, "baseline", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".42E0");
+ }
+ else
+ {
+ // Default to constrained baseline if profile is invalid
+ result.Append(".4240");
+ }
+
+ string levelHex = level.ToString("X2");
+ result.Append(levelHex);
+
+ return result.ToString();
+ }
+
+ ///
+ /// Gets a H.265 codec string.
+ ///
+ /// H.265 profile.
+ /// H.265 level.
+ /// H.265 string.
+ public static string GetH265String(string profile, int level)
+ {
+ // The h265 syntax is a bit of a mystery at the time this comment was written.
+ // This is what I've found through various sources:
+ // FORMAT: [codecTag].[profile].[constraint?].L[level * 30].[UNKNOWN]
+ StringBuilder result = new StringBuilder("hev1", 16);
+
+ if (string.Equals(profile, "main10", StringComparison.OrdinalIgnoreCase))
+ {
+ result.Append(".2.6");
+ }
+ else
+ {
+ // Default to main if profile is invalid
+ result.Append(".1.6");
+ }
+
+ result.Append(".L")
+ .Append(level * 3)
+ .Append(".B0");
+
+ return result.ToString();
+ }
+
+ ///
+ /// Gets an AC-3 codec string.
+ ///
+ /// AC-3 codec string.
+ public static string GetAC3String()
+ {
+ return "mp4a.a5";
+ }
+
+ ///
+ /// Gets an E-AC-3 codec string.
+ ///
+ /// E-AC-3 codec string.
+ public static string GetEAC3String()
+ {
+ return "mp4a.a6";
+ }
+ }
+}
--
cgit v1.2.3
From 8a990d1d95aa22840bae5c3494cb5371bcf2b4d8 Mon Sep 17 00:00:00 2001
From: Andreas B <6439218+YouKnowBlom@users.noreply.github.com>
Date: Wed, 11 Mar 2020 18:16:57 +0100
Subject: Add FRAME-RATE field to HLS master playlist
---
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 28 ++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index e6c9213912..d56b5cbff4 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -830,6 +830,32 @@ namespace MediaBrowser.Api.Playback.Hls
}
}
+ ///
+ /// Appends a FRAME-RATE field containing the framerate of the output stream.
+ ///
+ ///
+ /// StringBuilder to append the field to.
+ /// StreamState of the current stream.
+ private void AppendPlaylistFramerateField(StringBuilder builder, StreamState state)
+ {
+ double? framerate = null;
+ if (state.TargetFramerate.HasValue)
+ {
+ framerate = Math.Round(state.TargetFramerate.GetValueOrDefault(), 3);
+ }
+ else if (state.VideoStream.RealFrameRate.HasValue)
+ {
+ framerate = Math.Round(state.VideoStream.RealFrameRate.GetValueOrDefault(), 3);
+ }
+
+ if (framerate.HasValue)
+ {
+ builder.Append(",FRAME-RATE=\"")
+ .Append(framerate.Value)
+ .Append('"');
+ }
+ }
+
private void AppendPlaylist(StringBuilder builder, StreamState state, string url, int bitrate, string subtitleGroup)
{
builder.Append("#EXT-X-STREAM-INF:BANDWIDTH=")
@@ -845,6 +871,8 @@ namespace MediaBrowser.Api.Playback.Hls
AppendPlaylistCodecsField(builder, state);
+ AppendPlaylistFramerateField(builder, state);
+
if (!string.IsNullOrWhiteSpace(subtitleGroup))
{
builder.Append(",SUBTITLES=\"")
--
cgit v1.2.3
From 0a2d24aff3d2e78c97b4b2294a418e2cd4a16be1 Mon Sep 17 00:00:00 2001
From: Andreas B <6439218+YouKnowBlom@users.noreply.github.com>
Date: Sun, 15 Mar 2020 18:13:19 +0100
Subject: Add RESOLUTION field to HLS master playlist
---
MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs | 26 +++++++++++++++++-----
1 file changed, 20 insertions(+), 6 deletions(-)
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index d56b5cbff4..ce25676ff5 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -856,6 +856,24 @@ namespace MediaBrowser.Api.Playback.Hls
}
}
+ ///
+ /// Appends a RESOLUTION field containing the resolution of the output stream.
+ ///
+ ///
+ /// StringBuilder to append the field to.
+ /// StreamState of the current stream.
+ private void AppendPlaylistResolutionField(StringBuilder builder, StreamState state)
+ {
+ if (state.OutputWidth.HasValue && state.OutputHeight.HasValue)
+ {
+ builder.Append(",RESOLUTION=\"")
+ .Append(state.OutputWidth.GetValueOrDefault())
+ .Append('x')
+ .Append(state.OutputHeight.GetValueOrDefault())
+ .Append('"');
+ }
+ }
+
private void AppendPlaylist(StringBuilder builder, StreamState state, string url, int bitrate, string subtitleGroup)
{
builder.Append("#EXT-X-STREAM-INF:BANDWIDTH=")
@@ -863,14 +881,10 @@ namespace MediaBrowser.Api.Playback.Hls
.Append(",AVERAGE-BANDWIDTH=")
.Append(bitrate.ToString(CultureInfo.InvariantCulture));
- // tvos wants resolution, codecs, framerate
- //if (state.TargetFramerate.HasValue)
- //{
- // header += string.Format(",FRAME-RATE=\"{0}\"", state.TargetFramerate.Value.ToString(CultureInfo.InvariantCulture));
- //}
-
AppendPlaylistCodecsField(builder, state);
+ AppendPlaylistResolutionField(builder, state);
+
AppendPlaylistFramerateField(builder, state);
if (!string.IsNullOrWhiteSpace(subtitleGroup))
--
cgit v1.2.3
From 2afbbba3f874884e7f249bacb9de458244242380 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Sun, 22 Mar 2020 16:00:20 -0400
Subject: Remove old build script
---
build | 197 ------------------------------------------------------------------
1 file changed, 197 deletions(-)
delete mode 100755 build
diff --git a/build b/build
deleted file mode 100755
index 95d5d5c495..0000000000
--- a/build
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/usr/bin/env bash
-
-# build - build Jellyfin binaries or packages
-
-set -o errexit
-set -o pipefail
-
-# The list of possible package actions (except 'clean')
-declare -a actions=( 'build' 'package' 'sign' 'publish' )
-
-# The list of possible platforms, based on directories under 'deployment/'
-declare -a platforms=( $(
- find deployment/ -maxdepth 1 -mindepth 1 -type d -exec basename {} \; | sort
-) )
-
-# The list of standard dependencies required by all build scripts; individual
-# action scripts may specify their own dependencies
-declare -a dependencies=( 'tar' 'zip' )
-
-usage() {
- echo -e "build - build Jellyfin binaries or packages"
- echo -e ""
- echo -e "Usage:"
- echo -e " $ build --list-platforms"
- echo -e " $ build --list-actions "
- echo -e " $ build [-k/--keep-artifacts] [-b/--web-branch ] "
- echo -e ""
- echo -e "The 'keep-artifacts' option preserves build artifacts, e.g. Docker images for system package builds."
- echo -e "The web_branch defaults to the same branch name as the current main branch or can be 'local' to not touch the submodule branching."
- echo -e "To build all platforms, use 'all'."
- echo -e "To perform all build actions, use 'all'."
- echo -e "Build output files are collected at '../bin/'."
-}
-
-# Show usage on stderr with exit 1 on argless
-if [[ -z $1 ]]; then
- usage >&2
- exit 1
-fi
-# Show usage if -h or --help are specified in the args
-if [[ $@ =~ '-h' || $@ =~ '--help' ]]; then
- usage
- exit 0
-fi
-
-# List all available platforms then exit
-if [[ $1 == '--list-platforms' ]]; then
- echo -e "Available platforms:"
- for platform in ${platforms[@]}; do
- echo -e " ${platform}"
- done
- exit 0
-fi
-
-# List all available actions for a given platform then exit
-if [[ $1 == '--list-actions' ]]; then
- platform="$2"
- if [[ ! " ${platforms[@]} " =~ " ${platform} " ]]; then
- echo "ERROR: Platform ${platform} does not exist."
- exit 1
- fi
- echo -e "Available actions for platform ${platform}:"
- for action in ${actions[@]}; do
- if [[ -f deployment/${platform}/${action}.sh ]]; then
- echo -e " ${action}"
- fi
- done
- exit 0
-fi
-
-# Parse keep-artifacts option
-if [[ $1 == '-k' || $1 == '--keep-artifacts' ]]; then
- keep_artifacts="y"
- shift 1
-else
- keep_artifacts="n"
-fi
-
-# Parse branch option
-if [[ $1 == '-b' || $1 == '--web-branch' ]]; then
- web_branch="$2"
- shift 2
-else
- web_branch="$( git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' )"
-fi
-
-# Parse platform option
-if [[ -n $1 ]]; then
- cli_platform="$1"
- shift
-else
- echo "ERROR: A platform must be specified. Use 'all' to specify all platforms."
- exit 1
-fi
-if [[ ${cli_platform} == 'all' ]]; then
- declare -a platform=( ${platforms[@]} )
-else
- if [[ ! " ${platforms[@]} " =~ " ${cli_platform} " ]]; then
- echo "ERROR: Platform ${cli_platform} is invalid. Use the '--list-platforms' option to list available platforms."
- exit 1
- else
- declare -a platform=( "${cli_platform}" )
- fi
-fi
-
-# Parse action option
-if [[ -n $1 ]]; then
- cli_action="$1"
- shift
-else
- echo "ERROR: An action must be specified. Use 'all' to specify all actions."
- exit 1
-fi
-if [[ ${cli_action} == 'all' ]]; then
- declare -a action=( ${actions[@]} )
-else
- if [[ ! " ${actions[@]} " =~ " ${cli_action} " ]]; then
- echo "ERROR: Action ${cli_action} is invalid. Use the '--list-actions ' option to list available actions."
- exit 1
- else
- declare -a action=( "${cli_action}" )
- fi
-fi
-
-# Verify required utilities are installed
-missing_deps=()
-for utility in ${dependencies[@]}; do
- if ! which ${utility} &>/dev/null; then
- missing_deps+=( ${utility} )
- fi
-done
-
-# Error if we're missing anything
-if [[ ${#missing_deps[@]} -gt 0 ]]; then
- echo -e "ERROR: This script requires the following missing utilities:"
- for utility in ${missing_deps[@]}; do
- echo -e " ${utility}"
- done
- exit 1
-fi
-
-# Parse platform-specific dependencies
-for target_platform in ${platform[@]}; do
- # Read platform-specific dependencies
- if [[ -f deployment/${target_platform}/dependencies.txt ]]; then
- platform_dependencies="$( grep -v '^#' deployment/${target_platform}/dependencies.txt )"
-
- # Verify required utilities are installed
- missing_deps=()
- for utility in ${platform_dependencies[@]}; do
- if ! which ${utility} &>/dev/null; then
- missing_deps+=( ${utility} )
- fi
- done
-
- # Error if we're missing anything
- if [[ ${#missing_deps[@]} -gt 0 ]]; then
- echo -e "ERROR: The ${target_platform} platform requires the following utilities:"
- for utility in ${missing_deps[@]}; do
- echo -e " ${utility}"
- done
- exit 1
- fi
- fi
-done
-
-# Execute each platform and action in order, if said action is enabled
-pushd deployment/
-for target_platform in ${platform[@]}; do
- echo -e "> Processing platform ${target_platform}"
- date_start=$( date +%s )
- pushd ${target_platform}
- cleanup() {
- echo -e ">> Processing action clean"
- if [[ -f clean.sh && -x clean.sh ]]; then
- ./clean.sh ${keep_artifacts}
- fi
- }
- trap cleanup EXIT INT
- for target_action in ${action[@]}; do
- echo -e ">> Processing action ${target_action}"
- if [[ -f ${target_action}.sh && -x ${target_action}.sh ]]; then
- ./${target_action}.sh web_branch=${web_branch}
- fi
- done
- if [[ -d pkg-dist/ ]]; then
- echo -e ">> Collecting build artifacts"
- target_dir="../../../bin/${target_platform}"
- mkdir -p ${target_dir}
- mv pkg-dist/* ${target_dir}/
- fi
- cleanup
- date_end=$( date +%s )
- echo -e "> Completed platform ${target_platform} in $( expr ${date_end} - ${date_start} ) seconds."
- popd
-done
-popd
--
cgit v1.2.3
From 28f7df652015013ff5cedb10971fb69c8e41d2b1 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Sun, 22 Mar 2020 16:00:52 -0400
Subject: Move all old deployment stuff to a new folder
---
deployment/README.md | 62 ---
deployment/centos-package-x64/Dockerfile | 39 --
deployment/centos-package-x64/clean.sh | 32 --
deployment/centos-package-x64/dependencies.txt | 1 -
deployment/centos-package-x64/docker-build.sh | 18 -
deployment/centos-package-x64/package.sh | 34 --
deployment/centos-package-x64/pkg-src | 1 -
deployment/debian-package-arm64/Dockerfile.amd64 | 43 --
deployment/debian-package-arm64/Dockerfile.arm64 | 34 --
deployment/debian-package-arm64/clean.sh | 27 -
deployment/debian-package-arm64/dependencies.txt | 1 -
deployment/debian-package-arm64/docker-build.sh | 21 -
deployment/debian-package-arm64/package.sh | 45 --
deployment/debian-package-arm64/pkg-src | 1 -
deployment/debian-package-armhf/Dockerfile.amd64 | 42 --
deployment/debian-package-armhf/Dockerfile.armhf | 34 --
deployment/debian-package-armhf/clean.sh | 27 -
deployment/debian-package-armhf/dependencies.txt | 1 -
deployment/debian-package-armhf/docker-build.sh | 21 -
deployment/debian-package-armhf/package.sh | 45 --
deployment/debian-package-armhf/pkg-src | 1 -
deployment/debian-package-x64/Dockerfile | 34 --
deployment/debian-package-x64/clean.sh | 27 -
deployment/debian-package-x64/dependencies.txt | 1 -
deployment/debian-package-x64/docker-build.sh | 20 -
deployment/debian-package-x64/package.sh | 34 --
.../debian-package-x64/pkg-src/bin/restart.sh | 36 --
deployment/debian-package-x64/pkg-src/changelog | 59 ---
deployment/debian-package-x64/pkg-src/compat | 1 -
.../debian-package-x64/pkg-src/conf/jellyfin | 40 --
.../pkg-src/conf/jellyfin-sudoers | 37 --
.../pkg-src/conf/jellyfin.service.conf | 7 -
.../debian-package-x64/pkg-src/conf/logging.json | 30 --
deployment/debian-package-x64/pkg-src/control | 31 --
deployment/debian-package-x64/pkg-src/copyright | 29 --
deployment/debian-package-x64/pkg-src/gbp.conf | 6 -
deployment/debian-package-x64/pkg-src/install | 6 -
.../debian-package-x64/pkg-src/jellyfin.init | 61 ---
.../debian-package-x64/pkg-src/jellyfin.service | 14 -
.../debian-package-x64/pkg-src/jellyfin.upstart | 20 -
.../debian-package-x64/pkg-src/po/POTFILES.in | 1 -
.../debian-package-x64/pkg-src/po/templates.pot | 57 --
deployment/debian-package-x64/pkg-src/postinst | 92 ----
deployment/debian-package-x64/pkg-src/postrm | 81 ---
deployment/debian-package-x64/pkg-src/preinst | 78 ---
deployment/debian-package-x64/pkg-src/prerm | 61 ---
deployment/debian-package-x64/pkg-src/rules | 66 ---
.../pkg-src/source.lintian-overrides | 3 -
.../debian-package-x64/pkg-src/source/format | 1 -
.../debian-package-x64/pkg-src/source/options | 11 -
deployment/fedora-package-x64/Dockerfile | 33 --
deployment/fedora-package-x64/clean.sh | 32 --
deployment/fedora-package-x64/dependencies.txt | 1 -
deployment/fedora-package-x64/docker-build.sh | 18 -
deployment/fedora-package-x64/package.sh | 34 --
deployment/fedora-package-x64/pkg-src/.gitignore | 3 -
deployment/fedora-package-x64/pkg-src/README.md | 43 --
.../pkg-src/jellyfin-firewalld.xml | 9 -
deployment/fedora-package-x64/pkg-src/jellyfin.env | 34 --
.../pkg-src/jellyfin.override.conf | 7 -
.../fedora-package-x64/pkg-src/jellyfin.service | 15 -
.../fedora-package-x64/pkg-src/jellyfin.spec | 181 -------
.../fedora-package-x64/pkg-src/jellyfin.sudoers | 19 -
deployment/fedora-package-x64/pkg-src/restart.sh | 36 --
deployment/linux-x64/Dockerfile | 37 --
deployment/linux-x64/clean.sh | 27 -
deployment/linux-x64/dependencies.txt | 1 -
deployment/linux-x64/docker-build.sh | 36 --
deployment/linux-x64/package.sh | 34 --
deployment/macos/Dockerfile | 37 --
deployment/macos/clean.sh | 27 -
deployment/macos/dependencies.txt | 1 -
deployment/macos/docker-build.sh | 36 --
deployment/macos/package.sh | 34 --
deployment/old/README.md | 62 +++
deployment/old/centos-package-x64/Dockerfile | 39 ++
deployment/old/centos-package-x64/clean.sh | 32 ++
deployment/old/centos-package-x64/dependencies.txt | 1 +
deployment/old/centos-package-x64/docker-build.sh | 18 +
deployment/old/centos-package-x64/package.sh | 34 ++
deployment/old/centos-package-x64/pkg-src | 1 +
.../old/debian-package-arm64/Dockerfile.amd64 | 43 ++
.../old/debian-package-arm64/Dockerfile.arm64 | 34 ++
deployment/old/debian-package-arm64/clean.sh | 27 +
.../old/debian-package-arm64/dependencies.txt | 1 +
.../old/debian-package-arm64/docker-build.sh | 21 +
deployment/old/debian-package-arm64/package.sh | 45 ++
deployment/old/debian-package-arm64/pkg-src | 1 +
.../old/debian-package-armhf/Dockerfile.amd64 | 42 ++
.../old/debian-package-armhf/Dockerfile.armhf | 34 ++
deployment/old/debian-package-armhf/clean.sh | 27 +
.../old/debian-package-armhf/dependencies.txt | 1 +
.../old/debian-package-armhf/docker-build.sh | 21 +
deployment/old/debian-package-armhf/package.sh | 45 ++
deployment/old/debian-package-armhf/pkg-src | 1 +
deployment/old/debian-package-x64/Dockerfile | 34 ++
deployment/old/debian-package-x64/clean.sh | 27 +
deployment/old/debian-package-x64/dependencies.txt | 1 +
deployment/old/debian-package-x64/docker-build.sh | 20 +
deployment/old/debian-package-x64/package.sh | 34 ++
.../old/debian-package-x64/pkg-src/changelog | 59 +++
deployment/old/debian-package-x64/pkg-src/compat | 1 +
.../old/debian-package-x64/pkg-src/conf/jellyfin | 40 ++
.../pkg-src/conf/jellyfin-sudoers | 37 ++
.../pkg-src/conf/jellyfin.service.conf | 7 +
.../debian-package-x64/pkg-src/conf/logging.json | 30 ++
deployment/old/debian-package-x64/pkg-src/control | 31 ++
.../old/debian-package-x64/pkg-src/copyright | 29 ++
deployment/old/debian-package-x64/pkg-src/gbp.conf | 6 +
deployment/old/debian-package-x64/pkg-src/install | 6 +
.../old/debian-package-x64/pkg-src/jellyfin.init | 61 +++
.../debian-package-x64/pkg-src/jellyfin.service | 14 +
.../debian-package-x64/pkg-src/jellyfin.upstart | 20 +
.../old/debian-package-x64/pkg-src/po/POTFILES.in | 1 +
.../debian-package-x64/pkg-src/po/templates.pot | 57 ++
deployment/old/debian-package-x64/pkg-src/postinst | 92 ++++
deployment/old/debian-package-x64/pkg-src/postrm | 81 +++
deployment/old/debian-package-x64/pkg-src/preinst | 78 +++
deployment/old/debian-package-x64/pkg-src/prerm | 61 +++
deployment/old/debian-package-x64/pkg-src/rules | 66 +++
.../pkg-src/source.lintian-overrides | 3 +
.../old/debian-package-x64/pkg-src/source/format | 1 +
.../old/debian-package-x64/pkg-src/source/options | 11 +
deployment/old/fedora-package-x64/Dockerfile | 33 ++
deployment/old/fedora-package-x64/clean.sh | 32 ++
deployment/old/fedora-package-x64/dependencies.txt | 1 +
deployment/old/fedora-package-x64/docker-build.sh | 18 +
deployment/old/fedora-package-x64/package.sh | 34 ++
.../old/fedora-package-x64/pkg-src/.gitignore | 3 +
.../old/fedora-package-x64/pkg-src/README.md | 43 ++
.../pkg-src/jellyfin-firewalld.xml | 9 +
.../old/fedora-package-x64/pkg-src/jellyfin.env | 34 ++
.../pkg-src/jellyfin.override.conf | 7 +
.../fedora-package-x64/pkg-src/jellyfin.service | 15 +
.../old/fedora-package-x64/pkg-src/jellyfin.spec | 181 +++++++
.../fedora-package-x64/pkg-src/jellyfin.sudoers | 19 +
.../old/fedora-package-x64/pkg-src/restart.sh | 36 ++
deployment/old/linux-x64/Dockerfile | 37 ++
deployment/old/linux-x64/clean.sh | 27 +
deployment/old/linux-x64/dependencies.txt | 1 +
deployment/old/linux-x64/docker-build.sh | 36 ++
deployment/old/linux-x64/package.sh | 34 ++
deployment/old/macos/Dockerfile | 37 ++
deployment/old/macos/clean.sh | 27 +
deployment/old/macos/dependencies.txt | 1 +
deployment/old/macos/docker-build.sh | 36 ++
deployment/old/macos/package.sh | 34 ++
deployment/old/portable/Dockerfile | 37 ++
deployment/old/portable/clean.sh | 27 +
deployment/old/portable/dependencies.txt | 1 +
deployment/old/portable/docker-build.sh | 36 ++
deployment/old/portable/package.sh | 34 ++
.../old/ubuntu-package-arm64/Dockerfile.amd64 | 59 +++
.../old/ubuntu-package-arm64/Dockerfile.arm64 | 40 ++
deployment/old/ubuntu-package-arm64/clean.sh | 27 +
.../old/ubuntu-package-arm64/dependencies.txt | 1 +
.../old/ubuntu-package-arm64/docker-build.sh | 21 +
deployment/old/ubuntu-package-arm64/package.sh | 45 ++
deployment/old/ubuntu-package-arm64/pkg-src | 1 +
.../old/ubuntu-package-armhf/Dockerfile.amd64 | 59 +++
.../old/ubuntu-package-armhf/Dockerfile.armhf | 40 ++
deployment/old/ubuntu-package-armhf/clean.sh | 27 +
.../old/ubuntu-package-armhf/dependencies.txt | 1 +
.../old/ubuntu-package-armhf/docker-build.sh | 21 +
deployment/old/ubuntu-package-armhf/package.sh | 45 ++
deployment/old/ubuntu-package-armhf/pkg-src | 1 +
deployment/old/ubuntu-package-x64/Dockerfile | 36 ++
deployment/old/ubuntu-package-x64/clean.sh | 27 +
deployment/old/ubuntu-package-x64/dependencies.txt | 1 +
deployment/old/ubuntu-package-x64/docker-build.sh | 20 +
deployment/old/ubuntu-package-x64/package.sh | 34 ++
deployment/old/ubuntu-package-x64/pkg-src | 1 +
deployment/old/unraid/docker-templates/README.md | 15 +
.../old/unraid/docker-templates/jellyfin.xml | 57 ++
deployment/old/win-x64/Dockerfile | 37 ++
deployment/old/win-x64/clean.sh | 27 +
deployment/old/win-x64/dependencies.txt | 1 +
deployment/old/win-x64/docker-build.sh | 61 +++
deployment/old/win-x64/package.sh | 34 ++
deployment/old/win-x86/Dockerfile | 37 ++
deployment/old/win-x86/clean.sh | 27 +
deployment/old/win-x86/dependencies.txt | 1 +
deployment/old/win-x86/docker-build.sh | 61 +++
deployment/old/win-x86/package.sh | 34 ++
deployment/old/windows/build-jellyfin.ps1 | 190 +++++++
deployment/old/windows/dependencies.txt | 2 +
deployment/old/windows/dialogs/confirmation.nsddef | 24 +
deployment/old/windows/dialogs/confirmation.nsdinc | 61 +++
.../old/windows/dialogs/service-config.nsddef | 13 +
.../old/windows/dialogs/service-config.nsdinc | 56 ++
deployment/old/windows/dialogs/setuptype.nsddef | 12 +
deployment/old/windows/dialogs/setuptype.nsdinc | 50 ++
deployment/old/windows/helpers/ShowError.nsh | 10 +
deployment/old/windows/helpers/StrSlash.nsh | 47 ++
deployment/old/windows/jellyfin.nsi | 575 +++++++++++++++++++++
deployment/old/windows/legacy/install-jellyfin.ps1 | 460 +++++++++++++++++
deployment/old/windows/legacy/install.bat | 1 +
deployment/portable/Dockerfile | 37 --
deployment/portable/clean.sh | 27 -
deployment/portable/dependencies.txt | 1 -
deployment/portable/docker-build.sh | 36 --
deployment/portable/package.sh | 34 --
deployment/ubuntu-package-arm64/Dockerfile.amd64 | 59 ---
deployment/ubuntu-package-arm64/Dockerfile.arm64 | 40 --
deployment/ubuntu-package-arm64/clean.sh | 27 -
deployment/ubuntu-package-arm64/dependencies.txt | 1 -
deployment/ubuntu-package-arm64/docker-build.sh | 21 -
deployment/ubuntu-package-arm64/package.sh | 45 --
deployment/ubuntu-package-arm64/pkg-src | 1 -
deployment/ubuntu-package-armhf/Dockerfile.amd64 | 59 ---
deployment/ubuntu-package-armhf/Dockerfile.armhf | 40 --
deployment/ubuntu-package-armhf/clean.sh | 27 -
deployment/ubuntu-package-armhf/dependencies.txt | 1 -
deployment/ubuntu-package-armhf/docker-build.sh | 21 -
deployment/ubuntu-package-armhf/package.sh | 45 --
deployment/ubuntu-package-armhf/pkg-src | 1 -
deployment/ubuntu-package-x64/Dockerfile | 36 --
deployment/ubuntu-package-x64/clean.sh | 27 -
deployment/ubuntu-package-x64/dependencies.txt | 1 -
deployment/ubuntu-package-x64/docker-build.sh | 20 -
deployment/ubuntu-package-x64/package.sh | 34 --
deployment/ubuntu-package-x64/pkg-src | 1 -
deployment/unraid/docker-templates/README.md | 15 -
deployment/unraid/docker-templates/jellyfin.xml | 57 --
deployment/win-x64/Dockerfile | 37 --
deployment/win-x64/clean.sh | 27 -
deployment/win-x64/dependencies.txt | 1 -
deployment/win-x64/docker-build.sh | 61 ---
deployment/win-x64/package.sh | 34 --
deployment/win-x86/Dockerfile | 37 --
deployment/win-x86/clean.sh | 27 -
deployment/win-x86/dependencies.txt | 1 -
deployment/win-x86/docker-build.sh | 61 ---
deployment/win-x86/package.sh | 34 --
deployment/windows/build-jellyfin.ps1 | 190 -------
deployment/windows/dependencies.txt | 2 -
deployment/windows/dialogs/confirmation.nsddef | 24 -
deployment/windows/dialogs/confirmation.nsdinc | 61 ---
deployment/windows/dialogs/service-config.nsddef | 13 -
deployment/windows/dialogs/service-config.nsdinc | 56 --
deployment/windows/dialogs/setuptype.nsddef | 12 -
deployment/windows/dialogs/setuptype.nsdinc | 50 --
deployment/windows/helpers/ShowError.nsh | 10 -
deployment/windows/helpers/StrSlash.nsh | 47 --
deployment/windows/jellyfin.nsi | 575 ---------------------
deployment/windows/legacy/install-jellyfin.ps1 | 460 -----------------
deployment/windows/legacy/install.bat | 1 -
247 files changed, 4708 insertions(+), 4744 deletions(-)
delete mode 100644 deployment/README.md
delete mode 100644 deployment/centos-package-x64/Dockerfile
delete mode 100755 deployment/centos-package-x64/clean.sh
delete mode 100644 deployment/centos-package-x64/dependencies.txt
delete mode 100755 deployment/centos-package-x64/docker-build.sh
delete mode 100755 deployment/centos-package-x64/package.sh
delete mode 120000 deployment/centos-package-x64/pkg-src
delete mode 100644 deployment/debian-package-arm64/Dockerfile.amd64
delete mode 100644 deployment/debian-package-arm64/Dockerfile.arm64
delete mode 100755 deployment/debian-package-arm64/clean.sh
delete mode 100644 deployment/debian-package-arm64/dependencies.txt
delete mode 100755 deployment/debian-package-arm64/docker-build.sh
delete mode 100755 deployment/debian-package-arm64/package.sh
delete mode 120000 deployment/debian-package-arm64/pkg-src
delete mode 100644 deployment/debian-package-armhf/Dockerfile.amd64
delete mode 100644 deployment/debian-package-armhf/Dockerfile.armhf
delete mode 100755 deployment/debian-package-armhf/clean.sh
delete mode 100644 deployment/debian-package-armhf/dependencies.txt
delete mode 100755 deployment/debian-package-armhf/docker-build.sh
delete mode 100755 deployment/debian-package-armhf/package.sh
delete mode 120000 deployment/debian-package-armhf/pkg-src
delete mode 100644 deployment/debian-package-x64/Dockerfile
delete mode 100755 deployment/debian-package-x64/clean.sh
delete mode 100644 deployment/debian-package-x64/dependencies.txt
delete mode 100755 deployment/debian-package-x64/docker-build.sh
delete mode 100755 deployment/debian-package-x64/package.sh
delete mode 100755 deployment/debian-package-x64/pkg-src/bin/restart.sh
delete mode 100644 deployment/debian-package-x64/pkg-src/changelog
delete mode 100644 deployment/debian-package-x64/pkg-src/compat
delete mode 100644 deployment/debian-package-x64/pkg-src/conf/jellyfin
delete mode 100644 deployment/debian-package-x64/pkg-src/conf/jellyfin-sudoers
delete mode 100644 deployment/debian-package-x64/pkg-src/conf/jellyfin.service.conf
delete mode 100644 deployment/debian-package-x64/pkg-src/conf/logging.json
delete mode 100644 deployment/debian-package-x64/pkg-src/control
delete mode 100644 deployment/debian-package-x64/pkg-src/copyright
delete mode 100644 deployment/debian-package-x64/pkg-src/gbp.conf
delete mode 100644 deployment/debian-package-x64/pkg-src/install
delete mode 100644 deployment/debian-package-x64/pkg-src/jellyfin.init
delete mode 100644 deployment/debian-package-x64/pkg-src/jellyfin.service
delete mode 100644 deployment/debian-package-x64/pkg-src/jellyfin.upstart
delete mode 100644 deployment/debian-package-x64/pkg-src/po/POTFILES.in
delete mode 100644 deployment/debian-package-x64/pkg-src/po/templates.pot
delete mode 100644 deployment/debian-package-x64/pkg-src/postinst
delete mode 100644 deployment/debian-package-x64/pkg-src/postrm
delete mode 100644 deployment/debian-package-x64/pkg-src/preinst
delete mode 100644 deployment/debian-package-x64/pkg-src/prerm
delete mode 100755 deployment/debian-package-x64/pkg-src/rules
delete mode 100644 deployment/debian-package-x64/pkg-src/source.lintian-overrides
delete mode 100644 deployment/debian-package-x64/pkg-src/source/format
delete mode 100644 deployment/debian-package-x64/pkg-src/source/options
delete mode 100644 deployment/fedora-package-x64/Dockerfile
delete mode 100755 deployment/fedora-package-x64/clean.sh
delete mode 100644 deployment/fedora-package-x64/dependencies.txt
delete mode 100755 deployment/fedora-package-x64/docker-build.sh
delete mode 100755 deployment/fedora-package-x64/package.sh
delete mode 100644 deployment/fedora-package-x64/pkg-src/.gitignore
delete mode 100644 deployment/fedora-package-x64/pkg-src/README.md
delete mode 100644 deployment/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
delete mode 100644 deployment/fedora-package-x64/pkg-src/jellyfin.env
delete mode 100644 deployment/fedora-package-x64/pkg-src/jellyfin.override.conf
delete mode 100644 deployment/fedora-package-x64/pkg-src/jellyfin.service
delete mode 100644 deployment/fedora-package-x64/pkg-src/jellyfin.spec
delete mode 100644 deployment/fedora-package-x64/pkg-src/jellyfin.sudoers
delete mode 100755 deployment/fedora-package-x64/pkg-src/restart.sh
delete mode 100644 deployment/linux-x64/Dockerfile
delete mode 100755 deployment/linux-x64/clean.sh
delete mode 100644 deployment/linux-x64/dependencies.txt
delete mode 100755 deployment/linux-x64/docker-build.sh
delete mode 100755 deployment/linux-x64/package.sh
delete mode 100644 deployment/macos/Dockerfile
delete mode 100755 deployment/macos/clean.sh
delete mode 100644 deployment/macos/dependencies.txt
delete mode 100755 deployment/macos/docker-build.sh
delete mode 100755 deployment/macos/package.sh
create mode 100644 deployment/old/README.md
create mode 100644 deployment/old/centos-package-x64/Dockerfile
create mode 100755 deployment/old/centos-package-x64/clean.sh
create mode 100644 deployment/old/centos-package-x64/dependencies.txt
create mode 100755 deployment/old/centos-package-x64/docker-build.sh
create mode 100755 deployment/old/centos-package-x64/package.sh
create mode 120000 deployment/old/centos-package-x64/pkg-src
create mode 100644 deployment/old/debian-package-arm64/Dockerfile.amd64
create mode 100644 deployment/old/debian-package-arm64/Dockerfile.arm64
create mode 100755 deployment/old/debian-package-arm64/clean.sh
create mode 100644 deployment/old/debian-package-arm64/dependencies.txt
create mode 100755 deployment/old/debian-package-arm64/docker-build.sh
create mode 100755 deployment/old/debian-package-arm64/package.sh
create mode 120000 deployment/old/debian-package-arm64/pkg-src
create mode 100644 deployment/old/debian-package-armhf/Dockerfile.amd64
create mode 100644 deployment/old/debian-package-armhf/Dockerfile.armhf
create mode 100755 deployment/old/debian-package-armhf/clean.sh
create mode 100644 deployment/old/debian-package-armhf/dependencies.txt
create mode 100755 deployment/old/debian-package-armhf/docker-build.sh
create mode 100755 deployment/old/debian-package-armhf/package.sh
create mode 120000 deployment/old/debian-package-armhf/pkg-src
create mode 100644 deployment/old/debian-package-x64/Dockerfile
create mode 100755 deployment/old/debian-package-x64/clean.sh
create mode 100644 deployment/old/debian-package-x64/dependencies.txt
create mode 100755 deployment/old/debian-package-x64/docker-build.sh
create mode 100755 deployment/old/debian-package-x64/package.sh
create mode 100644 deployment/old/debian-package-x64/pkg-src/changelog
create mode 100644 deployment/old/debian-package-x64/pkg-src/compat
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/logging.json
create mode 100644 deployment/old/debian-package-x64/pkg-src/control
create mode 100644 deployment/old/debian-package-x64/pkg-src/copyright
create mode 100644 deployment/old/debian-package-x64/pkg-src/gbp.conf
create mode 100644 deployment/old/debian-package-x64/pkg-src/install
create mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.init
create mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.service
create mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
create mode 100644 deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
create mode 100644 deployment/old/debian-package-x64/pkg-src/po/templates.pot
create mode 100644 deployment/old/debian-package-x64/pkg-src/postinst
create mode 100644 deployment/old/debian-package-x64/pkg-src/postrm
create mode 100644 deployment/old/debian-package-x64/pkg-src/preinst
create mode 100644 deployment/old/debian-package-x64/pkg-src/prerm
create mode 100755 deployment/old/debian-package-x64/pkg-src/rules
create mode 100644 deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
create mode 100644 deployment/old/debian-package-x64/pkg-src/source/format
create mode 100644 deployment/old/debian-package-x64/pkg-src/source/options
create mode 100644 deployment/old/fedora-package-x64/Dockerfile
create mode 100755 deployment/old/fedora-package-x64/clean.sh
create mode 100644 deployment/old/fedora-package-x64/dependencies.txt
create mode 100755 deployment/old/fedora-package-x64/docker-build.sh
create mode 100755 deployment/old/fedora-package-x64/package.sh
create mode 100644 deployment/old/fedora-package-x64/pkg-src/.gitignore
create mode 100644 deployment/old/fedora-package-x64/pkg-src/README.md
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.env
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.service
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
create mode 100755 deployment/old/fedora-package-x64/pkg-src/restart.sh
create mode 100644 deployment/old/linux-x64/Dockerfile
create mode 100755 deployment/old/linux-x64/clean.sh
create mode 100644 deployment/old/linux-x64/dependencies.txt
create mode 100755 deployment/old/linux-x64/docker-build.sh
create mode 100755 deployment/old/linux-x64/package.sh
create mode 100644 deployment/old/macos/Dockerfile
create mode 100755 deployment/old/macos/clean.sh
create mode 100644 deployment/old/macos/dependencies.txt
create mode 100755 deployment/old/macos/docker-build.sh
create mode 100755 deployment/old/macos/package.sh
create mode 100644 deployment/old/portable/Dockerfile
create mode 100755 deployment/old/portable/clean.sh
create mode 100644 deployment/old/portable/dependencies.txt
create mode 100755 deployment/old/portable/docker-build.sh
create mode 100755 deployment/old/portable/package.sh
create mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.amd64
create mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.arm64
create mode 100755 deployment/old/ubuntu-package-arm64/clean.sh
create mode 100644 deployment/old/ubuntu-package-arm64/dependencies.txt
create mode 100755 deployment/old/ubuntu-package-arm64/docker-build.sh
create mode 100755 deployment/old/ubuntu-package-arm64/package.sh
create mode 120000 deployment/old/ubuntu-package-arm64/pkg-src
create mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.amd64
create mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.armhf
create mode 100755 deployment/old/ubuntu-package-armhf/clean.sh
create mode 100644 deployment/old/ubuntu-package-armhf/dependencies.txt
create mode 100755 deployment/old/ubuntu-package-armhf/docker-build.sh
create mode 100755 deployment/old/ubuntu-package-armhf/package.sh
create mode 120000 deployment/old/ubuntu-package-armhf/pkg-src
create mode 100644 deployment/old/ubuntu-package-x64/Dockerfile
create mode 100755 deployment/old/ubuntu-package-x64/clean.sh
create mode 100644 deployment/old/ubuntu-package-x64/dependencies.txt
create mode 100755 deployment/old/ubuntu-package-x64/docker-build.sh
create mode 100755 deployment/old/ubuntu-package-x64/package.sh
create mode 120000 deployment/old/ubuntu-package-x64/pkg-src
create mode 100644 deployment/old/unraid/docker-templates/README.md
create mode 100644 deployment/old/unraid/docker-templates/jellyfin.xml
create mode 100644 deployment/old/win-x64/Dockerfile
create mode 100755 deployment/old/win-x64/clean.sh
create mode 100644 deployment/old/win-x64/dependencies.txt
create mode 100755 deployment/old/win-x64/docker-build.sh
create mode 100755 deployment/old/win-x64/package.sh
create mode 100644 deployment/old/win-x86/Dockerfile
create mode 100755 deployment/old/win-x86/clean.sh
create mode 100644 deployment/old/win-x86/dependencies.txt
create mode 100755 deployment/old/win-x86/docker-build.sh
create mode 100755 deployment/old/win-x86/package.sh
create mode 100644 deployment/old/windows/build-jellyfin.ps1
create mode 100644 deployment/old/windows/dependencies.txt
create mode 100644 deployment/old/windows/dialogs/confirmation.nsddef
create mode 100644 deployment/old/windows/dialogs/confirmation.nsdinc
create mode 100644 deployment/old/windows/dialogs/service-config.nsddef
create mode 100644 deployment/old/windows/dialogs/service-config.nsdinc
create mode 100644 deployment/old/windows/dialogs/setuptype.nsddef
create mode 100644 deployment/old/windows/dialogs/setuptype.nsdinc
create mode 100644 deployment/old/windows/helpers/ShowError.nsh
create mode 100644 deployment/old/windows/helpers/StrSlash.nsh
create mode 100644 deployment/old/windows/jellyfin.nsi
create mode 100644 deployment/old/windows/legacy/install-jellyfin.ps1
create mode 100644 deployment/old/windows/legacy/install.bat
delete mode 100644 deployment/portable/Dockerfile
delete mode 100755 deployment/portable/clean.sh
delete mode 100644 deployment/portable/dependencies.txt
delete mode 100755 deployment/portable/docker-build.sh
delete mode 100755 deployment/portable/package.sh
delete mode 100644 deployment/ubuntu-package-arm64/Dockerfile.amd64
delete mode 100644 deployment/ubuntu-package-arm64/Dockerfile.arm64
delete mode 100755 deployment/ubuntu-package-arm64/clean.sh
delete mode 100644 deployment/ubuntu-package-arm64/dependencies.txt
delete mode 100755 deployment/ubuntu-package-arm64/docker-build.sh
delete mode 100755 deployment/ubuntu-package-arm64/package.sh
delete mode 120000 deployment/ubuntu-package-arm64/pkg-src
delete mode 100644 deployment/ubuntu-package-armhf/Dockerfile.amd64
delete mode 100644 deployment/ubuntu-package-armhf/Dockerfile.armhf
delete mode 100755 deployment/ubuntu-package-armhf/clean.sh
delete mode 100644 deployment/ubuntu-package-armhf/dependencies.txt
delete mode 100755 deployment/ubuntu-package-armhf/docker-build.sh
delete mode 100755 deployment/ubuntu-package-armhf/package.sh
delete mode 120000 deployment/ubuntu-package-armhf/pkg-src
delete mode 100644 deployment/ubuntu-package-x64/Dockerfile
delete mode 100755 deployment/ubuntu-package-x64/clean.sh
delete mode 100644 deployment/ubuntu-package-x64/dependencies.txt
delete mode 100755 deployment/ubuntu-package-x64/docker-build.sh
delete mode 100755 deployment/ubuntu-package-x64/package.sh
delete mode 120000 deployment/ubuntu-package-x64/pkg-src
delete mode 100644 deployment/unraid/docker-templates/README.md
delete mode 100644 deployment/unraid/docker-templates/jellyfin.xml
delete mode 100644 deployment/win-x64/Dockerfile
delete mode 100755 deployment/win-x64/clean.sh
delete mode 100644 deployment/win-x64/dependencies.txt
delete mode 100755 deployment/win-x64/docker-build.sh
delete mode 100755 deployment/win-x64/package.sh
delete mode 100644 deployment/win-x86/Dockerfile
delete mode 100755 deployment/win-x86/clean.sh
delete mode 100644 deployment/win-x86/dependencies.txt
delete mode 100755 deployment/win-x86/docker-build.sh
delete mode 100755 deployment/win-x86/package.sh
delete mode 100644 deployment/windows/build-jellyfin.ps1
delete mode 100644 deployment/windows/dependencies.txt
delete mode 100644 deployment/windows/dialogs/confirmation.nsddef
delete mode 100644 deployment/windows/dialogs/confirmation.nsdinc
delete mode 100644 deployment/windows/dialogs/service-config.nsddef
delete mode 100644 deployment/windows/dialogs/service-config.nsdinc
delete mode 100644 deployment/windows/dialogs/setuptype.nsddef
delete mode 100644 deployment/windows/dialogs/setuptype.nsdinc
delete mode 100644 deployment/windows/helpers/ShowError.nsh
delete mode 100644 deployment/windows/helpers/StrSlash.nsh
delete mode 100644 deployment/windows/jellyfin.nsi
delete mode 100644 deployment/windows/legacy/install-jellyfin.ps1
delete mode 100644 deployment/windows/legacy/install.bat
diff --git a/deployment/README.md b/deployment/README.md
deleted file mode 100644
index a805f59ca3..0000000000
--- a/deployment/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# 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 `, 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 `.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 `/pkg-dist` directory.
-
-* Output files will be moved to the directory `jellyfin-build/` one directory above the repository root upon completion.
diff --git a/deployment/centos-package-x64/Dockerfile b/deployment/centos-package-x64/Dockerfile
deleted file mode 100644
index 08219a2e4a..0000000000
--- a/deployment/centos-package-x64/Dockerfile
+++ /dev/null
@@ -1,39 +0,0 @@
-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/centos-package-x64/clean.sh b/deployment/centos-package-x64/clean.sh
deleted file mode 100755
index 31455de0d4..0000000000
--- a/deployment/centos-package-x64/clean.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/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/centos-package-x64/dependencies.txt b/deployment/centos-package-x64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/centos-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/centos-package-x64/docker-build.sh b/deployment/centos-package-x64/docker-build.sh
deleted file mode 100755
index 62dd144e50..0000000000
--- a/deployment/centos-package-x64/docker-build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/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/centos-package-x64/package.sh b/deployment/centos-package-x64/package.sh
deleted file mode 100755
index 1b983f49d9..0000000000
--- a/deployment/centos-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/centos-package-x64/pkg-src b/deployment/centos-package-x64/pkg-src
deleted file mode 120000
index 3ff4d3cbf5..0000000000
--- a/deployment/centos-package-x64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../fedora-package-x64/pkg-src/
\ No newline at end of file
diff --git a/deployment/debian-package-arm64/Dockerfile.amd64 b/deployment/debian-package-arm64/Dockerfile.amd64
deleted file mode 100644
index b63e08b7dd..0000000000
--- a/deployment/debian-package-arm64/Dockerfile.amd64
+++ /dev/null
@@ -1,43 +0,0 @@
-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/debian-package-arm64/Dockerfile.arm64 b/deployment/debian-package-arm64/Dockerfile.arm64
deleted file mode 100644
index 9ca4868441..0000000000
--- a/deployment/debian-package-arm64/Dockerfile.arm64
+++ /dev/null
@@ -1,34 +0,0 @@
-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/debian-package-arm64/clean.sh b/deployment/debian-package-arm64/clean.sh
deleted file mode 100755
index e7bfdf8b4b..0000000000
--- a/deployment/debian-package-arm64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/debian-package-arm64/dependencies.txt b/deployment/debian-package-arm64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/debian-package-arm64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/debian-package-arm64/docker-build.sh b/deployment/debian-package-arm64/docker-build.sh
deleted file mode 100755
index 67ab6bd74b..0000000000
--- a/deployment/debian-package-arm64/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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/debian-package-arm64/package.sh b/deployment/debian-package-arm64/package.sh
deleted file mode 100755
index 2091982187..0000000000
--- a/deployment/debian-package-arm64/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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/debian-package-arm64/pkg-src b/deployment/debian-package-arm64/pkg-src
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/debian-package-arm64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../debian-package-x64/pkg-src
\ No newline at end of file
diff --git a/deployment/debian-package-armhf/Dockerfile.amd64 b/deployment/debian-package-armhf/Dockerfile.amd64
deleted file mode 100644
index 1b64b53148..0000000000
--- a/deployment/debian-package-armhf/Dockerfile.amd64
+++ /dev/null
@@ -1,42 +0,0 @@
-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/debian-package-armhf/Dockerfile.armhf b/deployment/debian-package-armhf/Dockerfile.armhf
deleted file mode 100644
index dd398b5aa5..0000000000
--- a/deployment/debian-package-armhf/Dockerfile.armhf
+++ /dev/null
@@ -1,34 +0,0 @@
-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/debian-package-armhf/clean.sh b/deployment/debian-package-armhf/clean.sh
deleted file mode 100755
index 35a3d3e9ad..0000000000
--- a/deployment/debian-package-armhf/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/debian-package-armhf/dependencies.txt b/deployment/debian-package-armhf/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/debian-package-armhf/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/debian-package-armhf/docker-build.sh b/deployment/debian-package-armhf/docker-build.sh
deleted file mode 100755
index 1bd7fb2911..0000000000
--- a/deployment/debian-package-armhf/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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/debian-package-armhf/package.sh b/deployment/debian-package-armhf/package.sh
deleted file mode 100755
index 4a27dd8283..0000000000
--- a/deployment/debian-package-armhf/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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/debian-package-armhf/pkg-src b/deployment/debian-package-armhf/pkg-src
deleted file mode 120000
index 0bb6d55249..0000000000
--- a/deployment/debian-package-armhf/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../debian-package-x64/pkg-src/
\ No newline at end of file
diff --git a/deployment/debian-package-x64/Dockerfile b/deployment/debian-package-x64/Dockerfile
deleted file mode 100644
index e863d1edf9..0000000000
--- a/deployment/debian-package-x64/Dockerfile
+++ /dev/null
@@ -1,34 +0,0 @@
-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/debian-package-x64/clean.sh b/deployment/debian-package-x64/clean.sh
deleted file mode 100755
index 4e507bcb27..0000000000
--- a/deployment/debian-package-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/debian-package-x64/dependencies.txt b/deployment/debian-package-x64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/debian-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/debian-package-x64/docker-build.sh b/deployment/debian-package-x64/docker-build.sh
deleted file mode 100755
index 962a522ebc..0000000000
--- a/deployment/debian-package-x64/docker-build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/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/debian-package-x64/package.sh b/deployment/debian-package-x64/package.sh
deleted file mode 100755
index 5a416959ab..0000000000
--- a/deployment/debian-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/debian-package-x64/pkg-src/bin/restart.sh b/deployment/debian-package-x64/pkg-src/bin/restart.sh
deleted file mode 100755
index 9b64b6d728..0000000000
--- a/deployment/debian-package-x64/pkg-src/bin/restart.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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/debian-package-x64/pkg-src/changelog b/deployment/debian-package-x64/pkg-src/changelog
deleted file mode 100644
index 51c4822370..0000000000
--- a/deployment/debian-package-x64/pkg-src/changelog
+++ /dev/null
@@ -1,59 +0,0 @@
-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 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 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 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 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 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 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 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 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 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 Fri, 19 Apr 2019 14:24:29 -0400
diff --git a/deployment/debian-package-x64/pkg-src/compat b/deployment/debian-package-x64/pkg-src/compat
deleted file mode 100644
index 45a4fb75db..0000000000
--- a/deployment/debian-package-x64/pkg-src/compat
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/deployment/debian-package-x64/pkg-src/conf/jellyfin b/deployment/debian-package-x64/pkg-src/conf/jellyfin
deleted file mode 100644
index c6e595f15a..0000000000
--- a/deployment/debian-package-x64/pkg-src/conf/jellyfin
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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/debian-package-x64/pkg-src/conf/jellyfin-sudoers b/deployment/debian-package-x64/pkg-src/conf/jellyfin-sudoers
deleted file mode 100644
index b481ba4ad4..0000000000
--- a/deployment/debian-package-x64/pkg-src/conf/jellyfin-sudoers
+++ /dev/null
@@ -1,37 +0,0 @@
-#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/debian-package-x64/pkg-src/conf/jellyfin.service.conf b/deployment/debian-package-x64/pkg-src/conf/jellyfin.service.conf
deleted file mode 100644
index 1b69dd74ef..0000000000
--- a/deployment/debian-package-x64/pkg-src/conf/jellyfin.service.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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/debian-package-x64/pkg-src/conf/logging.json b/deployment/debian-package-x64/pkg-src/conf/logging.json
deleted file mode 100644
index f32b2089eb..0000000000
--- a/deployment/debian-package-x64/pkg-src/conf/logging.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "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/debian-package-x64/pkg-src/control b/deployment/debian-package-x64/pkg-src/control
deleted file mode 100644
index 13fd3ecabb..0000000000
--- a/deployment/debian-package-x64/pkg-src/control
+++ /dev/null
@@ -1,31 +0,0 @@
-Source: jellyfin
-Section: misc
-Priority: optional
-Maintainer: Jellyfin Team
-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/debian-package-x64/pkg-src/copyright b/deployment/debian-package-x64/pkg-src/copyright
deleted file mode 100644
index 0d7a2a6007..0000000000
--- a/deployment/debian-package-x64/pkg-src/copyright
+++ /dev/null
@@ -1,29 +0,0 @@
-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
-Copyright: 2014 Carlos Hernandez
-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
- .
- 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/debian-package-x64/pkg-src/gbp.conf b/deployment/debian-package-x64/pkg-src/gbp.conf
deleted file mode 100644
index 60b3d28723..0000000000
--- a/deployment/debian-package-x64/pkg-src/gbp.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-[DEFAULT]
-pristine-tar = False
-cleaner = fakeroot debian/rules clean
-
-[import-orig]
-filter = [ ".git*", ".hg*", ".vs*", ".vscode*" ]
diff --git a/deployment/debian-package-x64/pkg-src/install b/deployment/debian-package-x64/pkg-src/install
deleted file mode 100644
index 994322d141..0000000000
--- a/deployment/debian-package-x64/pkg-src/install
+++ /dev/null
@@ -1,6 +0,0 @@
-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/debian-package-x64/pkg-src/jellyfin.init b/deployment/debian-package-x64/pkg-src/jellyfin.init
deleted file mode 100644
index 7f5642bac1..0000000000
--- a/deployment/debian-package-x64/pkg-src/jellyfin.init
+++ /dev/null
@@ -1,61 +0,0 @@
-### 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/debian-package-x64/pkg-src/jellyfin.service b/deployment/debian-package-x64/pkg-src/jellyfin.service
deleted file mode 100644
index 1305e238b0..0000000000
--- a/deployment/debian-package-x64/pkg-src/jellyfin.service
+++ /dev/null
@@ -1,14 +0,0 @@
-[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/debian-package-x64/pkg-src/jellyfin.upstart b/deployment/debian-package-x64/pkg-src/jellyfin.upstart
deleted file mode 100644
index ef5bc9bcaf..0000000000
--- a/deployment/debian-package-x64/pkg-src/jellyfin.upstart
+++ /dev/null
@@ -1,20 +0,0 @@
-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/debian-package-x64/pkg-src/po/POTFILES.in b/deployment/debian-package-x64/pkg-src/po/POTFILES.in
deleted file mode 100644
index cef83a3407..0000000000
--- a/deployment/debian-package-x64/pkg-src/po/POTFILES.in
+++ /dev/null
@@ -1 +0,0 @@
-[type: gettext/rfc822deb] templates
diff --git a/deployment/debian-package-x64/pkg-src/po/templates.pot b/deployment/debian-package-x64/pkg-src/po/templates.pot
deleted file mode 100644
index 2cdcae4173..0000000000
--- a/deployment/debian-package-x64/pkg-src/po/templates.pot
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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 , 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 \n"
-"Language-Team: LANGUAGE \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/debian-package-x64/pkg-src/postinst b/deployment/debian-package-x64/pkg-src/postinst
deleted file mode 100644
index 860222e051..0000000000
--- a/deployment/debian-package-x64/pkg-src/postinst
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/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/debian-package-x64/pkg-src/postrm b/deployment/debian-package-x64/pkg-src/postrm
deleted file mode 100644
index 1d00a984ec..0000000000
--- a/deployment/debian-package-x64/pkg-src/postrm
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/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/debian-package-x64/pkg-src/preinst b/deployment/debian-package-x64/pkg-src/preinst
deleted file mode 100644
index 2713fb9b80..0000000000
--- a/deployment/debian-package-x64/pkg-src/preinst
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/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/debian-package-x64/pkg-src/prerm b/deployment/debian-package-x64/pkg-src/prerm
deleted file mode 100644
index e965cb7d71..0000000000
--- a/deployment/debian-package-x64/pkg-src/prerm
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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/debian-package-x64/pkg-src/rules b/deployment/debian-package-x64/pkg-src/rules
deleted file mode 100755
index c2d57dfb22..0000000000
--- a/deployment/debian-package-x64/pkg-src/rules
+++ /dev/null
@@ -1,66 +0,0 @@
-#! /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/debian-package-x64/pkg-src/source.lintian-overrides b/deployment/debian-package-x64/pkg-src/source.lintian-overrides
deleted file mode 100644
index aeb332f13a..0000000000
--- a/deployment/debian-package-x64/pkg-src/source.lintian-overrides
+++ /dev/null
@@ -1,3 +0,0 @@
-# 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/debian-package-x64/pkg-src/source/format b/deployment/debian-package-x64/pkg-src/source/format
deleted file mode 100644
index d3827e75a5..0000000000
--- a/deployment/debian-package-x64/pkg-src/source/format
+++ /dev/null
@@ -1 +0,0 @@
-1.0
diff --git a/deployment/debian-package-x64/pkg-src/source/options b/deployment/debian-package-x64/pkg-src/source/options
deleted file mode 100644
index 17b5373d5e..0000000000
--- a/deployment/debian-package-x64/pkg-src/source/options
+++ /dev/null
@@ -1,11 +0,0 @@
-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/fedora-package-x64/Dockerfile b/deployment/fedora-package-x64/Dockerfile
deleted file mode 100644
index 87120f3a05..0000000000
--- a/deployment/fedora-package-x64/Dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-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/fedora-package-x64/clean.sh b/deployment/fedora-package-x64/clean.sh
deleted file mode 100755
index 700c8f1bb3..0000000000
--- a/deployment/fedora-package-x64/clean.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/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/fedora-package-x64/dependencies.txt b/deployment/fedora-package-x64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/fedora-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/fedora-package-x64/docker-build.sh b/deployment/fedora-package-x64/docker-build.sh
deleted file mode 100755
index 740e8d35ca..0000000000
--- a/deployment/fedora-package-x64/docker-build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/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/fedora-package-x64/package.sh b/deployment/fedora-package-x64/package.sh
deleted file mode 100755
index ae6962dd1f..0000000000
--- a/deployment/fedora-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/fedora-package-x64/pkg-src/.gitignore b/deployment/fedora-package-x64/pkg-src/.gitignore
deleted file mode 100644
index 6019b98c22..0000000000
--- a/deployment/fedora-package-x64/pkg-src/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.rpm
-*.zip
-*.tar.gz
\ No newline at end of file
diff --git a/deployment/fedora-package-x64/pkg-src/README.md b/deployment/fedora-package-x64/pkg-src/README.md
deleted file mode 100644
index 7ed6f7efc6..0000000000
--- a/deployment/fedora-package-x64/pkg-src/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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/fedora-package-x64/pkg-src/jellyfin-firewalld.xml b/deployment/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
deleted file mode 100644
index 538c5d65f8..0000000000
--- a/deployment/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- Jellyfin
- The Free Software Media System.
-
-
-
-
-
diff --git a/deployment/fedora-package-x64/pkg-src/jellyfin.env b/deployment/fedora-package-x64/pkg-src/jellyfin.env
deleted file mode 100644
index de48f13af5..0000000000
--- a/deployment/fedora-package-x64/pkg-src/jellyfin.env
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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/fedora-package-x64/pkg-src/jellyfin.override.conf b/deployment/fedora-package-x64/pkg-src/jellyfin.override.conf
deleted file mode 100644
index 8652450bb4..0000000000
--- a/deployment/fedora-package-x64/pkg-src/jellyfin.override.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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/fedora-package-x64/pkg-src/jellyfin.service b/deployment/fedora-package-x64/pkg-src/jellyfin.service
deleted file mode 100644
index f3dc594b1c..0000000000
--- a/deployment/fedora-package-x64/pkg-src/jellyfin.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[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/fedora-package-x64/pkg-src/jellyfin.spec b/deployment/fedora-package-x64/pkg-src/jellyfin.spec
deleted file mode 100644
index 33c6f6f648..0000000000
--- a/deployment/fedora-package-x64/pkg-src/jellyfin.spec
+++ /dev/null
@@ -1,181 +0,0 @@
-%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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- New upstream version 10.3.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.0
diff --git a/deployment/fedora-package-x64/pkg-src/jellyfin.sudoers b/deployment/fedora-package-x64/pkg-src/jellyfin.sudoers
deleted file mode 100644
index dd245af4b8..0000000000
--- a/deployment/fedora-package-x64/pkg-src/jellyfin.sudoers
+++ /dev/null
@@ -1,19 +0,0 @@
-# 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/fedora-package-x64/pkg-src/restart.sh b/deployment/fedora-package-x64/pkg-src/restart.sh
deleted file mode 100755
index 9b64b6d728..0000000000
--- a/deployment/fedora-package-x64/pkg-src/restart.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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/linux-x64/Dockerfile b/deployment/linux-x64/Dockerfile
deleted file mode 100644
index c47057546d..0000000000
--- a/deployment/linux-x64/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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/linux-x64/clean.sh b/deployment/linux-x64/clean.sh
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/linux-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/linux-x64/dependencies.txt b/deployment/linux-x64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/linux-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/linux-x64/docker-build.sh b/deployment/linux-x64/docker-build.sh
deleted file mode 100755
index e33328a36a..0000000000
--- a/deployment/linux-x64/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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/linux-x64/package.sh b/deployment/linux-x64/package.sh
deleted file mode 100755
index dfe8a9aa4a..0000000000
--- a/deployment/linux-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/macos/Dockerfile b/deployment/macos/Dockerfile
deleted file mode 100644
index b522df8848..0000000000
--- a/deployment/macos/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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/macos/clean.sh b/deployment/macos/clean.sh
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/macos/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/macos/dependencies.txt b/deployment/macos/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/macos/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/macos/docker-build.sh b/deployment/macos/docker-build.sh
deleted file mode 100755
index f9417388d7..0000000000
--- a/deployment/macos/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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/macos/package.sh b/deployment/macos/package.sh
deleted file mode 100755
index 464c0d382f..0000000000
--- a/deployment/macos/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/README.md b/deployment/old/README.md
new file mode 100644
index 0000000000..a805f59ca3
--- /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 `, 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 `.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 `/pkg-dist` directory.
+
+* Output files will be moved to the directory `jellyfin-build/` 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 0000000000..08219a2e4a
--- /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 0000000000..31455de0d4
--- /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 0000000000..bdb9670965
--- /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 0000000000..62dd144e50
--- /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 0000000000..1b983f49d9
--- /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 0000000000..3ff4d3cbf5
--- /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 0000000000..b63e08b7dd
--- /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 0000000000..9ca4868441
--- /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 0000000000..e7bfdf8b4b
--- /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 0000000000..bdb9670965
--- /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 0000000000..67ab6bd74b
--- /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 0000000000..2091982187
--- /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 0000000000..4c695fea17
--- /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 0000000000..1b64b53148
--- /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 0000000000..dd398b5aa5
--- /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 0000000000..35a3d3e9ad
--- /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 0000000000..bdb9670965
--- /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 0000000000..1bd7fb2911
--- /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 0000000000..4a27dd8283
--- /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 0000000000..0bb6d55249
--- /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 0000000000..e863d1edf9
--- /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 0000000000..4e507bcb27
--- /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 0000000000..bdb9670965
--- /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 0000000000..962a522ebc
--- /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 0000000000..5a416959ab
--- /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 0000000000..51c4822370
--- /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 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 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 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 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 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 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 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 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 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 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 0000000000..45a4fb75db
--- /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 0000000000..c6e595f15a
--- /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 0000000000..b481ba4ad4
--- /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 0000000000..1b69dd74ef
--- /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 0000000000..f32b2089eb
--- /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 0000000000..13fd3ecabb
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/control
@@ -0,0 +1,31 @@
+Source: jellyfin
+Section: misc
+Priority: optional
+Maintainer: Jellyfin Team
+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 0000000000..0d7a2a6007
--- /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
+Copyright: 2014 Carlos Hernandez
+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
+ .
+ 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 0000000000..60b3d28723
--- /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 0000000000..994322d141
--- /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 0000000000..7f5642bac1
--- /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 0000000000..1305e238b0
--- /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 0000000000..ef5bc9bcaf
--- /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 0000000000..cef83a3407
--- /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 0000000000..2cdcae4173
--- /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 , 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 \n"
+"Language-Team: LANGUAGE \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 0000000000..860222e051
--- /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 0000000000..1d00a984ec
--- /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 0000000000..2713fb9b80
--- /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 0000000000..e965cb7d71
--- /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 0000000000..c2d57dfb22
--- /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 0000000000..aeb332f13a
--- /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 0000000000..d3827e75a5
--- /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 0000000000..17b5373d5e
--- /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 0000000000..87120f3a05
--- /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 0000000000..700c8f1bb3
--- /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 0000000000..bdb9670965
--- /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 0000000000..740e8d35ca
--- /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 0000000000..ae6962dd1f
--- /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 0000000000..6019b98c22
--- /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 0000000000..7ed6f7efc6
--- /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 0000000000..538c5d65f8
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
@@ -0,0 +1,9 @@
+
+
+ Jellyfin
+ The Free Software Media System.
+
+
+
+
+
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 0000000000..de48f13af5
--- /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 0000000000..8652450bb4
--- /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 0000000000..f3dc594b1c
--- /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 0000000000..33c6f6f648
--- /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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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 0000000000..dd245af4b8
--- /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 0000000000..9b64b6d728
--- /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 0000000000..c47057546d
--- /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 0000000000..c07501a7bb
--- /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 0000000000..bdb9670965
--- /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 0000000000..e33328a36a
--- /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 0000000000..dfe8a9aa4a
--- /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 0000000000..b522df8848
--- /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 0000000000..c07501a7bb
--- /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 0000000000..bdb9670965
--- /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 0000000000..f9417388d7
--- /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 0000000000..464c0d382f
--- /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 0000000000..965eb82b86
--- /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 0000000000..c07501a7bb
--- /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 0000000000..bdb9670965
--- /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 0000000000..094190bbf6
--- /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 0000000000..0ceb54dda1
--- /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 0000000000..b11994a18a
--- /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 0000000000..8f004b2f1a
--- /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 0000000000..82d427f9e5
--- /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 0000000000..bdb9670965
--- /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 0000000000..67ab6bd74b
--- /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 0000000000..d1140a7274
--- /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 0000000000..4c695fea17
--- /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 0000000000..e475b14389
--- /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 0000000000..0e71fa6938
--- /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 0000000000..82d427f9e5
--- /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 0000000000..bdb9670965
--- /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 0000000000..1bd7fb2911
--- /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 0000000000..2ceb3e8165
--- /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 0000000000..4c695fea17
--- /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 0000000000..e2dda6392c
--- /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 0000000000..82d427f9e5
--- /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 0000000000..bdb9670965
--- /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 0000000000..962a522ebc
--- /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 0000000000..08c003778b
--- /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 0000000000..0bb6d55249
--- /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 0000000000..2c268e8b3e
--- /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 0000000000..57b4cc5ae1
--- /dev/null
+++ b/deployment/old/unraid/docker-templates/jellyfin.xml
@@ -0,0 +1,57 @@
+
+
+ https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml
+ False
+ MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos
+ Jellyfin
+
+ 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.
+
+
+ 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!
+
+ https://www.reddit.com/r/jellyfin/
+ https://hub.docker.com/r/jellyfin/jellyfin/
+ https://github.com/jellyfin/jellyfin/>
+ jellyfin/jellyfin
+ https://jellyfin.media/
+ true
+ false
+
+ host
+
+
+ 8096
+ 8096
+ tcp
+
+
+
+
+
+ /mnt/user/appdata/Jellyfin
+ /config
+ rw
+
+
+ /mnt/user
+ /media
+ rw
+
+
+ /mnt/user/appdata/Jellyfin/cache/
+ /cache
+ rw
+
+
+ http://[IP]:[PORT:8096]/
+ https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png
+
+
diff --git a/deployment/old/win-x64/Dockerfile b/deployment/old/win-x64/Dockerfile
new file mode 100644
index 0000000000..8a33749541
--- /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 0000000000..6c183f3371
--- /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 0000000000..bdb9670965
--- /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 0000000000..79e5fb0bcd
--- /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 0000000000..a8ab190fa5
--- /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 0000000000..f8dc5be83d
--- /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 0000000000..8b78c5e4b6
--- /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 0000000000..bdb9670965
--- /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 0000000000..977dcf78fa
--- /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 0000000000..65e7e2928c
--- /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}"
diff --git a/deployment/old/windows/build-jellyfin.ps1 b/deployment/old/windows/build-jellyfin.ps1
new file mode 100644
index 0000000000..c762137a75
--- /dev/null
+++ b/deployment/old/windows/build-jellyfin.ps1
@@ -0,0 +1,190 @@
+[CmdletBinding()]
+param(
+ [switch]$MakeNSIS,
+ [switch]$InstallNSIS,
+ [switch]$InstallFFMPEG,
+ [switch]$InstallNSSM,
+ [switch]$SkipJellyfinBuild,
+ [switch]$GenerateZip,
+ [string]$InstallLocation = "./dist/jellyfin-win-nsis",
+ [string]$UXLocation = "../jellyfin-ux",
+ [switch]$InstallTrayApp,
+ [ValidateSet('Debug','Release')][string]$BuildType = 'Release',
+ [ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
+ [ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
+ [ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
+)
+
+$ProgressPreference = 'SilentlyContinue' # Speedup all downloads by hiding progress bars.
+
+#PowershellCore and *nix check to make determine which temp dir to use.
+if(($PSVersionTable.PSEdition -eq 'Core') -and (-not $IsWindows)){
+ $TempDir = mktemp -d
+}else{
+ $TempDir = $env:Temp
+}
+#Create staging dir
+New-Item -ItemType Directory -Force -Path $InstallLocation
+$ResolvedInstallLocation = Resolve-Path $InstallLocation
+$ResolvedUXLocation = Resolve-Path $UXLocation
+
+function Build-JellyFin {
+ if(($Architecture -eq 'arm64') -and ($WindowsVersion -ne 'win10')){
+ Write-Error "arm64 only supported with Windows10 Version"
+ exit
+ }
+ if(($Architecture -eq 'arm') -and ($WindowsVersion -notin @('win10','win81','win8'))){
+ Write-Error "arm only supported with Windows 8 or higher"
+ exit
+ }
+ Write-Verbose "windowsversion-Architecture: $windowsversion-$Architecture"
+ Write-Verbose "InstallLocation: $ResolvedInstallLocation"
+ Write-Verbose "DotNetVerbosity: $DotNetVerbosity"
+ dotnet publish --self-contained -c $BuildType --output $ResolvedInstallLocation -v $DotNetVerbosity -p:GenerateDocumentationFile=false -p:DebugSymbols=false -p:DebugType=none --runtime `"$windowsversion-$Architecture`" Jellyfin.Server
+}
+
+function Install-FFMPEG {
+ param(
+ [string]$ResolvedInstallLocation,
+ [string]$Architecture,
+ [string]$FFMPEGVersionX86 = "ffmpeg-4.2.1-win32-shared"
+ )
+ Write-Verbose "Checking Architecture"
+ if($Architecture -notin @('x86','x64')){
+ Write-Warning "No builds available for your selected architecture of $Architecture"
+ Write-Warning "FFMPEG will not be installed"
+ }elseif($Architecture -eq 'x64'){
+ Write-Verbose "Downloading 64 bit FFMPEG"
+ Invoke-WebRequest -Uri https://repo.jellyfin.org/releases/server/windows/ffmpeg/jellyfin-ffmpeg.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
+ }else{
+ Write-Verbose "Downloading 32 bit FFMPEG"
+ Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/shared/$FFMPEGVersionX86.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
+ }
+
+ Expand-Archive "$tempdir/ffmpeg.zip" -DestinationPath "$tempdir/ffmpeg/" -Force | Write-Verbose
+ if($Architecture -eq 'x64'){
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/ffmpeg" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }else{
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/ffmpeg/$FFMPEGVersionX86/bin" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }
+ Remove-Item "$tempdir/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
+ Remove-Item "$tempdir/ffmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
+}
+
+function Install-NSSM {
+ param(
+ [string]$ResolvedInstallLocation,
+ [string]$Architecture
+ )
+ Write-Verbose "Checking Architecture"
+ if($Architecture -notin @('x86','x64')){
+ Write-Warning "No builds available for your selected architecture of $Architecture"
+ Write-Warning "NSSM will not be installed"
+ }else{
+ Write-Verbose "Downloading NSSM"
+ # [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ # Temporary workaround, file is hosted in an azure blob with a custom domain in front for brevity
+ Invoke-WebRequest -Uri http://files.evilt.win/nssm/nssm-2.24-101-g897c7ad.zip -UseBasicParsing -OutFile "$tempdir/nssm.zip" | Write-Verbose
+ }
+
+ Expand-Archive "$tempdir/nssm.zip" -DestinationPath "$tempdir/nssm/" -Force | Write-Verbose
+ if($Architecture -eq 'x64'){
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win64" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }else{
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win32" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }
+ Remove-Item "$tempdir/nssm/" -Recurse -Force -ErrorAction Continue | Write-Verbose
+ Remove-Item "$tempdir/nssm.zip" -Force -ErrorAction Continue | Write-Verbose
+}
+
+function Make-NSIS {
+ param(
+ [string]$ResolvedInstallLocation
+ )
+
+ $env:InstallLocation = $ResolvedInstallLocation
+ if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
+ & "$tempdir/nsis/nsis-3.04/makensis.exe" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
+ } else {
+ & "makensis" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
+ }
+ Copy-Item .\deployment\windows\jellyfin_*.exe $ResolvedInstallLocation\..\
+}
+
+
+function Install-NSIS {
+ Write-Verbose "Downloading NSIS"
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ Invoke-WebRequest -Uri https://nchc.dl.sourceforge.net/project/nsis/NSIS%203/3.04/nsis-3.04.zip -UseBasicParsing -OutFile "$tempdir/nsis.zip" | Write-Verbose
+
+ Expand-Archive "$tempdir/nsis.zip" -DestinationPath "$tempdir/nsis/" -Force | Write-Verbose
+}
+
+function Cleanup-NSIS {
+ Remove-Item "$tempdir/nsis/" -Recurse -Force -ErrorAction Continue | Write-Verbose
+ Remove-Item "$tempdir/nsis.zip" -Force -ErrorAction Continue | Write-Verbose
+}
+
+function Install-TrayApp {
+ param(
+ [string]$ResolvedInstallLocation,
+ [string]$Architecture
+ )
+ Write-Verbose "Checking Architecture"
+ if($Architecture -ne 'x64'){
+ Write-Warning "No builds available for your selected architecture of $Architecture"
+ Write-Warning "The tray app will not be available."
+ }else{
+ Write-Verbose "Downloading Tray App and copying to Jellyfin location"
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ Invoke-WebRequest -Uri https://github.com/jellyfin/jellyfin-windows-tray/releases/latest/download/JellyfinTray.exe -UseBasicParsing -OutFile "$installLocation/JellyfinTray.exe" | Write-Verbose
+ }
+}
+
+if(-not $SkipJellyfinBuild.IsPresent -and -not ($InstallNSIS -eq $true)){
+ Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
+ Build-JellyFin
+}
+if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
+ Write-Verbose "Starting FFMPEG Install"
+ Install-FFMPEG $ResolvedInstallLocation $Architecture
+}
+if($InstallNSSM.IsPresent -or ($InstallNSSM -eq $true)){
+ Write-Verbose "Starting NSSM Install"
+ Install-NSSM $ResolvedInstallLocation $Architecture
+}
+if($InstallTrayApp.IsPresent -or ($InstallTrayApp -eq $true)){
+ Write-Verbose "Downloading Windows Tray App"
+ Install-TrayApp $ResolvedInstallLocation $Architecture
+}
+#Copy-Item .\deployment\windows\install-jellyfin.ps1 $ResolvedInstallLocation\install-jellyfin.ps1
+#Copy-Item .\deployment\windows\install.bat $ResolvedInstallLocation\install.bat
+Copy-Item .\LICENSE $ResolvedInstallLocation\LICENSE
+if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
+ Write-Verbose "Installing NSIS"
+ Install-NSIS
+}
+if($MakeNSIS.IsPresent -or ($MakeNSIS -eq $true)){
+ Write-Verbose "Starting NSIS Package creation"
+ Make-NSIS $ResolvedInstallLocation
+}
+if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
+ Write-Verbose "Cleanup NSIS"
+ Cleanup-NSIS
+}
+if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
+ Compress-Archive -Path $ResolvedInstallLocation -DestinationPath "$ResolvedInstallLocation/jellyfin.zip" -Force
+}
+Write-Verbose "Finished"
diff --git a/deployment/old/windows/dependencies.txt b/deployment/old/windows/dependencies.txt
new file mode 100644
index 0000000000..16f77cce7c
--- /dev/null
+++ b/deployment/old/windows/dependencies.txt
@@ -0,0 +1,2 @@
+dotnet
+nsis
diff --git a/deployment/old/windows/dialogs/confirmation.nsddef b/deployment/old/windows/dialogs/confirmation.nsddef
new file mode 100644
index 0000000000..969ebacd62
--- /dev/null
+++ b/deployment/old/windows/dialogs/confirmation.nsddef
@@ -0,0 +1,24 @@
+
+
+
diff --git a/deployment/old/windows/dialogs/confirmation.nsdinc b/deployment/old/windows/dialogs/confirmation.nsdinc
new file mode 100644
index 0000000000..f00e9b43ab
--- /dev/null
+++ b/deployment/old/windows/dialogs/confirmation.nsdinc
@@ -0,0 +1,61 @@
+; =========================================================
+; This file was generated by NSISDialogDesigner 1.4.4.0
+; http://coolsoft.altervista.org/nsisdialogdesigner
+;
+; Do not edit it manually, use NSISDialogDesigner instead!
+; Modified by EraYaN (2019-09-01)
+; =========================================================
+
+; handle variables
+Var hCtl_confirmation
+Var hCtl_confirmation_ConfirmRichText
+
+; HeaderCustomScript
+!include "helpers\StrSlash.nsh"
+
+
+
+; dialog create function
+Function fnc_confirmation_Create
+
+ ; === confirmation (type: Dialog) ===
+ nsDialogs::Create 1018
+ Pop $hCtl_confirmation
+ ${If} $hCtl_confirmation == error
+ Abort
+ ${EndIf}
+ !insertmacro MUI_HEADER_TEXT "Confirmation Page" "Please confirm your choices for Jellyfin Server installation"
+
+ ; === ConfirmRichText (type: RichText) ===
+ nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 8u 7u 280u 126u ""
+ Pop $hCtl_confirmation_ConfirmRichText
+ ${NSD_AddExStyle} $hCtl_confirmation_ConfirmRichText ${WS_EX_STATICEDGE}
+
+ ; CreateFunctionCustomScript
+ ${StrSlash} '$0' $INSTDIR
+
+ ${StrSlash} '$1' $_JELLYFINDATADIR_
+
+ ${If} $_INSTALLSERVICE_ == "Yes"
+ ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
+ \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
+ Installation Folder:\b0 $0\line\b \
+ Service install:\b0 $_INSTALLSERVICE_\line\b \
+ Service start:\b0 $_SERVICESTART_\line\b \
+ Service account:\b0 $_SERVICEACCOUNTTYPE_\line\b \
+ Jellyfin Data Folder:\b0 $1\par \
+ \
+ \pard\sa200\sl276\slmult1\f1\lang1043\par \
+ }"
+ ${Else}
+ ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
+ \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
+ Installation Folder:\b0 $0\line\b \
+ Service install:\b0 $_INSTALLSERVICE_\line\b \
+ Jellyfin Data Folder:\b0 $1\par \
+ \
+ \pard\sa200\sl276\slmult1\f1\lang1043\par \
+ }"
+ ${EndIf}
+
+FunctionEnd
diff --git a/deployment/old/windows/dialogs/service-config.nsddef b/deployment/old/windows/dialogs/service-config.nsddef
new file mode 100644
index 0000000000..3509ada249
--- /dev/null
+++ b/deployment/old/windows/dialogs/service-config.nsddef
@@ -0,0 +1,13 @@
+
+
+
\ No newline at end of file
diff --git a/deployment/old/windows/dialogs/service-config.nsdinc b/deployment/old/windows/dialogs/service-config.nsdinc
new file mode 100644
index 0000000000..58c350f2ec
--- /dev/null
+++ b/deployment/old/windows/dialogs/service-config.nsdinc
@@ -0,0 +1,56 @@
+; =========================================================
+; This file was generated by NSISDialogDesigner 1.4.4.0
+; http://coolsoft.altervista.org/nsisdialogdesigner
+;
+; Do not edit it manually, use NSISDialogDesigner instead!
+; =========================================================
+
+; handle variables
+Var hCtl_service_config
+Var hCtl_service_config_StartServiceAfterInstall
+Var hCtl_service_config_LocalSystemAccountLabel
+Var hCtl_service_config_NetworkServiceAccountLabel
+Var hCtl_service_config_UseLocalSystemAccount
+Var hCtl_service_config_UseNetworkServiceAccount
+Var hCtl_service_config_Font1
+
+
+; dialog create function
+Function fnc_service_config_Create
+
+ ; custom font definitions
+ CreateFont $hCtl_service_config_Font1 "Microsoft Sans Serif" "8.25" "700"
+
+ ; === service_config (type: Dialog) ===
+ nsDialogs::Create 1018
+ Pop $hCtl_service_config
+ ${If} $hCtl_service_config == error
+ Abort
+ ${EndIf}
+ !insertmacro MUI_HEADER_TEXT "Configure the service" "This controls what type of access the server gets to this system."
+
+ ; === StartServiceAfterInstall (type: Checkbox) ===
+ ${NSD_CreateCheckbox} 8u 118u 280u 15u "Start Service after Install"
+ Pop $hCtl_service_config_StartServiceAfterInstall
+ ${NSD_Check} $hCtl_service_config_StartServiceAfterInstall
+
+ ; === LocalSystemAccountLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 71u 280u 28u "The Local System account has full access to every resource and file on the system. This can have very real security implications, do not use unless absolutely neseccary."
+ Pop $hCtl_service_config_LocalSystemAccountLabel
+
+ ; === NetworkServiceAccountLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 24u 280u 28u "The NetworkService account is a predefined local account used by the service control manager. It is the recommended way to install the Jellyfin Server service."
+ Pop $hCtl_service_config_NetworkServiceAccountLabel
+
+ ; === UseLocalSystemAccount (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 54u 280u 15u "Use Local System account"
+ Pop $hCtl_service_config_UseLocalSystemAccount
+ ${NSD_AddStyle} $hCtl_service_config_UseLocalSystemAccount ${WS_GROUP}
+
+ ; === UseNetworkServiceAccount (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 7u 280u 15u "Use Network Service account (Recommended)"
+ Pop $hCtl_service_config_UseNetworkServiceAccount
+ SendMessage $hCtl_service_config_UseNetworkServiceAccount ${WM_SETFONT} $hCtl_service_config_Font1 0
+ ${NSD_Check} $hCtl_service_config_UseNetworkServiceAccount
+
+FunctionEnd
diff --git a/deployment/old/windows/dialogs/setuptype.nsddef b/deployment/old/windows/dialogs/setuptype.nsddef
new file mode 100644
index 0000000000..b55ceeaaa6
--- /dev/null
+++ b/deployment/old/windows/dialogs/setuptype.nsddef
@@ -0,0 +1,12 @@
+
+
+
\ No newline at end of file
diff --git a/deployment/old/windows/dialogs/setuptype.nsdinc b/deployment/old/windows/dialogs/setuptype.nsdinc
new file mode 100644
index 0000000000..8746ad2cc6
--- /dev/null
+++ b/deployment/old/windows/dialogs/setuptype.nsdinc
@@ -0,0 +1,50 @@
+; =========================================================
+; This file was generated by NSISDialogDesigner 1.4.4.0
+; http://coolsoft.altervista.org/nsisdialogdesigner
+;
+; Do not edit it manually, use NSISDialogDesigner instead!
+; =========================================================
+
+; handle variables
+Var hCtl_setuptype
+Var hCtl_setuptype_InstallasaServiceLabel
+Var hCtl_setuptype_InstallasaService
+Var hCtl_setuptype_BasicInstallLabel
+Var hCtl_setuptype_BasicInstall
+Var hCtl_setuptype_Font1
+
+
+; dialog create function
+Function fnc_setuptype_Create
+
+ ; custom font definitions
+ CreateFont $hCtl_setuptype_Font1 "Microsoft Sans Serif" "8.25" "700"
+
+ ; === setuptype (type: Dialog) ===
+ nsDialogs::Create 1018
+ Pop $hCtl_setuptype
+ ${If} $hCtl_setuptype == error
+ Abort
+ ${EndIf}
+ !insertmacro MUI_HEADER_TEXT "Setup Type" "Control how Jellyfin is installed."
+
+ ; === InstallasaServiceLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 71u 280u 28u "Install Jellyfin as a service. This method is recommended for Advanced Users. Additional setup is required to access network shares."
+ Pop $hCtl_setuptype_InstallasaServiceLabel
+
+ ; === InstallasaService (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 54u 280u 15u "Install as a Service (Advanced Users)"
+ Pop $hCtl_setuptype_InstallasaService
+ ${NSD_AddStyle} $hCtl_setuptype_InstallasaService ${WS_GROUP}
+
+ ; === BasicInstallLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 24u 280u 28u "The basic install will run Jellyfin in your current user account.$\nThis is recommended for new users and those with existing Jellyfin installs older than 10.4."
+ Pop $hCtl_setuptype_BasicInstallLabel
+
+ ; === BasicInstall (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 7u 280u 15u "Basic Install (Recommended)"
+ Pop $hCtl_setuptype_BasicInstall
+ SendMessage $hCtl_setuptype_BasicInstall ${WM_SETFONT} $hCtl_setuptype_Font1 0
+ ${NSD_Check} $hCtl_setuptype_BasicInstall
+
+FunctionEnd
diff --git a/deployment/old/windows/helpers/ShowError.nsh b/deployment/old/windows/helpers/ShowError.nsh
new file mode 100644
index 0000000000..6e09b1e407
--- /dev/null
+++ b/deployment/old/windows/helpers/ShowError.nsh
@@ -0,0 +1,10 @@
+; Show error
+!macro ShowError TEXT RETRYLABEL
+ MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "${TEXT}" IDIGNORE +2 IDRETRY ${RETRYLABEL}
+ Abort
+!macroend
+
+!macro ShowErrorFinal TEXT
+ MessageBox MB_OK|MB_ICONSTOP "${TEXT}"
+ Abort
+!macroend
diff --git a/deployment/old/windows/helpers/StrSlash.nsh b/deployment/old/windows/helpers/StrSlash.nsh
new file mode 100644
index 0000000000..b8aa771aa6
--- /dev/null
+++ b/deployment/old/windows/helpers/StrSlash.nsh
@@ -0,0 +1,47 @@
+; Adapted from: https://nsis.sourceforge.io/Another_String_Replace_(and_Slash/BackSlash_Converter) (2019-08-31)
+
+!macro _StrSlashConstructor out in
+ Push "${in}"
+ Push "\"
+ Call StrSlash
+ Pop ${out}
+!macroend
+
+!define StrSlash '!insertmacro "_StrSlashConstructor"'
+
+; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
+; Push "\"
+; Call StrSlash
+; Pop $R0
+; ;Now $R0 contains 'c:/this/and/that/filename.htm'
+Function StrSlash
+ Exch $R3 ; $R3 = needle ("\" or "/")
+ Exch
+ Exch $R1 ; $R1 = String to replacement in (haystack)
+ Push $R2 ; Replaced haystack
+ Push $R4 ; $R4 = not $R3 ("/" or "\")
+ Push $R6
+ Push $R7 ; Scratch reg
+ StrCpy $R2 ""
+ StrLen $R6 $R1
+ StrCpy $R4 "\"
+ StrCmp $R3 "/" loop
+ StrCpy $R4 "/"
+loop:
+ StrCpy $R7 $R1 1
+ StrCpy $R1 $R1 $R6 1
+ StrCmp $R7 $R3 found
+ StrCpy $R2 "$R2$R7"
+ StrCmp $R1 "" done loop
+found:
+ StrCpy $R2 "$R2$R4"
+ StrCmp $R1 "" done loop
+done:
+ StrCpy $R3 $R2
+ Pop $R7
+ Pop $R6
+ Pop $R4
+ Pop $R2
+ Pop $R1
+ Exch $R3
+FunctionEnd
diff --git a/deployment/old/windows/jellyfin.nsi b/deployment/old/windows/jellyfin.nsi
new file mode 100644
index 0000000000..fada62d981
--- /dev/null
+++ b/deployment/old/windows/jellyfin.nsi
@@ -0,0 +1,575 @@
+!verbose 3
+SetCompressor /SOLID bzip2
+ShowInstDetails show
+ShowUninstDetails show
+Unicode True
+
+;--------------------------------
+!define SF_USELECTED 0 ; used to check selected options status, rest are inherited from Sections.nsh
+
+ !include "MUI2.nsh"
+ !include "Sections.nsh"
+ !include "LogicLib.nsh"
+
+ !include "helpers\ShowError.nsh"
+
+; Global variables that we'll use
+ Var _JELLYFINVERSION_
+ Var _JELLYFINDATADIR_
+ Var _SETUPTYPE_
+ Var _INSTALLSERVICE_
+ Var _SERVICESTART_
+ Var _SERVICEACCOUNTTYPE_
+ Var _EXISTINGINSTALLATION_
+ Var _EXISTINGSERVICE_
+ Var _MAKESHORTCUTS_
+ Var _FOLDEREXISTS_
+;
+!ifdef x64
+ !define ARCH "x64"
+ !define NAMESUFFIX "(64 bit)"
+ !define INSTALL_DIRECTORY "$PROGRAMFILES64\Jellyfin\Server"
+!endif
+
+!ifdef x84
+ !define ARCH "x86"
+ !define NAMESUFFIX "(32 bit)"
+ !define INSTALL_DIRECTORY "$PROGRAMFILES32\Jellyfin\Server"
+!endif
+
+!ifndef ARCH
+ !error "Set the Arch with /Dx86 or /Dx64"
+!endif
+
+;--------------------------------
+
+ !define REG_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\JellyfinServer" ;Registry to show up in Add/Remove Programs
+ !define REG_CONFIG_KEY "Software\Jellyfin\Server" ;Registry to store all configuration
+
+ !getdllversion "$%InstallLocation%\jellyfin.dll" ver_ ;Align installer version with jellyfin.dll version
+
+ Name "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} ${NAMESUFFIX}" ; This is referred in various header text labels
+ OutFile "jellyfin_${ver_1}.${ver_2}.${ver_3}_windows-${ARCH}.exe" ; Naming convention jellyfin_{version}_windows-{arch].exe
+ BrandingText "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} Installer" ; This shows in just over the buttons
+
+; installer attributes, these show up in details tab on installer properties
+ VIProductVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIProductVersion format, should be X.X.X.X
+ VIFileVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIFileVersion format, should be X.X.X.X
+ VIAddVersionKey "ProductName" "Jellyfin Server"
+ VIAddVersionKey "FileVersion" "${ver_1}.${ver_2}.${ver_3}.0"
+ VIAddVersionKey "LegalCopyright" "(c) 2019 Jellyfin Contributors. Code released under the GNU General Public License"
+ VIAddVersionKey "FileDescription" "Jellyfin Server: The Free Software Media System"
+
+;TODO, check defaults
+ InstallDir ${INSTALL_DIRECTORY} ;Default installation folder
+ InstallDirRegKey HKLM "${REG_CONFIG_KEY}" "InstallFolder" ;Read the registry for install folder,
+
+ RequestExecutionLevel admin ; ask it upfront for service control, and installing in priv folders
+
+ CRCCheck on ; make sure the installer wasn't corrupted while downloading
+
+ !define MUI_ABORTWARNING ;Prompts user in case of aborting install
+
+; TODO: Replace with nice Jellyfin Icons
+!ifdef UXPATH
+ !define MUI_ICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Installer Icon
+ !define MUI_UNICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Uninstaller Icon
+
+ !define MUI_HEADERIMAGE
+ !define MUI_HEADERIMAGE_BITMAP "${UXPATH}\branding\NSIS\installer-header.bmp"
+ !define MUI_WELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
+ !define MUI_UNWELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
+!endif
+
+;--------------------------------
+;Pages
+
+; Welcome Page
+ !define MUI_WELCOMEPAGE_TEXT "The installer will ask for details to install Jellyfin Server."
+ !insertmacro MUI_PAGE_WELCOME
+; License Page
+ !insertmacro MUI_PAGE_LICENSE "$%InstallLocation%\LICENSE" ; picking up generic GPL
+
+; Setup Type Page
+ Page custom ShowSetupTypePage SetupTypePage_Config
+
+; Components Page
+ !define MUI_PAGE_CUSTOMFUNCTION_PRE HideComponentsPage
+ !insertmacro MUI_PAGE_COMPONENTS
+ !define MUI_PAGE_CUSTOMFUNCTION_PRE HideInstallDirectoryPage ; Controls when to hide / show
+ !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Install folder" ; shows just above the folder selection dialog
+ !insertmacro MUI_PAGE_DIRECTORY
+
+; Data folder Page
+ !define MUI_PAGE_CUSTOMFUNCTION_PRE HideDataDirectoryPage ; Controls when to hide / show
+ !define MUI_PAGE_HEADER_TEXT "Choose Data Location"
+ !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install the Jellyfin Server data."
+ !define MUI_DIRECTORYPAGE_TEXT_TOP "The installer will set the following folder for Jellyfin Server data. To install in a different folder, click Browse and select another folder. Please make sure the folder exists and is accessible. Click Next to continue."
+ !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Data folder"
+ !define MUI_DIRECTORYPAGE_VARIABLE $_JELLYFINDATADIR_
+ !insertmacro MUI_PAGE_DIRECTORY
+
+; Custom Dialogs
+ !include "dialogs\setuptype.nsdinc"
+ !include "dialogs\service-config.nsdinc"
+ !include "dialogs\confirmation.nsdinc"
+
+; Select service account type
+ #!define MUI_PAGE_CUSTOMFUNCTION_PRE HideServiceConfigPage ; Controls when to hide / show (This does not work for Page, might need to go PageEx)
+ #!define MUI_PAGE_CUSTOMFUNCTION_SHOW fnc_service_config_Show
+ #!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ServiceConfigPage_Config
+ #!insertmacro MUI_PAGE_CUSTOM ServiceAccountType
+ Page custom ShowServiceConfigPage ServiceConfigPage_Config
+
+; Confirmation Page
+ Page custom ShowConfirmationPage ; just letting the user know what they chose to install
+
+; Actual Installion Page
+ !insertmacro MUI_PAGE_INSTFILES
+
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+ #!insertmacro MUI_UNPAGE_FINISH
+
+;--------------------------------
+;Languages; Add more languages later here if needed
+ !insertmacro MUI_LANGUAGE "English"
+
+;--------------------------------
+;Installer Sections
+Section "!Jellyfin Server (required)" InstallJellyfinServer
+ SectionIn RO ; Mandatory section, isn't this the whole purpose to run the installer.
+
+ StrCmp "$_EXISTINGINSTALLATION_" "Yes" RunUninstaller CarryOn ; Silently uninstall in case of previous installation
+
+ RunUninstaller:
+ DetailPrint "Looking for uninstaller at $INSTDIR"
+ FindFirst $0 $1 "$INSTDIR\Uninstall.exe"
+ FindClose $0
+ StrCmp $1 "" CarryOn ; the registry key was there but uninstaller was not found
+
+ DetailPrint "Silently running the uninstaller at $INSTDIR"
+ ExecWait '"$INSTDIR\Uninstall.exe" /S _?=$INSTDIR' $0
+ DetailPrint "Uninstall finished, $0"
+
+ CarryOn:
+ ${If} $_EXISTINGSERVICE_ == 'Yes'
+ ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
+ ${If} $0 <> 0
+ MessageBox MB_OK|MB_ICONSTOP "Could not stop the Jellyfin Server service."
+ Abort
+ ${EndIf}
+ DetailPrint "Stopped Jellyfin Server service, $0"
+ ${EndIf}
+
+ SetOutPath "$INSTDIR"
+
+ File "/oname=icon.ico" "${UXPATH}\branding\NSIS\modern-install.ico"
+ File /r $%InstallLocation%\*
+
+
+; Write the InstallFolder, DataFolder, Network Service info into the registry for later use
+ WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "InstallFolder" "$INSTDIR"
+ WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "DataFolder" "$_JELLYFINDATADIR_"
+ WriteRegStr HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" "$_SERVICEACCOUNTTYPE_"
+
+ !getdllversion "$%InstallLocation%\jellyfin.dll" ver_
+ StrCpy $_JELLYFINVERSION_ "${ver_1}.${ver_2}.${ver_3}" ;
+
+; Write the uninstall keys for Windows
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayName" "Jellyfin Server $_JELLYFINVERSION_ ${NAMESUFFIX}"
+ WriteRegExpandStr HKLM "${REG_UNINST_KEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayIcon" '"$INSTDIR\Uninstall.exe",0'
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "Publisher" "The Jellyfin Project"
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "URLInfoAbout" "https://jellyfin.org/"
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayVersion" "$_JELLYFINVERSION_"
+ WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoModify" 1
+ WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoRepair" 1
+
+;Create uninstaller
+ WriteUninstaller "$INSTDIR\Uninstall.exe"
+SectionEnd
+
+Section "Jellyfin Server Service" InstallService
+${If} $_INSTALLSERVICE_ == "Yes" ; Only run this if we're going to install the service!
+ ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
+ DetailPrint "Jellyfin Server service statuscode, $0"
+ ${If} $0 == 0
+ InstallRetry:
+ ExecWait '"$INSTDIR\nssm.exe" install JellyfinServer "$INSTDIR\jellyfin.exe" --service --datadir \"$_JELLYFINDATADIR_\"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not install the Jellyfin Server service." InstallRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service install, $0"
+ ${Else}
+ DetailPrint "Jellyfin Server Service exists, updating..."
+
+ ConfigureApplicationRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Application "$INSTDIR\jellyfin.exe"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureApplicationRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (Application), $0"
+
+ ConfigureAppParametersRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppParameters --service --datadir \"$_JELLYFINDATADIR_\"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureAppParametersRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (AppParameters), $0"
+ ${EndIf}
+
+
+ Sleep 3000 ; Give time for Windows to catchup
+ ConfigureStartRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Start SERVICE_DELAYED_AUTO_START' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureStartRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (Start), $0"
+
+ ConfigureDescriptionRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Description "Jellyfin Server: The Free Software Media System"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDescriptionRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (Description), $0"
+ ConfigureDisplayNameRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer DisplayName "Jellyfin Server"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDisplayNameRetry
+
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (DisplayName), $0"
+
+ Sleep 3000
+ ${If} $_SERVICEACCOUNTTYPE_ == "NetworkService" ; the default install using NSSM is Local System
+ ConfigureNetworkServiceRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Objectname "Network Service"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service account." ConfigureNetworkServiceRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server service account change, $0"
+ ${EndIf}
+
+ Sleep 3000
+ ConfigureDefaultAppExit:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppExit Default Exit' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service app exit action." ConfigureDefaultAppExit
+ ${EndIf}
+ DetailPrint "Jellyfin Server service exit action set, $0"
+${EndIf}
+
+SectionEnd
+
+Section "-start service" StartService
+${If} $_SERVICESTART_ == "Yes"
+${AndIf} $_INSTALLSERVICE_ == "Yes"
+ StartRetry:
+ ExecWait '"$INSTDIR\nssm.exe" start JellyfinServer' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not start the Jellyfin Server service." StartRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server service start, $0"
+${EndIf}
+SectionEnd
+
+Section "Create Shortcuts" CreateWinShortcuts
+ ${If} $_MAKESHORTCUTS_ == "Yes"
+ CreateDirectory "$SMPROGRAMS\Jellyfin Server"
+ CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin (View Console).lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMAXIMIZED
+ CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin Tray App.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
+ ;CreateShortCut "$DESKTOP\Jellyfin Server.lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMINIMIZED
+ CreateShortCut "$DESKTOP\Jellyfin Server\Jellyfin Server.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
+ ${EndIf}
+SectionEnd
+
+;--------------------------------
+;Descriptions
+
+;Language strings
+ LangString DESC_InstallJellyfinServer ${LANG_ENGLISH} "Install Jellyfin Server"
+ LangString DESC_InstallService ${LANG_ENGLISH} "Install As a Service"
+
+;Assign language strings to sections
+ !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro MUI_DESCRIPTION_TEXT ${InstallJellyfinServer} $(DESC_InstallJellyfinServer)
+ !insertmacro MUI_DESCRIPTION_TEXT ${InstallService} $(DESC_InstallService)
+ !insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+
+ ReadRegStr $INSTDIR HKLM "${REG_CONFIG_KEY}" "InstallFolder" ; read the installation folder
+ ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; read the data folder
+ ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; read the account name
+
+ DetailPrint "Jellyfin Install location: $INSTDIR"
+ DetailPrint "Jellyfin Data folder: $_JELLYFINDATADIR_"
+
+ MessageBox MB_YESNO|MB_ICONINFORMATION "Do you want to retain the Jellyfin Server data folder? The media will not be touched. $\r$\nIf unsure choose YES." /SD IDYES IDYES PreserveData
+
+ RMDir /r /REBOOTOK "$_JELLYFINDATADIR_"
+
+ PreserveData:
+
+ ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
+ DetailPrint "Jellyfin Server service statuscode, $0"
+ IntCmp $0 0 NoServiceUninstall ; service doesn't exist, may be run from desktop shortcut
+
+ Sleep 3000 ; Give time for Windows to catchup
+
+ UninstallStopRetry:
+ ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not stop the Jellyfin Server service." UninstallStopRetry
+ ${EndIf}
+ DetailPrint "Stopped Jellyfin Server service, $0"
+
+ UninstallRemoveRetry:
+ ExecWait '"$INSTDIR\nssm.exe" remove JellyfinServer confirm' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not remove the Jellyfin Server service." UninstallRemoveRetry
+ ${EndIf}
+ DetailPrint "Removed Jellyfin Server service, $0"
+
+ Sleep 3000 ; Give time for Windows to catchup
+
+ NoServiceUninstall: ; existing install was present but no service was detected. Remove shortcuts if account is set to none
+ ${If} $_SERVICEACCOUNTTYPE_ == "None"
+ RMDir /r "$SMPROGRAMS\Jellyfin Server"
+ Delete "$DESKTOP\Jellyfin Server.lnk"
+ DetailPrint "Removed old shortcuts..."
+ ${EndIf}
+
+ Delete "$INSTDIR\*.*"
+ RMDir /r /REBOOTOK "$INSTDIR\jellyfin-web"
+ Delete "$INSTDIR\Uninstall.exe"
+ RMDir /r /REBOOTOK "$INSTDIR"
+
+ DeleteRegKey HKLM "Software\Jellyfin"
+ DeleteRegKey HKLM "${REG_UNINST_KEY}"
+
+SectionEnd
+
+Function .onInit
+; Setting up defaults
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ StrCpy $_SERVICESTART_ "Yes"
+ StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
+ StrCpy $_EXISTINGINSTALLATION_ "No"
+ StrCpy $_EXISTINGSERVICE_ "No"
+ StrCpy $_MAKESHORTCUTS_ "No"
+
+ SetShellVarContext current
+ StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
+
+ System::Call 'kernel32::CreateMutex(p 0, i 0, t "JellyfinServerMutex") p .r1 ?e'
+ Pop $R0
+
+ StrCmp $R0 0 +3
+ !insertmacro ShowErrorFinal "The installer is already running."
+
+;Detect if Jellyfin is already installed.
+; In case it is installed, let the user choose either
+; 1. Exit installer
+; 2. Upgrade without messing with data
+; 2a. Don't ask for any details, uninstall and install afresh with old settings
+
+; Read Registry for previous installation
+ ClearErrors
+ ReadRegStr "$0" HKLM "${REG_CONFIG_KEY}" "InstallFolder"
+ IfErrors NoExisitingInstall
+
+ DetailPrint "Existing Jellyfin Server detected at: $0"
+ StrCpy "$INSTDIR" "$0" ; set the location fro registry as new default
+
+ StrCpy $_EXISTINGINSTALLATION_ "Yes" ; Set our flag to be used later
+ SectionSetText ${InstallJellyfinServer} "Upgrade Jellyfin Server (required)" ; Change install text to "Upgrade"
+
+ ; check if service was run using Network Service account
+ ClearErrors
+ ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; in case of error _SERVICEACCOUNTTYPE_ will be NetworkService as default
+
+ ClearErrors
+ ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; in case of error, the default holds
+
+ ; Hide sections which will not be needed in case of previous install
+ ; SectionSetText ${InstallService} ""
+
+; check if there is a service called Jellyfin, there should be
+; hack : nssm statuscode Jellyfin will return non zero return code in case it exists
+ ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
+ DetailPrint "Jellyfin Server service statuscode, $0"
+ IntCmp $0 0 NoService ; service doesn't exist, may be run from desktop shortcut
+
+ ; if service was detected, set defaults going forward.
+ StrCpy $_EXISTINGSERVICE_ "Yes"
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ StrCpy $_SERVICESTART_ "Yes"
+ StrCpy $_MAKESHORTCUTS_ "No"
+ SectionSetText ${CreateWinShortcuts} ""
+
+
+ NoService: ; existing install was present but no service was detected
+ ${If} $_SERVICEACCOUNTTYPE_ == "None"
+ StrCpy $_SETUPTYPE_ "Basic"
+ StrCpy $_INSTALLSERVICE_ "No"
+ StrCpy $_SERVICESTART_ "No"
+ StrCpy $_MAKESHORTCUTS_ "Yes"
+ ${EndIf}
+
+; Let the user know that we'll upgrade and provide an option to quit.
+ MessageBox MB_OKCANCEL|MB_ICONINFORMATION "Existing installation of Jellyfin Server was detected, it'll be upgraded, settings will be retained. \
+ $\r$\nClick OK to proceed, Cancel to exit installer." /SD IDOK IDOK ProceedWithUpgrade
+ Quit ; Quit if the user is not sure about upgrade
+
+ ProceedWithUpgrade:
+
+ NoExisitingInstall: ; by this time, the variables have been correctly set to reflect previous install details
+
+FunctionEnd
+
+Function HideInstallDirectoryPage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideDataDirectoryPage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideServiceConfigPage
+ ${If} $_INSTALLSERVICE_ == "No" ; Not running as a service, don't ask for service type
+ ${OrIf} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideConfirmationPage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideSetupTypePage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for SetupType
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideComponentsPage
+ ${If} $_SETUPTYPE_ == "Basic" ; Basic installation chosen, don't show components choice
+ Abort
+ ${EndIf}
+FunctionEnd
+
+; Setup Type dialog show function
+Function ShowSetupTypePage
+ Call HideSetupTypePage
+ Call fnc_setuptype_Create
+ nsDialogs::Show
+FunctionEnd
+
+; Service Config dialog show function
+Function ShowServiceConfigPage
+ Call HideServiceConfigPage
+ Call fnc_service_config_Create
+ nsDialogs::Show
+FunctionEnd
+
+; Confirmation dialog show function
+Function ShowConfirmationPage
+ Call HideConfirmationPage
+ Call fnc_confirmation_Create
+ nsDialogs::Show
+FunctionEnd
+
+; Declare temp variables to read the options from the custom page.
+Var StartServiceAfterInstall
+Var UseNetworkServiceAccount
+Var UseLocalSystemAccount
+Var BasicInstall
+
+
+Function SetupTypePage_Config
+${NSD_GetState} $hCtl_setuptype_BasicInstall $BasicInstall
+ IfFileExists "$LOCALAPPDATA\Jellyfin" folderfound foldernotfound ; if the folder exists, use this, otherwise, go with new default
+ folderfound:
+ StrCpy $_FOLDEREXISTS_ "Yes"
+ Goto InstallCheck
+ foldernotfound:
+ StrCpy $_FOLDEREXISTS_ "No"
+ Goto InstallCheck
+
+InstallCheck:
+${If} $BasicInstall == 1
+ StrCpy $_SETUPTYPE_ "Basic"
+ StrCpy $_INSTALLSERVICE_ "No"
+ StrCpy $_SERVICESTART_ "No"
+ StrCpy $_SERVICEACCOUNTTYPE_ "None"
+ StrCpy $_MAKESHORTCUTS_ "Yes"
+ ${If} $_FOLDEREXISTS_ == "Yes"
+ StrCpy $_JELLYFINDATADIR_ "$LOCALAPPDATA\Jellyfin\"
+ ${EndIf}
+${Else}
+ StrCpy $_SETUPTYPE_ "Advanced"
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ StrCpy $_MAKESHORTCUTS_ "No"
+ ${If} $_FOLDEREXISTS_ == "Yes"
+ MessageBox MB_OKCANCEL|MB_ICONINFORMATION "An existing data folder was detected.\
+ $\r$\nBasic Setup is highly recommended.\
+ $\r$\nIf you proceed, you will need to set up Jellyfin again." IDOK GoAhead IDCANCEL GoBack
+ GoBack:
+ Abort
+ ${EndIf}
+ GoAhead:
+ StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
+ SectionSetText ${CreateWinShortcuts} ""
+${EndIf}
+
+FunctionEnd
+
+Function ServiceConfigPage_Config
+${NSD_GetState} $hCtl_service_config_StartServiceAfterInstall $StartServiceAfterInstall
+${If} $StartServiceAfterInstall == 1
+ StrCpy $_SERVICESTART_ "Yes"
+${Else}
+ StrCpy $_SERVICESTART_ "No"
+${EndIf}
+${NSD_GetState} $hCtl_service_config_UseNetworkServiceAccount $UseNetworkServiceAccount
+${NSD_GetState} $hCtl_service_config_UseLocalSystemAccount $UseLocalSystemAccount
+
+${If} $UseNetworkServiceAccount == 1
+ StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
+${ElseIf} $UseLocalSystemAccount == 1
+ StrCpy $_SERVICEACCOUNTTYPE_ "LocalSystem"
+${Else}
+ !insertmacro ShowErrorFinal "Service account type not properly configured."
+${EndIf}
+
+FunctionEnd
+
+; This function handles the choices during component selection
+Function .onSelChange
+
+; If we are not installing service, we don't need to set the NetworkService account or StartService
+ SectionGetFlags ${InstallService} $0
+ ${If} $0 = ${SF_SELECTED}
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ ${Else}
+ StrCpy $_INSTALLSERVICE_ "No"
+ StrCpy $_SERVICESTART_ "No"
+ StrCpy $_SERVICEACCOUNTTYPE_ "None"
+ ${EndIf}
+FunctionEnd
+
+Function .onInstSuccess
+ #ExecShell "open" "http://localhost:8096"
+FunctionEnd
diff --git a/deployment/old/windows/legacy/install-jellyfin.ps1 b/deployment/old/windows/legacy/install-jellyfin.ps1
new file mode 100644
index 0000000000..e909a0468e
--- /dev/null
+++ b/deployment/old/windows/legacy/install-jellyfin.ps1
@@ -0,0 +1,460 @@
+[CmdletBinding()]
+
+param(
+ [Switch]$Quiet,
+ [Switch]$InstallAsService,
+ [System.Management.Automation.pscredential]$ServiceUser,
+ [switch]$CreateDesktopShorcut,
+ [switch]$LaunchJellyfin,
+ [switch]$MigrateEmbyLibrary,
+ [string]$InstallLocation,
+ [string]$EmbyLibraryLocation,
+ [string]$JellyfinLibraryLocation
+)
+<# This form was created using POSHGUI.com a free online gui designer for PowerShell
+.NAME
+ Install-Jellyfin
+#>
+
+#This doesn't need to be used by default anymore, but I am keeping it in as a function for future use.
+function Elevate-Window {
+ # Get the ID and security principal of the current user account
+ $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
+ $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
+
+ # Get the security principal for the Administrator role
+ $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
+
+ # Check to see if we are currently running "as Administrator"
+ if ($myWindowsPrincipal.IsInRole($adminRole))
+ {
+ # We are running "as Administrator" - so change the title and background color to indicate this
+ $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
+ $Host.UI.RawUI.BackgroundColor = "DarkBlue"
+ clear-host
+ }
+ else
+ {
+ # We are not running "as Administrator" - so relaunch as administrator
+
+ # Create a new process object that starts PowerShell
+ $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
+
+ # Specify the current script path and name as a parameter
+ $newProcess.Arguments = $myInvocation.MyCommand.Definition;
+
+ # Indicate that the process should be elevated
+ $newProcess.Verb = "runas";
+
+ # Start the new process
+ [System.Diagnostics.Process]::Start($newProcess);
+
+ # Exit from the current, unelevated, process
+ exit
+ }
+}
+
+#FIXME The install methods should be a function that takes all the params, the quiet flag should be a paramset
+
+if($Quiet.IsPresent -or $Quiet -eq $true){
+ if([string]::IsNullOrEmpty($JellyfinLibraryLocation)){
+ $Script:JellyfinDataDir = "$env:LOCALAPPDATA\jellyfin\"
+ }else{
+ $Script:JellyfinDataDir = $JellyfinLibraryLocation
+ }
+ if([string]::IsNullOrEmpty($InstallLocation)){
+ $Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
+ }else{
+ $Script:DefaultJellyfinInstallDirectory = $InstallLocation
+ }
+
+ if([string]::IsNullOrEmpty($EmbyLibraryLocation)){
+ $Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\data\"
+ }else{
+ $Script:defaultEmbyDataDir = $EmbyLibraryLocation
+ }
+
+ if($InstallAsService.IsPresent -or $InstallAsService -eq $true){
+ $Script:InstallAsService = $true
+ }else{$Script:InstallAsService = $false}
+ if($null -eq $ServiceUser){
+ $Script:InstallServiceAsUser = $false
+ }else{
+ $Script:InstallServiceAsUser = $true
+ $Script:UserCredentials = $ServiceUser
+ $Script:JellyfinDataDir = "$env:HOMEDRIVE\Users\$($Script:UserCredentials.UserName)\Appdata\Local\jellyfin\"}
+ if($CreateDesktopShorcut.IsPresent -or $CreateDesktopShorcut -eq $true) {$Script:CreateShortcut = $true}else{$Script:CreateShortcut = $false}
+ if($MigrateEmbyLibrary.IsPresent -or $MigrateEmbyLibrary -eq $true){$Script:MigrateLibrary = $true}else{$Script:MigrateLibrary = $false}
+ if($LaunchJellyfin.IsPresent -or $LaunchJellyfin -eq $true){$Script:StartJellyfin = $true}else{$Script:StartJellyfin = $false}
+
+ if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
+ mkdir $Script:DefaultJellyfinInstallDirectory
+ }
+ Copy-Item -Path $PSScriptRoot/* -DestinationPath "$Script:DefaultJellyfinInstallDirectory/" -Force -Recurse
+ if($Script:InstallAsService){
+ if($Script:InstallServiceAsUser){
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 500
+ &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }else{
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 500
+ #&"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin ObjectName $Script:UserCredentials.UserName $Script:UserCredentials.GetNetworkCredential().Password
+ #Set-Service -Name Jellyfin -Credential $Script:UserCredentials
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }
+ }
+ if($Script:MigrateLibrary){
+ Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
+ }
+ if($Script:CreateShortcut){
+ $WshShell = New-Object -comObject WScript.Shell
+ $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
+ $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
+ $Shortcut.Save()
+ }
+ if($Script:StartJellyfin){
+ if($Script:InstallAsService){
+ Get-Service Jellyfin | Start-Service
+ }else{
+ Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
+ }
+ }
+}else{
+
+}
+Add-Type -AssemblyName System.Windows.Forms
+[System.Windows.Forms.Application]::EnableVisualStyles()
+
+$Script:JellyFinDataDir = "$env:LOCALAPPDATA\jellyfin\"
+$Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
+$Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\"
+$Script:InstallAsService = $False
+$Script:InstallServiceAsUser = $false
+$Script:CreateShortcut = $false
+$Script:MigrateLibrary = $false
+$Script:StartJellyfin = $false
+
+function InstallJellyfin {
+ Write-Host "Install as service: $Script:InstallAsService"
+ Write-Host "Install as serviceuser: $Script:InstallServiceAsUser"
+ Write-Host "Create Shortcut: $Script:CreateShortcut"
+ Write-Host "MigrateLibrary: $Script:MigrateLibrary"
+ $GUIElementsCollection | ForEach-Object {
+ $_.Enabled = $false
+ }
+ Write-Host "Making Jellyfin directory"
+ $ProgressBar.Minimum = 1
+ $ProgressBar.Maximum = 100
+ $ProgressBar.Value = 1
+ if($Script:DefaultJellyfinInstallDirectory -ne $InstallLocationBox.Text){
+ Write-Host "Custom Install Location Chosen: $($InstallLocationBox.Text)"
+ $Script:DefaultJellyfinInstallDirectory = $InstallLocationBox.Text
+ }
+ if($Script:JellyfinDataDir -ne $CustomLibraryBox.Text){
+ Write-Host "Custom Library Location Chosen: $($CustomLibraryBox.Text)"
+ $Script:JellyfinDataDir = $CustomLibraryBox.Text
+ }
+ if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
+ mkdir $Script:DefaultJellyfinInstallDirectory
+ }
+ Write-Host "Copying Jellyfin Data"
+ $progressbar.Value = 10
+ Copy-Item -Path $PSScriptRoot/* -Destination $Script:DefaultJellyfinInstallDirectory/ -Force -Recurse
+ Write-Host "Finished Copying"
+ $ProgressBar.Value = 50
+ if($Script:InstallAsService){
+ if($Script:InstallServiceAsUser){
+ Write-Host "Installing Service as user $($Script:UserCredentials.UserName)"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 2000
+ &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }else{
+ Write-Host "Installing Service as LocalSystem"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 2000
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }
+ }
+ $progressbar.Value = 60
+ if($Script:MigrateLibrary){
+ if($Script:defaultEmbyDataDir -ne $LibraryLocationBox.Text){
+ Write-Host "Custom location defined for emby library: $($LibraryLocationBox.Text)"
+ $Script:defaultEmbyDataDir = $LibraryLocationBox.Text
+ }
+ Write-Host "Copying emby library from $Script:defaultEmbyDataDir to $Script:JellyFinDataDir"
+ Write-Host "This could take a while depending on the size of your library. Please be patient"
+ Write-Host "Copying config"
+ Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying cache"
+ Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying data"
+ Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying metadata"
+ Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying root dir"
+ Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
+ }
+ $progressbar.Value = 80
+ if($Script:CreateShortcut){
+ Write-Host "Creating Shortcut"
+ $WshShell = New-Object -comObject WScript.Shell
+ $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
+ $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
+ $Shortcut.Save()
+ }
+ $ProgressBar.Value = 90
+ if($Script:StartJellyfin){
+ if($Script:InstallAsService){
+ Write-Host "Starting Jellyfin Service"
+ Get-Service Jellyfin | Start-Service
+ }else{
+ Write-Host "Starting Jellyfin"
+ Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
+ }
+ }
+ $progressbar.Value = 100
+ Write-Host Finished
+ $wshell = New-Object -ComObject Wscript.Shell
+ $wshell.Popup("Operation Completed",0,"Done",0x1)
+ $InstallForm.Close()
+}
+function ServiceBoxCheckChanged {
+ if($InstallAsServiceCheck.Checked){
+ $Script:InstallAsService = $true
+ $ServiceUserLabel.Visible = $true
+ $ServiceUserLabel.Enabled = $true
+ $ServiceUserBox.Visible = $true
+ $ServiceUserBox.Enabled = $true
+ }else{
+ $Script:InstallAsService = $false
+ $ServiceUserLabel.Visible = $false
+ $ServiceUserLabel.Enabled = $false
+ $ServiceUserBox.Visible = $false
+ $ServiceUserBox.Enabled = $false
+ }
+}
+function UserSelect {
+ if($ServiceUserBox.Text -eq 'Local System')
+ {
+ $Script:InstallServiceAsUser = $false
+ $Script:UserCredentials = $null
+ $ServiceUserBox.Items.RemoveAt(1)
+ $ServiceUserBox.Items.Add("Custom User")
+ }elseif($ServiceUserBox.Text -eq 'Custom User'){
+ $Script:InstallServiceAsUser = $true
+ $Script:UserCredentials = Get-Credential -Message "Please enter the credentials of the user you with to run Jellyfin Service as" -UserName $env:USERNAME
+ $ServiceUserBox.Items[1] = "$($Script:UserCredentials.UserName)"
+ }
+}
+function CreateShortcutBoxCheckChanged {
+ if($CreateShortcutCheck.Checked){
+ $Script:CreateShortcut = $true
+ }else{
+ $Script:CreateShortcut = $False
+ }
+}
+function StartJellyFinBoxCheckChanged {
+ if($StartProgramCheck.Checked){
+ $Script:StartJellyfin = $true
+ }else{
+ $Script:StartJellyfin = $false
+ }
+}
+
+function CustomLibraryCheckChanged {
+ if($CustomLibraryCheck.Checked){
+ $Script:UseCustomLibrary = $true
+ $CustomLibraryBox.Enabled = $true
+ }else{
+ $Script:UseCustomLibrary = $false
+ $CustomLibraryBox.Enabled = $false
+ }
+}
+
+function MigrateLibraryCheckboxChanged {
+
+ if($MigrateLibraryCheck.Checked){
+ $Script:MigrateLibrary = $true
+ $LibraryMigrationLabel.Visible = $true
+ $LibraryMigrationLabel.Enabled = $true
+ $LibraryLocationBox.Visible = $true
+ $LibraryLocationBox.Enabled = $true
+ }else{
+ $Script:MigrateLibrary = $false
+ $LibraryMigrationLabel.Visible = $false
+ $LibraryMigrationLabel.Enabled = $false
+ $LibraryLocationBox.Visible = $false
+ $LibraryLocationBox.Enabled = $false
+ }
+
+}
+
+
+#region begin GUI{
+
+$InstallForm = New-Object system.Windows.Forms.Form
+$InstallForm.ClientSize = '320,240'
+$InstallForm.text = "Terrible Jellyfin Installer"
+$InstallForm.TopMost = $false
+
+$GUIElementsCollection = @()
+
+$InstallButton = New-Object system.Windows.Forms.Button
+$InstallButton.text = "Install"
+$InstallButton.width = 60
+$InstallButton.height = 30
+$InstallButton.location = New-Object System.Drawing.Point(5,5)
+$InstallButton.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallButton
+
+$ProgressBar = New-Object system.Windows.Forms.ProgressBar
+$ProgressBar.width = 245
+$ProgressBar.height = 30
+$ProgressBar.location = New-Object System.Drawing.Point(70,5)
+
+$InstallLocationLabel = New-Object system.Windows.Forms.Label
+$InstallLocationLabel.text = "Install Location"
+$InstallLocationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$InstallLocationLabel.AutoSize = $true
+$InstallLocationLabel.width = 100
+$InstallLocationLabel.height = 20
+$InstallLocationLabel.location = New-Object System.Drawing.Point(5,50)
+$InstallLocationLabel.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallLocationLabel
+
+$InstallLocationBox = New-Object system.Windows.Forms.TextBox
+$InstallLocationBox.multiline = $false
+$InstallLocationBox.width = 205
+$InstallLocationBox.height = 20
+$InstallLocationBox.location = New-Object System.Drawing.Point(110,50)
+$InstallLocationBox.Text = $Script:DefaultJellyfinInstallDirectory
+$InstallLocationBox.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallLocationBox
+
+$CustomLibraryCheck = New-Object system.Windows.Forms.CheckBox
+$CustomLibraryCheck.text = "Custom Library Location:"
+$CustomLibraryCheck.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$CustomLibraryCheck.AutoSize = $false
+$CustomLibraryCheck.width = 180
+$CustomLibraryCheck.height = 20
+$CustomLibraryCheck.location = New-Object System.Drawing.Point(5,75)
+$CustomLibraryCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $CustomLibraryCheck
+
+$CustomLibraryBox = New-Object system.Windows.Forms.TextBox
+$CustomLibraryBox.multiline = $false
+$CustomLibraryBox.width = 130
+$CustomLibraryBox.height = 20
+$CustomLibraryBox.location = New-Object System.Drawing.Point(185,75)
+$CustomLibraryBox.Text = $Script:JellyFinDataDir
+$CustomLibraryBox.Font = 'Microsoft Sans Serif,10'
+$CustomLibraryBox.Enabled = $false
+$GUIElementsCollection += $CustomLibraryBox
+
+$InstallAsServiceCheck = New-Object system.Windows.Forms.CheckBox
+$InstallAsServiceCheck.text = "Install as Service"
+$InstallAsServiceCheck.AutoSize = $false
+$InstallAsServiceCheck.width = 140
+$InstallAsServiceCheck.height = 20
+$InstallAsServiceCheck.location = New-Object System.Drawing.Point(5,125)
+$InstallAsServiceCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallAsServiceCheck
+
+$ServiceUserLabel = New-Object system.Windows.Forms.Label
+$ServiceUserLabel.text = "Run Service As:"
+$ServiceUserLabel.AutoSize = $true
+$ServiceUserLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$ServiceUserLabel.width = 100
+$ServiceUserLabel.height = 20
+$ServiceUserLabel.location = New-Object System.Drawing.Point(15,145)
+$ServiceUserLabel.Font = 'Microsoft Sans Serif,10'
+$ServiceUserLabel.Visible = $false
+$ServiceUserLabel.Enabled = $false
+$GUIElementsCollection += $ServiceUserLabel
+
+$ServiceUserBox = New-Object system.Windows.Forms.ComboBox
+$ServiceUserBox.text = "Run Service As"
+$ServiceUserBox.width = 195
+$ServiceUserBox.height = 20
+@('Local System','Custom User') | ForEach-Object {[void] $ServiceUserBox.Items.Add($_)}
+$ServiceUserBox.location = New-Object System.Drawing.Point(120,145)
+$ServiceUserBox.Font = 'Microsoft Sans Serif,10'
+$ServiceUserBox.Visible = $false
+$ServiceUserBox.Enabled = $false
+$ServiceUserBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
+$GUIElementsCollection += $ServiceUserBox
+
+$MigrateLibraryCheck = New-Object system.Windows.Forms.CheckBox
+$MigrateLibraryCheck.text = "Import Emby/Old JF Library"
+$MigrateLibraryCheck.AutoSize = $false
+$MigrateLibraryCheck.width = 160
+$MigrateLibraryCheck.height = 20
+$MigrateLibraryCheck.location = New-Object System.Drawing.Point(5,170)
+$MigrateLibraryCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $MigrateLibraryCheck
+
+$LibraryMigrationLabel = New-Object system.Windows.Forms.Label
+$LibraryMigrationLabel.text = "Emby/Old JF Library Path"
+$LibraryMigrationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$LibraryMigrationLabel.AutoSize = $false
+$LibraryMigrationLabel.width = 120
+$LibraryMigrationLabel.height = 20
+$LibraryMigrationLabel.location = New-Object System.Drawing.Point(15,190)
+$LibraryMigrationLabel.Font = 'Microsoft Sans Serif,10'
+$LibraryMigrationLabel.Visible = $false
+$LibraryMigrationLabel.Enabled = $false
+$GUIElementsCollection += $LibraryMigrationLabel
+
+$LibraryLocationBox = New-Object system.Windows.Forms.TextBox
+$LibraryLocationBox.multiline = $false
+$LibraryLocationBox.width = 175
+$LibraryLocationBox.height = 20
+$LibraryLocationBox.location = New-Object System.Drawing.Point(140,190)
+$LibraryLocationBox.Text = $Script:defaultEmbyDataDir
+$LibraryLocationBox.Font = 'Microsoft Sans Serif,10'
+$LibraryLocationBox.Visible = $false
+$LibraryLocationBox.Enabled = $false
+$GUIElementsCollection += $LibraryLocationBox
+
+$CreateShortcutCheck = New-Object system.Windows.Forms.CheckBox
+$CreateShortcutCheck.text = "Desktop Shortcut"
+$CreateShortcutCheck.AutoSize = $false
+$CreateShortcutCheck.width = 150
+$CreateShortcutCheck.height = 20
+$CreateShortcutCheck.location = New-Object System.Drawing.Point(5,215)
+$CreateShortcutCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $CreateShortcutCheck
+
+$StartProgramCheck = New-Object system.Windows.Forms.CheckBox
+$StartProgramCheck.text = "Start Jellyfin"
+$StartProgramCheck.AutoSize = $false
+$StartProgramCheck.width = 160
+$StartProgramCheck.height = 20
+$StartProgramCheck.location = New-Object System.Drawing.Point(160,215)
+$StartProgramCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $StartProgramCheck
+
+$InstallForm.controls.AddRange($GUIElementsCollection)
+$InstallForm.Controls.Add($ProgressBar)
+
+#region gui events {
+$InstallButton.Add_Click({ InstallJellyfin })
+$CustomLibraryCheck.Add_CheckedChanged({CustomLibraryCheckChanged})
+$InstallAsServiceCheck.Add_CheckedChanged({ServiceBoxCheckChanged})
+$ServiceUserBox.Add_SelectedValueChanged({ UserSelect })
+$MigrateLibraryCheck.Add_CheckedChanged({MigrateLibraryCheckboxChanged})
+$CreateShortcutCheck.Add_CheckedChanged({CreateShortcutBoxCheckChanged})
+$StartProgramCheck.Add_CheckedChanged({StartJellyFinBoxCheckChanged})
+#endregion events }
+
+#endregion GUI }
+
+
+[void]$InstallForm.ShowDialog()
diff --git a/deployment/old/windows/legacy/install.bat b/deployment/old/windows/legacy/install.bat
new file mode 100644
index 0000000000..e21479a79a
--- /dev/null
+++ b/deployment/old/windows/legacy/install.bat
@@ -0,0 +1 @@
+powershell.exe -executionpolicy Bypass -file install-jellyfin.ps1
diff --git a/deployment/portable/Dockerfile b/deployment/portable/Dockerfile
deleted file mode 100644
index 965eb82b86..0000000000
--- a/deployment/portable/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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/portable/clean.sh b/deployment/portable/clean.sh
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/portable/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/portable/dependencies.txt b/deployment/portable/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/portable/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/portable/docker-build.sh b/deployment/portable/docker-build.sh
deleted file mode 100755
index 094190bbf6..0000000000
--- a/deployment/portable/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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/portable/package.sh b/deployment/portable/package.sh
deleted file mode 100755
index 0ceb54dda1..0000000000
--- a/deployment/portable/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/ubuntu-package-arm64/Dockerfile.amd64 b/deployment/ubuntu-package-arm64/Dockerfile.amd64
deleted file mode 100644
index b11994a18a..0000000000
--- a/deployment/ubuntu-package-arm64/Dockerfile.amd64
+++ /dev/null
@@ -1,59 +0,0 @@
-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/ubuntu-package-arm64/Dockerfile.arm64 b/deployment/ubuntu-package-arm64/Dockerfile.arm64
deleted file mode 100644
index 8f004b2f1a..0000000000
--- a/deployment/ubuntu-package-arm64/Dockerfile.arm64
+++ /dev/null
@@ -1,40 +0,0 @@
-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/ubuntu-package-arm64/clean.sh b/deployment/ubuntu-package-arm64/clean.sh
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/ubuntu-package-arm64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/ubuntu-package-arm64/dependencies.txt b/deployment/ubuntu-package-arm64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/ubuntu-package-arm64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/ubuntu-package-arm64/docker-build.sh b/deployment/ubuntu-package-arm64/docker-build.sh
deleted file mode 100755
index 67ab6bd74b..0000000000
--- a/deployment/ubuntu-package-arm64/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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/ubuntu-package-arm64/package.sh b/deployment/ubuntu-package-arm64/package.sh
deleted file mode 100755
index d1140a7274..0000000000
--- a/deployment/ubuntu-package-arm64/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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/ubuntu-package-arm64/pkg-src b/deployment/ubuntu-package-arm64/pkg-src
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/ubuntu-package-arm64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../debian-package-x64/pkg-src
\ No newline at end of file
diff --git a/deployment/ubuntu-package-armhf/Dockerfile.amd64 b/deployment/ubuntu-package-armhf/Dockerfile.amd64
deleted file mode 100644
index e475b14389..0000000000
--- a/deployment/ubuntu-package-armhf/Dockerfile.amd64
+++ /dev/null
@@ -1,59 +0,0 @@
-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/ubuntu-package-armhf/Dockerfile.armhf b/deployment/ubuntu-package-armhf/Dockerfile.armhf
deleted file mode 100644
index 0e71fa6938..0000000000
--- a/deployment/ubuntu-package-armhf/Dockerfile.armhf
+++ /dev/null
@@ -1,40 +0,0 @@
-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/ubuntu-package-armhf/clean.sh b/deployment/ubuntu-package-armhf/clean.sh
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/ubuntu-package-armhf/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/ubuntu-package-armhf/dependencies.txt b/deployment/ubuntu-package-armhf/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/ubuntu-package-armhf/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/ubuntu-package-armhf/docker-build.sh b/deployment/ubuntu-package-armhf/docker-build.sh
deleted file mode 100755
index 1bd7fb2911..0000000000
--- a/deployment/ubuntu-package-armhf/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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/ubuntu-package-armhf/package.sh b/deployment/ubuntu-package-armhf/package.sh
deleted file mode 100755
index 2ceb3e8165..0000000000
--- a/deployment/ubuntu-package-armhf/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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/ubuntu-package-armhf/pkg-src b/deployment/ubuntu-package-armhf/pkg-src
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/ubuntu-package-armhf/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../debian-package-x64/pkg-src
\ No newline at end of file
diff --git a/deployment/ubuntu-package-x64/Dockerfile b/deployment/ubuntu-package-x64/Dockerfile
deleted file mode 100644
index e2dda6392c..0000000000
--- a/deployment/ubuntu-package-x64/Dockerfile
+++ /dev/null
@@ -1,36 +0,0 @@
-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/ubuntu-package-x64/clean.sh b/deployment/ubuntu-package-x64/clean.sh
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/ubuntu-package-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/ubuntu-package-x64/dependencies.txt b/deployment/ubuntu-package-x64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/ubuntu-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/ubuntu-package-x64/docker-build.sh b/deployment/ubuntu-package-x64/docker-build.sh
deleted file mode 100755
index 962a522ebc..0000000000
--- a/deployment/ubuntu-package-x64/docker-build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/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/ubuntu-package-x64/package.sh b/deployment/ubuntu-package-x64/package.sh
deleted file mode 100755
index 08c003778b..0000000000
--- a/deployment/ubuntu-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/ubuntu-package-x64/pkg-src b/deployment/ubuntu-package-x64/pkg-src
deleted file mode 120000
index 0bb6d55249..0000000000
--- a/deployment/ubuntu-package-x64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../debian-package-x64/pkg-src/
\ No newline at end of file
diff --git a/deployment/unraid/docker-templates/README.md b/deployment/unraid/docker-templates/README.md
deleted file mode 100644
index 2c268e8b3e..0000000000
--- a/deployment/unraid/docker-templates/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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/unraid/docker-templates/jellyfin.xml b/deployment/unraid/docker-templates/jellyfin.xml
deleted file mode 100644
index 57b4cc5ae1..0000000000
--- a/deployment/unraid/docker-templates/jellyfin.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml
- False
- MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos
- Jellyfin
-
- 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.
-
-
- 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!
-
- https://www.reddit.com/r/jellyfin/
- https://hub.docker.com/r/jellyfin/jellyfin/
- https://github.com/jellyfin/jellyfin/>
- jellyfin/jellyfin
- https://jellyfin.media/
- true
- false
-
- host
-
-
- 8096
- 8096
- tcp
-
-
-
-
-
- /mnt/user/appdata/Jellyfin
- /config
- rw
-
-
- /mnt/user
- /media
- rw
-
-
- /mnt/user/appdata/Jellyfin/cache/
- /cache
- rw
-
-
- http://[IP]:[PORT:8096]/
- https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png
-
-
diff --git a/deployment/win-x64/Dockerfile b/deployment/win-x64/Dockerfile
deleted file mode 100644
index 8a33749541..0000000000
--- a/deployment/win-x64/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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/win-x64/clean.sh b/deployment/win-x64/clean.sh
deleted file mode 100755
index 6c183f3371..0000000000
--- a/deployment/win-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/win-x64/dependencies.txt b/deployment/win-x64/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/win-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/win-x64/docker-build.sh b/deployment/win-x64/docker-build.sh
deleted file mode 100755
index 79e5fb0bcd..0000000000
--- a/deployment/win-x64/docker-build.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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/win-x64/package.sh b/deployment/win-x64/package.sh
deleted file mode 100755
index a8ab190fa5..0000000000
--- a/deployment/win-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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/win-x86/Dockerfile b/deployment/win-x86/Dockerfile
deleted file mode 100644
index f8dc5be83d..0000000000
--- a/deployment/win-x86/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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/win-x86/clean.sh b/deployment/win-x86/clean.sh
deleted file mode 100755
index 8b78c5e4b6..0000000000
--- a/deployment/win-x86/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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/win-x86/dependencies.txt b/deployment/win-x86/dependencies.txt
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/win-x86/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/win-x86/docker-build.sh b/deployment/win-x86/docker-build.sh
deleted file mode 100755
index 977dcf78fa..0000000000
--- a/deployment/win-x86/docker-build.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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/win-x86/package.sh b/deployment/win-x86/package.sh
deleted file mode 100755
index 65e7e2928c..0000000000
--- a/deployment/win-x86/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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}"
diff --git a/deployment/windows/build-jellyfin.ps1 b/deployment/windows/build-jellyfin.ps1
deleted file mode 100644
index c762137a75..0000000000
--- a/deployment/windows/build-jellyfin.ps1
+++ /dev/null
@@ -1,190 +0,0 @@
-[CmdletBinding()]
-param(
- [switch]$MakeNSIS,
- [switch]$InstallNSIS,
- [switch]$InstallFFMPEG,
- [switch]$InstallNSSM,
- [switch]$SkipJellyfinBuild,
- [switch]$GenerateZip,
- [string]$InstallLocation = "./dist/jellyfin-win-nsis",
- [string]$UXLocation = "../jellyfin-ux",
- [switch]$InstallTrayApp,
- [ValidateSet('Debug','Release')][string]$BuildType = 'Release',
- [ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
- [ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
- [ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
-)
-
-$ProgressPreference = 'SilentlyContinue' # Speedup all downloads by hiding progress bars.
-
-#PowershellCore and *nix check to make determine which temp dir to use.
-if(($PSVersionTable.PSEdition -eq 'Core') -and (-not $IsWindows)){
- $TempDir = mktemp -d
-}else{
- $TempDir = $env:Temp
-}
-#Create staging dir
-New-Item -ItemType Directory -Force -Path $InstallLocation
-$ResolvedInstallLocation = Resolve-Path $InstallLocation
-$ResolvedUXLocation = Resolve-Path $UXLocation
-
-function Build-JellyFin {
- if(($Architecture -eq 'arm64') -and ($WindowsVersion -ne 'win10')){
- Write-Error "arm64 only supported with Windows10 Version"
- exit
- }
- if(($Architecture -eq 'arm') -and ($WindowsVersion -notin @('win10','win81','win8'))){
- Write-Error "arm only supported with Windows 8 or higher"
- exit
- }
- Write-Verbose "windowsversion-Architecture: $windowsversion-$Architecture"
- Write-Verbose "InstallLocation: $ResolvedInstallLocation"
- Write-Verbose "DotNetVerbosity: $DotNetVerbosity"
- dotnet publish --self-contained -c $BuildType --output $ResolvedInstallLocation -v $DotNetVerbosity -p:GenerateDocumentationFile=false -p:DebugSymbols=false -p:DebugType=none --runtime `"$windowsversion-$Architecture`" Jellyfin.Server
-}
-
-function Install-FFMPEG {
- param(
- [string]$ResolvedInstallLocation,
- [string]$Architecture,
- [string]$FFMPEGVersionX86 = "ffmpeg-4.2.1-win32-shared"
- )
- Write-Verbose "Checking Architecture"
- if($Architecture -notin @('x86','x64')){
- Write-Warning "No builds available for your selected architecture of $Architecture"
- Write-Warning "FFMPEG will not be installed"
- }elseif($Architecture -eq 'x64'){
- Write-Verbose "Downloading 64 bit FFMPEG"
- Invoke-WebRequest -Uri https://repo.jellyfin.org/releases/server/windows/ffmpeg/jellyfin-ffmpeg.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
- }else{
- Write-Verbose "Downloading 32 bit FFMPEG"
- Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/shared/$FFMPEGVersionX86.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
- }
-
- Expand-Archive "$tempdir/ffmpeg.zip" -DestinationPath "$tempdir/ffmpeg/" -Force | Write-Verbose
- if($Architecture -eq 'x64'){
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/ffmpeg" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }else{
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/ffmpeg/$FFMPEGVersionX86/bin" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }
- Remove-Item "$tempdir/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
- Remove-Item "$tempdir/ffmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
-}
-
-function Install-NSSM {
- param(
- [string]$ResolvedInstallLocation,
- [string]$Architecture
- )
- Write-Verbose "Checking Architecture"
- if($Architecture -notin @('x86','x64')){
- Write-Warning "No builds available for your selected architecture of $Architecture"
- Write-Warning "NSSM will not be installed"
- }else{
- Write-Verbose "Downloading NSSM"
- # [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- # Temporary workaround, file is hosted in an azure blob with a custom domain in front for brevity
- Invoke-WebRequest -Uri http://files.evilt.win/nssm/nssm-2.24-101-g897c7ad.zip -UseBasicParsing -OutFile "$tempdir/nssm.zip" | Write-Verbose
- }
-
- Expand-Archive "$tempdir/nssm.zip" -DestinationPath "$tempdir/nssm/" -Force | Write-Verbose
- if($Architecture -eq 'x64'){
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win64" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }else{
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win32" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }
- Remove-Item "$tempdir/nssm/" -Recurse -Force -ErrorAction Continue | Write-Verbose
- Remove-Item "$tempdir/nssm.zip" -Force -ErrorAction Continue | Write-Verbose
-}
-
-function Make-NSIS {
- param(
- [string]$ResolvedInstallLocation
- )
-
- $env:InstallLocation = $ResolvedInstallLocation
- if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
- & "$tempdir/nsis/nsis-3.04/makensis.exe" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
- } else {
- & "makensis" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
- }
- Copy-Item .\deployment\windows\jellyfin_*.exe $ResolvedInstallLocation\..\
-}
-
-
-function Install-NSIS {
- Write-Verbose "Downloading NSIS"
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- Invoke-WebRequest -Uri https://nchc.dl.sourceforge.net/project/nsis/NSIS%203/3.04/nsis-3.04.zip -UseBasicParsing -OutFile "$tempdir/nsis.zip" | Write-Verbose
-
- Expand-Archive "$tempdir/nsis.zip" -DestinationPath "$tempdir/nsis/" -Force | Write-Verbose
-}
-
-function Cleanup-NSIS {
- Remove-Item "$tempdir/nsis/" -Recurse -Force -ErrorAction Continue | Write-Verbose
- Remove-Item "$tempdir/nsis.zip" -Force -ErrorAction Continue | Write-Verbose
-}
-
-function Install-TrayApp {
- param(
- [string]$ResolvedInstallLocation,
- [string]$Architecture
- )
- Write-Verbose "Checking Architecture"
- if($Architecture -ne 'x64'){
- Write-Warning "No builds available for your selected architecture of $Architecture"
- Write-Warning "The tray app will not be available."
- }else{
- Write-Verbose "Downloading Tray App and copying to Jellyfin location"
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- Invoke-WebRequest -Uri https://github.com/jellyfin/jellyfin-windows-tray/releases/latest/download/JellyfinTray.exe -UseBasicParsing -OutFile "$installLocation/JellyfinTray.exe" | Write-Verbose
- }
-}
-
-if(-not $SkipJellyfinBuild.IsPresent -and -not ($InstallNSIS -eq $true)){
- Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
- Build-JellyFin
-}
-if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
- Write-Verbose "Starting FFMPEG Install"
- Install-FFMPEG $ResolvedInstallLocation $Architecture
-}
-if($InstallNSSM.IsPresent -or ($InstallNSSM -eq $true)){
- Write-Verbose "Starting NSSM Install"
- Install-NSSM $ResolvedInstallLocation $Architecture
-}
-if($InstallTrayApp.IsPresent -or ($InstallTrayApp -eq $true)){
- Write-Verbose "Downloading Windows Tray App"
- Install-TrayApp $ResolvedInstallLocation $Architecture
-}
-#Copy-Item .\deployment\windows\install-jellyfin.ps1 $ResolvedInstallLocation\install-jellyfin.ps1
-#Copy-Item .\deployment\windows\install.bat $ResolvedInstallLocation\install.bat
-Copy-Item .\LICENSE $ResolvedInstallLocation\LICENSE
-if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
- Write-Verbose "Installing NSIS"
- Install-NSIS
-}
-if($MakeNSIS.IsPresent -or ($MakeNSIS -eq $true)){
- Write-Verbose "Starting NSIS Package creation"
- Make-NSIS $ResolvedInstallLocation
-}
-if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
- Write-Verbose "Cleanup NSIS"
- Cleanup-NSIS
-}
-if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
- Compress-Archive -Path $ResolvedInstallLocation -DestinationPath "$ResolvedInstallLocation/jellyfin.zip" -Force
-}
-Write-Verbose "Finished"
diff --git a/deployment/windows/dependencies.txt b/deployment/windows/dependencies.txt
deleted file mode 100644
index 16f77cce7c..0000000000
--- a/deployment/windows/dependencies.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-dotnet
-nsis
diff --git a/deployment/windows/dialogs/confirmation.nsddef b/deployment/windows/dialogs/confirmation.nsddef
deleted file mode 100644
index 969ebacd62..0000000000
--- a/deployment/windows/dialogs/confirmation.nsddef
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
diff --git a/deployment/windows/dialogs/confirmation.nsdinc b/deployment/windows/dialogs/confirmation.nsdinc
deleted file mode 100644
index f00e9b43ab..0000000000
--- a/deployment/windows/dialogs/confirmation.nsdinc
+++ /dev/null
@@ -1,61 +0,0 @@
-; =========================================================
-; This file was generated by NSISDialogDesigner 1.4.4.0
-; http://coolsoft.altervista.org/nsisdialogdesigner
-;
-; Do not edit it manually, use NSISDialogDesigner instead!
-; Modified by EraYaN (2019-09-01)
-; =========================================================
-
-; handle variables
-Var hCtl_confirmation
-Var hCtl_confirmation_ConfirmRichText
-
-; HeaderCustomScript
-!include "helpers\StrSlash.nsh"
-
-
-
-; dialog create function
-Function fnc_confirmation_Create
-
- ; === confirmation (type: Dialog) ===
- nsDialogs::Create 1018
- Pop $hCtl_confirmation
- ${If} $hCtl_confirmation == error
- Abort
- ${EndIf}
- !insertmacro MUI_HEADER_TEXT "Confirmation Page" "Please confirm your choices for Jellyfin Server installation"
-
- ; === ConfirmRichText (type: RichText) ===
- nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 8u 7u 280u 126u ""
- Pop $hCtl_confirmation_ConfirmRichText
- ${NSD_AddExStyle} $hCtl_confirmation_ConfirmRichText ${WS_EX_STATICEDGE}
-
- ; CreateFunctionCustomScript
- ${StrSlash} '$0' $INSTDIR
-
- ${StrSlash} '$1' $_JELLYFINDATADIR_
-
- ${If} $_INSTALLSERVICE_ == "Yes"
- ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
- \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
- Installation Folder:\b0 $0\line\b \
- Service install:\b0 $_INSTALLSERVICE_\line\b \
- Service start:\b0 $_SERVICESTART_\line\b \
- Service account:\b0 $_SERVICEACCOUNTTYPE_\line\b \
- Jellyfin Data Folder:\b0 $1\par \
- \
- \pard\sa200\sl276\slmult1\f1\lang1043\par \
- }"
- ${Else}
- ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
- \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
- Installation Folder:\b0 $0\line\b \
- Service install:\b0 $_INSTALLSERVICE_\line\b \
- Jellyfin Data Folder:\b0 $1\par \
- \
- \pard\sa200\sl276\slmult1\f1\lang1043\par \
- }"
- ${EndIf}
-
-FunctionEnd
diff --git a/deployment/windows/dialogs/service-config.nsddef b/deployment/windows/dialogs/service-config.nsddef
deleted file mode 100644
index 3509ada249..0000000000
--- a/deployment/windows/dialogs/service-config.nsddef
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/deployment/windows/dialogs/service-config.nsdinc b/deployment/windows/dialogs/service-config.nsdinc
deleted file mode 100644
index 58c350f2ec..0000000000
--- a/deployment/windows/dialogs/service-config.nsdinc
+++ /dev/null
@@ -1,56 +0,0 @@
-; =========================================================
-; This file was generated by NSISDialogDesigner 1.4.4.0
-; http://coolsoft.altervista.org/nsisdialogdesigner
-;
-; Do not edit it manually, use NSISDialogDesigner instead!
-; =========================================================
-
-; handle variables
-Var hCtl_service_config
-Var hCtl_service_config_StartServiceAfterInstall
-Var hCtl_service_config_LocalSystemAccountLabel
-Var hCtl_service_config_NetworkServiceAccountLabel
-Var hCtl_service_config_UseLocalSystemAccount
-Var hCtl_service_config_UseNetworkServiceAccount
-Var hCtl_service_config_Font1
-
-
-; dialog create function
-Function fnc_service_config_Create
-
- ; custom font definitions
- CreateFont $hCtl_service_config_Font1 "Microsoft Sans Serif" "8.25" "700"
-
- ; === service_config (type: Dialog) ===
- nsDialogs::Create 1018
- Pop $hCtl_service_config
- ${If} $hCtl_service_config == error
- Abort
- ${EndIf}
- !insertmacro MUI_HEADER_TEXT "Configure the service" "This controls what type of access the server gets to this system."
-
- ; === StartServiceAfterInstall (type: Checkbox) ===
- ${NSD_CreateCheckbox} 8u 118u 280u 15u "Start Service after Install"
- Pop $hCtl_service_config_StartServiceAfterInstall
- ${NSD_Check} $hCtl_service_config_StartServiceAfterInstall
-
- ; === LocalSystemAccountLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 71u 280u 28u "The Local System account has full access to every resource and file on the system. This can have very real security implications, do not use unless absolutely neseccary."
- Pop $hCtl_service_config_LocalSystemAccountLabel
-
- ; === NetworkServiceAccountLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 24u 280u 28u "The NetworkService account is a predefined local account used by the service control manager. It is the recommended way to install the Jellyfin Server service."
- Pop $hCtl_service_config_NetworkServiceAccountLabel
-
- ; === UseLocalSystemAccount (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 54u 280u 15u "Use Local System account"
- Pop $hCtl_service_config_UseLocalSystemAccount
- ${NSD_AddStyle} $hCtl_service_config_UseLocalSystemAccount ${WS_GROUP}
-
- ; === UseNetworkServiceAccount (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 7u 280u 15u "Use Network Service account (Recommended)"
- Pop $hCtl_service_config_UseNetworkServiceAccount
- SendMessage $hCtl_service_config_UseNetworkServiceAccount ${WM_SETFONT} $hCtl_service_config_Font1 0
- ${NSD_Check} $hCtl_service_config_UseNetworkServiceAccount
-
-FunctionEnd
diff --git a/deployment/windows/dialogs/setuptype.nsddef b/deployment/windows/dialogs/setuptype.nsddef
deleted file mode 100644
index b55ceeaaa6..0000000000
--- a/deployment/windows/dialogs/setuptype.nsddef
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/deployment/windows/dialogs/setuptype.nsdinc b/deployment/windows/dialogs/setuptype.nsdinc
deleted file mode 100644
index 8746ad2cc6..0000000000
--- a/deployment/windows/dialogs/setuptype.nsdinc
+++ /dev/null
@@ -1,50 +0,0 @@
-; =========================================================
-; This file was generated by NSISDialogDesigner 1.4.4.0
-; http://coolsoft.altervista.org/nsisdialogdesigner
-;
-; Do not edit it manually, use NSISDialogDesigner instead!
-; =========================================================
-
-; handle variables
-Var hCtl_setuptype
-Var hCtl_setuptype_InstallasaServiceLabel
-Var hCtl_setuptype_InstallasaService
-Var hCtl_setuptype_BasicInstallLabel
-Var hCtl_setuptype_BasicInstall
-Var hCtl_setuptype_Font1
-
-
-; dialog create function
-Function fnc_setuptype_Create
-
- ; custom font definitions
- CreateFont $hCtl_setuptype_Font1 "Microsoft Sans Serif" "8.25" "700"
-
- ; === setuptype (type: Dialog) ===
- nsDialogs::Create 1018
- Pop $hCtl_setuptype
- ${If} $hCtl_setuptype == error
- Abort
- ${EndIf}
- !insertmacro MUI_HEADER_TEXT "Setup Type" "Control how Jellyfin is installed."
-
- ; === InstallasaServiceLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 71u 280u 28u "Install Jellyfin as a service. This method is recommended for Advanced Users. Additional setup is required to access network shares."
- Pop $hCtl_setuptype_InstallasaServiceLabel
-
- ; === InstallasaService (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 54u 280u 15u "Install as a Service (Advanced Users)"
- Pop $hCtl_setuptype_InstallasaService
- ${NSD_AddStyle} $hCtl_setuptype_InstallasaService ${WS_GROUP}
-
- ; === BasicInstallLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 24u 280u 28u "The basic install will run Jellyfin in your current user account.$\nThis is recommended for new users and those with existing Jellyfin installs older than 10.4."
- Pop $hCtl_setuptype_BasicInstallLabel
-
- ; === BasicInstall (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 7u 280u 15u "Basic Install (Recommended)"
- Pop $hCtl_setuptype_BasicInstall
- SendMessage $hCtl_setuptype_BasicInstall ${WM_SETFONT} $hCtl_setuptype_Font1 0
- ${NSD_Check} $hCtl_setuptype_BasicInstall
-
-FunctionEnd
diff --git a/deployment/windows/helpers/ShowError.nsh b/deployment/windows/helpers/ShowError.nsh
deleted file mode 100644
index 6e09b1e407..0000000000
--- a/deployment/windows/helpers/ShowError.nsh
+++ /dev/null
@@ -1,10 +0,0 @@
-; Show error
-!macro ShowError TEXT RETRYLABEL
- MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "${TEXT}" IDIGNORE +2 IDRETRY ${RETRYLABEL}
- Abort
-!macroend
-
-!macro ShowErrorFinal TEXT
- MessageBox MB_OK|MB_ICONSTOP "${TEXT}"
- Abort
-!macroend
diff --git a/deployment/windows/helpers/StrSlash.nsh b/deployment/windows/helpers/StrSlash.nsh
deleted file mode 100644
index b8aa771aa6..0000000000
--- a/deployment/windows/helpers/StrSlash.nsh
+++ /dev/null
@@ -1,47 +0,0 @@
-; Adapted from: https://nsis.sourceforge.io/Another_String_Replace_(and_Slash/BackSlash_Converter) (2019-08-31)
-
-!macro _StrSlashConstructor out in
- Push "${in}"
- Push "\"
- Call StrSlash
- Pop ${out}
-!macroend
-
-!define StrSlash '!insertmacro "_StrSlashConstructor"'
-
-; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
-; Push "\"
-; Call StrSlash
-; Pop $R0
-; ;Now $R0 contains 'c:/this/and/that/filename.htm'
-Function StrSlash
- Exch $R3 ; $R3 = needle ("\" or "/")
- Exch
- Exch $R1 ; $R1 = String to replacement in (haystack)
- Push $R2 ; Replaced haystack
- Push $R4 ; $R4 = not $R3 ("/" or "\")
- Push $R6
- Push $R7 ; Scratch reg
- StrCpy $R2 ""
- StrLen $R6 $R1
- StrCpy $R4 "\"
- StrCmp $R3 "/" loop
- StrCpy $R4 "/"
-loop:
- StrCpy $R7 $R1 1
- StrCpy $R1 $R1 $R6 1
- StrCmp $R7 $R3 found
- StrCpy $R2 "$R2$R7"
- StrCmp $R1 "" done loop
-found:
- StrCpy $R2 "$R2$R4"
- StrCmp $R1 "" done loop
-done:
- StrCpy $R3 $R2
- Pop $R7
- Pop $R6
- Pop $R4
- Pop $R2
- Pop $R1
- Exch $R3
-FunctionEnd
diff --git a/deployment/windows/jellyfin.nsi b/deployment/windows/jellyfin.nsi
deleted file mode 100644
index fada62d981..0000000000
--- a/deployment/windows/jellyfin.nsi
+++ /dev/null
@@ -1,575 +0,0 @@
-!verbose 3
-SetCompressor /SOLID bzip2
-ShowInstDetails show
-ShowUninstDetails show
-Unicode True
-
-;--------------------------------
-!define SF_USELECTED 0 ; used to check selected options status, rest are inherited from Sections.nsh
-
- !include "MUI2.nsh"
- !include "Sections.nsh"
- !include "LogicLib.nsh"
-
- !include "helpers\ShowError.nsh"
-
-; Global variables that we'll use
- Var _JELLYFINVERSION_
- Var _JELLYFINDATADIR_
- Var _SETUPTYPE_
- Var _INSTALLSERVICE_
- Var _SERVICESTART_
- Var _SERVICEACCOUNTTYPE_
- Var _EXISTINGINSTALLATION_
- Var _EXISTINGSERVICE_
- Var _MAKESHORTCUTS_
- Var _FOLDEREXISTS_
-;
-!ifdef x64
- !define ARCH "x64"
- !define NAMESUFFIX "(64 bit)"
- !define INSTALL_DIRECTORY "$PROGRAMFILES64\Jellyfin\Server"
-!endif
-
-!ifdef x84
- !define ARCH "x86"
- !define NAMESUFFIX "(32 bit)"
- !define INSTALL_DIRECTORY "$PROGRAMFILES32\Jellyfin\Server"
-!endif
-
-!ifndef ARCH
- !error "Set the Arch with /Dx86 or /Dx64"
-!endif
-
-;--------------------------------
-
- !define REG_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\JellyfinServer" ;Registry to show up in Add/Remove Programs
- !define REG_CONFIG_KEY "Software\Jellyfin\Server" ;Registry to store all configuration
-
- !getdllversion "$%InstallLocation%\jellyfin.dll" ver_ ;Align installer version with jellyfin.dll version
-
- Name "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} ${NAMESUFFIX}" ; This is referred in various header text labels
- OutFile "jellyfin_${ver_1}.${ver_2}.${ver_3}_windows-${ARCH}.exe" ; Naming convention jellyfin_{version}_windows-{arch].exe
- BrandingText "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} Installer" ; This shows in just over the buttons
-
-; installer attributes, these show up in details tab on installer properties
- VIProductVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIProductVersion format, should be X.X.X.X
- VIFileVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIFileVersion format, should be X.X.X.X
- VIAddVersionKey "ProductName" "Jellyfin Server"
- VIAddVersionKey "FileVersion" "${ver_1}.${ver_2}.${ver_3}.0"
- VIAddVersionKey "LegalCopyright" "(c) 2019 Jellyfin Contributors. Code released under the GNU General Public License"
- VIAddVersionKey "FileDescription" "Jellyfin Server: The Free Software Media System"
-
-;TODO, check defaults
- InstallDir ${INSTALL_DIRECTORY} ;Default installation folder
- InstallDirRegKey HKLM "${REG_CONFIG_KEY}" "InstallFolder" ;Read the registry for install folder,
-
- RequestExecutionLevel admin ; ask it upfront for service control, and installing in priv folders
-
- CRCCheck on ; make sure the installer wasn't corrupted while downloading
-
- !define MUI_ABORTWARNING ;Prompts user in case of aborting install
-
-; TODO: Replace with nice Jellyfin Icons
-!ifdef UXPATH
- !define MUI_ICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Installer Icon
- !define MUI_UNICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Uninstaller Icon
-
- !define MUI_HEADERIMAGE
- !define MUI_HEADERIMAGE_BITMAP "${UXPATH}\branding\NSIS\installer-header.bmp"
- !define MUI_WELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
- !define MUI_UNWELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
-!endif
-
-;--------------------------------
-;Pages
-
-; Welcome Page
- !define MUI_WELCOMEPAGE_TEXT "The installer will ask for details to install Jellyfin Server."
- !insertmacro MUI_PAGE_WELCOME
-; License Page
- !insertmacro MUI_PAGE_LICENSE "$%InstallLocation%\LICENSE" ; picking up generic GPL
-
-; Setup Type Page
- Page custom ShowSetupTypePage SetupTypePage_Config
-
-; Components Page
- !define MUI_PAGE_CUSTOMFUNCTION_PRE HideComponentsPage
- !insertmacro MUI_PAGE_COMPONENTS
- !define MUI_PAGE_CUSTOMFUNCTION_PRE HideInstallDirectoryPage ; Controls when to hide / show
- !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Install folder" ; shows just above the folder selection dialog
- !insertmacro MUI_PAGE_DIRECTORY
-
-; Data folder Page
- !define MUI_PAGE_CUSTOMFUNCTION_PRE HideDataDirectoryPage ; Controls when to hide / show
- !define MUI_PAGE_HEADER_TEXT "Choose Data Location"
- !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install the Jellyfin Server data."
- !define MUI_DIRECTORYPAGE_TEXT_TOP "The installer will set the following folder for Jellyfin Server data. To install in a different folder, click Browse and select another folder. Please make sure the folder exists and is accessible. Click Next to continue."
- !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Data folder"
- !define MUI_DIRECTORYPAGE_VARIABLE $_JELLYFINDATADIR_
- !insertmacro MUI_PAGE_DIRECTORY
-
-; Custom Dialogs
- !include "dialogs\setuptype.nsdinc"
- !include "dialogs\service-config.nsdinc"
- !include "dialogs\confirmation.nsdinc"
-
-; Select service account type
- #!define MUI_PAGE_CUSTOMFUNCTION_PRE HideServiceConfigPage ; Controls when to hide / show (This does not work for Page, might need to go PageEx)
- #!define MUI_PAGE_CUSTOMFUNCTION_SHOW fnc_service_config_Show
- #!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ServiceConfigPage_Config
- #!insertmacro MUI_PAGE_CUSTOM ServiceAccountType
- Page custom ShowServiceConfigPage ServiceConfigPage_Config
-
-; Confirmation Page
- Page custom ShowConfirmationPage ; just letting the user know what they chose to install
-
-; Actual Installion Page
- !insertmacro MUI_PAGE_INSTFILES
-
- !insertmacro MUI_UNPAGE_CONFIRM
- !insertmacro MUI_UNPAGE_INSTFILES
- #!insertmacro MUI_UNPAGE_FINISH
-
-;--------------------------------
-;Languages; Add more languages later here if needed
- !insertmacro MUI_LANGUAGE "English"
-
-;--------------------------------
-;Installer Sections
-Section "!Jellyfin Server (required)" InstallJellyfinServer
- SectionIn RO ; Mandatory section, isn't this the whole purpose to run the installer.
-
- StrCmp "$_EXISTINGINSTALLATION_" "Yes" RunUninstaller CarryOn ; Silently uninstall in case of previous installation
-
- RunUninstaller:
- DetailPrint "Looking for uninstaller at $INSTDIR"
- FindFirst $0 $1 "$INSTDIR\Uninstall.exe"
- FindClose $0
- StrCmp $1 "" CarryOn ; the registry key was there but uninstaller was not found
-
- DetailPrint "Silently running the uninstaller at $INSTDIR"
- ExecWait '"$INSTDIR\Uninstall.exe" /S _?=$INSTDIR' $0
- DetailPrint "Uninstall finished, $0"
-
- CarryOn:
- ${If} $_EXISTINGSERVICE_ == 'Yes'
- ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
- ${If} $0 <> 0
- MessageBox MB_OK|MB_ICONSTOP "Could not stop the Jellyfin Server service."
- Abort
- ${EndIf}
- DetailPrint "Stopped Jellyfin Server service, $0"
- ${EndIf}
-
- SetOutPath "$INSTDIR"
-
- File "/oname=icon.ico" "${UXPATH}\branding\NSIS\modern-install.ico"
- File /r $%InstallLocation%\*
-
-
-; Write the InstallFolder, DataFolder, Network Service info into the registry for later use
- WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "InstallFolder" "$INSTDIR"
- WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "DataFolder" "$_JELLYFINDATADIR_"
- WriteRegStr HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" "$_SERVICEACCOUNTTYPE_"
-
- !getdllversion "$%InstallLocation%\jellyfin.dll" ver_
- StrCpy $_JELLYFINVERSION_ "${ver_1}.${ver_2}.${ver_3}" ;
-
-; Write the uninstall keys for Windows
- WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayName" "Jellyfin Server $_JELLYFINVERSION_ ${NAMESUFFIX}"
- WriteRegExpandStr HKLM "${REG_UNINST_KEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
- WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayIcon" '"$INSTDIR\Uninstall.exe",0'
- WriteRegStr HKLM "${REG_UNINST_KEY}" "Publisher" "The Jellyfin Project"
- WriteRegStr HKLM "${REG_UNINST_KEY}" "URLInfoAbout" "https://jellyfin.org/"
- WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayVersion" "$_JELLYFINVERSION_"
- WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoModify" 1
- WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoRepair" 1
-
-;Create uninstaller
- WriteUninstaller "$INSTDIR\Uninstall.exe"
-SectionEnd
-
-Section "Jellyfin Server Service" InstallService
-${If} $_INSTALLSERVICE_ == "Yes" ; Only run this if we're going to install the service!
- ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
- DetailPrint "Jellyfin Server service statuscode, $0"
- ${If} $0 == 0
- InstallRetry:
- ExecWait '"$INSTDIR\nssm.exe" install JellyfinServer "$INSTDIR\jellyfin.exe" --service --datadir \"$_JELLYFINDATADIR_\"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not install the Jellyfin Server service." InstallRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service install, $0"
- ${Else}
- DetailPrint "Jellyfin Server Service exists, updating..."
-
- ConfigureApplicationRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Application "$INSTDIR\jellyfin.exe"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureApplicationRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (Application), $0"
-
- ConfigureAppParametersRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppParameters --service --datadir \"$_JELLYFINDATADIR_\"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureAppParametersRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (AppParameters), $0"
- ${EndIf}
-
-
- Sleep 3000 ; Give time for Windows to catchup
- ConfigureStartRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Start SERVICE_DELAYED_AUTO_START' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureStartRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (Start), $0"
-
- ConfigureDescriptionRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Description "Jellyfin Server: The Free Software Media System"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDescriptionRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (Description), $0"
- ConfigureDisplayNameRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer DisplayName "Jellyfin Server"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDisplayNameRetry
-
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (DisplayName), $0"
-
- Sleep 3000
- ${If} $_SERVICEACCOUNTTYPE_ == "NetworkService" ; the default install using NSSM is Local System
- ConfigureNetworkServiceRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Objectname "Network Service"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service account." ConfigureNetworkServiceRetry
- ${EndIf}
- DetailPrint "Jellyfin Server service account change, $0"
- ${EndIf}
-
- Sleep 3000
- ConfigureDefaultAppExit:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppExit Default Exit' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service app exit action." ConfigureDefaultAppExit
- ${EndIf}
- DetailPrint "Jellyfin Server service exit action set, $0"
-${EndIf}
-
-SectionEnd
-
-Section "-start service" StartService
-${If} $_SERVICESTART_ == "Yes"
-${AndIf} $_INSTALLSERVICE_ == "Yes"
- StartRetry:
- ExecWait '"$INSTDIR\nssm.exe" start JellyfinServer' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not start the Jellyfin Server service." StartRetry
- ${EndIf}
- DetailPrint "Jellyfin Server service start, $0"
-${EndIf}
-SectionEnd
-
-Section "Create Shortcuts" CreateWinShortcuts
- ${If} $_MAKESHORTCUTS_ == "Yes"
- CreateDirectory "$SMPROGRAMS\Jellyfin Server"
- CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin (View Console).lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMAXIMIZED
- CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin Tray App.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
- ;CreateShortCut "$DESKTOP\Jellyfin Server.lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMINIMIZED
- CreateShortCut "$DESKTOP\Jellyfin Server\Jellyfin Server.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
- ${EndIf}
-SectionEnd
-
-;--------------------------------
-;Descriptions
-
-;Language strings
- LangString DESC_InstallJellyfinServer ${LANG_ENGLISH} "Install Jellyfin Server"
- LangString DESC_InstallService ${LANG_ENGLISH} "Install As a Service"
-
-;Assign language strings to sections
- !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${InstallJellyfinServer} $(DESC_InstallJellyfinServer)
- !insertmacro MUI_DESCRIPTION_TEXT ${InstallService} $(DESC_InstallService)
- !insertmacro MUI_FUNCTION_DESCRIPTION_END
-
-;--------------------------------
-;Uninstaller Section
-
-Section "Uninstall"
-
- ReadRegStr $INSTDIR HKLM "${REG_CONFIG_KEY}" "InstallFolder" ; read the installation folder
- ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; read the data folder
- ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; read the account name
-
- DetailPrint "Jellyfin Install location: $INSTDIR"
- DetailPrint "Jellyfin Data folder: $_JELLYFINDATADIR_"
-
- MessageBox MB_YESNO|MB_ICONINFORMATION "Do you want to retain the Jellyfin Server data folder? The media will not be touched. $\r$\nIf unsure choose YES." /SD IDYES IDYES PreserveData
-
- RMDir /r /REBOOTOK "$_JELLYFINDATADIR_"
-
- PreserveData:
-
- ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
- DetailPrint "Jellyfin Server service statuscode, $0"
- IntCmp $0 0 NoServiceUninstall ; service doesn't exist, may be run from desktop shortcut
-
- Sleep 3000 ; Give time for Windows to catchup
-
- UninstallStopRetry:
- ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not stop the Jellyfin Server service." UninstallStopRetry
- ${EndIf}
- DetailPrint "Stopped Jellyfin Server service, $0"
-
- UninstallRemoveRetry:
- ExecWait '"$INSTDIR\nssm.exe" remove JellyfinServer confirm' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not remove the Jellyfin Server service." UninstallRemoveRetry
- ${EndIf}
- DetailPrint "Removed Jellyfin Server service, $0"
-
- Sleep 3000 ; Give time for Windows to catchup
-
- NoServiceUninstall: ; existing install was present but no service was detected. Remove shortcuts if account is set to none
- ${If} $_SERVICEACCOUNTTYPE_ == "None"
- RMDir /r "$SMPROGRAMS\Jellyfin Server"
- Delete "$DESKTOP\Jellyfin Server.lnk"
- DetailPrint "Removed old shortcuts..."
- ${EndIf}
-
- Delete "$INSTDIR\*.*"
- RMDir /r /REBOOTOK "$INSTDIR\jellyfin-web"
- Delete "$INSTDIR\Uninstall.exe"
- RMDir /r /REBOOTOK "$INSTDIR"
-
- DeleteRegKey HKLM "Software\Jellyfin"
- DeleteRegKey HKLM "${REG_UNINST_KEY}"
-
-SectionEnd
-
-Function .onInit
-; Setting up defaults
- StrCpy $_INSTALLSERVICE_ "Yes"
- StrCpy $_SERVICESTART_ "Yes"
- StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
- StrCpy $_EXISTINGINSTALLATION_ "No"
- StrCpy $_EXISTINGSERVICE_ "No"
- StrCpy $_MAKESHORTCUTS_ "No"
-
- SetShellVarContext current
- StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
-
- System::Call 'kernel32::CreateMutex(p 0, i 0, t "JellyfinServerMutex") p .r1 ?e'
- Pop $R0
-
- StrCmp $R0 0 +3
- !insertmacro ShowErrorFinal "The installer is already running."
-
-;Detect if Jellyfin is already installed.
-; In case it is installed, let the user choose either
-; 1. Exit installer
-; 2. Upgrade without messing with data
-; 2a. Don't ask for any details, uninstall and install afresh with old settings
-
-; Read Registry for previous installation
- ClearErrors
- ReadRegStr "$0" HKLM "${REG_CONFIG_KEY}" "InstallFolder"
- IfErrors NoExisitingInstall
-
- DetailPrint "Existing Jellyfin Server detected at: $0"
- StrCpy "$INSTDIR" "$0" ; set the location fro registry as new default
-
- StrCpy $_EXISTINGINSTALLATION_ "Yes" ; Set our flag to be used later
- SectionSetText ${InstallJellyfinServer} "Upgrade Jellyfin Server (required)" ; Change install text to "Upgrade"
-
- ; check if service was run using Network Service account
- ClearErrors
- ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; in case of error _SERVICEACCOUNTTYPE_ will be NetworkService as default
-
- ClearErrors
- ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; in case of error, the default holds
-
- ; Hide sections which will not be needed in case of previous install
- ; SectionSetText ${InstallService} ""
-
-; check if there is a service called Jellyfin, there should be
-; hack : nssm statuscode Jellyfin will return non zero return code in case it exists
- ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
- DetailPrint "Jellyfin Server service statuscode, $0"
- IntCmp $0 0 NoService ; service doesn't exist, may be run from desktop shortcut
-
- ; if service was detected, set defaults going forward.
- StrCpy $_EXISTINGSERVICE_ "Yes"
- StrCpy $_INSTALLSERVICE_ "Yes"
- StrCpy $_SERVICESTART_ "Yes"
- StrCpy $_MAKESHORTCUTS_ "No"
- SectionSetText ${CreateWinShortcuts} ""
-
-
- NoService: ; existing install was present but no service was detected
- ${If} $_SERVICEACCOUNTTYPE_ == "None"
- StrCpy $_SETUPTYPE_ "Basic"
- StrCpy $_INSTALLSERVICE_ "No"
- StrCpy $_SERVICESTART_ "No"
- StrCpy $_MAKESHORTCUTS_ "Yes"
- ${EndIf}
-
-; Let the user know that we'll upgrade and provide an option to quit.
- MessageBox MB_OKCANCEL|MB_ICONINFORMATION "Existing installation of Jellyfin Server was detected, it'll be upgraded, settings will be retained. \
- $\r$\nClick OK to proceed, Cancel to exit installer." /SD IDOK IDOK ProceedWithUpgrade
- Quit ; Quit if the user is not sure about upgrade
-
- ProceedWithUpgrade:
-
- NoExisitingInstall: ; by this time, the variables have been correctly set to reflect previous install details
-
-FunctionEnd
-
-Function HideInstallDirectoryPage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideDataDirectoryPage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideServiceConfigPage
- ${If} $_INSTALLSERVICE_ == "No" ; Not running as a service, don't ask for service type
- ${OrIf} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideConfirmationPage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideSetupTypePage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for SetupType
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideComponentsPage
- ${If} $_SETUPTYPE_ == "Basic" ; Basic installation chosen, don't show components choice
- Abort
- ${EndIf}
-FunctionEnd
-
-; Setup Type dialog show function
-Function ShowSetupTypePage
- Call HideSetupTypePage
- Call fnc_setuptype_Create
- nsDialogs::Show
-FunctionEnd
-
-; Service Config dialog show function
-Function ShowServiceConfigPage
- Call HideServiceConfigPage
- Call fnc_service_config_Create
- nsDialogs::Show
-FunctionEnd
-
-; Confirmation dialog show function
-Function ShowConfirmationPage
- Call HideConfirmationPage
- Call fnc_confirmation_Create
- nsDialogs::Show
-FunctionEnd
-
-; Declare temp variables to read the options from the custom page.
-Var StartServiceAfterInstall
-Var UseNetworkServiceAccount
-Var UseLocalSystemAccount
-Var BasicInstall
-
-
-Function SetupTypePage_Config
-${NSD_GetState} $hCtl_setuptype_BasicInstall $BasicInstall
- IfFileExists "$LOCALAPPDATA\Jellyfin" folderfound foldernotfound ; if the folder exists, use this, otherwise, go with new default
- folderfound:
- StrCpy $_FOLDEREXISTS_ "Yes"
- Goto InstallCheck
- foldernotfound:
- StrCpy $_FOLDEREXISTS_ "No"
- Goto InstallCheck
-
-InstallCheck:
-${If} $BasicInstall == 1
- StrCpy $_SETUPTYPE_ "Basic"
- StrCpy $_INSTALLSERVICE_ "No"
- StrCpy $_SERVICESTART_ "No"
- StrCpy $_SERVICEACCOUNTTYPE_ "None"
- StrCpy $_MAKESHORTCUTS_ "Yes"
- ${If} $_FOLDEREXISTS_ == "Yes"
- StrCpy $_JELLYFINDATADIR_ "$LOCALAPPDATA\Jellyfin\"
- ${EndIf}
-${Else}
- StrCpy $_SETUPTYPE_ "Advanced"
- StrCpy $_INSTALLSERVICE_ "Yes"
- StrCpy $_MAKESHORTCUTS_ "No"
- ${If} $_FOLDEREXISTS_ == "Yes"
- MessageBox MB_OKCANCEL|MB_ICONINFORMATION "An existing data folder was detected.\
- $\r$\nBasic Setup is highly recommended.\
- $\r$\nIf you proceed, you will need to set up Jellyfin again." IDOK GoAhead IDCANCEL GoBack
- GoBack:
- Abort
- ${EndIf}
- GoAhead:
- StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
- SectionSetText ${CreateWinShortcuts} ""
-${EndIf}
-
-FunctionEnd
-
-Function ServiceConfigPage_Config
-${NSD_GetState} $hCtl_service_config_StartServiceAfterInstall $StartServiceAfterInstall
-${If} $StartServiceAfterInstall == 1
- StrCpy $_SERVICESTART_ "Yes"
-${Else}
- StrCpy $_SERVICESTART_ "No"
-${EndIf}
-${NSD_GetState} $hCtl_service_config_UseNetworkServiceAccount $UseNetworkServiceAccount
-${NSD_GetState} $hCtl_service_config_UseLocalSystemAccount $UseLocalSystemAccount
-
-${If} $UseNetworkServiceAccount == 1
- StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
-${ElseIf} $UseLocalSystemAccount == 1
- StrCpy $_SERVICEACCOUNTTYPE_ "LocalSystem"
-${Else}
- !insertmacro ShowErrorFinal "Service account type not properly configured."
-${EndIf}
-
-FunctionEnd
-
-; This function handles the choices during component selection
-Function .onSelChange
-
-; If we are not installing service, we don't need to set the NetworkService account or StartService
- SectionGetFlags ${InstallService} $0
- ${If} $0 = ${SF_SELECTED}
- StrCpy $_INSTALLSERVICE_ "Yes"
- ${Else}
- StrCpy $_INSTALLSERVICE_ "No"
- StrCpy $_SERVICESTART_ "No"
- StrCpy $_SERVICEACCOUNTTYPE_ "None"
- ${EndIf}
-FunctionEnd
-
-Function .onInstSuccess
- #ExecShell "open" "http://localhost:8096"
-FunctionEnd
diff --git a/deployment/windows/legacy/install-jellyfin.ps1 b/deployment/windows/legacy/install-jellyfin.ps1
deleted file mode 100644
index e909a0468e..0000000000
--- a/deployment/windows/legacy/install-jellyfin.ps1
+++ /dev/null
@@ -1,460 +0,0 @@
-[CmdletBinding()]
-
-param(
- [Switch]$Quiet,
- [Switch]$InstallAsService,
- [System.Management.Automation.pscredential]$ServiceUser,
- [switch]$CreateDesktopShorcut,
- [switch]$LaunchJellyfin,
- [switch]$MigrateEmbyLibrary,
- [string]$InstallLocation,
- [string]$EmbyLibraryLocation,
- [string]$JellyfinLibraryLocation
-)
-<# This form was created using POSHGUI.com a free online gui designer for PowerShell
-.NAME
- Install-Jellyfin
-#>
-
-#This doesn't need to be used by default anymore, but I am keeping it in as a function for future use.
-function Elevate-Window {
- # Get the ID and security principal of the current user account
- $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
- $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
-
- # Get the security principal for the Administrator role
- $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
-
- # Check to see if we are currently running "as Administrator"
- if ($myWindowsPrincipal.IsInRole($adminRole))
- {
- # We are running "as Administrator" - so change the title and background color to indicate this
- $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
- $Host.UI.RawUI.BackgroundColor = "DarkBlue"
- clear-host
- }
- else
- {
- # We are not running "as Administrator" - so relaunch as administrator
-
- # Create a new process object that starts PowerShell
- $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
-
- # Specify the current script path and name as a parameter
- $newProcess.Arguments = $myInvocation.MyCommand.Definition;
-
- # Indicate that the process should be elevated
- $newProcess.Verb = "runas";
-
- # Start the new process
- [System.Diagnostics.Process]::Start($newProcess);
-
- # Exit from the current, unelevated, process
- exit
- }
-}
-
-#FIXME The install methods should be a function that takes all the params, the quiet flag should be a paramset
-
-if($Quiet.IsPresent -or $Quiet -eq $true){
- if([string]::IsNullOrEmpty($JellyfinLibraryLocation)){
- $Script:JellyfinDataDir = "$env:LOCALAPPDATA\jellyfin\"
- }else{
- $Script:JellyfinDataDir = $JellyfinLibraryLocation
- }
- if([string]::IsNullOrEmpty($InstallLocation)){
- $Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
- }else{
- $Script:DefaultJellyfinInstallDirectory = $InstallLocation
- }
-
- if([string]::IsNullOrEmpty($EmbyLibraryLocation)){
- $Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\data\"
- }else{
- $Script:defaultEmbyDataDir = $EmbyLibraryLocation
- }
-
- if($InstallAsService.IsPresent -or $InstallAsService -eq $true){
- $Script:InstallAsService = $true
- }else{$Script:InstallAsService = $false}
- if($null -eq $ServiceUser){
- $Script:InstallServiceAsUser = $false
- }else{
- $Script:InstallServiceAsUser = $true
- $Script:UserCredentials = $ServiceUser
- $Script:JellyfinDataDir = "$env:HOMEDRIVE\Users\$($Script:UserCredentials.UserName)\Appdata\Local\jellyfin\"}
- if($CreateDesktopShorcut.IsPresent -or $CreateDesktopShorcut -eq $true) {$Script:CreateShortcut = $true}else{$Script:CreateShortcut = $false}
- if($MigrateEmbyLibrary.IsPresent -or $MigrateEmbyLibrary -eq $true){$Script:MigrateLibrary = $true}else{$Script:MigrateLibrary = $false}
- if($LaunchJellyfin.IsPresent -or $LaunchJellyfin -eq $true){$Script:StartJellyfin = $true}else{$Script:StartJellyfin = $false}
-
- if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
- mkdir $Script:DefaultJellyfinInstallDirectory
- }
- Copy-Item -Path $PSScriptRoot/* -DestinationPath "$Script:DefaultJellyfinInstallDirectory/" -Force -Recurse
- if($Script:InstallAsService){
- if($Script:InstallServiceAsUser){
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 500
- &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }else{
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 500
- #&"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin ObjectName $Script:UserCredentials.UserName $Script:UserCredentials.GetNetworkCredential().Password
- #Set-Service -Name Jellyfin -Credential $Script:UserCredentials
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }
- }
- if($Script:MigrateLibrary){
- Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
- }
- if($Script:CreateShortcut){
- $WshShell = New-Object -comObject WScript.Shell
- $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
- $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
- $Shortcut.Save()
- }
- if($Script:StartJellyfin){
- if($Script:InstallAsService){
- Get-Service Jellyfin | Start-Service
- }else{
- Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
- }
- }
-}else{
-
-}
-Add-Type -AssemblyName System.Windows.Forms
-[System.Windows.Forms.Application]::EnableVisualStyles()
-
-$Script:JellyFinDataDir = "$env:LOCALAPPDATA\jellyfin\"
-$Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
-$Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\"
-$Script:InstallAsService = $False
-$Script:InstallServiceAsUser = $false
-$Script:CreateShortcut = $false
-$Script:MigrateLibrary = $false
-$Script:StartJellyfin = $false
-
-function InstallJellyfin {
- Write-Host "Install as service: $Script:InstallAsService"
- Write-Host "Install as serviceuser: $Script:InstallServiceAsUser"
- Write-Host "Create Shortcut: $Script:CreateShortcut"
- Write-Host "MigrateLibrary: $Script:MigrateLibrary"
- $GUIElementsCollection | ForEach-Object {
- $_.Enabled = $false
- }
- Write-Host "Making Jellyfin directory"
- $ProgressBar.Minimum = 1
- $ProgressBar.Maximum = 100
- $ProgressBar.Value = 1
- if($Script:DefaultJellyfinInstallDirectory -ne $InstallLocationBox.Text){
- Write-Host "Custom Install Location Chosen: $($InstallLocationBox.Text)"
- $Script:DefaultJellyfinInstallDirectory = $InstallLocationBox.Text
- }
- if($Script:JellyfinDataDir -ne $CustomLibraryBox.Text){
- Write-Host "Custom Library Location Chosen: $($CustomLibraryBox.Text)"
- $Script:JellyfinDataDir = $CustomLibraryBox.Text
- }
- if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
- mkdir $Script:DefaultJellyfinInstallDirectory
- }
- Write-Host "Copying Jellyfin Data"
- $progressbar.Value = 10
- Copy-Item -Path $PSScriptRoot/* -Destination $Script:DefaultJellyfinInstallDirectory/ -Force -Recurse
- Write-Host "Finished Copying"
- $ProgressBar.Value = 50
- if($Script:InstallAsService){
- if($Script:InstallServiceAsUser){
- Write-Host "Installing Service as user $($Script:UserCredentials.UserName)"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 2000
- &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }else{
- Write-Host "Installing Service as LocalSystem"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 2000
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }
- }
- $progressbar.Value = 60
- if($Script:MigrateLibrary){
- if($Script:defaultEmbyDataDir -ne $LibraryLocationBox.Text){
- Write-Host "Custom location defined for emby library: $($LibraryLocationBox.Text)"
- $Script:defaultEmbyDataDir = $LibraryLocationBox.Text
- }
- Write-Host "Copying emby library from $Script:defaultEmbyDataDir to $Script:JellyFinDataDir"
- Write-Host "This could take a while depending on the size of your library. Please be patient"
- Write-Host "Copying config"
- Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying cache"
- Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying data"
- Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying metadata"
- Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying root dir"
- Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
- }
- $progressbar.Value = 80
- if($Script:CreateShortcut){
- Write-Host "Creating Shortcut"
- $WshShell = New-Object -comObject WScript.Shell
- $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
- $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
- $Shortcut.Save()
- }
- $ProgressBar.Value = 90
- if($Script:StartJellyfin){
- if($Script:InstallAsService){
- Write-Host "Starting Jellyfin Service"
- Get-Service Jellyfin | Start-Service
- }else{
- Write-Host "Starting Jellyfin"
- Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
- }
- }
- $progressbar.Value = 100
- Write-Host Finished
- $wshell = New-Object -ComObject Wscript.Shell
- $wshell.Popup("Operation Completed",0,"Done",0x1)
- $InstallForm.Close()
-}
-function ServiceBoxCheckChanged {
- if($InstallAsServiceCheck.Checked){
- $Script:InstallAsService = $true
- $ServiceUserLabel.Visible = $true
- $ServiceUserLabel.Enabled = $true
- $ServiceUserBox.Visible = $true
- $ServiceUserBox.Enabled = $true
- }else{
- $Script:InstallAsService = $false
- $ServiceUserLabel.Visible = $false
- $ServiceUserLabel.Enabled = $false
- $ServiceUserBox.Visible = $false
- $ServiceUserBox.Enabled = $false
- }
-}
-function UserSelect {
- if($ServiceUserBox.Text -eq 'Local System')
- {
- $Script:InstallServiceAsUser = $false
- $Script:UserCredentials = $null
- $ServiceUserBox.Items.RemoveAt(1)
- $ServiceUserBox.Items.Add("Custom User")
- }elseif($ServiceUserBox.Text -eq 'Custom User'){
- $Script:InstallServiceAsUser = $true
- $Script:UserCredentials = Get-Credential -Message "Please enter the credentials of the user you with to run Jellyfin Service as" -UserName $env:USERNAME
- $ServiceUserBox.Items[1] = "$($Script:UserCredentials.UserName)"
- }
-}
-function CreateShortcutBoxCheckChanged {
- if($CreateShortcutCheck.Checked){
- $Script:CreateShortcut = $true
- }else{
- $Script:CreateShortcut = $False
- }
-}
-function StartJellyFinBoxCheckChanged {
- if($StartProgramCheck.Checked){
- $Script:StartJellyfin = $true
- }else{
- $Script:StartJellyfin = $false
- }
-}
-
-function CustomLibraryCheckChanged {
- if($CustomLibraryCheck.Checked){
- $Script:UseCustomLibrary = $true
- $CustomLibraryBox.Enabled = $true
- }else{
- $Script:UseCustomLibrary = $false
- $CustomLibraryBox.Enabled = $false
- }
-}
-
-function MigrateLibraryCheckboxChanged {
-
- if($MigrateLibraryCheck.Checked){
- $Script:MigrateLibrary = $true
- $LibraryMigrationLabel.Visible = $true
- $LibraryMigrationLabel.Enabled = $true
- $LibraryLocationBox.Visible = $true
- $LibraryLocationBox.Enabled = $true
- }else{
- $Script:MigrateLibrary = $false
- $LibraryMigrationLabel.Visible = $false
- $LibraryMigrationLabel.Enabled = $false
- $LibraryLocationBox.Visible = $false
- $LibraryLocationBox.Enabled = $false
- }
-
-}
-
-
-#region begin GUI{
-
-$InstallForm = New-Object system.Windows.Forms.Form
-$InstallForm.ClientSize = '320,240'
-$InstallForm.text = "Terrible Jellyfin Installer"
-$InstallForm.TopMost = $false
-
-$GUIElementsCollection = @()
-
-$InstallButton = New-Object system.Windows.Forms.Button
-$InstallButton.text = "Install"
-$InstallButton.width = 60
-$InstallButton.height = 30
-$InstallButton.location = New-Object System.Drawing.Point(5,5)
-$InstallButton.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallButton
-
-$ProgressBar = New-Object system.Windows.Forms.ProgressBar
-$ProgressBar.width = 245
-$ProgressBar.height = 30
-$ProgressBar.location = New-Object System.Drawing.Point(70,5)
-
-$InstallLocationLabel = New-Object system.Windows.Forms.Label
-$InstallLocationLabel.text = "Install Location"
-$InstallLocationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$InstallLocationLabel.AutoSize = $true
-$InstallLocationLabel.width = 100
-$InstallLocationLabel.height = 20
-$InstallLocationLabel.location = New-Object System.Drawing.Point(5,50)
-$InstallLocationLabel.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallLocationLabel
-
-$InstallLocationBox = New-Object system.Windows.Forms.TextBox
-$InstallLocationBox.multiline = $false
-$InstallLocationBox.width = 205
-$InstallLocationBox.height = 20
-$InstallLocationBox.location = New-Object System.Drawing.Point(110,50)
-$InstallLocationBox.Text = $Script:DefaultJellyfinInstallDirectory
-$InstallLocationBox.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallLocationBox
-
-$CustomLibraryCheck = New-Object system.Windows.Forms.CheckBox
-$CustomLibraryCheck.text = "Custom Library Location:"
-$CustomLibraryCheck.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$CustomLibraryCheck.AutoSize = $false
-$CustomLibraryCheck.width = 180
-$CustomLibraryCheck.height = 20
-$CustomLibraryCheck.location = New-Object System.Drawing.Point(5,75)
-$CustomLibraryCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $CustomLibraryCheck
-
-$CustomLibraryBox = New-Object system.Windows.Forms.TextBox
-$CustomLibraryBox.multiline = $false
-$CustomLibraryBox.width = 130
-$CustomLibraryBox.height = 20
-$CustomLibraryBox.location = New-Object System.Drawing.Point(185,75)
-$CustomLibraryBox.Text = $Script:JellyFinDataDir
-$CustomLibraryBox.Font = 'Microsoft Sans Serif,10'
-$CustomLibraryBox.Enabled = $false
-$GUIElementsCollection += $CustomLibraryBox
-
-$InstallAsServiceCheck = New-Object system.Windows.Forms.CheckBox
-$InstallAsServiceCheck.text = "Install as Service"
-$InstallAsServiceCheck.AutoSize = $false
-$InstallAsServiceCheck.width = 140
-$InstallAsServiceCheck.height = 20
-$InstallAsServiceCheck.location = New-Object System.Drawing.Point(5,125)
-$InstallAsServiceCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallAsServiceCheck
-
-$ServiceUserLabel = New-Object system.Windows.Forms.Label
-$ServiceUserLabel.text = "Run Service As:"
-$ServiceUserLabel.AutoSize = $true
-$ServiceUserLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$ServiceUserLabel.width = 100
-$ServiceUserLabel.height = 20
-$ServiceUserLabel.location = New-Object System.Drawing.Point(15,145)
-$ServiceUserLabel.Font = 'Microsoft Sans Serif,10'
-$ServiceUserLabel.Visible = $false
-$ServiceUserLabel.Enabled = $false
-$GUIElementsCollection += $ServiceUserLabel
-
-$ServiceUserBox = New-Object system.Windows.Forms.ComboBox
-$ServiceUserBox.text = "Run Service As"
-$ServiceUserBox.width = 195
-$ServiceUserBox.height = 20
-@('Local System','Custom User') | ForEach-Object {[void] $ServiceUserBox.Items.Add($_)}
-$ServiceUserBox.location = New-Object System.Drawing.Point(120,145)
-$ServiceUserBox.Font = 'Microsoft Sans Serif,10'
-$ServiceUserBox.Visible = $false
-$ServiceUserBox.Enabled = $false
-$ServiceUserBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
-$GUIElementsCollection += $ServiceUserBox
-
-$MigrateLibraryCheck = New-Object system.Windows.Forms.CheckBox
-$MigrateLibraryCheck.text = "Import Emby/Old JF Library"
-$MigrateLibraryCheck.AutoSize = $false
-$MigrateLibraryCheck.width = 160
-$MigrateLibraryCheck.height = 20
-$MigrateLibraryCheck.location = New-Object System.Drawing.Point(5,170)
-$MigrateLibraryCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $MigrateLibraryCheck
-
-$LibraryMigrationLabel = New-Object system.Windows.Forms.Label
-$LibraryMigrationLabel.text = "Emby/Old JF Library Path"
-$LibraryMigrationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$LibraryMigrationLabel.AutoSize = $false
-$LibraryMigrationLabel.width = 120
-$LibraryMigrationLabel.height = 20
-$LibraryMigrationLabel.location = New-Object System.Drawing.Point(15,190)
-$LibraryMigrationLabel.Font = 'Microsoft Sans Serif,10'
-$LibraryMigrationLabel.Visible = $false
-$LibraryMigrationLabel.Enabled = $false
-$GUIElementsCollection += $LibraryMigrationLabel
-
-$LibraryLocationBox = New-Object system.Windows.Forms.TextBox
-$LibraryLocationBox.multiline = $false
-$LibraryLocationBox.width = 175
-$LibraryLocationBox.height = 20
-$LibraryLocationBox.location = New-Object System.Drawing.Point(140,190)
-$LibraryLocationBox.Text = $Script:defaultEmbyDataDir
-$LibraryLocationBox.Font = 'Microsoft Sans Serif,10'
-$LibraryLocationBox.Visible = $false
-$LibraryLocationBox.Enabled = $false
-$GUIElementsCollection += $LibraryLocationBox
-
-$CreateShortcutCheck = New-Object system.Windows.Forms.CheckBox
-$CreateShortcutCheck.text = "Desktop Shortcut"
-$CreateShortcutCheck.AutoSize = $false
-$CreateShortcutCheck.width = 150
-$CreateShortcutCheck.height = 20
-$CreateShortcutCheck.location = New-Object System.Drawing.Point(5,215)
-$CreateShortcutCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $CreateShortcutCheck
-
-$StartProgramCheck = New-Object system.Windows.Forms.CheckBox
-$StartProgramCheck.text = "Start Jellyfin"
-$StartProgramCheck.AutoSize = $false
-$StartProgramCheck.width = 160
-$StartProgramCheck.height = 20
-$StartProgramCheck.location = New-Object System.Drawing.Point(160,215)
-$StartProgramCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $StartProgramCheck
-
-$InstallForm.controls.AddRange($GUIElementsCollection)
-$InstallForm.Controls.Add($ProgressBar)
-
-#region gui events {
-$InstallButton.Add_Click({ InstallJellyfin })
-$CustomLibraryCheck.Add_CheckedChanged({CustomLibraryCheckChanged})
-$InstallAsServiceCheck.Add_CheckedChanged({ServiceBoxCheckChanged})
-$ServiceUserBox.Add_SelectedValueChanged({ UserSelect })
-$MigrateLibraryCheck.Add_CheckedChanged({MigrateLibraryCheckboxChanged})
-$CreateShortcutCheck.Add_CheckedChanged({CreateShortcutBoxCheckChanged})
-$StartProgramCheck.Add_CheckedChanged({StartJellyFinBoxCheckChanged})
-#endregion events }
-
-#endregion GUI }
-
-
-[void]$InstallForm.ShowDialog()
diff --git a/deployment/windows/legacy/install.bat b/deployment/windows/legacy/install.bat
deleted file mode 100644
index e21479a79a..0000000000
--- a/deployment/windows/legacy/install.bat
+++ /dev/null
@@ -1 +0,0 @@
-powershell.exe -executionpolicy Bypass -file install-jellyfin.ps1
--
cgit v1.2.3
From 8b620ed26addec0f42e2797e3e4d45fbd68b0f23 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Sun, 22 Mar 2020 16:01:33 -0400
Subject: Move Debian folder to root of repo
---
debian/changelog | 59 +++++++++++++++++++++++++
debian/compat | 1 +
debian/conf/jellyfin | 40 +++++++++++++++++
debian/conf/jellyfin-sudoers | 37 ++++++++++++++++
debian/conf/jellyfin.service.conf | 7 +++
debian/conf/logging.json | 30 +++++++++++++
debian/control | 31 +++++++++++++
debian/copyright | 29 ++++++++++++
debian/gbp.conf | 6 +++
debian/install | 6 +++
debian/jellyfin.init | 61 ++++++++++++++++++++++++++
debian/jellyfin.service | 14 ++++++
debian/jellyfin.upstart | 20 +++++++++
debian/po/POTFILES.in | 1 +
debian/po/templates.pot | 57 ++++++++++++++++++++++++
debian/postinst | 92 +++++++++++++++++++++++++++++++++++++++
debian/postrm | 81 ++++++++++++++++++++++++++++++++++
debian/preinst | 78 +++++++++++++++++++++++++++++++++
debian/prerm | 61 ++++++++++++++++++++++++++
debian/rules | 66 ++++++++++++++++++++++++++++
debian/source.lintian-overrides | 3 ++
debian/source/format | 1 +
debian/source/options | 11 +++++
23 files changed, 792 insertions(+)
create mode 100644 debian/changelog
create mode 100644 debian/compat
create mode 100644 debian/conf/jellyfin
create mode 100644 debian/conf/jellyfin-sudoers
create mode 100644 debian/conf/jellyfin.service.conf
create mode 100644 debian/conf/logging.json
create mode 100644 debian/control
create mode 100644 debian/copyright
create mode 100644 debian/gbp.conf
create mode 100644 debian/install
create mode 100644 debian/jellyfin.init
create mode 100644 debian/jellyfin.service
create mode 100644 debian/jellyfin.upstart
create mode 100644 debian/po/POTFILES.in
create mode 100644 debian/po/templates.pot
create mode 100644 debian/postinst
create mode 100644 debian/postrm
create mode 100644 debian/preinst
create mode 100644 debian/prerm
create mode 100755 debian/rules
create mode 100644 debian/source.lintian-overrides
create mode 100644 debian/source/format
create mode 100644 debian/source/options
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000000..51c4822370
--- /dev/null
+++ b/debian/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 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 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 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 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 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 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 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 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 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 Fri, 19 Apr 2019 14:24:29 -0400
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000000..45a4fb75db
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+8
diff --git a/debian/conf/jellyfin b/debian/conf/jellyfin
new file mode 100644
index 0000000000..c6e595f15a
--- /dev/null
+++ b/debian/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/debian/conf/jellyfin-sudoers b/debian/conf/jellyfin-sudoers
new file mode 100644
index 0000000000..b481ba4ad4
--- /dev/null
+++ b/debian/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/debian/conf/jellyfin.service.conf b/debian/conf/jellyfin.service.conf
new file mode 100644
index 0000000000..1b69dd74ef
--- /dev/null
+++ b/debian/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/debian/conf/logging.json b/debian/conf/logging.json
new file mode 100644
index 0000000000..f32b2089eb
--- /dev/null
+++ b/debian/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/debian/control b/debian/control
new file mode 100644
index 0000000000..13fd3ecabb
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,31 @@
+Source: jellyfin
+Section: misc
+Priority: optional
+Maintainer: Jellyfin Team
+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/debian/copyright b/debian/copyright
new file mode 100644
index 0000000000..0d7a2a6007
--- /dev/null
+++ b/debian/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
+Copyright: 2014 Carlos Hernandez
+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
+ .
+ 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/debian/gbp.conf b/debian/gbp.conf
new file mode 100644
index 0000000000..60b3d28723
--- /dev/null
+++ b/debian/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/debian/install b/debian/install
new file mode 100644
index 0000000000..994322d141
--- /dev/null
+++ b/debian/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/debian/jellyfin.init b/debian/jellyfin.init
new file mode 100644
index 0000000000..7f5642bac1
--- /dev/null
+++ b/debian/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/debian/jellyfin.service b/debian/jellyfin.service
new file mode 100644
index 0000000000..1305e238b0
--- /dev/null
+++ b/debian/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/debian/jellyfin.upstart b/debian/jellyfin.upstart
new file mode 100644
index 0000000000..ef5bc9bcaf
--- /dev/null
+++ b/debian/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/debian/po/POTFILES.in b/debian/po/POTFILES.in
new file mode 100644
index 0000000000..cef83a3407
--- /dev/null
+++ b/debian/po/POTFILES.in
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] templates
diff --git a/debian/po/templates.pot b/debian/po/templates.pot
new file mode 100644
index 0000000000..2cdcae4173
--- /dev/null
+++ b/debian/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 , 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 \n"
+"Language-Team: LANGUAGE \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/debian/postinst b/debian/postinst
new file mode 100644
index 0000000000..860222e051
--- /dev/null
+++ b/debian/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/debian/postrm b/debian/postrm
new file mode 100644
index 0000000000..1d00a984ec
--- /dev/null
+++ b/debian/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/debian/preinst b/debian/preinst
new file mode 100644
index 0000000000..2713fb9b80
--- /dev/null
+++ b/debian/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/debian/prerm b/debian/prerm
new file mode 100644
index 0000000000..e965cb7d71
--- /dev/null
+++ b/debian/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/debian/rules b/debian/rules
new file mode 100755
index 0000000000..c2d57dfb22
--- /dev/null
+++ b/debian/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/debian/source.lintian-overrides b/debian/source.lintian-overrides
new file mode 100644
index 0000000000..aeb332f13a
--- /dev/null
+++ b/debian/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/debian/source/format b/debian/source/format
new file mode 100644
index 0000000000..d3827e75a5
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+1.0
diff --git a/debian/source/options b/debian/source/options
new file mode 100644
index 0000000000..17b5373d5e
--- /dev/null
+++ b/debian/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'
--
cgit v1.2.3
From f9cecfc0fb0cbd7a75b8aace84f094a46824b705 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Sun, 22 Mar 2020 16:01:47 -0400
Subject: Add new build.sh script and symlink
---
build | 1 +
build.sh | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 107 insertions(+)
create mode 120000 build
create mode 100755 build.sh
diff --git a/build b/build
new file mode 120000
index 0000000000..c07a74de4f
--- /dev/null
+++ b/build
@@ -0,0 +1 @@
+build.sh
\ No newline at end of file
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000000..b61126e11f
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,106 @@
+#!/usr/bin/env bash
+
+# build.sh - Build Jellyfin binary packages
+# Part of the Jellyfin Project
+
+set -o errexit
+set -o pipefail
+
+usage() {
+ echo -e "build.sh - Build Jellyfin binary packages"
+ echo -e "Usage:"
+ echo -e " $0 -t/--type -p/--platform [-k/--keep-artifacts] [-l/--list-platforms]"
+ echo -e "Notes:"
+ echo -e " * BUILD_TYPE can be one of: [native, docker] and must be specified"
+ echo -e " * native: Build using the build script in the host OS"
+ echo -e " * docker: Build using the build script in a standardized Docker container"
+ echo -e " * PLATFORM can be any platform shown by -l/--list-platforms and must be specified"
+ echo -e " * If -k/--keep-artifacts is specified, transient artifacts (e.g. Docker containers) will be"
+ echo -e " retained after the build is finished"
+ echo -e " * If -l/--list-platforms is specified, all other arguments are ignored; the script will print"
+ echo -e " the list of supported platforms and exit"
+}
+
+list_platforms() {
+ declare -a platforms
+ platforms=(
+ $( find deployment -maxdepth 1 -mindepth 1 -type f -name "build.*" | awk -F'.' '{ $1=""; print $2 "." $3 }' )
+ )
+ echo -e "Valid platforms:"
+ echo
+ for platform in ${platforms[@]}; do
+ echo -e "* ${platform} : $( grep '^#=' deployment/build.${platform} | sed 's/^#= //' )"
+ done
+}
+
+do_build_native() {
+ export IS_DOCKER=NO
+ deployment/build.${PLATFORM}
+}
+
+do_build_docker() {
+ if [[ ! -f deployment/Dockerfile.${PLATFORM} ]]; then
+ echo "Missing Dockerfile for platform ${PLATFORM}"
+ exit 1
+ fi
+ if [[ ${KEEP_ARTIFACTS} == YES ]]; then
+ docker_args=""
+ else
+ docker_args="--rm"
+ fi
+
+ docker build . -t "jellyfin-builder.${PLATFORM}" -f deployment/Dockerfile.${PLATFORM}
+ mkdir -p ${ARTIFACT_DIR}
+ docker run $docker_args -v "${ARTIFACT_DIR}:/dist" "jellyfin-builder.${PLATFORM}"
+}
+
+while [[ $# -gt 0 ]]; do
+ key="$1"
+ case $key in
+ -t|--type)
+ BUILD_TYPE="$2"
+ shift # past argument
+ shift # past value
+ ;;
+ -p|--platform)
+ PLATFORM="$2"
+ shift # past argument
+ shift # past value
+ ;;
+ -k|--keep-artifacts)
+ KEEP_ARTIFACTS=YES
+ shift # past argument
+ ;;
+ -l|--list-platforms)
+ list_platforms
+ exit 0
+ ;;
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ *) # unknown option
+ echo "Unknown option $1"
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [[ -z ${BUILD_TYPE} || -z ${PLATFORM} ]]; then
+ usage
+ exit 1
+fi
+
+export SOURCE_DIR="$( pwd )"
+export ARTIFACT_DIR="${SOURCE_DIR}/../bin/${PLATFORM}"
+
+# Determine build type
+case ${BUILD_TYPE} in
+ native)
+ do_build_native
+ ;;
+ docker)
+ do_build_docker
+ ;;
+esac
--
cgit v1.2.3
From 3571afece104e39c676cfdb53df9392c225380d0 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Sun, 22 Mar 2020 16:02:35 -0400
Subject: Ignore web artifacts
---
.gitignore | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/.gitignore b/.gitignore
index 42243f01a8..17cf4a6277 100644
--- a/.gitignore
+++ b/.gitignore
@@ -271,3 +271,8 @@ dist
# BenchmarkDotNet artifacts
BenchmarkDotNet.Artifacts
+
+# Ignore web artifacts from native builds
+web/
+web-src.*
+MediaBrowser.WebDashboard/jellyfin-web/
--
cgit v1.2.3
From ba55ee4986fa871390e211c56fdec1b024ff617e Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Sun, 22 Mar 2020 16:03:14 -0400
Subject: Add first proof-of-concept deployment setup
---
deployment/Dockerfile.debian.amd64 | 34 ++++++++++++++++++++++++++++++++++
deployment/build.debian.amd64 | 26 ++++++++++++++++++++++++++
2 files changed, 60 insertions(+)
create mode 100644 deployment/Dockerfile.debian.amd64
create mode 100755 deployment/build.debian.amd64
diff --git a/deployment/Dockerfile.debian.amd64 b/deployment/Dockerfile.debian.amd64
new file mode 100644
index 0000000000..eb29402194
--- /dev/null
+++ b/deployment/Dockerfile.debian.amd64
@@ -0,0 +1,34 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.amd64 /build.sh
+
+# Create the source dir
+RUN mkdir -p ${SOURCE_DIR}
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.debian.amd64 b/deployment/build.debian.amd64
new file mode 100755
index 0000000000..89f8445d80
--- /dev/null
+++ b/deployment/build.debian.amd64
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#= Debian 9+ amd64 .deb
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ # Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ sed -i '/dotnet-sdk-3.1,/d' debian/control
+fi
+
+# Build DEB
+dpkg-buildpackage -us -uc --pre-clean --post-clean
+
+mkdir -p ${ARTIFACT_DIR}/
+mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
--
cgit v1.2.3
From 93d1256a4c80c071b0c14e066c13bb9720b63dc9 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 14:46:16 -0400
Subject: Remove web building, rename, bump version
---
debian/changelog | 6 ++++++
debian/control | 9 ++++-----
debian/rules | 15 ---------------
3 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 51c4822370..35fb659571 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+jellyfin-server (10.6.0-1) unstable; urgency=medium
+
+ * Forthcoming stable release
+
+ -- Jellyfin Packaging Team Mon, 23 Mar 2020 14:46:05 -0400
+
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
diff --git a/debian/control b/debian/control
index 13fd3ecabb..f473dc41d2 100644
--- a/debian/control
+++ b/debian/control
@@ -1,4 +1,4 @@
-Source: jellyfin
+Source: jellyfin-server
Section: misc
Priority: optional
Maintainer: Jellyfin Team
@@ -8,15 +8,13 @@ Build-Depends: debhelper (>= 9),
libcurl4-openssl-dev,
libfontconfig1-dev,
libfreetype6-dev,
- libssl-dev,
- wget,
- npm | nodejs
+ libssl-dev
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
+Package: jellyfin-server
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
@@ -27,5 +25,6 @@ Depends: at,
libfontconfig1,
libfreetype6,
libssl1.1
+Recommends: jellyfin-web
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/debian/rules b/debian/rules
index c2d57dfb22..2a5d41a696 100755
--- a/debian/rules
+++ b/debian/rules
@@ -2,8 +2,6 @@
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}
@@ -41,25 +39,12 @@ override_dh_auto_test:
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:
--
cgit v1.2.3
From c61e95d11757656f9a71ec4b6d410c4c5936f516 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 14:49:55 -0400
Subject: Only support Docker builds on amd64
---
build.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/build.sh b/build.sh
index b61126e11f..f318a0b1f6 100755
--- a/build.sh
+++ b/build.sh
@@ -39,6 +39,10 @@ do_build_native() {
}
do_build_docker() {
+ if ! dpkg --print-architecture | grep -q 'amd64'; then
+ echo "Docker-based builds only support amd64-based cross-building; use a native build instead"
+ exit 1
+ fi
if [[ ! -f deployment/Dockerfile.${PLATFORM} ]]; then
echo "Missing Dockerfile for platform ${PLATFORM}"
exit 1
--
cgit v1.2.3
From 163cf223aa1b0b89c159b4d23c9ee9d888b96416 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:00:41 -0400
Subject: Only support cross-building with Docker
---
build.sh | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/build.sh b/build.sh
index f318a0b1f6..238871c168 100755
--- a/build.sh
+++ b/build.sh
@@ -34,13 +34,17 @@ list_platforms() {
}
do_build_native() {
+ if [[ $( dpkg --print-architecture | head -1 ) != "${PLATFORM##*.}" ]]; then
+ echo "Cross-building is not supported for native builds, use 'docker' builds on amd64 for cross-building."
+ exit 1
+ fi
export IS_DOCKER=NO
deployment/build.${PLATFORM}
}
do_build_docker() {
if ! dpkg --print-architecture | grep -q 'amd64'; then
- echo "Docker-based builds only support amd64-based cross-building; use a native build instead"
+ echo "Docker-based builds only support amd64-based cross-building; use a 'native' build instead."
exit 1
fi
if [[ ! -f deployment/Dockerfile.${PLATFORM} ]]; then
--
cgit v1.2.3
From 9c378866e4bcc26315c3618cd7d91c96f90630d5 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:02:54 -0400
Subject: Add arm64 and armhf builds
---
deployment/Dockerfile.debian.arm64 | 42 ++++++++++++++++++++++++++++++++++++++
deployment/Dockerfile.debian.armhf | 42 ++++++++++++++++++++++++++++++++++++++
deployment/build.debian.arm64 | 27 ++++++++++++++++++++++++
deployment/build.debian.armhf | 27 ++++++++++++++++++++++++
4 files changed, 138 insertions(+)
create mode 100644 deployment/Dockerfile.debian.arm64
create mode 100644 deployment/Dockerfile.debian.armhf
create mode 100755 deployment/build.debian.arm64
create mode 100755 deployment/build.debian.armhf
diff --git a/deployment/Dockerfile.debian.arm64 b/deployment/Dockerfile.debian.arm64
new file mode 100644
index 0000000000..6e7e80d701
--- /dev/null
+++ b/deployment/Dockerfile.debian.arm64
@@ -0,0 +1,42 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.arm64 /build.sh
+
+# Create the source dir
+RUN mkdir -p ${SOURCE_DIR}
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.debian.armhf b/deployment/Dockerfile.debian.armhf
new file mode 100644
index 0000000000..6e2e3a40cb
--- /dev/null
+++ b/deployment/Dockerfile.debian.armhf
@@ -0,0 +1,42 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /build.sh
+
+# Create the source dir
+RUN mkdir -p ${SOURCE_DIR}
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.debian.arm64 b/deployment/build.debian.arm64
new file mode 100755
index 0000000000..3525ae471c
--- /dev/null
+++ b/deployment/build.debian.arm64
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= Debian 9+ arm64 .deb
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ # Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ sed -i '/dotnet-sdk-3.1,/d' debian/control
+fi
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -a arm64 --pre-clean --post-clean
+
+mkdir -p ${ARTIFACT_DIR}/
+mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/build.debian.armhf b/deployment/build.debian.armhf
new file mode 100755
index 0000000000..45730eebef
--- /dev/null
+++ b/deployment/build.debian.armhf
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= Debian 9+ arm64 .deb
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ # Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ sed -i '/dotnet-sdk-3.1,/d' debian/control
+fi
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -a armhf --pre-clean --post-clean
+
+mkdir -p ${ARTIFACT_DIR}/
+mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
--
cgit v1.2.3
From 0365adb8233352c3261d669aeb83b8503100796b Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:24:13 -0400
Subject: Fix deps for armhf
---
deployment/Dockerfile.debian.armhf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/deployment/Dockerfile.debian.armhf b/deployment/Dockerfile.debian.armhf
index 6e2e3a40cb..8ebe1830ab 100644
--- a/deployment/Dockerfile.debian.armhf
+++ b/deployment/Dockerfile.debian.armhf
@@ -27,7 +27,7 @@ RUN dpkg --add-architecture armhf \
&& 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 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
+ && 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 build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /build.sh
--
cgit v1.2.3
From c4a29e537cf7f74d592a4b230627876f0bf0de37 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:28:57 -0400
Subject: Remove NPM install from Dockerfiles
---
deployment/Dockerfile.debian.amd64 | 2 +-
deployment/Dockerfile.debian.arm64 | 2 +-
deployment/Dockerfile.debian.armhf | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/deployment/Dockerfile.debian.amd64 b/deployment/Dockerfile.debian.amd64
index eb29402194..47c13fa712 100644
--- a/deployment/Dockerfile.debian.amd64
+++ b/deployment/Dockerfile.debian.amd64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# 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
+ && 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
diff --git a/deployment/Dockerfile.debian.arm64 b/deployment/Dockerfile.debian.arm64
index 6e7e80d701..7b792d7e16 100644
--- a/deployment/Dockerfile.debian.arm64
+++ b/deployment/Dockerfile.debian.arm64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv
+ && 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
diff --git a/deployment/Dockerfile.debian.armhf b/deployment/Dockerfile.debian.armhf
index 8ebe1830ab..d633d316a2 100644
--- a/deployment/Dockerfile.debian.armhf
+++ b/deployment/Dockerfile.debian.armhf
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv
+ && 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
--
cgit v1.2.3
From f72c5b7a1d4db9b16f3b15cebe12bbca110bf7ef Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:40:19 -0400
Subject: Fix version output
---
deployment/build.debian.amd64 | 2 +-
deployment/build.debian.arm64 | 2 +-
deployment/build.debian.armhf | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/deployment/build.debian.amd64 b/deployment/build.debian.amd64
index 89f8445d80..c43585161d 100755
--- a/deployment/build.debian.amd64
+++ b/deployment/build.debian.amd64
@@ -1,6 +1,6 @@
#!/bin/bash
-#= Debian 9+ amd64 .deb
+#= Debian 10+ amd64 .deb
set -o errexit
set -o xtrace
diff --git a/deployment/build.debian.arm64 b/deployment/build.debian.arm64
index 3525ae471c..4225c2f9df 100755
--- a/deployment/build.debian.arm64
+++ b/deployment/build.debian.arm64
@@ -1,6 +1,6 @@
#!/bin/bash
-#= Debian 9+ arm64 .deb
+#= Debian 10+ arm64 .deb
set -o errexit
set -o xtrace
diff --git a/deployment/build.debian.armhf b/deployment/build.debian.armhf
index 45730eebef..f71a960410 100755
--- a/deployment/build.debian.armhf
+++ b/deployment/build.debian.armhf
@@ -1,6 +1,6 @@
#!/bin/bash
-#= Debian 9+ arm64 .deb
+#= Debian 10+ arm64 .deb
set -o errexit
set -o xtrace
--
cgit v1.2.3
From 9ce2af2a6c20c061bb1317728262bad305d05f27 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:40:51 -0400
Subject: Don't limit to files (allow symlinks)
---
build.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.sh b/build.sh
index 238871c168..f54ce04ce7 100755
--- a/build.sh
+++ b/build.sh
@@ -24,7 +24,7 @@ usage() {
list_platforms() {
declare -a platforms
platforms=(
- $( find deployment -maxdepth 1 -mindepth 1 -type f -name "build.*" | awk -F'.' '{ $1=""; print $2 "." $3 }' )
+ $( find deployment -maxdepth 1 -mindepth 1 -name "build.*" | awk -F'.' '{ $1=""; print $2 "." $3 }' | sort )
)
echo -e "Valid platforms:"
echo
--
cgit v1.2.3
From 3e7a106a95a183ba4c7d1bf00d87e149463f0e23 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:40:59 -0400
Subject: Add Ubuntu configurations
---
deployment/Dockerfile.ubuntu.amd64 | 34 ++++++++++++++++++++++++
deployment/Dockerfile.ubuntu.arm64 | 53 ++++++++++++++++++++++++++++++++++++++
deployment/Dockerfile.ubuntu.armhf | 53 ++++++++++++++++++++++++++++++++++++++
deployment/build.ubuntu.amd64 | 26 +++++++++++++++++++
deployment/build.ubuntu.arm64 | 27 +++++++++++++++++++
deployment/build.ubuntu.armhf | 27 +++++++++++++++++++
6 files changed, 220 insertions(+)
create mode 100644 deployment/Dockerfile.ubuntu.amd64
create mode 100644 deployment/Dockerfile.ubuntu.arm64
create mode 100644 deployment/Dockerfile.ubuntu.armhf
create mode 100755 deployment/build.ubuntu.amd64
create mode 100755 deployment/build.ubuntu.arm64
create mode 100755 deployment/build.ubuntu.armhf
diff --git a/deployment/Dockerfile.ubuntu.amd64 b/deployment/Dockerfile.ubuntu.amd64
new file mode 100644
index 0000000000..e1b0c3975d
--- /dev/null
+++ b/deployment/Dockerfile.ubuntu.amd64
@@ -0,0 +1,34 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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
+
+# Link to build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.ubuntu.amd64 /build.sh
+
+# Create the source dir
+RUN mkdir -p ${SOURCE_DIR}
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.ubuntu.arm64 b/deployment/Dockerfile.ubuntu.arm64
new file mode 100644
index 0000000000..98dfbf7dd6
--- /dev/null
+++ b/deployment/Dockerfile.ubuntu.arm64
@@ -0,0 +1,53 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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
+
+# 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.ubuntu.arm64 /build.sh
+
+# Create the source dir
+RUN mkdir -p ${SOURCE_DIR}
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.ubuntu.armhf b/deployment/Dockerfile.ubuntu.armhf
new file mode 100644
index 0000000000..30cd861359
--- /dev/null
+++ b/deployment/Dockerfile.ubuntu.armhf
@@ -0,0 +1,53 @@
+FROM ubuntu:bionic
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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
+
+# 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /build.sh
+
+# Create the source dir
+RUN mkdir -p ${SOURCE_DIR}
+
+VOLUME ${ARTIFACT_DIR}/
+
+COPY . ${SOURCE_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.ubuntu.amd64 b/deployment/build.ubuntu.amd64
new file mode 100755
index 0000000000..e74db90c43
--- /dev/null
+++ b/deployment/build.ubuntu.amd64
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#= Ubuntu 18.04+ amd64 .deb
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ # Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ sed -i '/dotnet-sdk-3.1,/d' debian/control
+fi
+
+# Build DEB
+dpkg-buildpackage -us -uc --pre-clean --post-clean
+
+mkdir -p ${ARTIFACT_DIR}/
+mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/build.ubuntu.arm64 b/deployment/build.ubuntu.arm64
new file mode 100755
index 0000000000..1d91b303ad
--- /dev/null
+++ b/deployment/build.ubuntu.arm64
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= Ubuntu 18.04+ arm64 .deb
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ # Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ sed -i '/dotnet-sdk-3.1,/d' debian/control
+fi
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -a arm64 --pre-clean --post-clean
+
+mkdir -p ${ARTIFACT_DIR}/
+mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/build.ubuntu.armhf b/deployment/build.ubuntu.armhf
new file mode 100755
index 0000000000..efdc2b65b1
--- /dev/null
+++ b/deployment/build.ubuntu.armhf
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= Ubuntu 18.04+ arm64 .deb
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ # Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ sed -i '/dotnet-sdk-3.1,/d' debian/control
+fi
+
+# Build DEB
+export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
+dpkg-buildpackage -us -uc -a armhf --pre-clean --post-clean
+
+mkdir -p ${ARTIFACT_DIR}/
+mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
--
cgit v1.2.3
From 8b1a76a32e5c2d8677fc6bba62682cfc1af748e6 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 15:44:23 -0400
Subject: Mount the source volume rather than copy it
Now that the build script cleans up both before and after building, this
is a viable option and will significant reduce build times by promoting
container reuse (with `-k`).
---
build.sh | 4 ++--
deployment/Dockerfile.debian.amd64 | 5 +----
deployment/Dockerfile.debian.arm64 | 5 +----
deployment/Dockerfile.debian.armhf | 5 +----
deployment/Dockerfile.ubuntu.amd64 | 5 +----
deployment/Dockerfile.ubuntu.arm64 | 5 +----
deployment/Dockerfile.ubuntu.armhf | 5 +----
7 files changed, 8 insertions(+), 26 deletions(-)
diff --git a/build.sh b/build.sh
index f54ce04ce7..5d3f8ec713 100755
--- a/build.sh
+++ b/build.sh
@@ -16,7 +16,7 @@ usage() {
echo -e " * docker: Build using the build script in a standardized Docker container"
echo -e " * PLATFORM can be any platform shown by -l/--list-platforms and must be specified"
echo -e " * If -k/--keep-artifacts is specified, transient artifacts (e.g. Docker containers) will be"
- echo -e " retained after the build is finished"
+ echo -e " retained after the build is finished; the source directory will still be cleaned"
echo -e " * If -l/--list-platforms is specified, all other arguments are ignored; the script will print"
echo -e " the list of supported platforms and exit"
}
@@ -59,7 +59,7 @@ do_build_docker() {
docker build . -t "jellyfin-builder.${PLATFORM}" -f deployment/Dockerfile.${PLATFORM}
mkdir -p ${ARTIFACT_DIR}
- docker run $docker_args -v "${ARTIFACT_DIR}:/dist" "jellyfin-builder.${PLATFORM}"
+ docker run $docker_args -v "${SOURCE_DIR}:/jellyfin" -v "${ARTIFACT_DIR}:/dist" "jellyfin-builder.${PLATFORM}"
}
while [[ $# -gt 0 ]]; do
diff --git a/deployment/Dockerfile.debian.amd64 b/deployment/Dockerfile.debian.amd64
index 47c13fa712..b5a0380489 100644
--- a/deployment/Dockerfile.debian.amd64
+++ b/deployment/Dockerfile.debian.amd64
@@ -24,11 +24,8 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
# Link to build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.amd64 /build.sh
-# Create the source dir
-RUN mkdir -p ${SOURCE_DIR}
+VOLUME ${SOURCE_DIR}/
VOLUME ${ARTIFACT_DIR}/
-COPY . ${SOURCE_DIR}/
-
ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.debian.arm64 b/deployment/Dockerfile.debian.arm64
index 7b792d7e16..cfe562df33 100644
--- a/deployment/Dockerfile.debian.arm64
+++ b/deployment/Dockerfile.debian.arm64
@@ -32,11 +32,8 @@ RUN dpkg --add-architecture arm64 \
# Link to build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.arm64 /build.sh
-# Create the source dir
-RUN mkdir -p ${SOURCE_DIR}
+VOLUME ${SOURCE_DIR}/
VOLUME ${ARTIFACT_DIR}/
-COPY . ${SOURCE_DIR}/
-
ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.debian.armhf b/deployment/Dockerfile.debian.armhf
index d633d316a2..ea8c8c8e62 100644
--- a/deployment/Dockerfile.debian.armhf
+++ b/deployment/Dockerfile.debian.armhf
@@ -32,11 +32,8 @@ RUN dpkg --add-architecture armhf \
# Link to build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /build.sh
-# Create the source dir
-RUN mkdir -p ${SOURCE_DIR}
+VOLUME ${SOURCE_DIR}/
VOLUME ${ARTIFACT_DIR}/
-COPY . ${SOURCE_DIR}/
-
ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.ubuntu.amd64 b/deployment/Dockerfile.ubuntu.amd64
index e1b0c3975d..e61be4efcc 100644
--- a/deployment/Dockerfile.ubuntu.amd64
+++ b/deployment/Dockerfile.ubuntu.amd64
@@ -24,11 +24,8 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
# Link to build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.ubuntu.amd64 /build.sh
-# Create the source dir
-RUN mkdir -p ${SOURCE_DIR}
+VOLUME ${SOURCE_DIR}/
VOLUME ${ARTIFACT_DIR}/
-COPY . ${SOURCE_DIR}/
-
ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.ubuntu.arm64 b/deployment/Dockerfile.ubuntu.arm64
index 98dfbf7dd6..e34ef7edd1 100644
--- a/deployment/Dockerfile.ubuntu.arm64
+++ b/deployment/Dockerfile.ubuntu.arm64
@@ -43,11 +43,8 @@ RUN rm /etc/apt/sources.list \
# Link to build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.ubuntu.arm64 /build.sh
-# Create the source dir
-RUN mkdir -p ${SOURCE_DIR}
+VOLUME ${SOURCE_DIR}/
VOLUME ${ARTIFACT_DIR}/
-COPY . ${SOURCE_DIR}/
-
ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.ubuntu.armhf b/deployment/Dockerfile.ubuntu.armhf
index 30cd861359..6f92c81ab1 100644
--- a/deployment/Dockerfile.ubuntu.armhf
+++ b/deployment/Dockerfile.ubuntu.armhf
@@ -43,11 +43,8 @@ RUN rm /etc/apt/sources.list \
# Link to build script
RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /build.sh
-# Create the source dir
-RUN mkdir -p ${SOURCE_DIR}
+VOLUME ${SOURCE_DIR}/
VOLUME ${ARTIFACT_DIR}/
-COPY . ${SOURCE_DIR}/
-
ENTRYPOINT ["/build.sh"]
--
cgit v1.2.3
From eb632e4a0dd5d83a1aea4c710caf1ea0f3ad6b0e Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 16:01:25 -0400
Subject: Back up and restore control file
---
deployment/build.debian.amd64 | 2 ++
deployment/build.debian.arm64 | 2 ++
deployment/build.debian.armhf | 2 ++
deployment/build.ubuntu.amd64 | 2 ++
deployment/build.ubuntu.arm64 | 2 ++
deployment/build.ubuntu.armhf | 2 ++
6 files changed, 12 insertions(+)
diff --git a/deployment/build.debian.amd64 b/deployment/build.debian.amd64
index c43585161d..0eb9ee5c83 100755
--- a/deployment/build.debian.amd64
+++ b/deployment/build.debian.amd64
@@ -10,6 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ cp debian/control debian/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -20,6 +21,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
+ mv debian/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.debian.arm64 b/deployment/build.debian.arm64
index 4225c2f9df..d1ce85e2fa 100755
--- a/deployment/build.debian.arm64
+++ b/deployment/build.debian.arm64
@@ -10,6 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ cp debian/control debian/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -21,6 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
+ mv debian/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.debian.armhf b/deployment/build.debian.armhf
index f71a960410..3941583544 100755
--- a/deployment/build.debian.armhf
+++ b/deployment/build.debian.armhf
@@ -10,6 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ cp debian/control debian/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -21,6 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
+ mv debian/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.amd64 b/deployment/build.ubuntu.amd64
index e74db90c43..86653cb384 100755
--- a/deployment/build.ubuntu.amd64
+++ b/deployment/build.ubuntu.amd64
@@ -10,6 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ cp debian/control debian/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -20,6 +21,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
+ mv debian/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.arm64 b/deployment/build.ubuntu.arm64
index 1d91b303ad..f065170092 100755
--- a/deployment/build.ubuntu.arm64
+++ b/deployment/build.ubuntu.arm64
@@ -10,6 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ cp debian/control debian/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -21,6 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
+ mv debian/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.armhf b/deployment/build.ubuntu.armhf
index efdc2b65b1..679fde5ae1 100755
--- a/deployment/build.ubuntu.armhf
+++ b/deployment/build.ubuntu.armhf
@@ -10,6 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
+ cp debian/control debian/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -21,6 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
+ mv debian/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
--
cgit v1.2.3
From 6028bc0f7915a09caea881462008561424a15829 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 16:28:49 -0400
Subject: Port Fedora and CentOS builds and remove web build
Simplifies a number of aspects of the RPM build, including moving
.copr/Makefile into the "fedora/" folder (and leaving a symlink),
removing the jellyfin-web build components, and renaming it
jellyfin-server like Debian did.
---
.copr/Makefile | 60 +-------------
deployment/Dockerfile.centos.amd64 | 32 ++++++++
deployment/Dockerfile.fedora.amd64 | 33 ++++++++
deployment/build.centos.amd64 | 24 ++++++
deployment/build.fedora.amd64 | 24 ++++++
fedora/.gitignore | 3 +
fedora/Makefile | 29 +++++++
fedora/README.md | 43 ++++++++++
fedora/jellyfin-firewalld.xml | 9 +++
fedora/jellyfin.env | 34 ++++++++
fedora/jellyfin.override.conf | 7 ++
fedora/jellyfin.service | 15 ++++
fedora/jellyfin.spec | 158 +++++++++++++++++++++++++++++++++++++
fedora/jellyfin.sudoers | 19 +++++
fedora/restart.sh | 36 +++++++++
15 files changed, 467 insertions(+), 59 deletions(-)
mode change 100644 => 120000 .copr/Makefile
create mode 100644 deployment/Dockerfile.centos.amd64
create mode 100644 deployment/Dockerfile.fedora.amd64
create mode 100755 deployment/build.centos.amd64
create mode 100755 deployment/build.fedora.amd64
create mode 100644 fedora/.gitignore
create mode 100644 fedora/Makefile
create mode 100644 fedora/README.md
create mode 100644 fedora/jellyfin-firewalld.xml
create mode 100644 fedora/jellyfin.env
create mode 100644 fedora/jellyfin.override.conf
create mode 100644 fedora/jellyfin.service
create mode 100644 fedora/jellyfin.spec
create mode 100644 fedora/jellyfin.sudoers
create mode 100755 fedora/restart.sh
diff --git a/.copr/Makefile b/.copr/Makefile
deleted file mode 100644
index ba330ada95..0000000000
--- a/.copr/Makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-VERSION := $(shell sed -ne '/^Version:/s/.* *//p' \
- deployment/fedora-package-x64/pkg-src/jellyfin.spec)
-
-deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz:
- curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
- https://github.com/jellyfin/jellyfin-web/archive/v$(VERSION).tar.gz \
- || curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
- https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz \
-
-srpm: deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz
- cd deployment/fedora-package-x64; \
- SOURCE_DIR=../.. \
- WORKDIR="$${PWD}"; \
- package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
- pkg_src_dir="$${WORKDIR}/pkg-src"; \
- GNU_TAR=1; \
- tar \
- --transform "s,^\.,jellyfin-$(VERSION)," \
- --exclude='.git*' \
- --exclude='**/.git' \
- --exclude='**/.hg' \
- --exclude='**/.vs' \
- --exclude='**/.vscode' \
- --exclude='deployment' \
- --exclude='**/bin' \
- --exclude='**/obj' \
- --exclude='**/.nuget' \
- --exclude='*.deb' \
- --exclude='*.rpm' \
- -czf "pkg-src/jellyfin-$(VERSION).tar.gz" \
- -C $${SOURCE_DIR} ./ || GNU_TAR=0; \
- if [ $${GNU_TAR} -eq 0 ]; then \
- package_temporary_dir="$$(mktemp -d)"; \
- mkdir -p "$${package_temporary_dir}/jellyfin"; \
- tar \
- --exclude='.git*' \
- --exclude='**/.git' \
- --exclude='**/.hg' \
- --exclude='**/.vs' \
- --exclude='**/.vscode' \
- --exclude='deployment' \
- --exclude='**/bin' \
- --exclude='**/obj' \
- --exclude='**/.nuget' \
- --exclude='*.deb' \
- --exclude='*.rpm' \
- -czf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
- -C $${SOURCE_DIR} ./; \
- mkdir -p "$${package_temporary_dir}/jellyfin-$(VERSION)"; \
- tar -xzf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
- -C "$${package_temporary_dir}/jellyfin-$(VERSION); \
- rm -f "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz"; \
- tar -czf "$${SOURCE_DIR}/SOURCES/pkg-src/jellyfin-$(VERSION).tar.gz" \
- -C "$${package_temporary_dir}" "jellyfin-$(VERSION); \
- rm -rf $${package_temporary_dir}; \
- fi; \
- rpmbuild -bs pkg-src/jellyfin.spec \
- --define "_sourcedir $$PWD/pkg-src/" \
- --define "_srcrpmdir $(outdir)"
diff --git a/.copr/Makefile b/.copr/Makefile
new file mode 120000
index 0000000000..ec3c90dfd9
--- /dev/null
+++ b/.copr/Makefile
@@ -0,0 +1 @@
+../fedora/Makefile
\ No newline at end of file
diff --git a/deployment/Dockerfile.centos.amd64 b/deployment/Dockerfile.centos.amd64
new file mode 100644
index 0000000000..39788cc0ee
--- /dev/null
+++ b/deployment/Dockerfile.centos.amd64
@@ -0,0 +1,32 @@
+FROM centos:7
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV IS_DOCKER=YES
+
+# Prepare CentOS environment
+RUN yum update -y \
+ && yum install -y epel-release \
+ && yum install -y @buildsys-build rpmdevtools yum-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel git
+
+# 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 ${SOURCE_DIR}/deployment/build.centos.amd64 /build.sh \
+ && mkdir -p ${SOURCE_DIR}/SPECS \
+ && ln -s ${SOURCE_DIR}/fedora/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && mkdir -p ${SOURCE_DIR}/SOURCES \
+ && ln -s ${SOURCE_DIR}/fedora ${SOURCE_DIR}/SOURCES
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.fedora.amd64 b/deployment/Dockerfile.fedora.amd64
new file mode 100644
index 0000000000..73148763de
--- /dev/null
+++ b/deployment/Dockerfile.fedora.amd64
@@ -0,0 +1,33 @@
+FROM fedora:31
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV IS_DOCKER=YES
+
+# 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
+
+# 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 ${SOURCE_DIR}/deployment/build.fedora.amd64 /build.sh \
+ && mkdir -p ${SOURCE_DIR}/SPECS \
+ && ln -s ${SOURCE_DIR}/fedora/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && mkdir -p ${SOURCE_DIR}/SOURCES \
+ && ln -s ${SOURCE_DIR}/fedora ${SOURCE_DIR}/SOURCES
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.centos.amd64 b/deployment/build.centos.amd64
new file mode 100755
index 0000000000..939bbc45a4
--- /dev/null
+++ b/deployment/build.centos.amd64
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+#= CentOS/RHEL 7+ amd64 .rpm
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Build RPM
+make -f fedora/Makefile srpm outdir=/root/rpmbuild/SRPMS
+rpmbuild --rebuild -bb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
+
+# Move the artifacts out
+mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+rm -f fedora/jellyfin*.tar.gz
+
+popd
diff --git a/deployment/build.fedora.amd64 b/deployment/build.fedora.amd64
new file mode 100755
index 0000000000..8ac99decc1
--- /dev/null
+++ b/deployment/build.fedora.amd64
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+#= Fedora 29+ amd64 .rpm
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Build RPM
+make -f fedora/Makefile srpm outdir=/root/rpmbuild/SRPMS
+rpmbuild -rb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
+
+# Move the artifacts out
+mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+rm -f fedora/jellyfin*.tar.gz
+
+popd
diff --git a/fedora/.gitignore b/fedora/.gitignore
new file mode 100644
index 0000000000..6019b98c22
--- /dev/null
+++ b/fedora/.gitignore
@@ -0,0 +1,3 @@
+*.rpm
+*.zip
+*.tar.gz
\ No newline at end of file
diff --git a/fedora/Makefile b/fedora/Makefile
new file mode 100644
index 0000000000..1d2709a2fe
--- /dev/null
+++ b/fedora/Makefile
@@ -0,0 +1,29 @@
+VERSION := $(shell sed -ne '/^Version:/s/.* *//p' fedora/jellyfin.spec)
+
+srpm:
+ cd fedora/; \
+ SOURCE_DIR=.. \
+ WORKDIR="$${PWD}"; \
+ package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
+ pkg_src_dir="$${WORKDIR}"; \
+ GNU_TAR=1; \
+ tar \
+ --transform "s,^\.,jellyfin-server-$(VERSION)," \
+ --exclude='.git*' \
+ --exclude='**/.git' \
+ --exclude='**/.hg' \
+ --exclude='**/.vs' \
+ --exclude='**/.vscode' \
+ --exclude='deployment' \
+ --exclude='**/bin' \
+ --exclude='**/obj' \
+ --exclude='**/.nuget' \
+ --exclude='*.deb' \
+ --exclude='*.rpm' \
+ --exclude='jellyfin-server-$(VERSION).tar.gz' \
+ -czf "jellyfin-server-$(VERSION).tar.gz" \
+ -C $${SOURCE_DIR} ./
+ cd fedora/; \
+ rpmbuild -bs jellyfin.spec \
+ --define "_sourcedir $$PWD/" \
+ --define "_srcrpmdir $(outdir)"
diff --git a/fedora/README.md b/fedora/README.md
new file mode 100644
index 0000000000..7ed6f7efc6
--- /dev/null
+++ b/fedora/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/fedora/jellyfin-firewalld.xml b/fedora/jellyfin-firewalld.xml
new file mode 100644
index 0000000000..538c5d65f8
--- /dev/null
+++ b/fedora/jellyfin-firewalld.xml
@@ -0,0 +1,9 @@
+
+
+ Jellyfin
+ The Free Software Media System.
+
+
+
+
+
diff --git a/fedora/jellyfin.env b/fedora/jellyfin.env
new file mode 100644
index 0000000000..de48f13af5
--- /dev/null
+++ b/fedora/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/fedora/jellyfin.override.conf b/fedora/jellyfin.override.conf
new file mode 100644
index 0000000000..8652450bb4
--- /dev/null
+++ b/fedora/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/fedora/jellyfin.service b/fedora/jellyfin.service
new file mode 100644
index 0000000000..f3dc594b1c
--- /dev/null
+++ b/fedora/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/fedora/jellyfin.spec b/fedora/jellyfin.spec
new file mode 100644
index 0000000000..e6a3170b56
--- /dev/null
+++ b/fedora/jellyfin.spec
@@ -0,0 +1,158 @@
+%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-server
+Version: 10.6.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: jellyfin-server-%{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
+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 jellyfin-server-%{version} -b 0
+
+%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/jellyfin/LICENSE
+%{__install} -D -m 0644 %{SOURCE15} %{buildroot}%{_sysconfdir}/systemd/system/jellyfin.service.d/override.conf
+%{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/jellyfin/logging.json
+%{__mkdir} -p %{buildroot}%{_bindir}
+tee %{buildroot}%{_bindir}/jellyfin << EOF
+#!/bin/sh
+exec %{_libdir}/jellyfin/jellyfin \${@}
+EOF
+%{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin
+%{__mkdir} -p %{buildroot}%{_sysconfdir}/jellyfin
+%{__mkdir} -p %{buildroot}%{_var}/log/jellyfin
+%{__mkdir} -p %{buildroot}%{_var}/cache/jellyfin
+
+%{__install} -D -m 0644 %{SOURCE11} %{buildroot}%{_unitdir}/jellyfin.service
+%{__install} -D -m 0644 %{SOURCE12} %{buildroot}%{_sysconfdir}/sysconfig/jellyfin
+%{__install} -D -m 0600 %{SOURCE13} %{buildroot}%{_sysconfdir}/sudoers.d/jellyfin-sudoers
+%{__install} -D -m 0755 %{SOURCE14} %{buildroot}%{_libexecdir}/jellyfin/restart.sh
+%{__install} -D -m 0644 %{SOURCE16} %{buildroot}%{_prefix}/lib/firewalld/services/jellyfin.xml
+
+%files
+%attr(755,root,root) %{_bindir}/jellyfin
+%{_libdir}/jellyfin/*.json
+%{_libdir}/jellyfin/*.dll
+%{_libdir}/jellyfin/*.so
+%{_libdir}/jellyfin/*.a
+%{_libdir}/jellyfin/createdump
+# Needs 755 else only root can run it since binary build by dotnet is 722
+%attr(755,root,root) %{_libdir}/jellyfin/jellyfin
+%{_libdir}/jellyfin/SOS_README.md
+%{_unitdir}/jellyfin.service
+%{_libexecdir}/jellyfin/restart.sh
+%{_prefix}/lib/firewalld/services/jellyfin.xml
+%attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/jellyfin
+%config %{_sysconfdir}/sysconfig/jellyfin
+%config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/jellyfin-sudoers
+%config(noreplace) %{_sysconfdir}/systemd/system/jellyfin.service.d/override.conf
+%config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/jellyfin/logging.json
+%attr(750,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin
+%attr(-,jellyfin,jellyfin) %dir %{_var}/log/jellyfin
+%attr(750,jellyfin,jellyfin) %dir %{_var}/cache/jellyfin
+%{_datadir}/licenses/jellyfin/LICENSE
+
+%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}/jellyfin/config ]; then
+ mv %{_sharedstatedir}/jellyfin/config/* %{_sysconfdir}/jellyfin/
+ rmdir %{_sharedstatedir}/jellyfin/config
+ ln -sf %{_sysconfdir}/jellyfin %{_sharedstatedir}/jellyfin/config
+ fi
+ if [ ! -L %{_sharedstatedir}/jellyfin/logs ]; then
+ mv %{_sharedstatedir}/jellyfin/logs/* %{_var}/log/jellyfin
+ rmdir %{_sharedstatedir}/jellyfin/logs
+ ln -sf %{_var}/log/jellyfin %{_sharedstatedir}/jellyfin/logs
+ fi
+ if [ ! -L %{_sharedstatedir}/jellyfin/cache ]; then
+ mv %{_sharedstatedir}/jellyfin/cache/* %{_var}/cache/jellyfin
+ rmdir %{_sharedstatedir}/jellyfin/cache
+ ln -sf %{_var}/cache/jellyfin %{_sharedstatedir}/jellyfin/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
+* Mon Mar 23 2020 Jellyfin Packaging Team
+- Forthcoming stable release
+* Fri Oct 11 2019 Jellyfin Packaging Team
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- New upstream version 10.3.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.0
diff --git a/fedora/jellyfin.sudoers b/fedora/jellyfin.sudoers
new file mode 100644
index 0000000000..dd245af4b8
--- /dev/null
+++ b/fedora/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/fedora/restart.sh b/fedora/restart.sh
new file mode 100755
index 0000000000..9e53efecd0
--- /dev/null
+++ b/fedora/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
--
cgit v1.2.3
From cf6dc609b72fd9b388c987ae38c0a8bf95168d15 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 17:54:17 -0400
Subject: Fix up single-segment platform names
---
build.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.sh b/build.sh
index 5d3f8ec713..8256f9ea31 100755
--- a/build.sh
+++ b/build.sh
@@ -24,7 +24,7 @@ usage() {
list_platforms() {
declare -a platforms
platforms=(
- $( find deployment -maxdepth 1 -mindepth 1 -name "build.*" | awk -F'.' '{ $1=""; print $2 "." $3 }' | sort )
+ $( find deployment -maxdepth 1 -mindepth 1 -name "build.*" | awk -F'.' '{ $1=""; printf $2; if ($3 != ""){ printf "." $3; } print ""; }' | sort )
)
echo -e "Valid platforms:"
echo
--
cgit v1.2.3
From 8e0a33c1aadabd91765594e8d9d5c3a53933b26d Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:01:28 -0400
Subject: Handle single- or triple-part platform names
---
build.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.sh b/build.sh
index 8256f9ea31..86c8447933 100755
--- a/build.sh
+++ b/build.sh
@@ -24,7 +24,7 @@ usage() {
list_platforms() {
declare -a platforms
platforms=(
- $( find deployment -maxdepth 1 -mindepth 1 -name "build.*" | awk -F'.' '{ $1=""; printf $2; if ($3 != ""){ printf "." $3; } print ""; }' | sort )
+ $( find deployment -maxdepth 1 -mindepth 1 -name "build.*" | awk -F'.' '{ $1=""; printf $2; if ($3 != ""){ printf "." $3; }; if ($4 != ""){ printf "." $4; }; print ""; }' | sort )
)
echo -e "Valid platforms:"
echo
--
cgit v1.2.3
From ab8de37080a985c742694722f311d719ec64bdc8 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:01:42 -0400
Subject: Add .tar.gz-based builds
---
deployment/Dockerfile.linux.amd64 | 31 +++++++++++++++++++++++++++++++
deployment/Dockerfile.macos.amd64 | 31 +++++++++++++++++++++++++++++++
deployment/Dockerfile.portable | 30 ++++++++++++++++++++++++++++++
deployment/build.linux.amd64 | 27 +++++++++++++++++++++++++++
deployment/build.macos.amd64 | 27 +++++++++++++++++++++++++++
deployment/build.portable | 27 +++++++++++++++++++++++++++
6 files changed, 173 insertions(+)
create mode 100644 deployment/Dockerfile.linux.amd64
create mode 100644 deployment/Dockerfile.macos.amd64
create mode 100644 deployment/Dockerfile.portable
create mode 100755 deployment/build.linux.amd64
create mode 100755 deployment/build.macos.amd64
create mode 100755 deployment/build.portable
diff --git a/deployment/Dockerfile.linux.amd64 b/deployment/Dockerfile.linux.amd64
new file mode 100644
index 0000000000..d8bec92145
--- /dev/null
+++ b/deployment/Dockerfile.linux.amd64
@@ -0,0 +1,31 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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
+
+# Link to docker-build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.linux.amd64 /build.sh
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.macos.amd64 b/deployment/Dockerfile.macos.amd64
new file mode 100644
index 0000000000..aaf9a9692f
--- /dev/null
+++ b/deployment/Dockerfile.macos.amd64
@@ -0,0 +1,31 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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
+
+# Link to docker-build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.macos.amd64 /build.sh
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.portable b/deployment/Dockerfile.portable
new file mode 100644
index 0000000000..2893e140df
--- /dev/null
+++ b/deployment/Dockerfile.portable
@@ -0,0 +1,30 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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 IS_DOCKER=YES
+
+# 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
+
+# Link to docker-build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.portable /build.sh
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.linux.amd64 b/deployment/build.linux.amd64
new file mode 100755
index 0000000000..0cbbd05cf9
--- /dev/null
+++ b/deployment/build.linux.amd64
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= Generic Linux amd64 .tar.gz
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_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-server_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+tar -czf jellyfin-server_${version}_linux-amd64.tar.gz -C dist jellyfin-server_${version}
+rm -rf dist/jellyfin-server_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/build.macos.amd64 b/deployment/build.macos.amd64
new file mode 100755
index 0000000000..4dca2b6438
--- /dev/null
+++ b/deployment/build.macos.amd64
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= MacOS 10.13+ amd64 .tar.gz
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_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-server_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+tar -czf jellyfin-server_${version}_macos-amd64.tar.gz -C dist jellyfin-server_${version}
+rm -rf dist/jellyfin-server_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/build.portable b/deployment/build.portable
new file mode 100755
index 0000000000..1e8a4ab623
--- /dev/null
+++ b/deployment/build.portable
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= Portable .NET DLL .tar.gz
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_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-server_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+tar -czf jellyfin-server_${version}_portable.tar.gz -C dist jellyfin-server_${version}
+rm -rf dist/jellyfin-server_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
--
cgit v1.2.3
From 0242ce5fee689442472505be94000233c464ffbd Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:10:34 -0400
Subject: Add Windows build
---
build.yaml | 25 +-
deployment/Dockerfile.windows.amd64 | 30 ++
deployment/build.windows.amd64 | 54 ++
deployment/old/windows/build-jellyfin.ps1 | 190 -------
deployment/old/windows/dependencies.txt | 2 -
deployment/old/windows/dialogs/confirmation.nsddef | 24 -
deployment/old/windows/dialogs/confirmation.nsdinc | 61 ---
.../old/windows/dialogs/service-config.nsddef | 13 -
.../old/windows/dialogs/service-config.nsdinc | 56 --
deployment/old/windows/dialogs/setuptype.nsddef | 12 -
deployment/old/windows/dialogs/setuptype.nsdinc | 50 --
deployment/old/windows/helpers/ShowError.nsh | 10 -
deployment/old/windows/helpers/StrSlash.nsh | 47 --
deployment/old/windows/jellyfin.nsi | 575 ---------------------
deployment/old/windows/legacy/install-jellyfin.ps1 | 460 -----------------
deployment/old/windows/legacy/install.bat | 1 -
windows/build-jellyfin.ps1 | 190 +++++++
windows/dependencies.txt | 2 +
windows/dialogs/confirmation.nsddef | 24 +
windows/dialogs/confirmation.nsdinc | 61 +++
windows/dialogs/service-config.nsddef | 13 +
windows/dialogs/service-config.nsdinc | 56 ++
windows/dialogs/setuptype.nsddef | 12 +
windows/dialogs/setuptype.nsdinc | 50 ++
windows/helpers/ShowError.nsh | 10 +
windows/helpers/StrSlash.nsh | 47 ++
windows/jellyfin.nsi | 575 +++++++++++++++++++++
windows/legacy/install-jellyfin.ps1 | 460 +++++++++++++++++
windows/legacy/install.bat | 1 +
29 files changed, 1597 insertions(+), 1514 deletions(-)
create mode 100644 deployment/Dockerfile.windows.amd64
create mode 100755 deployment/build.windows.amd64
delete mode 100644 deployment/old/windows/build-jellyfin.ps1
delete mode 100644 deployment/old/windows/dependencies.txt
delete mode 100644 deployment/old/windows/dialogs/confirmation.nsddef
delete mode 100644 deployment/old/windows/dialogs/confirmation.nsdinc
delete mode 100644 deployment/old/windows/dialogs/service-config.nsddef
delete mode 100644 deployment/old/windows/dialogs/service-config.nsdinc
delete mode 100644 deployment/old/windows/dialogs/setuptype.nsddef
delete mode 100644 deployment/old/windows/dialogs/setuptype.nsdinc
delete mode 100644 deployment/old/windows/helpers/ShowError.nsh
delete mode 100644 deployment/old/windows/helpers/StrSlash.nsh
delete mode 100644 deployment/old/windows/jellyfin.nsi
delete mode 100644 deployment/old/windows/legacy/install-jellyfin.ps1
delete mode 100644 deployment/old/windows/legacy/install.bat
create mode 100644 windows/build-jellyfin.ps1
create mode 100644 windows/dependencies.txt
create mode 100644 windows/dialogs/confirmation.nsddef
create mode 100644 windows/dialogs/confirmation.nsdinc
create mode 100644 windows/dialogs/service-config.nsddef
create mode 100644 windows/dialogs/service-config.nsdinc
create mode 100644 windows/dialogs/setuptype.nsddef
create mode 100644 windows/dialogs/setuptype.nsdinc
create mode 100644 windows/helpers/ShowError.nsh
create mode 100644 windows/helpers/StrSlash.nsh
create mode 100644 windows/jellyfin.nsi
create mode 100644 windows/legacy/install-jellyfin.ps1
create mode 100644 windows/legacy/install.bat
diff --git a/build.yaml b/build.yaml
index 123f77fb89..a76539d1f3 100644
--- a/build.yaml
+++ b/build.yaml
@@ -1,18 +1,17 @@
---
# We just wrap `build` so this is really it
name: "jellyfin"
-version: "10.5.0"
+version: "10.6.0"
packages:
- - debian-package-x64
- - debian-package-armhf
- - debian-package-arm64
- - ubuntu-package-x64
- - ubuntu-package-armhf
- - ubuntu-package-arm64
- - fedora-package-x64
- - centos-package-x64
- - linux-x64
- - macos
+ - debian.amd64
+ - debian.arm64
+ - debian.armhf
+ - ubuntu.amd64
+ - ubuntu.arm64
+ - ubuntu.armhf
+ - fedora.amd64
+ - centos.amd64
+ - linux.amd64
+ - macos.amd64
+ - windows.amd64
- portable
- - win-x64
- - win-x86
diff --git a/deployment/Dockerfile.windows.amd64 b/deployment/Dockerfile.windows.amd64
new file mode 100644
index 0000000000..0397a023e2
--- /dev/null
+++ b/deployment/Dockerfile.windows.amd64
@@ -0,0 +1,30 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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 IS_DOCKER=YES
+
+# 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
+
+# Link to docker-build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.windows.amd64 /build.sh
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.windows.amd64 b/deployment/build.windows.amd64
new file mode 100755
index 0000000000..39bd41f990
--- /dev/null
+++ b/deployment/build.windows.amd64
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+#= Windows 7+ amd64 (x64) .zip
+
+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}
+
+# Get version
+version="$( grep "version:" ./build.yaml | sed -E 's/version: "([0-9\.]+.*)"/\1/' )"
+
+output_dir="dist/jellyfin-server_${version}"
+
+# Build binary
+dotnet publish Jellyfin.Server --configuration Release --self-contained --runtime win-x64 --output ${output_dir}/ "-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 ${output_dir}/nssm.exe
+unzip ${addin_build_dir}/ffmpeg.zip -d ${addin_build_dir}
+cp ${addin_build_dir}/${FFMPEG_VERSION}/bin/ffmpeg.exe ${output_dir}/ffmpeg.exe
+cp ${addin_build_dir}/${FFMPEG_VERSION}/bin/ffprobe.exe ${output_dir}/ffprobe.exe
+rm -rf ${addin_build_dir}
+
+# Prepare scripts
+cp ${SOURCE_DIR}/windows/legacy/install-jellyfin.ps1 ${output_dir}/install-jellyfin.ps1
+cp ${SOURCE_DIR}/windows/legacy/install.bat ${output_dir}/install.bat
+
+# Create zip package
+pushd dist
+zip -qr jellyfin-server_${version}.portable.zip jellyfin-server_${version}
+popd
+rm -rf ${output_dir}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv dist/jellyfin[-_]*.zip ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/old/windows/build-jellyfin.ps1 b/deployment/old/windows/build-jellyfin.ps1
deleted file mode 100644
index c762137a75..0000000000
--- a/deployment/old/windows/build-jellyfin.ps1
+++ /dev/null
@@ -1,190 +0,0 @@
-[CmdletBinding()]
-param(
- [switch]$MakeNSIS,
- [switch]$InstallNSIS,
- [switch]$InstallFFMPEG,
- [switch]$InstallNSSM,
- [switch]$SkipJellyfinBuild,
- [switch]$GenerateZip,
- [string]$InstallLocation = "./dist/jellyfin-win-nsis",
- [string]$UXLocation = "../jellyfin-ux",
- [switch]$InstallTrayApp,
- [ValidateSet('Debug','Release')][string]$BuildType = 'Release',
- [ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
- [ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
- [ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
-)
-
-$ProgressPreference = 'SilentlyContinue' # Speedup all downloads by hiding progress bars.
-
-#PowershellCore and *nix check to make determine which temp dir to use.
-if(($PSVersionTable.PSEdition -eq 'Core') -and (-not $IsWindows)){
- $TempDir = mktemp -d
-}else{
- $TempDir = $env:Temp
-}
-#Create staging dir
-New-Item -ItemType Directory -Force -Path $InstallLocation
-$ResolvedInstallLocation = Resolve-Path $InstallLocation
-$ResolvedUXLocation = Resolve-Path $UXLocation
-
-function Build-JellyFin {
- if(($Architecture -eq 'arm64') -and ($WindowsVersion -ne 'win10')){
- Write-Error "arm64 only supported with Windows10 Version"
- exit
- }
- if(($Architecture -eq 'arm') -and ($WindowsVersion -notin @('win10','win81','win8'))){
- Write-Error "arm only supported with Windows 8 or higher"
- exit
- }
- Write-Verbose "windowsversion-Architecture: $windowsversion-$Architecture"
- Write-Verbose "InstallLocation: $ResolvedInstallLocation"
- Write-Verbose "DotNetVerbosity: $DotNetVerbosity"
- dotnet publish --self-contained -c $BuildType --output $ResolvedInstallLocation -v $DotNetVerbosity -p:GenerateDocumentationFile=false -p:DebugSymbols=false -p:DebugType=none --runtime `"$windowsversion-$Architecture`" Jellyfin.Server
-}
-
-function Install-FFMPEG {
- param(
- [string]$ResolvedInstallLocation,
- [string]$Architecture,
- [string]$FFMPEGVersionX86 = "ffmpeg-4.2.1-win32-shared"
- )
- Write-Verbose "Checking Architecture"
- if($Architecture -notin @('x86','x64')){
- Write-Warning "No builds available for your selected architecture of $Architecture"
- Write-Warning "FFMPEG will not be installed"
- }elseif($Architecture -eq 'x64'){
- Write-Verbose "Downloading 64 bit FFMPEG"
- Invoke-WebRequest -Uri https://repo.jellyfin.org/releases/server/windows/ffmpeg/jellyfin-ffmpeg.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
- }else{
- Write-Verbose "Downloading 32 bit FFMPEG"
- Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/shared/$FFMPEGVersionX86.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
- }
-
- Expand-Archive "$tempdir/ffmpeg.zip" -DestinationPath "$tempdir/ffmpeg/" -Force | Write-Verbose
- if($Architecture -eq 'x64'){
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/ffmpeg" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }else{
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/ffmpeg/$FFMPEGVersionX86/bin" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }
- Remove-Item "$tempdir/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
- Remove-Item "$tempdir/ffmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
-}
-
-function Install-NSSM {
- param(
- [string]$ResolvedInstallLocation,
- [string]$Architecture
- )
- Write-Verbose "Checking Architecture"
- if($Architecture -notin @('x86','x64')){
- Write-Warning "No builds available for your selected architecture of $Architecture"
- Write-Warning "NSSM will not be installed"
- }else{
- Write-Verbose "Downloading NSSM"
- # [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- # Temporary workaround, file is hosted in an azure blob with a custom domain in front for brevity
- Invoke-WebRequest -Uri http://files.evilt.win/nssm/nssm-2.24-101-g897c7ad.zip -UseBasicParsing -OutFile "$tempdir/nssm.zip" | Write-Verbose
- }
-
- Expand-Archive "$tempdir/nssm.zip" -DestinationPath "$tempdir/nssm/" -Force | Write-Verbose
- if($Architecture -eq 'x64'){
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win64" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }else{
- Write-Verbose "Copying Binaries to Jellyfin location"
- Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win32" | ForEach-Object {
- Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
- }
- }
- Remove-Item "$tempdir/nssm/" -Recurse -Force -ErrorAction Continue | Write-Verbose
- Remove-Item "$tempdir/nssm.zip" -Force -ErrorAction Continue | Write-Verbose
-}
-
-function Make-NSIS {
- param(
- [string]$ResolvedInstallLocation
- )
-
- $env:InstallLocation = $ResolvedInstallLocation
- if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
- & "$tempdir/nsis/nsis-3.04/makensis.exe" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
- } else {
- & "makensis" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
- }
- Copy-Item .\deployment\windows\jellyfin_*.exe $ResolvedInstallLocation\..\
-}
-
-
-function Install-NSIS {
- Write-Verbose "Downloading NSIS"
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- Invoke-WebRequest -Uri https://nchc.dl.sourceforge.net/project/nsis/NSIS%203/3.04/nsis-3.04.zip -UseBasicParsing -OutFile "$tempdir/nsis.zip" | Write-Verbose
-
- Expand-Archive "$tempdir/nsis.zip" -DestinationPath "$tempdir/nsis/" -Force | Write-Verbose
-}
-
-function Cleanup-NSIS {
- Remove-Item "$tempdir/nsis/" -Recurse -Force -ErrorAction Continue | Write-Verbose
- Remove-Item "$tempdir/nsis.zip" -Force -ErrorAction Continue | Write-Verbose
-}
-
-function Install-TrayApp {
- param(
- [string]$ResolvedInstallLocation,
- [string]$Architecture
- )
- Write-Verbose "Checking Architecture"
- if($Architecture -ne 'x64'){
- Write-Warning "No builds available for your selected architecture of $Architecture"
- Write-Warning "The tray app will not be available."
- }else{
- Write-Verbose "Downloading Tray App and copying to Jellyfin location"
- [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
- Invoke-WebRequest -Uri https://github.com/jellyfin/jellyfin-windows-tray/releases/latest/download/JellyfinTray.exe -UseBasicParsing -OutFile "$installLocation/JellyfinTray.exe" | Write-Verbose
- }
-}
-
-if(-not $SkipJellyfinBuild.IsPresent -and -not ($InstallNSIS -eq $true)){
- Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
- Build-JellyFin
-}
-if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
- Write-Verbose "Starting FFMPEG Install"
- Install-FFMPEG $ResolvedInstallLocation $Architecture
-}
-if($InstallNSSM.IsPresent -or ($InstallNSSM -eq $true)){
- Write-Verbose "Starting NSSM Install"
- Install-NSSM $ResolvedInstallLocation $Architecture
-}
-if($InstallTrayApp.IsPresent -or ($InstallTrayApp -eq $true)){
- Write-Verbose "Downloading Windows Tray App"
- Install-TrayApp $ResolvedInstallLocation $Architecture
-}
-#Copy-Item .\deployment\windows\install-jellyfin.ps1 $ResolvedInstallLocation\install-jellyfin.ps1
-#Copy-Item .\deployment\windows\install.bat $ResolvedInstallLocation\install.bat
-Copy-Item .\LICENSE $ResolvedInstallLocation\LICENSE
-if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
- Write-Verbose "Installing NSIS"
- Install-NSIS
-}
-if($MakeNSIS.IsPresent -or ($MakeNSIS -eq $true)){
- Write-Verbose "Starting NSIS Package creation"
- Make-NSIS $ResolvedInstallLocation
-}
-if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
- Write-Verbose "Cleanup NSIS"
- Cleanup-NSIS
-}
-if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
- Compress-Archive -Path $ResolvedInstallLocation -DestinationPath "$ResolvedInstallLocation/jellyfin.zip" -Force
-}
-Write-Verbose "Finished"
diff --git a/deployment/old/windows/dependencies.txt b/deployment/old/windows/dependencies.txt
deleted file mode 100644
index 16f77cce7c..0000000000
--- a/deployment/old/windows/dependencies.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-dotnet
-nsis
diff --git a/deployment/old/windows/dialogs/confirmation.nsddef b/deployment/old/windows/dialogs/confirmation.nsddef
deleted file mode 100644
index 969ebacd62..0000000000
--- a/deployment/old/windows/dialogs/confirmation.nsddef
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
diff --git a/deployment/old/windows/dialogs/confirmation.nsdinc b/deployment/old/windows/dialogs/confirmation.nsdinc
deleted file mode 100644
index f00e9b43ab..0000000000
--- a/deployment/old/windows/dialogs/confirmation.nsdinc
+++ /dev/null
@@ -1,61 +0,0 @@
-; =========================================================
-; This file was generated by NSISDialogDesigner 1.4.4.0
-; http://coolsoft.altervista.org/nsisdialogdesigner
-;
-; Do not edit it manually, use NSISDialogDesigner instead!
-; Modified by EraYaN (2019-09-01)
-; =========================================================
-
-; handle variables
-Var hCtl_confirmation
-Var hCtl_confirmation_ConfirmRichText
-
-; HeaderCustomScript
-!include "helpers\StrSlash.nsh"
-
-
-
-; dialog create function
-Function fnc_confirmation_Create
-
- ; === confirmation (type: Dialog) ===
- nsDialogs::Create 1018
- Pop $hCtl_confirmation
- ${If} $hCtl_confirmation == error
- Abort
- ${EndIf}
- !insertmacro MUI_HEADER_TEXT "Confirmation Page" "Please confirm your choices for Jellyfin Server installation"
-
- ; === ConfirmRichText (type: RichText) ===
- nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 8u 7u 280u 126u ""
- Pop $hCtl_confirmation_ConfirmRichText
- ${NSD_AddExStyle} $hCtl_confirmation_ConfirmRichText ${WS_EX_STATICEDGE}
-
- ; CreateFunctionCustomScript
- ${StrSlash} '$0' $INSTDIR
-
- ${StrSlash} '$1' $_JELLYFINDATADIR_
-
- ${If} $_INSTALLSERVICE_ == "Yes"
- ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
- \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
- Installation Folder:\b0 $0\line\b \
- Service install:\b0 $_INSTALLSERVICE_\line\b \
- Service start:\b0 $_SERVICESTART_\line\b \
- Service account:\b0 $_SERVICEACCOUNTTYPE_\line\b \
- Jellyfin Data Folder:\b0 $1\par \
- \
- \pard\sa200\sl276\slmult1\f1\lang1043\par \
- }"
- ${Else}
- ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
- \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
- Installation Folder:\b0 $0\line\b \
- Service install:\b0 $_INSTALLSERVICE_\line\b \
- Jellyfin Data Folder:\b0 $1\par \
- \
- \pard\sa200\sl276\slmult1\f1\lang1043\par \
- }"
- ${EndIf}
-
-FunctionEnd
diff --git a/deployment/old/windows/dialogs/service-config.nsddef b/deployment/old/windows/dialogs/service-config.nsddef
deleted file mode 100644
index 3509ada249..0000000000
--- a/deployment/old/windows/dialogs/service-config.nsddef
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/deployment/old/windows/dialogs/service-config.nsdinc b/deployment/old/windows/dialogs/service-config.nsdinc
deleted file mode 100644
index 58c350f2ec..0000000000
--- a/deployment/old/windows/dialogs/service-config.nsdinc
+++ /dev/null
@@ -1,56 +0,0 @@
-; =========================================================
-; This file was generated by NSISDialogDesigner 1.4.4.0
-; http://coolsoft.altervista.org/nsisdialogdesigner
-;
-; Do not edit it manually, use NSISDialogDesigner instead!
-; =========================================================
-
-; handle variables
-Var hCtl_service_config
-Var hCtl_service_config_StartServiceAfterInstall
-Var hCtl_service_config_LocalSystemAccountLabel
-Var hCtl_service_config_NetworkServiceAccountLabel
-Var hCtl_service_config_UseLocalSystemAccount
-Var hCtl_service_config_UseNetworkServiceAccount
-Var hCtl_service_config_Font1
-
-
-; dialog create function
-Function fnc_service_config_Create
-
- ; custom font definitions
- CreateFont $hCtl_service_config_Font1 "Microsoft Sans Serif" "8.25" "700"
-
- ; === service_config (type: Dialog) ===
- nsDialogs::Create 1018
- Pop $hCtl_service_config
- ${If} $hCtl_service_config == error
- Abort
- ${EndIf}
- !insertmacro MUI_HEADER_TEXT "Configure the service" "This controls what type of access the server gets to this system."
-
- ; === StartServiceAfterInstall (type: Checkbox) ===
- ${NSD_CreateCheckbox} 8u 118u 280u 15u "Start Service after Install"
- Pop $hCtl_service_config_StartServiceAfterInstall
- ${NSD_Check} $hCtl_service_config_StartServiceAfterInstall
-
- ; === LocalSystemAccountLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 71u 280u 28u "The Local System account has full access to every resource and file on the system. This can have very real security implications, do not use unless absolutely neseccary."
- Pop $hCtl_service_config_LocalSystemAccountLabel
-
- ; === NetworkServiceAccountLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 24u 280u 28u "The NetworkService account is a predefined local account used by the service control manager. It is the recommended way to install the Jellyfin Server service."
- Pop $hCtl_service_config_NetworkServiceAccountLabel
-
- ; === UseLocalSystemAccount (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 54u 280u 15u "Use Local System account"
- Pop $hCtl_service_config_UseLocalSystemAccount
- ${NSD_AddStyle} $hCtl_service_config_UseLocalSystemAccount ${WS_GROUP}
-
- ; === UseNetworkServiceAccount (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 7u 280u 15u "Use Network Service account (Recommended)"
- Pop $hCtl_service_config_UseNetworkServiceAccount
- SendMessage $hCtl_service_config_UseNetworkServiceAccount ${WM_SETFONT} $hCtl_service_config_Font1 0
- ${NSD_Check} $hCtl_service_config_UseNetworkServiceAccount
-
-FunctionEnd
diff --git a/deployment/old/windows/dialogs/setuptype.nsddef b/deployment/old/windows/dialogs/setuptype.nsddef
deleted file mode 100644
index b55ceeaaa6..0000000000
--- a/deployment/old/windows/dialogs/setuptype.nsddef
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/deployment/old/windows/dialogs/setuptype.nsdinc b/deployment/old/windows/dialogs/setuptype.nsdinc
deleted file mode 100644
index 8746ad2cc6..0000000000
--- a/deployment/old/windows/dialogs/setuptype.nsdinc
+++ /dev/null
@@ -1,50 +0,0 @@
-; =========================================================
-; This file was generated by NSISDialogDesigner 1.4.4.0
-; http://coolsoft.altervista.org/nsisdialogdesigner
-;
-; Do not edit it manually, use NSISDialogDesigner instead!
-; =========================================================
-
-; handle variables
-Var hCtl_setuptype
-Var hCtl_setuptype_InstallasaServiceLabel
-Var hCtl_setuptype_InstallasaService
-Var hCtl_setuptype_BasicInstallLabel
-Var hCtl_setuptype_BasicInstall
-Var hCtl_setuptype_Font1
-
-
-; dialog create function
-Function fnc_setuptype_Create
-
- ; custom font definitions
- CreateFont $hCtl_setuptype_Font1 "Microsoft Sans Serif" "8.25" "700"
-
- ; === setuptype (type: Dialog) ===
- nsDialogs::Create 1018
- Pop $hCtl_setuptype
- ${If} $hCtl_setuptype == error
- Abort
- ${EndIf}
- !insertmacro MUI_HEADER_TEXT "Setup Type" "Control how Jellyfin is installed."
-
- ; === InstallasaServiceLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 71u 280u 28u "Install Jellyfin as a service. This method is recommended for Advanced Users. Additional setup is required to access network shares."
- Pop $hCtl_setuptype_InstallasaServiceLabel
-
- ; === InstallasaService (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 54u 280u 15u "Install as a Service (Advanced Users)"
- Pop $hCtl_setuptype_InstallasaService
- ${NSD_AddStyle} $hCtl_setuptype_InstallasaService ${WS_GROUP}
-
- ; === BasicInstallLabel (type: Label) ===
- ${NSD_CreateLabel} 8u 24u 280u 28u "The basic install will run Jellyfin in your current user account.$\nThis is recommended for new users and those with existing Jellyfin installs older than 10.4."
- Pop $hCtl_setuptype_BasicInstallLabel
-
- ; === BasicInstall (type: RadioButton) ===
- ${NSD_CreateRadioButton} 8u 7u 280u 15u "Basic Install (Recommended)"
- Pop $hCtl_setuptype_BasicInstall
- SendMessage $hCtl_setuptype_BasicInstall ${WM_SETFONT} $hCtl_setuptype_Font1 0
- ${NSD_Check} $hCtl_setuptype_BasicInstall
-
-FunctionEnd
diff --git a/deployment/old/windows/helpers/ShowError.nsh b/deployment/old/windows/helpers/ShowError.nsh
deleted file mode 100644
index 6e09b1e407..0000000000
--- a/deployment/old/windows/helpers/ShowError.nsh
+++ /dev/null
@@ -1,10 +0,0 @@
-; Show error
-!macro ShowError TEXT RETRYLABEL
- MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "${TEXT}" IDIGNORE +2 IDRETRY ${RETRYLABEL}
- Abort
-!macroend
-
-!macro ShowErrorFinal TEXT
- MessageBox MB_OK|MB_ICONSTOP "${TEXT}"
- Abort
-!macroend
diff --git a/deployment/old/windows/helpers/StrSlash.nsh b/deployment/old/windows/helpers/StrSlash.nsh
deleted file mode 100644
index b8aa771aa6..0000000000
--- a/deployment/old/windows/helpers/StrSlash.nsh
+++ /dev/null
@@ -1,47 +0,0 @@
-; Adapted from: https://nsis.sourceforge.io/Another_String_Replace_(and_Slash/BackSlash_Converter) (2019-08-31)
-
-!macro _StrSlashConstructor out in
- Push "${in}"
- Push "\"
- Call StrSlash
- Pop ${out}
-!macroend
-
-!define StrSlash '!insertmacro "_StrSlashConstructor"'
-
-; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
-; Push "\"
-; Call StrSlash
-; Pop $R0
-; ;Now $R0 contains 'c:/this/and/that/filename.htm'
-Function StrSlash
- Exch $R3 ; $R3 = needle ("\" or "/")
- Exch
- Exch $R1 ; $R1 = String to replacement in (haystack)
- Push $R2 ; Replaced haystack
- Push $R4 ; $R4 = not $R3 ("/" or "\")
- Push $R6
- Push $R7 ; Scratch reg
- StrCpy $R2 ""
- StrLen $R6 $R1
- StrCpy $R4 "\"
- StrCmp $R3 "/" loop
- StrCpy $R4 "/"
-loop:
- StrCpy $R7 $R1 1
- StrCpy $R1 $R1 $R6 1
- StrCmp $R7 $R3 found
- StrCpy $R2 "$R2$R7"
- StrCmp $R1 "" done loop
-found:
- StrCpy $R2 "$R2$R4"
- StrCmp $R1 "" done loop
-done:
- StrCpy $R3 $R2
- Pop $R7
- Pop $R6
- Pop $R4
- Pop $R2
- Pop $R1
- Exch $R3
-FunctionEnd
diff --git a/deployment/old/windows/jellyfin.nsi b/deployment/old/windows/jellyfin.nsi
deleted file mode 100644
index fada62d981..0000000000
--- a/deployment/old/windows/jellyfin.nsi
+++ /dev/null
@@ -1,575 +0,0 @@
-!verbose 3
-SetCompressor /SOLID bzip2
-ShowInstDetails show
-ShowUninstDetails show
-Unicode True
-
-;--------------------------------
-!define SF_USELECTED 0 ; used to check selected options status, rest are inherited from Sections.nsh
-
- !include "MUI2.nsh"
- !include "Sections.nsh"
- !include "LogicLib.nsh"
-
- !include "helpers\ShowError.nsh"
-
-; Global variables that we'll use
- Var _JELLYFINVERSION_
- Var _JELLYFINDATADIR_
- Var _SETUPTYPE_
- Var _INSTALLSERVICE_
- Var _SERVICESTART_
- Var _SERVICEACCOUNTTYPE_
- Var _EXISTINGINSTALLATION_
- Var _EXISTINGSERVICE_
- Var _MAKESHORTCUTS_
- Var _FOLDEREXISTS_
-;
-!ifdef x64
- !define ARCH "x64"
- !define NAMESUFFIX "(64 bit)"
- !define INSTALL_DIRECTORY "$PROGRAMFILES64\Jellyfin\Server"
-!endif
-
-!ifdef x84
- !define ARCH "x86"
- !define NAMESUFFIX "(32 bit)"
- !define INSTALL_DIRECTORY "$PROGRAMFILES32\Jellyfin\Server"
-!endif
-
-!ifndef ARCH
- !error "Set the Arch with /Dx86 or /Dx64"
-!endif
-
-;--------------------------------
-
- !define REG_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\JellyfinServer" ;Registry to show up in Add/Remove Programs
- !define REG_CONFIG_KEY "Software\Jellyfin\Server" ;Registry to store all configuration
-
- !getdllversion "$%InstallLocation%\jellyfin.dll" ver_ ;Align installer version with jellyfin.dll version
-
- Name "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} ${NAMESUFFIX}" ; This is referred in various header text labels
- OutFile "jellyfin_${ver_1}.${ver_2}.${ver_3}_windows-${ARCH}.exe" ; Naming convention jellyfin_{version}_windows-{arch].exe
- BrandingText "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} Installer" ; This shows in just over the buttons
-
-; installer attributes, these show up in details tab on installer properties
- VIProductVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIProductVersion format, should be X.X.X.X
- VIFileVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIFileVersion format, should be X.X.X.X
- VIAddVersionKey "ProductName" "Jellyfin Server"
- VIAddVersionKey "FileVersion" "${ver_1}.${ver_2}.${ver_3}.0"
- VIAddVersionKey "LegalCopyright" "(c) 2019 Jellyfin Contributors. Code released under the GNU General Public License"
- VIAddVersionKey "FileDescription" "Jellyfin Server: The Free Software Media System"
-
-;TODO, check defaults
- InstallDir ${INSTALL_DIRECTORY} ;Default installation folder
- InstallDirRegKey HKLM "${REG_CONFIG_KEY}" "InstallFolder" ;Read the registry for install folder,
-
- RequestExecutionLevel admin ; ask it upfront for service control, and installing in priv folders
-
- CRCCheck on ; make sure the installer wasn't corrupted while downloading
-
- !define MUI_ABORTWARNING ;Prompts user in case of aborting install
-
-; TODO: Replace with nice Jellyfin Icons
-!ifdef UXPATH
- !define MUI_ICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Installer Icon
- !define MUI_UNICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Uninstaller Icon
-
- !define MUI_HEADERIMAGE
- !define MUI_HEADERIMAGE_BITMAP "${UXPATH}\branding\NSIS\installer-header.bmp"
- !define MUI_WELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
- !define MUI_UNWELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
-!endif
-
-;--------------------------------
-;Pages
-
-; Welcome Page
- !define MUI_WELCOMEPAGE_TEXT "The installer will ask for details to install Jellyfin Server."
- !insertmacro MUI_PAGE_WELCOME
-; License Page
- !insertmacro MUI_PAGE_LICENSE "$%InstallLocation%\LICENSE" ; picking up generic GPL
-
-; Setup Type Page
- Page custom ShowSetupTypePage SetupTypePage_Config
-
-; Components Page
- !define MUI_PAGE_CUSTOMFUNCTION_PRE HideComponentsPage
- !insertmacro MUI_PAGE_COMPONENTS
- !define MUI_PAGE_CUSTOMFUNCTION_PRE HideInstallDirectoryPage ; Controls when to hide / show
- !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Install folder" ; shows just above the folder selection dialog
- !insertmacro MUI_PAGE_DIRECTORY
-
-; Data folder Page
- !define MUI_PAGE_CUSTOMFUNCTION_PRE HideDataDirectoryPage ; Controls when to hide / show
- !define MUI_PAGE_HEADER_TEXT "Choose Data Location"
- !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install the Jellyfin Server data."
- !define MUI_DIRECTORYPAGE_TEXT_TOP "The installer will set the following folder for Jellyfin Server data. To install in a different folder, click Browse and select another folder. Please make sure the folder exists and is accessible. Click Next to continue."
- !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Data folder"
- !define MUI_DIRECTORYPAGE_VARIABLE $_JELLYFINDATADIR_
- !insertmacro MUI_PAGE_DIRECTORY
-
-; Custom Dialogs
- !include "dialogs\setuptype.nsdinc"
- !include "dialogs\service-config.nsdinc"
- !include "dialogs\confirmation.nsdinc"
-
-; Select service account type
- #!define MUI_PAGE_CUSTOMFUNCTION_PRE HideServiceConfigPage ; Controls when to hide / show (This does not work for Page, might need to go PageEx)
- #!define MUI_PAGE_CUSTOMFUNCTION_SHOW fnc_service_config_Show
- #!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ServiceConfigPage_Config
- #!insertmacro MUI_PAGE_CUSTOM ServiceAccountType
- Page custom ShowServiceConfigPage ServiceConfigPage_Config
-
-; Confirmation Page
- Page custom ShowConfirmationPage ; just letting the user know what they chose to install
-
-; Actual Installion Page
- !insertmacro MUI_PAGE_INSTFILES
-
- !insertmacro MUI_UNPAGE_CONFIRM
- !insertmacro MUI_UNPAGE_INSTFILES
- #!insertmacro MUI_UNPAGE_FINISH
-
-;--------------------------------
-;Languages; Add more languages later here if needed
- !insertmacro MUI_LANGUAGE "English"
-
-;--------------------------------
-;Installer Sections
-Section "!Jellyfin Server (required)" InstallJellyfinServer
- SectionIn RO ; Mandatory section, isn't this the whole purpose to run the installer.
-
- StrCmp "$_EXISTINGINSTALLATION_" "Yes" RunUninstaller CarryOn ; Silently uninstall in case of previous installation
-
- RunUninstaller:
- DetailPrint "Looking for uninstaller at $INSTDIR"
- FindFirst $0 $1 "$INSTDIR\Uninstall.exe"
- FindClose $0
- StrCmp $1 "" CarryOn ; the registry key was there but uninstaller was not found
-
- DetailPrint "Silently running the uninstaller at $INSTDIR"
- ExecWait '"$INSTDIR\Uninstall.exe" /S _?=$INSTDIR' $0
- DetailPrint "Uninstall finished, $0"
-
- CarryOn:
- ${If} $_EXISTINGSERVICE_ == 'Yes'
- ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
- ${If} $0 <> 0
- MessageBox MB_OK|MB_ICONSTOP "Could not stop the Jellyfin Server service."
- Abort
- ${EndIf}
- DetailPrint "Stopped Jellyfin Server service, $0"
- ${EndIf}
-
- SetOutPath "$INSTDIR"
-
- File "/oname=icon.ico" "${UXPATH}\branding\NSIS\modern-install.ico"
- File /r $%InstallLocation%\*
-
-
-; Write the InstallFolder, DataFolder, Network Service info into the registry for later use
- WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "InstallFolder" "$INSTDIR"
- WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "DataFolder" "$_JELLYFINDATADIR_"
- WriteRegStr HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" "$_SERVICEACCOUNTTYPE_"
-
- !getdllversion "$%InstallLocation%\jellyfin.dll" ver_
- StrCpy $_JELLYFINVERSION_ "${ver_1}.${ver_2}.${ver_3}" ;
-
-; Write the uninstall keys for Windows
- WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayName" "Jellyfin Server $_JELLYFINVERSION_ ${NAMESUFFIX}"
- WriteRegExpandStr HKLM "${REG_UNINST_KEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
- WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayIcon" '"$INSTDIR\Uninstall.exe",0'
- WriteRegStr HKLM "${REG_UNINST_KEY}" "Publisher" "The Jellyfin Project"
- WriteRegStr HKLM "${REG_UNINST_KEY}" "URLInfoAbout" "https://jellyfin.org/"
- WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayVersion" "$_JELLYFINVERSION_"
- WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoModify" 1
- WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoRepair" 1
-
-;Create uninstaller
- WriteUninstaller "$INSTDIR\Uninstall.exe"
-SectionEnd
-
-Section "Jellyfin Server Service" InstallService
-${If} $_INSTALLSERVICE_ == "Yes" ; Only run this if we're going to install the service!
- ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
- DetailPrint "Jellyfin Server service statuscode, $0"
- ${If} $0 == 0
- InstallRetry:
- ExecWait '"$INSTDIR\nssm.exe" install JellyfinServer "$INSTDIR\jellyfin.exe" --service --datadir \"$_JELLYFINDATADIR_\"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not install the Jellyfin Server service." InstallRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service install, $0"
- ${Else}
- DetailPrint "Jellyfin Server Service exists, updating..."
-
- ConfigureApplicationRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Application "$INSTDIR\jellyfin.exe"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureApplicationRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (Application), $0"
-
- ConfigureAppParametersRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppParameters --service --datadir \"$_JELLYFINDATADIR_\"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureAppParametersRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (AppParameters), $0"
- ${EndIf}
-
-
- Sleep 3000 ; Give time for Windows to catchup
- ConfigureStartRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Start SERVICE_DELAYED_AUTO_START' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureStartRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (Start), $0"
-
- ConfigureDescriptionRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Description "Jellyfin Server: The Free Software Media System"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDescriptionRetry
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (Description), $0"
- ConfigureDisplayNameRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer DisplayName "Jellyfin Server"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDisplayNameRetry
-
- ${EndIf}
- DetailPrint "Jellyfin Server Service setting (DisplayName), $0"
-
- Sleep 3000
- ${If} $_SERVICEACCOUNTTYPE_ == "NetworkService" ; the default install using NSSM is Local System
- ConfigureNetworkServiceRetry:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Objectname "Network Service"' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service account." ConfigureNetworkServiceRetry
- ${EndIf}
- DetailPrint "Jellyfin Server service account change, $0"
- ${EndIf}
-
- Sleep 3000
- ConfigureDefaultAppExit:
- ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppExit Default Exit' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not configure the Jellyfin Server service app exit action." ConfigureDefaultAppExit
- ${EndIf}
- DetailPrint "Jellyfin Server service exit action set, $0"
-${EndIf}
-
-SectionEnd
-
-Section "-start service" StartService
-${If} $_SERVICESTART_ == "Yes"
-${AndIf} $_INSTALLSERVICE_ == "Yes"
- StartRetry:
- ExecWait '"$INSTDIR\nssm.exe" start JellyfinServer' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not start the Jellyfin Server service." StartRetry
- ${EndIf}
- DetailPrint "Jellyfin Server service start, $0"
-${EndIf}
-SectionEnd
-
-Section "Create Shortcuts" CreateWinShortcuts
- ${If} $_MAKESHORTCUTS_ == "Yes"
- CreateDirectory "$SMPROGRAMS\Jellyfin Server"
- CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin (View Console).lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMAXIMIZED
- CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin Tray App.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
- ;CreateShortCut "$DESKTOP\Jellyfin Server.lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMINIMIZED
- CreateShortCut "$DESKTOP\Jellyfin Server\Jellyfin Server.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
- ${EndIf}
-SectionEnd
-
-;--------------------------------
-;Descriptions
-
-;Language strings
- LangString DESC_InstallJellyfinServer ${LANG_ENGLISH} "Install Jellyfin Server"
- LangString DESC_InstallService ${LANG_ENGLISH} "Install As a Service"
-
-;Assign language strings to sections
- !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
- !insertmacro MUI_DESCRIPTION_TEXT ${InstallJellyfinServer} $(DESC_InstallJellyfinServer)
- !insertmacro MUI_DESCRIPTION_TEXT ${InstallService} $(DESC_InstallService)
- !insertmacro MUI_FUNCTION_DESCRIPTION_END
-
-;--------------------------------
-;Uninstaller Section
-
-Section "Uninstall"
-
- ReadRegStr $INSTDIR HKLM "${REG_CONFIG_KEY}" "InstallFolder" ; read the installation folder
- ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; read the data folder
- ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; read the account name
-
- DetailPrint "Jellyfin Install location: $INSTDIR"
- DetailPrint "Jellyfin Data folder: $_JELLYFINDATADIR_"
-
- MessageBox MB_YESNO|MB_ICONINFORMATION "Do you want to retain the Jellyfin Server data folder? The media will not be touched. $\r$\nIf unsure choose YES." /SD IDYES IDYES PreserveData
-
- RMDir /r /REBOOTOK "$_JELLYFINDATADIR_"
-
- PreserveData:
-
- ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
- DetailPrint "Jellyfin Server service statuscode, $0"
- IntCmp $0 0 NoServiceUninstall ; service doesn't exist, may be run from desktop shortcut
-
- Sleep 3000 ; Give time for Windows to catchup
-
- UninstallStopRetry:
- ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not stop the Jellyfin Server service." UninstallStopRetry
- ${EndIf}
- DetailPrint "Stopped Jellyfin Server service, $0"
-
- UninstallRemoveRetry:
- ExecWait '"$INSTDIR\nssm.exe" remove JellyfinServer confirm' $0
- ${If} $0 <> 0
- !insertmacro ShowError "Could not remove the Jellyfin Server service." UninstallRemoveRetry
- ${EndIf}
- DetailPrint "Removed Jellyfin Server service, $0"
-
- Sleep 3000 ; Give time for Windows to catchup
-
- NoServiceUninstall: ; existing install was present but no service was detected. Remove shortcuts if account is set to none
- ${If} $_SERVICEACCOUNTTYPE_ == "None"
- RMDir /r "$SMPROGRAMS\Jellyfin Server"
- Delete "$DESKTOP\Jellyfin Server.lnk"
- DetailPrint "Removed old shortcuts..."
- ${EndIf}
-
- Delete "$INSTDIR\*.*"
- RMDir /r /REBOOTOK "$INSTDIR\jellyfin-web"
- Delete "$INSTDIR\Uninstall.exe"
- RMDir /r /REBOOTOK "$INSTDIR"
-
- DeleteRegKey HKLM "Software\Jellyfin"
- DeleteRegKey HKLM "${REG_UNINST_KEY}"
-
-SectionEnd
-
-Function .onInit
-; Setting up defaults
- StrCpy $_INSTALLSERVICE_ "Yes"
- StrCpy $_SERVICESTART_ "Yes"
- StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
- StrCpy $_EXISTINGINSTALLATION_ "No"
- StrCpy $_EXISTINGSERVICE_ "No"
- StrCpy $_MAKESHORTCUTS_ "No"
-
- SetShellVarContext current
- StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
-
- System::Call 'kernel32::CreateMutex(p 0, i 0, t "JellyfinServerMutex") p .r1 ?e'
- Pop $R0
-
- StrCmp $R0 0 +3
- !insertmacro ShowErrorFinal "The installer is already running."
-
-;Detect if Jellyfin is already installed.
-; In case it is installed, let the user choose either
-; 1. Exit installer
-; 2. Upgrade without messing with data
-; 2a. Don't ask for any details, uninstall and install afresh with old settings
-
-; Read Registry for previous installation
- ClearErrors
- ReadRegStr "$0" HKLM "${REG_CONFIG_KEY}" "InstallFolder"
- IfErrors NoExisitingInstall
-
- DetailPrint "Existing Jellyfin Server detected at: $0"
- StrCpy "$INSTDIR" "$0" ; set the location fro registry as new default
-
- StrCpy $_EXISTINGINSTALLATION_ "Yes" ; Set our flag to be used later
- SectionSetText ${InstallJellyfinServer} "Upgrade Jellyfin Server (required)" ; Change install text to "Upgrade"
-
- ; check if service was run using Network Service account
- ClearErrors
- ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; in case of error _SERVICEACCOUNTTYPE_ will be NetworkService as default
-
- ClearErrors
- ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; in case of error, the default holds
-
- ; Hide sections which will not be needed in case of previous install
- ; SectionSetText ${InstallService} ""
-
-; check if there is a service called Jellyfin, there should be
-; hack : nssm statuscode Jellyfin will return non zero return code in case it exists
- ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
- DetailPrint "Jellyfin Server service statuscode, $0"
- IntCmp $0 0 NoService ; service doesn't exist, may be run from desktop shortcut
-
- ; if service was detected, set defaults going forward.
- StrCpy $_EXISTINGSERVICE_ "Yes"
- StrCpy $_INSTALLSERVICE_ "Yes"
- StrCpy $_SERVICESTART_ "Yes"
- StrCpy $_MAKESHORTCUTS_ "No"
- SectionSetText ${CreateWinShortcuts} ""
-
-
- NoService: ; existing install was present but no service was detected
- ${If} $_SERVICEACCOUNTTYPE_ == "None"
- StrCpy $_SETUPTYPE_ "Basic"
- StrCpy $_INSTALLSERVICE_ "No"
- StrCpy $_SERVICESTART_ "No"
- StrCpy $_MAKESHORTCUTS_ "Yes"
- ${EndIf}
-
-; Let the user know that we'll upgrade and provide an option to quit.
- MessageBox MB_OKCANCEL|MB_ICONINFORMATION "Existing installation of Jellyfin Server was detected, it'll be upgraded, settings will be retained. \
- $\r$\nClick OK to proceed, Cancel to exit installer." /SD IDOK IDOK ProceedWithUpgrade
- Quit ; Quit if the user is not sure about upgrade
-
- ProceedWithUpgrade:
-
- NoExisitingInstall: ; by this time, the variables have been correctly set to reflect previous install details
-
-FunctionEnd
-
-Function HideInstallDirectoryPage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideDataDirectoryPage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideServiceConfigPage
- ${If} $_INSTALLSERVICE_ == "No" ; Not running as a service, don't ask for service type
- ${OrIf} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideConfirmationPage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideSetupTypePage
- ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for SetupType
- Abort
- ${EndIf}
-FunctionEnd
-
-Function HideComponentsPage
- ${If} $_SETUPTYPE_ == "Basic" ; Basic installation chosen, don't show components choice
- Abort
- ${EndIf}
-FunctionEnd
-
-; Setup Type dialog show function
-Function ShowSetupTypePage
- Call HideSetupTypePage
- Call fnc_setuptype_Create
- nsDialogs::Show
-FunctionEnd
-
-; Service Config dialog show function
-Function ShowServiceConfigPage
- Call HideServiceConfigPage
- Call fnc_service_config_Create
- nsDialogs::Show
-FunctionEnd
-
-; Confirmation dialog show function
-Function ShowConfirmationPage
- Call HideConfirmationPage
- Call fnc_confirmation_Create
- nsDialogs::Show
-FunctionEnd
-
-; Declare temp variables to read the options from the custom page.
-Var StartServiceAfterInstall
-Var UseNetworkServiceAccount
-Var UseLocalSystemAccount
-Var BasicInstall
-
-
-Function SetupTypePage_Config
-${NSD_GetState} $hCtl_setuptype_BasicInstall $BasicInstall
- IfFileExists "$LOCALAPPDATA\Jellyfin" folderfound foldernotfound ; if the folder exists, use this, otherwise, go with new default
- folderfound:
- StrCpy $_FOLDEREXISTS_ "Yes"
- Goto InstallCheck
- foldernotfound:
- StrCpy $_FOLDEREXISTS_ "No"
- Goto InstallCheck
-
-InstallCheck:
-${If} $BasicInstall == 1
- StrCpy $_SETUPTYPE_ "Basic"
- StrCpy $_INSTALLSERVICE_ "No"
- StrCpy $_SERVICESTART_ "No"
- StrCpy $_SERVICEACCOUNTTYPE_ "None"
- StrCpy $_MAKESHORTCUTS_ "Yes"
- ${If} $_FOLDEREXISTS_ == "Yes"
- StrCpy $_JELLYFINDATADIR_ "$LOCALAPPDATA\Jellyfin\"
- ${EndIf}
-${Else}
- StrCpy $_SETUPTYPE_ "Advanced"
- StrCpy $_INSTALLSERVICE_ "Yes"
- StrCpy $_MAKESHORTCUTS_ "No"
- ${If} $_FOLDEREXISTS_ == "Yes"
- MessageBox MB_OKCANCEL|MB_ICONINFORMATION "An existing data folder was detected.\
- $\r$\nBasic Setup is highly recommended.\
- $\r$\nIf you proceed, you will need to set up Jellyfin again." IDOK GoAhead IDCANCEL GoBack
- GoBack:
- Abort
- ${EndIf}
- GoAhead:
- StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
- SectionSetText ${CreateWinShortcuts} ""
-${EndIf}
-
-FunctionEnd
-
-Function ServiceConfigPage_Config
-${NSD_GetState} $hCtl_service_config_StartServiceAfterInstall $StartServiceAfterInstall
-${If} $StartServiceAfterInstall == 1
- StrCpy $_SERVICESTART_ "Yes"
-${Else}
- StrCpy $_SERVICESTART_ "No"
-${EndIf}
-${NSD_GetState} $hCtl_service_config_UseNetworkServiceAccount $UseNetworkServiceAccount
-${NSD_GetState} $hCtl_service_config_UseLocalSystemAccount $UseLocalSystemAccount
-
-${If} $UseNetworkServiceAccount == 1
- StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
-${ElseIf} $UseLocalSystemAccount == 1
- StrCpy $_SERVICEACCOUNTTYPE_ "LocalSystem"
-${Else}
- !insertmacro ShowErrorFinal "Service account type not properly configured."
-${EndIf}
-
-FunctionEnd
-
-; This function handles the choices during component selection
-Function .onSelChange
-
-; If we are not installing service, we don't need to set the NetworkService account or StartService
- SectionGetFlags ${InstallService} $0
- ${If} $0 = ${SF_SELECTED}
- StrCpy $_INSTALLSERVICE_ "Yes"
- ${Else}
- StrCpy $_INSTALLSERVICE_ "No"
- StrCpy $_SERVICESTART_ "No"
- StrCpy $_SERVICEACCOUNTTYPE_ "None"
- ${EndIf}
-FunctionEnd
-
-Function .onInstSuccess
- #ExecShell "open" "http://localhost:8096"
-FunctionEnd
diff --git a/deployment/old/windows/legacy/install-jellyfin.ps1 b/deployment/old/windows/legacy/install-jellyfin.ps1
deleted file mode 100644
index e909a0468e..0000000000
--- a/deployment/old/windows/legacy/install-jellyfin.ps1
+++ /dev/null
@@ -1,460 +0,0 @@
-[CmdletBinding()]
-
-param(
- [Switch]$Quiet,
- [Switch]$InstallAsService,
- [System.Management.Automation.pscredential]$ServiceUser,
- [switch]$CreateDesktopShorcut,
- [switch]$LaunchJellyfin,
- [switch]$MigrateEmbyLibrary,
- [string]$InstallLocation,
- [string]$EmbyLibraryLocation,
- [string]$JellyfinLibraryLocation
-)
-<# This form was created using POSHGUI.com a free online gui designer for PowerShell
-.NAME
- Install-Jellyfin
-#>
-
-#This doesn't need to be used by default anymore, but I am keeping it in as a function for future use.
-function Elevate-Window {
- # Get the ID and security principal of the current user account
- $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
- $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
-
- # Get the security principal for the Administrator role
- $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
-
- # Check to see if we are currently running "as Administrator"
- if ($myWindowsPrincipal.IsInRole($adminRole))
- {
- # We are running "as Administrator" - so change the title and background color to indicate this
- $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
- $Host.UI.RawUI.BackgroundColor = "DarkBlue"
- clear-host
- }
- else
- {
- # We are not running "as Administrator" - so relaunch as administrator
-
- # Create a new process object that starts PowerShell
- $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
-
- # Specify the current script path and name as a parameter
- $newProcess.Arguments = $myInvocation.MyCommand.Definition;
-
- # Indicate that the process should be elevated
- $newProcess.Verb = "runas";
-
- # Start the new process
- [System.Diagnostics.Process]::Start($newProcess);
-
- # Exit from the current, unelevated, process
- exit
- }
-}
-
-#FIXME The install methods should be a function that takes all the params, the quiet flag should be a paramset
-
-if($Quiet.IsPresent -or $Quiet -eq $true){
- if([string]::IsNullOrEmpty($JellyfinLibraryLocation)){
- $Script:JellyfinDataDir = "$env:LOCALAPPDATA\jellyfin\"
- }else{
- $Script:JellyfinDataDir = $JellyfinLibraryLocation
- }
- if([string]::IsNullOrEmpty($InstallLocation)){
- $Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
- }else{
- $Script:DefaultJellyfinInstallDirectory = $InstallLocation
- }
-
- if([string]::IsNullOrEmpty($EmbyLibraryLocation)){
- $Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\data\"
- }else{
- $Script:defaultEmbyDataDir = $EmbyLibraryLocation
- }
-
- if($InstallAsService.IsPresent -or $InstallAsService -eq $true){
- $Script:InstallAsService = $true
- }else{$Script:InstallAsService = $false}
- if($null -eq $ServiceUser){
- $Script:InstallServiceAsUser = $false
- }else{
- $Script:InstallServiceAsUser = $true
- $Script:UserCredentials = $ServiceUser
- $Script:JellyfinDataDir = "$env:HOMEDRIVE\Users\$($Script:UserCredentials.UserName)\Appdata\Local\jellyfin\"}
- if($CreateDesktopShorcut.IsPresent -or $CreateDesktopShorcut -eq $true) {$Script:CreateShortcut = $true}else{$Script:CreateShortcut = $false}
- if($MigrateEmbyLibrary.IsPresent -or $MigrateEmbyLibrary -eq $true){$Script:MigrateLibrary = $true}else{$Script:MigrateLibrary = $false}
- if($LaunchJellyfin.IsPresent -or $LaunchJellyfin -eq $true){$Script:StartJellyfin = $true}else{$Script:StartJellyfin = $false}
-
- if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
- mkdir $Script:DefaultJellyfinInstallDirectory
- }
- Copy-Item -Path $PSScriptRoot/* -DestinationPath "$Script:DefaultJellyfinInstallDirectory/" -Force -Recurse
- if($Script:InstallAsService){
- if($Script:InstallServiceAsUser){
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 500
- &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }else{
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 500
- #&"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin ObjectName $Script:UserCredentials.UserName $Script:UserCredentials.GetNetworkCredential().Password
- #Set-Service -Name Jellyfin -Credential $Script:UserCredentials
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }
- }
- if($Script:MigrateLibrary){
- Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
- Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
- }
- if($Script:CreateShortcut){
- $WshShell = New-Object -comObject WScript.Shell
- $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
- $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
- $Shortcut.Save()
- }
- if($Script:StartJellyfin){
- if($Script:InstallAsService){
- Get-Service Jellyfin | Start-Service
- }else{
- Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
- }
- }
-}else{
-
-}
-Add-Type -AssemblyName System.Windows.Forms
-[System.Windows.Forms.Application]::EnableVisualStyles()
-
-$Script:JellyFinDataDir = "$env:LOCALAPPDATA\jellyfin\"
-$Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
-$Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\"
-$Script:InstallAsService = $False
-$Script:InstallServiceAsUser = $false
-$Script:CreateShortcut = $false
-$Script:MigrateLibrary = $false
-$Script:StartJellyfin = $false
-
-function InstallJellyfin {
- Write-Host "Install as service: $Script:InstallAsService"
- Write-Host "Install as serviceuser: $Script:InstallServiceAsUser"
- Write-Host "Create Shortcut: $Script:CreateShortcut"
- Write-Host "MigrateLibrary: $Script:MigrateLibrary"
- $GUIElementsCollection | ForEach-Object {
- $_.Enabled = $false
- }
- Write-Host "Making Jellyfin directory"
- $ProgressBar.Minimum = 1
- $ProgressBar.Maximum = 100
- $ProgressBar.Value = 1
- if($Script:DefaultJellyfinInstallDirectory -ne $InstallLocationBox.Text){
- Write-Host "Custom Install Location Chosen: $($InstallLocationBox.Text)"
- $Script:DefaultJellyfinInstallDirectory = $InstallLocationBox.Text
- }
- if($Script:JellyfinDataDir -ne $CustomLibraryBox.Text){
- Write-Host "Custom Library Location Chosen: $($CustomLibraryBox.Text)"
- $Script:JellyfinDataDir = $CustomLibraryBox.Text
- }
- if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
- mkdir $Script:DefaultJellyfinInstallDirectory
- }
- Write-Host "Copying Jellyfin Data"
- $progressbar.Value = 10
- Copy-Item -Path $PSScriptRoot/* -Destination $Script:DefaultJellyfinInstallDirectory/ -Force -Recurse
- Write-Host "Finished Copying"
- $ProgressBar.Value = 50
- if($Script:InstallAsService){
- if($Script:InstallServiceAsUser){
- Write-Host "Installing Service as user $($Script:UserCredentials.UserName)"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 2000
- &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }else{
- Write-Host "Installing Service as LocalSystem"
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
- Start-Sleep -Milliseconds 2000
- &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
- }
- }
- $progressbar.Value = 60
- if($Script:MigrateLibrary){
- if($Script:defaultEmbyDataDir -ne $LibraryLocationBox.Text){
- Write-Host "Custom location defined for emby library: $($LibraryLocationBox.Text)"
- $Script:defaultEmbyDataDir = $LibraryLocationBox.Text
- }
- Write-Host "Copying emby library from $Script:defaultEmbyDataDir to $Script:JellyFinDataDir"
- Write-Host "This could take a while depending on the size of your library. Please be patient"
- Write-Host "Copying config"
- Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying cache"
- Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying data"
- Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying metadata"
- Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
- Write-Host "Copying root dir"
- Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
- }
- $progressbar.Value = 80
- if($Script:CreateShortcut){
- Write-Host "Creating Shortcut"
- $WshShell = New-Object -comObject WScript.Shell
- $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
- $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
- $Shortcut.Save()
- }
- $ProgressBar.Value = 90
- if($Script:StartJellyfin){
- if($Script:InstallAsService){
- Write-Host "Starting Jellyfin Service"
- Get-Service Jellyfin | Start-Service
- }else{
- Write-Host "Starting Jellyfin"
- Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
- }
- }
- $progressbar.Value = 100
- Write-Host Finished
- $wshell = New-Object -ComObject Wscript.Shell
- $wshell.Popup("Operation Completed",0,"Done",0x1)
- $InstallForm.Close()
-}
-function ServiceBoxCheckChanged {
- if($InstallAsServiceCheck.Checked){
- $Script:InstallAsService = $true
- $ServiceUserLabel.Visible = $true
- $ServiceUserLabel.Enabled = $true
- $ServiceUserBox.Visible = $true
- $ServiceUserBox.Enabled = $true
- }else{
- $Script:InstallAsService = $false
- $ServiceUserLabel.Visible = $false
- $ServiceUserLabel.Enabled = $false
- $ServiceUserBox.Visible = $false
- $ServiceUserBox.Enabled = $false
- }
-}
-function UserSelect {
- if($ServiceUserBox.Text -eq 'Local System')
- {
- $Script:InstallServiceAsUser = $false
- $Script:UserCredentials = $null
- $ServiceUserBox.Items.RemoveAt(1)
- $ServiceUserBox.Items.Add("Custom User")
- }elseif($ServiceUserBox.Text -eq 'Custom User'){
- $Script:InstallServiceAsUser = $true
- $Script:UserCredentials = Get-Credential -Message "Please enter the credentials of the user you with to run Jellyfin Service as" -UserName $env:USERNAME
- $ServiceUserBox.Items[1] = "$($Script:UserCredentials.UserName)"
- }
-}
-function CreateShortcutBoxCheckChanged {
- if($CreateShortcutCheck.Checked){
- $Script:CreateShortcut = $true
- }else{
- $Script:CreateShortcut = $False
- }
-}
-function StartJellyFinBoxCheckChanged {
- if($StartProgramCheck.Checked){
- $Script:StartJellyfin = $true
- }else{
- $Script:StartJellyfin = $false
- }
-}
-
-function CustomLibraryCheckChanged {
- if($CustomLibraryCheck.Checked){
- $Script:UseCustomLibrary = $true
- $CustomLibraryBox.Enabled = $true
- }else{
- $Script:UseCustomLibrary = $false
- $CustomLibraryBox.Enabled = $false
- }
-}
-
-function MigrateLibraryCheckboxChanged {
-
- if($MigrateLibraryCheck.Checked){
- $Script:MigrateLibrary = $true
- $LibraryMigrationLabel.Visible = $true
- $LibraryMigrationLabel.Enabled = $true
- $LibraryLocationBox.Visible = $true
- $LibraryLocationBox.Enabled = $true
- }else{
- $Script:MigrateLibrary = $false
- $LibraryMigrationLabel.Visible = $false
- $LibraryMigrationLabel.Enabled = $false
- $LibraryLocationBox.Visible = $false
- $LibraryLocationBox.Enabled = $false
- }
-
-}
-
-
-#region begin GUI{
-
-$InstallForm = New-Object system.Windows.Forms.Form
-$InstallForm.ClientSize = '320,240'
-$InstallForm.text = "Terrible Jellyfin Installer"
-$InstallForm.TopMost = $false
-
-$GUIElementsCollection = @()
-
-$InstallButton = New-Object system.Windows.Forms.Button
-$InstallButton.text = "Install"
-$InstallButton.width = 60
-$InstallButton.height = 30
-$InstallButton.location = New-Object System.Drawing.Point(5,5)
-$InstallButton.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallButton
-
-$ProgressBar = New-Object system.Windows.Forms.ProgressBar
-$ProgressBar.width = 245
-$ProgressBar.height = 30
-$ProgressBar.location = New-Object System.Drawing.Point(70,5)
-
-$InstallLocationLabel = New-Object system.Windows.Forms.Label
-$InstallLocationLabel.text = "Install Location"
-$InstallLocationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$InstallLocationLabel.AutoSize = $true
-$InstallLocationLabel.width = 100
-$InstallLocationLabel.height = 20
-$InstallLocationLabel.location = New-Object System.Drawing.Point(5,50)
-$InstallLocationLabel.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallLocationLabel
-
-$InstallLocationBox = New-Object system.Windows.Forms.TextBox
-$InstallLocationBox.multiline = $false
-$InstallLocationBox.width = 205
-$InstallLocationBox.height = 20
-$InstallLocationBox.location = New-Object System.Drawing.Point(110,50)
-$InstallLocationBox.Text = $Script:DefaultJellyfinInstallDirectory
-$InstallLocationBox.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallLocationBox
-
-$CustomLibraryCheck = New-Object system.Windows.Forms.CheckBox
-$CustomLibraryCheck.text = "Custom Library Location:"
-$CustomLibraryCheck.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$CustomLibraryCheck.AutoSize = $false
-$CustomLibraryCheck.width = 180
-$CustomLibraryCheck.height = 20
-$CustomLibraryCheck.location = New-Object System.Drawing.Point(5,75)
-$CustomLibraryCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $CustomLibraryCheck
-
-$CustomLibraryBox = New-Object system.Windows.Forms.TextBox
-$CustomLibraryBox.multiline = $false
-$CustomLibraryBox.width = 130
-$CustomLibraryBox.height = 20
-$CustomLibraryBox.location = New-Object System.Drawing.Point(185,75)
-$CustomLibraryBox.Text = $Script:JellyFinDataDir
-$CustomLibraryBox.Font = 'Microsoft Sans Serif,10'
-$CustomLibraryBox.Enabled = $false
-$GUIElementsCollection += $CustomLibraryBox
-
-$InstallAsServiceCheck = New-Object system.Windows.Forms.CheckBox
-$InstallAsServiceCheck.text = "Install as Service"
-$InstallAsServiceCheck.AutoSize = $false
-$InstallAsServiceCheck.width = 140
-$InstallAsServiceCheck.height = 20
-$InstallAsServiceCheck.location = New-Object System.Drawing.Point(5,125)
-$InstallAsServiceCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $InstallAsServiceCheck
-
-$ServiceUserLabel = New-Object system.Windows.Forms.Label
-$ServiceUserLabel.text = "Run Service As:"
-$ServiceUserLabel.AutoSize = $true
-$ServiceUserLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$ServiceUserLabel.width = 100
-$ServiceUserLabel.height = 20
-$ServiceUserLabel.location = New-Object System.Drawing.Point(15,145)
-$ServiceUserLabel.Font = 'Microsoft Sans Serif,10'
-$ServiceUserLabel.Visible = $false
-$ServiceUserLabel.Enabled = $false
-$GUIElementsCollection += $ServiceUserLabel
-
-$ServiceUserBox = New-Object system.Windows.Forms.ComboBox
-$ServiceUserBox.text = "Run Service As"
-$ServiceUserBox.width = 195
-$ServiceUserBox.height = 20
-@('Local System','Custom User') | ForEach-Object {[void] $ServiceUserBox.Items.Add($_)}
-$ServiceUserBox.location = New-Object System.Drawing.Point(120,145)
-$ServiceUserBox.Font = 'Microsoft Sans Serif,10'
-$ServiceUserBox.Visible = $false
-$ServiceUserBox.Enabled = $false
-$ServiceUserBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
-$GUIElementsCollection += $ServiceUserBox
-
-$MigrateLibraryCheck = New-Object system.Windows.Forms.CheckBox
-$MigrateLibraryCheck.text = "Import Emby/Old JF Library"
-$MigrateLibraryCheck.AutoSize = $false
-$MigrateLibraryCheck.width = 160
-$MigrateLibraryCheck.height = 20
-$MigrateLibraryCheck.location = New-Object System.Drawing.Point(5,170)
-$MigrateLibraryCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $MigrateLibraryCheck
-
-$LibraryMigrationLabel = New-Object system.Windows.Forms.Label
-$LibraryMigrationLabel.text = "Emby/Old JF Library Path"
-$LibraryMigrationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
-$LibraryMigrationLabel.AutoSize = $false
-$LibraryMigrationLabel.width = 120
-$LibraryMigrationLabel.height = 20
-$LibraryMigrationLabel.location = New-Object System.Drawing.Point(15,190)
-$LibraryMigrationLabel.Font = 'Microsoft Sans Serif,10'
-$LibraryMigrationLabel.Visible = $false
-$LibraryMigrationLabel.Enabled = $false
-$GUIElementsCollection += $LibraryMigrationLabel
-
-$LibraryLocationBox = New-Object system.Windows.Forms.TextBox
-$LibraryLocationBox.multiline = $false
-$LibraryLocationBox.width = 175
-$LibraryLocationBox.height = 20
-$LibraryLocationBox.location = New-Object System.Drawing.Point(140,190)
-$LibraryLocationBox.Text = $Script:defaultEmbyDataDir
-$LibraryLocationBox.Font = 'Microsoft Sans Serif,10'
-$LibraryLocationBox.Visible = $false
-$LibraryLocationBox.Enabled = $false
-$GUIElementsCollection += $LibraryLocationBox
-
-$CreateShortcutCheck = New-Object system.Windows.Forms.CheckBox
-$CreateShortcutCheck.text = "Desktop Shortcut"
-$CreateShortcutCheck.AutoSize = $false
-$CreateShortcutCheck.width = 150
-$CreateShortcutCheck.height = 20
-$CreateShortcutCheck.location = New-Object System.Drawing.Point(5,215)
-$CreateShortcutCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $CreateShortcutCheck
-
-$StartProgramCheck = New-Object system.Windows.Forms.CheckBox
-$StartProgramCheck.text = "Start Jellyfin"
-$StartProgramCheck.AutoSize = $false
-$StartProgramCheck.width = 160
-$StartProgramCheck.height = 20
-$StartProgramCheck.location = New-Object System.Drawing.Point(160,215)
-$StartProgramCheck.Font = 'Microsoft Sans Serif,10'
-$GUIElementsCollection += $StartProgramCheck
-
-$InstallForm.controls.AddRange($GUIElementsCollection)
-$InstallForm.Controls.Add($ProgressBar)
-
-#region gui events {
-$InstallButton.Add_Click({ InstallJellyfin })
-$CustomLibraryCheck.Add_CheckedChanged({CustomLibraryCheckChanged})
-$InstallAsServiceCheck.Add_CheckedChanged({ServiceBoxCheckChanged})
-$ServiceUserBox.Add_SelectedValueChanged({ UserSelect })
-$MigrateLibraryCheck.Add_CheckedChanged({MigrateLibraryCheckboxChanged})
-$CreateShortcutCheck.Add_CheckedChanged({CreateShortcutBoxCheckChanged})
-$StartProgramCheck.Add_CheckedChanged({StartJellyFinBoxCheckChanged})
-#endregion events }
-
-#endregion GUI }
-
-
-[void]$InstallForm.ShowDialog()
diff --git a/deployment/old/windows/legacy/install.bat b/deployment/old/windows/legacy/install.bat
deleted file mode 100644
index e21479a79a..0000000000
--- a/deployment/old/windows/legacy/install.bat
+++ /dev/null
@@ -1 +0,0 @@
-powershell.exe -executionpolicy Bypass -file install-jellyfin.ps1
diff --git a/windows/build-jellyfin.ps1 b/windows/build-jellyfin.ps1
new file mode 100644
index 0000000000..c762137a75
--- /dev/null
+++ b/windows/build-jellyfin.ps1
@@ -0,0 +1,190 @@
+[CmdletBinding()]
+param(
+ [switch]$MakeNSIS,
+ [switch]$InstallNSIS,
+ [switch]$InstallFFMPEG,
+ [switch]$InstallNSSM,
+ [switch]$SkipJellyfinBuild,
+ [switch]$GenerateZip,
+ [string]$InstallLocation = "./dist/jellyfin-win-nsis",
+ [string]$UXLocation = "../jellyfin-ux",
+ [switch]$InstallTrayApp,
+ [ValidateSet('Debug','Release')][string]$BuildType = 'Release',
+ [ValidateSet('Quiet','Minimal', 'Normal')][string]$DotNetVerbosity = 'Minimal',
+ [ValidateSet('win','win7', 'win8','win81','win10')][string]$WindowsVersion = 'win',
+ [ValidateSet('x64','x86', 'arm', 'arm64')][string]$Architecture = 'x64'
+)
+
+$ProgressPreference = 'SilentlyContinue' # Speedup all downloads by hiding progress bars.
+
+#PowershellCore and *nix check to make determine which temp dir to use.
+if(($PSVersionTable.PSEdition -eq 'Core') -and (-not $IsWindows)){
+ $TempDir = mktemp -d
+}else{
+ $TempDir = $env:Temp
+}
+#Create staging dir
+New-Item -ItemType Directory -Force -Path $InstallLocation
+$ResolvedInstallLocation = Resolve-Path $InstallLocation
+$ResolvedUXLocation = Resolve-Path $UXLocation
+
+function Build-JellyFin {
+ if(($Architecture -eq 'arm64') -and ($WindowsVersion -ne 'win10')){
+ Write-Error "arm64 only supported with Windows10 Version"
+ exit
+ }
+ if(($Architecture -eq 'arm') -and ($WindowsVersion -notin @('win10','win81','win8'))){
+ Write-Error "arm only supported with Windows 8 or higher"
+ exit
+ }
+ Write-Verbose "windowsversion-Architecture: $windowsversion-$Architecture"
+ Write-Verbose "InstallLocation: $ResolvedInstallLocation"
+ Write-Verbose "DotNetVerbosity: $DotNetVerbosity"
+ dotnet publish --self-contained -c $BuildType --output $ResolvedInstallLocation -v $DotNetVerbosity -p:GenerateDocumentationFile=false -p:DebugSymbols=false -p:DebugType=none --runtime `"$windowsversion-$Architecture`" Jellyfin.Server
+}
+
+function Install-FFMPEG {
+ param(
+ [string]$ResolvedInstallLocation,
+ [string]$Architecture,
+ [string]$FFMPEGVersionX86 = "ffmpeg-4.2.1-win32-shared"
+ )
+ Write-Verbose "Checking Architecture"
+ if($Architecture -notin @('x86','x64')){
+ Write-Warning "No builds available for your selected architecture of $Architecture"
+ Write-Warning "FFMPEG will not be installed"
+ }elseif($Architecture -eq 'x64'){
+ Write-Verbose "Downloading 64 bit FFMPEG"
+ Invoke-WebRequest -Uri https://repo.jellyfin.org/releases/server/windows/ffmpeg/jellyfin-ffmpeg.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
+ }else{
+ Write-Verbose "Downloading 32 bit FFMPEG"
+ Invoke-WebRequest -Uri https://ffmpeg.zeranoe.com/builds/win32/shared/$FFMPEGVersionX86.zip -UseBasicParsing -OutFile "$tempdir/ffmpeg.zip" | Write-Verbose
+ }
+
+ Expand-Archive "$tempdir/ffmpeg.zip" -DestinationPath "$tempdir/ffmpeg/" -Force | Write-Verbose
+ if($Architecture -eq 'x64'){
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/ffmpeg" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }else{
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/ffmpeg/$FFMPEGVersionX86/bin" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }
+ Remove-Item "$tempdir/ffmpeg/" -Recurse -Force -ErrorAction Continue | Write-Verbose
+ Remove-Item "$tempdir/ffmpeg.zip" -Force -ErrorAction Continue | Write-Verbose
+}
+
+function Install-NSSM {
+ param(
+ [string]$ResolvedInstallLocation,
+ [string]$Architecture
+ )
+ Write-Verbose "Checking Architecture"
+ if($Architecture -notin @('x86','x64')){
+ Write-Warning "No builds available for your selected architecture of $Architecture"
+ Write-Warning "NSSM will not be installed"
+ }else{
+ Write-Verbose "Downloading NSSM"
+ # [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ # Temporary workaround, file is hosted in an azure blob with a custom domain in front for brevity
+ Invoke-WebRequest -Uri http://files.evilt.win/nssm/nssm-2.24-101-g897c7ad.zip -UseBasicParsing -OutFile "$tempdir/nssm.zip" | Write-Verbose
+ }
+
+ Expand-Archive "$tempdir/nssm.zip" -DestinationPath "$tempdir/nssm/" -Force | Write-Verbose
+ if($Architecture -eq 'x64'){
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win64" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }else{
+ Write-Verbose "Copying Binaries to Jellyfin location"
+ Get-ChildItem "$tempdir/nssm/nssm-2.24-101-g897c7ad/win32" | ForEach-Object {
+ Copy-Item $_.FullName -Destination $installLocation | Write-Verbose
+ }
+ }
+ Remove-Item "$tempdir/nssm/" -Recurse -Force -ErrorAction Continue | Write-Verbose
+ Remove-Item "$tempdir/nssm.zip" -Force -ErrorAction Continue | Write-Verbose
+}
+
+function Make-NSIS {
+ param(
+ [string]$ResolvedInstallLocation
+ )
+
+ $env:InstallLocation = $ResolvedInstallLocation
+ if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
+ & "$tempdir/nsis/nsis-3.04/makensis.exe" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
+ } else {
+ & "makensis" /D$Architecture /DUXPATH=$ResolvedUXLocation ".\deployment\windows\jellyfin.nsi"
+ }
+ Copy-Item .\deployment\windows\jellyfin_*.exe $ResolvedInstallLocation\..\
+}
+
+
+function Install-NSIS {
+ Write-Verbose "Downloading NSIS"
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ Invoke-WebRequest -Uri https://nchc.dl.sourceforge.net/project/nsis/NSIS%203/3.04/nsis-3.04.zip -UseBasicParsing -OutFile "$tempdir/nsis.zip" | Write-Verbose
+
+ Expand-Archive "$tempdir/nsis.zip" -DestinationPath "$tempdir/nsis/" -Force | Write-Verbose
+}
+
+function Cleanup-NSIS {
+ Remove-Item "$tempdir/nsis/" -Recurse -Force -ErrorAction Continue | Write-Verbose
+ Remove-Item "$tempdir/nsis.zip" -Force -ErrorAction Continue | Write-Verbose
+}
+
+function Install-TrayApp {
+ param(
+ [string]$ResolvedInstallLocation,
+ [string]$Architecture
+ )
+ Write-Verbose "Checking Architecture"
+ if($Architecture -ne 'x64'){
+ Write-Warning "No builds available for your selected architecture of $Architecture"
+ Write-Warning "The tray app will not be available."
+ }else{
+ Write-Verbose "Downloading Tray App and copying to Jellyfin location"
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ Invoke-WebRequest -Uri https://github.com/jellyfin/jellyfin-windows-tray/releases/latest/download/JellyfinTray.exe -UseBasicParsing -OutFile "$installLocation/JellyfinTray.exe" | Write-Verbose
+ }
+}
+
+if(-not $SkipJellyfinBuild.IsPresent -and -not ($InstallNSIS -eq $true)){
+ Write-Verbose "Starting Build Process: Selected Environment is $WindowsVersion-$Architecture"
+ Build-JellyFin
+}
+if($InstallFFMPEG.IsPresent -or ($InstallFFMPEG -eq $true)){
+ Write-Verbose "Starting FFMPEG Install"
+ Install-FFMPEG $ResolvedInstallLocation $Architecture
+}
+if($InstallNSSM.IsPresent -or ($InstallNSSM -eq $true)){
+ Write-Verbose "Starting NSSM Install"
+ Install-NSSM $ResolvedInstallLocation $Architecture
+}
+if($InstallTrayApp.IsPresent -or ($InstallTrayApp -eq $true)){
+ Write-Verbose "Downloading Windows Tray App"
+ Install-TrayApp $ResolvedInstallLocation $Architecture
+}
+#Copy-Item .\deployment\windows\install-jellyfin.ps1 $ResolvedInstallLocation\install-jellyfin.ps1
+#Copy-Item .\deployment\windows\install.bat $ResolvedInstallLocation\install.bat
+Copy-Item .\LICENSE $ResolvedInstallLocation\LICENSE
+if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
+ Write-Verbose "Installing NSIS"
+ Install-NSIS
+}
+if($MakeNSIS.IsPresent -or ($MakeNSIS -eq $true)){
+ Write-Verbose "Starting NSIS Package creation"
+ Make-NSIS $ResolvedInstallLocation
+}
+if($InstallNSIS.IsPresent -or ($InstallNSIS -eq $true)){
+ Write-Verbose "Cleanup NSIS"
+ Cleanup-NSIS
+}
+if($GenerateZip.IsPresent -or ($GenerateZip -eq $true)){
+ Compress-Archive -Path $ResolvedInstallLocation -DestinationPath "$ResolvedInstallLocation/jellyfin.zip" -Force
+}
+Write-Verbose "Finished"
diff --git a/windows/dependencies.txt b/windows/dependencies.txt
new file mode 100644
index 0000000000..16f77cce7c
--- /dev/null
+++ b/windows/dependencies.txt
@@ -0,0 +1,2 @@
+dotnet
+nsis
diff --git a/windows/dialogs/confirmation.nsddef b/windows/dialogs/confirmation.nsddef
new file mode 100644
index 0000000000..969ebacd62
--- /dev/null
+++ b/windows/dialogs/confirmation.nsddef
@@ -0,0 +1,24 @@
+
+
+
diff --git a/windows/dialogs/confirmation.nsdinc b/windows/dialogs/confirmation.nsdinc
new file mode 100644
index 0000000000..f00e9b43ab
--- /dev/null
+++ b/windows/dialogs/confirmation.nsdinc
@@ -0,0 +1,61 @@
+; =========================================================
+; This file was generated by NSISDialogDesigner 1.4.4.0
+; http://coolsoft.altervista.org/nsisdialogdesigner
+;
+; Do not edit it manually, use NSISDialogDesigner instead!
+; Modified by EraYaN (2019-09-01)
+; =========================================================
+
+; handle variables
+Var hCtl_confirmation
+Var hCtl_confirmation_ConfirmRichText
+
+; HeaderCustomScript
+!include "helpers\StrSlash.nsh"
+
+
+
+; dialog create function
+Function fnc_confirmation_Create
+
+ ; === confirmation (type: Dialog) ===
+ nsDialogs::Create 1018
+ Pop $hCtl_confirmation
+ ${If} $hCtl_confirmation == error
+ Abort
+ ${EndIf}
+ !insertmacro MUI_HEADER_TEXT "Confirmation Page" "Please confirm your choices for Jellyfin Server installation"
+
+ ; === ConfirmRichText (type: RichText) ===
+ nsDialogs::CreateControl /NOUNLOAD "RichEdit20A" ${ES_READONLY}|${WS_VISIBLE}|${WS_CHILD}|${WS_TABSTOP}|${WS_VSCROLL}|${ES_MULTILINE}|${ES_WANTRETURN} ${WS_EX_STATICEDGE} 8u 7u 280u 126u ""
+ Pop $hCtl_confirmation_ConfirmRichText
+ ${NSD_AddExStyle} $hCtl_confirmation_ConfirmRichText ${WS_EX_STATICEDGE}
+
+ ; CreateFunctionCustomScript
+ ${StrSlash} '$0' $INSTDIR
+
+ ${StrSlash} '$1' $_JELLYFINDATADIR_
+
+ ${If} $_INSTALLSERVICE_ == "Yes"
+ ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
+ \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
+ Installation Folder:\b0 $0\line\b \
+ Service install:\b0 $_INSTALLSERVICE_\line\b \
+ Service start:\b0 $_SERVICESTART_\line\b \
+ Service account:\b0 $_SERVICEACCOUNTTYPE_\line\b \
+ Jellyfin Data Folder:\b0 $1\par \
+ \
+ \pard\sa200\sl276\slmult1\f1\lang1043\par \
+ }"
+ ${Else}
+ ${NSD_SetText} $hCtl_confirmation_ConfirmRichText "{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1043\viewkind4\uc1 \
+ \pard\widctlpar\sa160\sl252\slmult1\b The installer will proceed based on the following inputs gathered on earlier screens.\par \
+ Installation Folder:\b0 $0\line\b \
+ Service install:\b0 $_INSTALLSERVICE_\line\b \
+ Jellyfin Data Folder:\b0 $1\par \
+ \
+ \pard\sa200\sl276\slmult1\f1\lang1043\par \
+ }"
+ ${EndIf}
+
+FunctionEnd
diff --git a/windows/dialogs/service-config.nsddef b/windows/dialogs/service-config.nsddef
new file mode 100644
index 0000000000..3509ada249
--- /dev/null
+++ b/windows/dialogs/service-config.nsddef
@@ -0,0 +1,13 @@
+
+
+
\ No newline at end of file
diff --git a/windows/dialogs/service-config.nsdinc b/windows/dialogs/service-config.nsdinc
new file mode 100644
index 0000000000..58c350f2ec
--- /dev/null
+++ b/windows/dialogs/service-config.nsdinc
@@ -0,0 +1,56 @@
+; =========================================================
+; This file was generated by NSISDialogDesigner 1.4.4.0
+; http://coolsoft.altervista.org/nsisdialogdesigner
+;
+; Do not edit it manually, use NSISDialogDesigner instead!
+; =========================================================
+
+; handle variables
+Var hCtl_service_config
+Var hCtl_service_config_StartServiceAfterInstall
+Var hCtl_service_config_LocalSystemAccountLabel
+Var hCtl_service_config_NetworkServiceAccountLabel
+Var hCtl_service_config_UseLocalSystemAccount
+Var hCtl_service_config_UseNetworkServiceAccount
+Var hCtl_service_config_Font1
+
+
+; dialog create function
+Function fnc_service_config_Create
+
+ ; custom font definitions
+ CreateFont $hCtl_service_config_Font1 "Microsoft Sans Serif" "8.25" "700"
+
+ ; === service_config (type: Dialog) ===
+ nsDialogs::Create 1018
+ Pop $hCtl_service_config
+ ${If} $hCtl_service_config == error
+ Abort
+ ${EndIf}
+ !insertmacro MUI_HEADER_TEXT "Configure the service" "This controls what type of access the server gets to this system."
+
+ ; === StartServiceAfterInstall (type: Checkbox) ===
+ ${NSD_CreateCheckbox} 8u 118u 280u 15u "Start Service after Install"
+ Pop $hCtl_service_config_StartServiceAfterInstall
+ ${NSD_Check} $hCtl_service_config_StartServiceAfterInstall
+
+ ; === LocalSystemAccountLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 71u 280u 28u "The Local System account has full access to every resource and file on the system. This can have very real security implications, do not use unless absolutely neseccary."
+ Pop $hCtl_service_config_LocalSystemAccountLabel
+
+ ; === NetworkServiceAccountLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 24u 280u 28u "The NetworkService account is a predefined local account used by the service control manager. It is the recommended way to install the Jellyfin Server service."
+ Pop $hCtl_service_config_NetworkServiceAccountLabel
+
+ ; === UseLocalSystemAccount (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 54u 280u 15u "Use Local System account"
+ Pop $hCtl_service_config_UseLocalSystemAccount
+ ${NSD_AddStyle} $hCtl_service_config_UseLocalSystemAccount ${WS_GROUP}
+
+ ; === UseNetworkServiceAccount (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 7u 280u 15u "Use Network Service account (Recommended)"
+ Pop $hCtl_service_config_UseNetworkServiceAccount
+ SendMessage $hCtl_service_config_UseNetworkServiceAccount ${WM_SETFONT} $hCtl_service_config_Font1 0
+ ${NSD_Check} $hCtl_service_config_UseNetworkServiceAccount
+
+FunctionEnd
diff --git a/windows/dialogs/setuptype.nsddef b/windows/dialogs/setuptype.nsddef
new file mode 100644
index 0000000000..b55ceeaaa6
--- /dev/null
+++ b/windows/dialogs/setuptype.nsddef
@@ -0,0 +1,12 @@
+
+
+
\ No newline at end of file
diff --git a/windows/dialogs/setuptype.nsdinc b/windows/dialogs/setuptype.nsdinc
new file mode 100644
index 0000000000..8746ad2cc6
--- /dev/null
+++ b/windows/dialogs/setuptype.nsdinc
@@ -0,0 +1,50 @@
+; =========================================================
+; This file was generated by NSISDialogDesigner 1.4.4.0
+; http://coolsoft.altervista.org/nsisdialogdesigner
+;
+; Do not edit it manually, use NSISDialogDesigner instead!
+; =========================================================
+
+; handle variables
+Var hCtl_setuptype
+Var hCtl_setuptype_InstallasaServiceLabel
+Var hCtl_setuptype_InstallasaService
+Var hCtl_setuptype_BasicInstallLabel
+Var hCtl_setuptype_BasicInstall
+Var hCtl_setuptype_Font1
+
+
+; dialog create function
+Function fnc_setuptype_Create
+
+ ; custom font definitions
+ CreateFont $hCtl_setuptype_Font1 "Microsoft Sans Serif" "8.25" "700"
+
+ ; === setuptype (type: Dialog) ===
+ nsDialogs::Create 1018
+ Pop $hCtl_setuptype
+ ${If} $hCtl_setuptype == error
+ Abort
+ ${EndIf}
+ !insertmacro MUI_HEADER_TEXT "Setup Type" "Control how Jellyfin is installed."
+
+ ; === InstallasaServiceLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 71u 280u 28u "Install Jellyfin as a service. This method is recommended for Advanced Users. Additional setup is required to access network shares."
+ Pop $hCtl_setuptype_InstallasaServiceLabel
+
+ ; === InstallasaService (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 54u 280u 15u "Install as a Service (Advanced Users)"
+ Pop $hCtl_setuptype_InstallasaService
+ ${NSD_AddStyle} $hCtl_setuptype_InstallasaService ${WS_GROUP}
+
+ ; === BasicInstallLabel (type: Label) ===
+ ${NSD_CreateLabel} 8u 24u 280u 28u "The basic install will run Jellyfin in your current user account.$\nThis is recommended for new users and those with existing Jellyfin installs older than 10.4."
+ Pop $hCtl_setuptype_BasicInstallLabel
+
+ ; === BasicInstall (type: RadioButton) ===
+ ${NSD_CreateRadioButton} 8u 7u 280u 15u "Basic Install (Recommended)"
+ Pop $hCtl_setuptype_BasicInstall
+ SendMessage $hCtl_setuptype_BasicInstall ${WM_SETFONT} $hCtl_setuptype_Font1 0
+ ${NSD_Check} $hCtl_setuptype_BasicInstall
+
+FunctionEnd
diff --git a/windows/helpers/ShowError.nsh b/windows/helpers/ShowError.nsh
new file mode 100644
index 0000000000..6e09b1e407
--- /dev/null
+++ b/windows/helpers/ShowError.nsh
@@ -0,0 +1,10 @@
+; Show error
+!macro ShowError TEXT RETRYLABEL
+ MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "${TEXT}" IDIGNORE +2 IDRETRY ${RETRYLABEL}
+ Abort
+!macroend
+
+!macro ShowErrorFinal TEXT
+ MessageBox MB_OK|MB_ICONSTOP "${TEXT}"
+ Abort
+!macroend
diff --git a/windows/helpers/StrSlash.nsh b/windows/helpers/StrSlash.nsh
new file mode 100644
index 0000000000..b8aa771aa6
--- /dev/null
+++ b/windows/helpers/StrSlash.nsh
@@ -0,0 +1,47 @@
+; Adapted from: https://nsis.sourceforge.io/Another_String_Replace_(and_Slash/BackSlash_Converter) (2019-08-31)
+
+!macro _StrSlashConstructor out in
+ Push "${in}"
+ Push "\"
+ Call StrSlash
+ Pop ${out}
+!macroend
+
+!define StrSlash '!insertmacro "_StrSlashConstructor"'
+
+; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
+; Push "\"
+; Call StrSlash
+; Pop $R0
+; ;Now $R0 contains 'c:/this/and/that/filename.htm'
+Function StrSlash
+ Exch $R3 ; $R3 = needle ("\" or "/")
+ Exch
+ Exch $R1 ; $R1 = String to replacement in (haystack)
+ Push $R2 ; Replaced haystack
+ Push $R4 ; $R4 = not $R3 ("/" or "\")
+ Push $R6
+ Push $R7 ; Scratch reg
+ StrCpy $R2 ""
+ StrLen $R6 $R1
+ StrCpy $R4 "\"
+ StrCmp $R3 "/" loop
+ StrCpy $R4 "/"
+loop:
+ StrCpy $R7 $R1 1
+ StrCpy $R1 $R1 $R6 1
+ StrCmp $R7 $R3 found
+ StrCpy $R2 "$R2$R7"
+ StrCmp $R1 "" done loop
+found:
+ StrCpy $R2 "$R2$R4"
+ StrCmp $R1 "" done loop
+done:
+ StrCpy $R3 $R2
+ Pop $R7
+ Pop $R6
+ Pop $R4
+ Pop $R2
+ Pop $R1
+ Exch $R3
+FunctionEnd
diff --git a/windows/jellyfin.nsi b/windows/jellyfin.nsi
new file mode 100644
index 0000000000..fada62d981
--- /dev/null
+++ b/windows/jellyfin.nsi
@@ -0,0 +1,575 @@
+!verbose 3
+SetCompressor /SOLID bzip2
+ShowInstDetails show
+ShowUninstDetails show
+Unicode True
+
+;--------------------------------
+!define SF_USELECTED 0 ; used to check selected options status, rest are inherited from Sections.nsh
+
+ !include "MUI2.nsh"
+ !include "Sections.nsh"
+ !include "LogicLib.nsh"
+
+ !include "helpers\ShowError.nsh"
+
+; Global variables that we'll use
+ Var _JELLYFINVERSION_
+ Var _JELLYFINDATADIR_
+ Var _SETUPTYPE_
+ Var _INSTALLSERVICE_
+ Var _SERVICESTART_
+ Var _SERVICEACCOUNTTYPE_
+ Var _EXISTINGINSTALLATION_
+ Var _EXISTINGSERVICE_
+ Var _MAKESHORTCUTS_
+ Var _FOLDEREXISTS_
+;
+!ifdef x64
+ !define ARCH "x64"
+ !define NAMESUFFIX "(64 bit)"
+ !define INSTALL_DIRECTORY "$PROGRAMFILES64\Jellyfin\Server"
+!endif
+
+!ifdef x84
+ !define ARCH "x86"
+ !define NAMESUFFIX "(32 bit)"
+ !define INSTALL_DIRECTORY "$PROGRAMFILES32\Jellyfin\Server"
+!endif
+
+!ifndef ARCH
+ !error "Set the Arch with /Dx86 or /Dx64"
+!endif
+
+;--------------------------------
+
+ !define REG_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\JellyfinServer" ;Registry to show up in Add/Remove Programs
+ !define REG_CONFIG_KEY "Software\Jellyfin\Server" ;Registry to store all configuration
+
+ !getdllversion "$%InstallLocation%\jellyfin.dll" ver_ ;Align installer version with jellyfin.dll version
+
+ Name "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} ${NAMESUFFIX}" ; This is referred in various header text labels
+ OutFile "jellyfin_${ver_1}.${ver_2}.${ver_3}_windows-${ARCH}.exe" ; Naming convention jellyfin_{version}_windows-{arch].exe
+ BrandingText "Jellyfin Server ${ver_1}.${ver_2}.${ver_3} Installer" ; This shows in just over the buttons
+
+; installer attributes, these show up in details tab on installer properties
+ VIProductVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIProductVersion format, should be X.X.X.X
+ VIFileVersion "${ver_1}.${ver_2}.${ver_3}.0" ; VIFileVersion format, should be X.X.X.X
+ VIAddVersionKey "ProductName" "Jellyfin Server"
+ VIAddVersionKey "FileVersion" "${ver_1}.${ver_2}.${ver_3}.0"
+ VIAddVersionKey "LegalCopyright" "(c) 2019 Jellyfin Contributors. Code released under the GNU General Public License"
+ VIAddVersionKey "FileDescription" "Jellyfin Server: The Free Software Media System"
+
+;TODO, check defaults
+ InstallDir ${INSTALL_DIRECTORY} ;Default installation folder
+ InstallDirRegKey HKLM "${REG_CONFIG_KEY}" "InstallFolder" ;Read the registry for install folder,
+
+ RequestExecutionLevel admin ; ask it upfront for service control, and installing in priv folders
+
+ CRCCheck on ; make sure the installer wasn't corrupted while downloading
+
+ !define MUI_ABORTWARNING ;Prompts user in case of aborting install
+
+; TODO: Replace with nice Jellyfin Icons
+!ifdef UXPATH
+ !define MUI_ICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Installer Icon
+ !define MUI_UNICON "${UXPATH}\branding\NSIS\modern-install.ico" ; Uninstaller Icon
+
+ !define MUI_HEADERIMAGE
+ !define MUI_HEADERIMAGE_BITMAP "${UXPATH}\branding\NSIS\installer-header.bmp"
+ !define MUI_WELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
+ !define MUI_UNWELCOMEFINISHPAGE_BITMAP "${UXPATH}\branding\NSIS\installer-right.bmp"
+!endif
+
+;--------------------------------
+;Pages
+
+; Welcome Page
+ !define MUI_WELCOMEPAGE_TEXT "The installer will ask for details to install Jellyfin Server."
+ !insertmacro MUI_PAGE_WELCOME
+; License Page
+ !insertmacro MUI_PAGE_LICENSE "$%InstallLocation%\LICENSE" ; picking up generic GPL
+
+; Setup Type Page
+ Page custom ShowSetupTypePage SetupTypePage_Config
+
+; Components Page
+ !define MUI_PAGE_CUSTOMFUNCTION_PRE HideComponentsPage
+ !insertmacro MUI_PAGE_COMPONENTS
+ !define MUI_PAGE_CUSTOMFUNCTION_PRE HideInstallDirectoryPage ; Controls when to hide / show
+ !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Install folder" ; shows just above the folder selection dialog
+ !insertmacro MUI_PAGE_DIRECTORY
+
+; Data folder Page
+ !define MUI_PAGE_CUSTOMFUNCTION_PRE HideDataDirectoryPage ; Controls when to hide / show
+ !define MUI_PAGE_HEADER_TEXT "Choose Data Location"
+ !define MUI_PAGE_HEADER_SUBTEXT "Choose the folder in which to install the Jellyfin Server data."
+ !define MUI_DIRECTORYPAGE_TEXT_TOP "The installer will set the following folder for Jellyfin Server data. To install in a different folder, click Browse and select another folder. Please make sure the folder exists and is accessible. Click Next to continue."
+ !define MUI_DIRECTORYPAGE_TEXT_DESTINATION "Data folder"
+ !define MUI_DIRECTORYPAGE_VARIABLE $_JELLYFINDATADIR_
+ !insertmacro MUI_PAGE_DIRECTORY
+
+; Custom Dialogs
+ !include "dialogs\setuptype.nsdinc"
+ !include "dialogs\service-config.nsdinc"
+ !include "dialogs\confirmation.nsdinc"
+
+; Select service account type
+ #!define MUI_PAGE_CUSTOMFUNCTION_PRE HideServiceConfigPage ; Controls when to hide / show (This does not work for Page, might need to go PageEx)
+ #!define MUI_PAGE_CUSTOMFUNCTION_SHOW fnc_service_config_Show
+ #!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ServiceConfigPage_Config
+ #!insertmacro MUI_PAGE_CUSTOM ServiceAccountType
+ Page custom ShowServiceConfigPage ServiceConfigPage_Config
+
+; Confirmation Page
+ Page custom ShowConfirmationPage ; just letting the user know what they chose to install
+
+; Actual Installion Page
+ !insertmacro MUI_PAGE_INSTFILES
+
+ !insertmacro MUI_UNPAGE_CONFIRM
+ !insertmacro MUI_UNPAGE_INSTFILES
+ #!insertmacro MUI_UNPAGE_FINISH
+
+;--------------------------------
+;Languages; Add more languages later here if needed
+ !insertmacro MUI_LANGUAGE "English"
+
+;--------------------------------
+;Installer Sections
+Section "!Jellyfin Server (required)" InstallJellyfinServer
+ SectionIn RO ; Mandatory section, isn't this the whole purpose to run the installer.
+
+ StrCmp "$_EXISTINGINSTALLATION_" "Yes" RunUninstaller CarryOn ; Silently uninstall in case of previous installation
+
+ RunUninstaller:
+ DetailPrint "Looking for uninstaller at $INSTDIR"
+ FindFirst $0 $1 "$INSTDIR\Uninstall.exe"
+ FindClose $0
+ StrCmp $1 "" CarryOn ; the registry key was there but uninstaller was not found
+
+ DetailPrint "Silently running the uninstaller at $INSTDIR"
+ ExecWait '"$INSTDIR\Uninstall.exe" /S _?=$INSTDIR' $0
+ DetailPrint "Uninstall finished, $0"
+
+ CarryOn:
+ ${If} $_EXISTINGSERVICE_ == 'Yes'
+ ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
+ ${If} $0 <> 0
+ MessageBox MB_OK|MB_ICONSTOP "Could not stop the Jellyfin Server service."
+ Abort
+ ${EndIf}
+ DetailPrint "Stopped Jellyfin Server service, $0"
+ ${EndIf}
+
+ SetOutPath "$INSTDIR"
+
+ File "/oname=icon.ico" "${UXPATH}\branding\NSIS\modern-install.ico"
+ File /r $%InstallLocation%\*
+
+
+; Write the InstallFolder, DataFolder, Network Service info into the registry for later use
+ WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "InstallFolder" "$INSTDIR"
+ WriteRegExpandStr HKLM "${REG_CONFIG_KEY}" "DataFolder" "$_JELLYFINDATADIR_"
+ WriteRegStr HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" "$_SERVICEACCOUNTTYPE_"
+
+ !getdllversion "$%InstallLocation%\jellyfin.dll" ver_
+ StrCpy $_JELLYFINVERSION_ "${ver_1}.${ver_2}.${ver_3}" ;
+
+; Write the uninstall keys for Windows
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayName" "Jellyfin Server $_JELLYFINVERSION_ ${NAMESUFFIX}"
+ WriteRegExpandStr HKLM "${REG_UNINST_KEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"'
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayIcon" '"$INSTDIR\Uninstall.exe",0'
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "Publisher" "The Jellyfin Project"
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "URLInfoAbout" "https://jellyfin.org/"
+ WriteRegStr HKLM "${REG_UNINST_KEY}" "DisplayVersion" "$_JELLYFINVERSION_"
+ WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoModify" 1
+ WriteRegDWORD HKLM "${REG_UNINST_KEY}" "NoRepair" 1
+
+;Create uninstaller
+ WriteUninstaller "$INSTDIR\Uninstall.exe"
+SectionEnd
+
+Section "Jellyfin Server Service" InstallService
+${If} $_INSTALLSERVICE_ == "Yes" ; Only run this if we're going to install the service!
+ ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
+ DetailPrint "Jellyfin Server service statuscode, $0"
+ ${If} $0 == 0
+ InstallRetry:
+ ExecWait '"$INSTDIR\nssm.exe" install JellyfinServer "$INSTDIR\jellyfin.exe" --service --datadir \"$_JELLYFINDATADIR_\"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not install the Jellyfin Server service." InstallRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service install, $0"
+ ${Else}
+ DetailPrint "Jellyfin Server Service exists, updating..."
+
+ ConfigureApplicationRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Application "$INSTDIR\jellyfin.exe"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureApplicationRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (Application), $0"
+
+ ConfigureAppParametersRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppParameters --service --datadir \"$_JELLYFINDATADIR_\"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureAppParametersRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (AppParameters), $0"
+ ${EndIf}
+
+
+ Sleep 3000 ; Give time for Windows to catchup
+ ConfigureStartRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Start SERVICE_DELAYED_AUTO_START' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureStartRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (Start), $0"
+
+ ConfigureDescriptionRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Description "Jellyfin Server: The Free Software Media System"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDescriptionRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (Description), $0"
+ ConfigureDisplayNameRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer DisplayName "Jellyfin Server"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service." ConfigureDisplayNameRetry
+
+ ${EndIf}
+ DetailPrint "Jellyfin Server Service setting (DisplayName), $0"
+
+ Sleep 3000
+ ${If} $_SERVICEACCOUNTTYPE_ == "NetworkService" ; the default install using NSSM is Local System
+ ConfigureNetworkServiceRetry:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer Objectname "Network Service"' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service account." ConfigureNetworkServiceRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server service account change, $0"
+ ${EndIf}
+
+ Sleep 3000
+ ConfigureDefaultAppExit:
+ ExecWait '"$INSTDIR\nssm.exe" set JellyfinServer AppExit Default Exit' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not configure the Jellyfin Server service app exit action." ConfigureDefaultAppExit
+ ${EndIf}
+ DetailPrint "Jellyfin Server service exit action set, $0"
+${EndIf}
+
+SectionEnd
+
+Section "-start service" StartService
+${If} $_SERVICESTART_ == "Yes"
+${AndIf} $_INSTALLSERVICE_ == "Yes"
+ StartRetry:
+ ExecWait '"$INSTDIR\nssm.exe" start JellyfinServer' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not start the Jellyfin Server service." StartRetry
+ ${EndIf}
+ DetailPrint "Jellyfin Server service start, $0"
+${EndIf}
+SectionEnd
+
+Section "Create Shortcuts" CreateWinShortcuts
+ ${If} $_MAKESHORTCUTS_ == "Yes"
+ CreateDirectory "$SMPROGRAMS\Jellyfin Server"
+ CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin (View Console).lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMAXIMIZED
+ CreateShortCut "$SMPROGRAMS\Jellyfin Server\Jellyfin Tray App.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
+ ;CreateShortCut "$DESKTOP\Jellyfin Server.lnk" "$INSTDIR\jellyfin.exe" "--datadir $\"$_JELLYFINDATADIR_$\"" "$INSTDIR\icon.ico" 0 SW_SHOWMINIMIZED
+ CreateShortCut "$DESKTOP\Jellyfin Server\Jellyfin Server.lnk" "$INSTDIR\jellyfintray.exe" "" "$INSTDIR\icon.ico" 0
+ ${EndIf}
+SectionEnd
+
+;--------------------------------
+;Descriptions
+
+;Language strings
+ LangString DESC_InstallJellyfinServer ${LANG_ENGLISH} "Install Jellyfin Server"
+ LangString DESC_InstallService ${LANG_ENGLISH} "Install As a Service"
+
+;Assign language strings to sections
+ !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+ !insertmacro MUI_DESCRIPTION_TEXT ${InstallJellyfinServer} $(DESC_InstallJellyfinServer)
+ !insertmacro MUI_DESCRIPTION_TEXT ${InstallService} $(DESC_InstallService)
+ !insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+
+ ReadRegStr $INSTDIR HKLM "${REG_CONFIG_KEY}" "InstallFolder" ; read the installation folder
+ ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; read the data folder
+ ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; read the account name
+
+ DetailPrint "Jellyfin Install location: $INSTDIR"
+ DetailPrint "Jellyfin Data folder: $_JELLYFINDATADIR_"
+
+ MessageBox MB_YESNO|MB_ICONINFORMATION "Do you want to retain the Jellyfin Server data folder? The media will not be touched. $\r$\nIf unsure choose YES." /SD IDYES IDYES PreserveData
+
+ RMDir /r /REBOOTOK "$_JELLYFINDATADIR_"
+
+ PreserveData:
+
+ ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
+ DetailPrint "Jellyfin Server service statuscode, $0"
+ IntCmp $0 0 NoServiceUninstall ; service doesn't exist, may be run from desktop shortcut
+
+ Sleep 3000 ; Give time for Windows to catchup
+
+ UninstallStopRetry:
+ ExecWait '"$INSTDIR\nssm.exe" stop JellyfinServer' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not stop the Jellyfin Server service." UninstallStopRetry
+ ${EndIf}
+ DetailPrint "Stopped Jellyfin Server service, $0"
+
+ UninstallRemoveRetry:
+ ExecWait '"$INSTDIR\nssm.exe" remove JellyfinServer confirm' $0
+ ${If} $0 <> 0
+ !insertmacro ShowError "Could not remove the Jellyfin Server service." UninstallRemoveRetry
+ ${EndIf}
+ DetailPrint "Removed Jellyfin Server service, $0"
+
+ Sleep 3000 ; Give time for Windows to catchup
+
+ NoServiceUninstall: ; existing install was present but no service was detected. Remove shortcuts if account is set to none
+ ${If} $_SERVICEACCOUNTTYPE_ == "None"
+ RMDir /r "$SMPROGRAMS\Jellyfin Server"
+ Delete "$DESKTOP\Jellyfin Server.lnk"
+ DetailPrint "Removed old shortcuts..."
+ ${EndIf}
+
+ Delete "$INSTDIR\*.*"
+ RMDir /r /REBOOTOK "$INSTDIR\jellyfin-web"
+ Delete "$INSTDIR\Uninstall.exe"
+ RMDir /r /REBOOTOK "$INSTDIR"
+
+ DeleteRegKey HKLM "Software\Jellyfin"
+ DeleteRegKey HKLM "${REG_UNINST_KEY}"
+
+SectionEnd
+
+Function .onInit
+; Setting up defaults
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ StrCpy $_SERVICESTART_ "Yes"
+ StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
+ StrCpy $_EXISTINGINSTALLATION_ "No"
+ StrCpy $_EXISTINGSERVICE_ "No"
+ StrCpy $_MAKESHORTCUTS_ "No"
+
+ SetShellVarContext current
+ StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
+
+ System::Call 'kernel32::CreateMutex(p 0, i 0, t "JellyfinServerMutex") p .r1 ?e'
+ Pop $R0
+
+ StrCmp $R0 0 +3
+ !insertmacro ShowErrorFinal "The installer is already running."
+
+;Detect if Jellyfin is already installed.
+; In case it is installed, let the user choose either
+; 1. Exit installer
+; 2. Upgrade without messing with data
+; 2a. Don't ask for any details, uninstall and install afresh with old settings
+
+; Read Registry for previous installation
+ ClearErrors
+ ReadRegStr "$0" HKLM "${REG_CONFIG_KEY}" "InstallFolder"
+ IfErrors NoExisitingInstall
+
+ DetailPrint "Existing Jellyfin Server detected at: $0"
+ StrCpy "$INSTDIR" "$0" ; set the location fro registry as new default
+
+ StrCpy $_EXISTINGINSTALLATION_ "Yes" ; Set our flag to be used later
+ SectionSetText ${InstallJellyfinServer} "Upgrade Jellyfin Server (required)" ; Change install text to "Upgrade"
+
+ ; check if service was run using Network Service account
+ ClearErrors
+ ReadRegStr $_SERVICEACCOUNTTYPE_ HKLM "${REG_CONFIG_KEY}" "ServiceAccountType" ; in case of error _SERVICEACCOUNTTYPE_ will be NetworkService as default
+
+ ClearErrors
+ ReadRegStr $_JELLYFINDATADIR_ HKLM "${REG_CONFIG_KEY}" "DataFolder" ; in case of error, the default holds
+
+ ; Hide sections which will not be needed in case of previous install
+ ; SectionSetText ${InstallService} ""
+
+; check if there is a service called Jellyfin, there should be
+; hack : nssm statuscode Jellyfin will return non zero return code in case it exists
+ ExecWait '"$INSTDIR\nssm.exe" statuscode JellyfinServer' $0
+ DetailPrint "Jellyfin Server service statuscode, $0"
+ IntCmp $0 0 NoService ; service doesn't exist, may be run from desktop shortcut
+
+ ; if service was detected, set defaults going forward.
+ StrCpy $_EXISTINGSERVICE_ "Yes"
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ StrCpy $_SERVICESTART_ "Yes"
+ StrCpy $_MAKESHORTCUTS_ "No"
+ SectionSetText ${CreateWinShortcuts} ""
+
+
+ NoService: ; existing install was present but no service was detected
+ ${If} $_SERVICEACCOUNTTYPE_ == "None"
+ StrCpy $_SETUPTYPE_ "Basic"
+ StrCpy $_INSTALLSERVICE_ "No"
+ StrCpy $_SERVICESTART_ "No"
+ StrCpy $_MAKESHORTCUTS_ "Yes"
+ ${EndIf}
+
+; Let the user know that we'll upgrade and provide an option to quit.
+ MessageBox MB_OKCANCEL|MB_ICONINFORMATION "Existing installation of Jellyfin Server was detected, it'll be upgraded, settings will be retained. \
+ $\r$\nClick OK to proceed, Cancel to exit installer." /SD IDOK IDOK ProceedWithUpgrade
+ Quit ; Quit if the user is not sure about upgrade
+
+ ProceedWithUpgrade:
+
+ NoExisitingInstall: ; by this time, the variables have been correctly set to reflect previous install details
+
+FunctionEnd
+
+Function HideInstallDirectoryPage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideDataDirectoryPage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideServiceConfigPage
+ ${If} $_INSTALLSERVICE_ == "No" ; Not running as a service, don't ask for service type
+ ${OrIf} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideConfirmationPage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for InstallFolder
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideSetupTypePage
+ ${If} $_EXISTINGINSTALLATION_ == "Yes" ; Existing installation detected, so don't ask for SetupType
+ Abort
+ ${EndIf}
+FunctionEnd
+
+Function HideComponentsPage
+ ${If} $_SETUPTYPE_ == "Basic" ; Basic installation chosen, don't show components choice
+ Abort
+ ${EndIf}
+FunctionEnd
+
+; Setup Type dialog show function
+Function ShowSetupTypePage
+ Call HideSetupTypePage
+ Call fnc_setuptype_Create
+ nsDialogs::Show
+FunctionEnd
+
+; Service Config dialog show function
+Function ShowServiceConfigPage
+ Call HideServiceConfigPage
+ Call fnc_service_config_Create
+ nsDialogs::Show
+FunctionEnd
+
+; Confirmation dialog show function
+Function ShowConfirmationPage
+ Call HideConfirmationPage
+ Call fnc_confirmation_Create
+ nsDialogs::Show
+FunctionEnd
+
+; Declare temp variables to read the options from the custom page.
+Var StartServiceAfterInstall
+Var UseNetworkServiceAccount
+Var UseLocalSystemAccount
+Var BasicInstall
+
+
+Function SetupTypePage_Config
+${NSD_GetState} $hCtl_setuptype_BasicInstall $BasicInstall
+ IfFileExists "$LOCALAPPDATA\Jellyfin" folderfound foldernotfound ; if the folder exists, use this, otherwise, go with new default
+ folderfound:
+ StrCpy $_FOLDEREXISTS_ "Yes"
+ Goto InstallCheck
+ foldernotfound:
+ StrCpy $_FOLDEREXISTS_ "No"
+ Goto InstallCheck
+
+InstallCheck:
+${If} $BasicInstall == 1
+ StrCpy $_SETUPTYPE_ "Basic"
+ StrCpy $_INSTALLSERVICE_ "No"
+ StrCpy $_SERVICESTART_ "No"
+ StrCpy $_SERVICEACCOUNTTYPE_ "None"
+ StrCpy $_MAKESHORTCUTS_ "Yes"
+ ${If} $_FOLDEREXISTS_ == "Yes"
+ StrCpy $_JELLYFINDATADIR_ "$LOCALAPPDATA\Jellyfin\"
+ ${EndIf}
+${Else}
+ StrCpy $_SETUPTYPE_ "Advanced"
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ StrCpy $_MAKESHORTCUTS_ "No"
+ ${If} $_FOLDEREXISTS_ == "Yes"
+ MessageBox MB_OKCANCEL|MB_ICONINFORMATION "An existing data folder was detected.\
+ $\r$\nBasic Setup is highly recommended.\
+ $\r$\nIf you proceed, you will need to set up Jellyfin again." IDOK GoAhead IDCANCEL GoBack
+ GoBack:
+ Abort
+ ${EndIf}
+ GoAhead:
+ StrCpy $_JELLYFINDATADIR_ "$%ProgramData%\Jellyfin\Server"
+ SectionSetText ${CreateWinShortcuts} ""
+${EndIf}
+
+FunctionEnd
+
+Function ServiceConfigPage_Config
+${NSD_GetState} $hCtl_service_config_StartServiceAfterInstall $StartServiceAfterInstall
+${If} $StartServiceAfterInstall == 1
+ StrCpy $_SERVICESTART_ "Yes"
+${Else}
+ StrCpy $_SERVICESTART_ "No"
+${EndIf}
+${NSD_GetState} $hCtl_service_config_UseNetworkServiceAccount $UseNetworkServiceAccount
+${NSD_GetState} $hCtl_service_config_UseLocalSystemAccount $UseLocalSystemAccount
+
+${If} $UseNetworkServiceAccount == 1
+ StrCpy $_SERVICEACCOUNTTYPE_ "NetworkService"
+${ElseIf} $UseLocalSystemAccount == 1
+ StrCpy $_SERVICEACCOUNTTYPE_ "LocalSystem"
+${Else}
+ !insertmacro ShowErrorFinal "Service account type not properly configured."
+${EndIf}
+
+FunctionEnd
+
+; This function handles the choices during component selection
+Function .onSelChange
+
+; If we are not installing service, we don't need to set the NetworkService account or StartService
+ SectionGetFlags ${InstallService} $0
+ ${If} $0 = ${SF_SELECTED}
+ StrCpy $_INSTALLSERVICE_ "Yes"
+ ${Else}
+ StrCpy $_INSTALLSERVICE_ "No"
+ StrCpy $_SERVICESTART_ "No"
+ StrCpy $_SERVICEACCOUNTTYPE_ "None"
+ ${EndIf}
+FunctionEnd
+
+Function .onInstSuccess
+ #ExecShell "open" "http://localhost:8096"
+FunctionEnd
diff --git a/windows/legacy/install-jellyfin.ps1 b/windows/legacy/install-jellyfin.ps1
new file mode 100644
index 0000000000..e909a0468e
--- /dev/null
+++ b/windows/legacy/install-jellyfin.ps1
@@ -0,0 +1,460 @@
+[CmdletBinding()]
+
+param(
+ [Switch]$Quiet,
+ [Switch]$InstallAsService,
+ [System.Management.Automation.pscredential]$ServiceUser,
+ [switch]$CreateDesktopShorcut,
+ [switch]$LaunchJellyfin,
+ [switch]$MigrateEmbyLibrary,
+ [string]$InstallLocation,
+ [string]$EmbyLibraryLocation,
+ [string]$JellyfinLibraryLocation
+)
+<# This form was created using POSHGUI.com a free online gui designer for PowerShell
+.NAME
+ Install-Jellyfin
+#>
+
+#This doesn't need to be used by default anymore, but I am keeping it in as a function for future use.
+function Elevate-Window {
+ # Get the ID and security principal of the current user account
+ $myWindowsID=[System.Security.Principal.WindowsIdentity]::GetCurrent()
+ $myWindowsPrincipal=new-object System.Security.Principal.WindowsPrincipal($myWindowsID)
+
+ # Get the security principal for the Administrator role
+ $adminRole=[System.Security.Principal.WindowsBuiltInRole]::Administrator
+
+ # Check to see if we are currently running "as Administrator"
+ if ($myWindowsPrincipal.IsInRole($adminRole))
+ {
+ # We are running "as Administrator" - so change the title and background color to indicate this
+ $Host.UI.RawUI.WindowTitle = $myInvocation.MyCommand.Definition + "(Elevated)"
+ $Host.UI.RawUI.BackgroundColor = "DarkBlue"
+ clear-host
+ }
+ else
+ {
+ # We are not running "as Administrator" - so relaunch as administrator
+
+ # Create a new process object that starts PowerShell
+ $newProcess = new-object System.Diagnostics.ProcessStartInfo "PowerShell";
+
+ # Specify the current script path and name as a parameter
+ $newProcess.Arguments = $myInvocation.MyCommand.Definition;
+
+ # Indicate that the process should be elevated
+ $newProcess.Verb = "runas";
+
+ # Start the new process
+ [System.Diagnostics.Process]::Start($newProcess);
+
+ # Exit from the current, unelevated, process
+ exit
+ }
+}
+
+#FIXME The install methods should be a function that takes all the params, the quiet flag should be a paramset
+
+if($Quiet.IsPresent -or $Quiet -eq $true){
+ if([string]::IsNullOrEmpty($JellyfinLibraryLocation)){
+ $Script:JellyfinDataDir = "$env:LOCALAPPDATA\jellyfin\"
+ }else{
+ $Script:JellyfinDataDir = $JellyfinLibraryLocation
+ }
+ if([string]::IsNullOrEmpty($InstallLocation)){
+ $Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
+ }else{
+ $Script:DefaultJellyfinInstallDirectory = $InstallLocation
+ }
+
+ if([string]::IsNullOrEmpty($EmbyLibraryLocation)){
+ $Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\data\"
+ }else{
+ $Script:defaultEmbyDataDir = $EmbyLibraryLocation
+ }
+
+ if($InstallAsService.IsPresent -or $InstallAsService -eq $true){
+ $Script:InstallAsService = $true
+ }else{$Script:InstallAsService = $false}
+ if($null -eq $ServiceUser){
+ $Script:InstallServiceAsUser = $false
+ }else{
+ $Script:InstallServiceAsUser = $true
+ $Script:UserCredentials = $ServiceUser
+ $Script:JellyfinDataDir = "$env:HOMEDRIVE\Users\$($Script:UserCredentials.UserName)\Appdata\Local\jellyfin\"}
+ if($CreateDesktopShorcut.IsPresent -or $CreateDesktopShorcut -eq $true) {$Script:CreateShortcut = $true}else{$Script:CreateShortcut = $false}
+ if($MigrateEmbyLibrary.IsPresent -or $MigrateEmbyLibrary -eq $true){$Script:MigrateLibrary = $true}else{$Script:MigrateLibrary = $false}
+ if($LaunchJellyfin.IsPresent -or $LaunchJellyfin -eq $true){$Script:StartJellyfin = $true}else{$Script:StartJellyfin = $false}
+
+ if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
+ mkdir $Script:DefaultJellyfinInstallDirectory
+ }
+ Copy-Item -Path $PSScriptRoot/* -DestinationPath "$Script:DefaultJellyfinInstallDirectory/" -Force -Recurse
+ if($Script:InstallAsService){
+ if($Script:InstallServiceAsUser){
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 500
+ &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }else{
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 500
+ #&"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin ObjectName $Script:UserCredentials.UserName $Script:UserCredentials.GetNetworkCredential().Password
+ #Set-Service -Name Jellyfin -Credential $Script:UserCredentials
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }
+ }
+ if($Script:MigrateLibrary){
+ Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
+ Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
+ }
+ if($Script:CreateShortcut){
+ $WshShell = New-Object -comObject WScript.Shell
+ $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
+ $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
+ $Shortcut.Save()
+ }
+ if($Script:StartJellyfin){
+ if($Script:InstallAsService){
+ Get-Service Jellyfin | Start-Service
+ }else{
+ Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
+ }
+ }
+}else{
+
+}
+Add-Type -AssemblyName System.Windows.Forms
+[System.Windows.Forms.Application]::EnableVisualStyles()
+
+$Script:JellyFinDataDir = "$env:LOCALAPPDATA\jellyfin\"
+$Script:DefaultJellyfinInstallDirectory = "$env:Appdata\jellyfin\"
+$Script:defaultEmbyDataDir = "$env:Appdata\Emby-Server\"
+$Script:InstallAsService = $False
+$Script:InstallServiceAsUser = $false
+$Script:CreateShortcut = $false
+$Script:MigrateLibrary = $false
+$Script:StartJellyfin = $false
+
+function InstallJellyfin {
+ Write-Host "Install as service: $Script:InstallAsService"
+ Write-Host "Install as serviceuser: $Script:InstallServiceAsUser"
+ Write-Host "Create Shortcut: $Script:CreateShortcut"
+ Write-Host "MigrateLibrary: $Script:MigrateLibrary"
+ $GUIElementsCollection | ForEach-Object {
+ $_.Enabled = $false
+ }
+ Write-Host "Making Jellyfin directory"
+ $ProgressBar.Minimum = 1
+ $ProgressBar.Maximum = 100
+ $ProgressBar.Value = 1
+ if($Script:DefaultJellyfinInstallDirectory -ne $InstallLocationBox.Text){
+ Write-Host "Custom Install Location Chosen: $($InstallLocationBox.Text)"
+ $Script:DefaultJellyfinInstallDirectory = $InstallLocationBox.Text
+ }
+ if($Script:JellyfinDataDir -ne $CustomLibraryBox.Text){
+ Write-Host "Custom Library Location Chosen: $($CustomLibraryBox.Text)"
+ $Script:JellyfinDataDir = $CustomLibraryBox.Text
+ }
+ if(-not (Test-Path $Script:DefaultJellyfinInstallDirectory)){
+ mkdir $Script:DefaultJellyfinInstallDirectory
+ }
+ Write-Host "Copying Jellyfin Data"
+ $progressbar.Value = 10
+ Copy-Item -Path $PSScriptRoot/* -Destination $Script:DefaultJellyfinInstallDirectory/ -Force -Recurse
+ Write-Host "Finished Copying"
+ $ProgressBar.Value = 50
+ if($Script:InstallAsService){
+ if($Script:InstallServiceAsUser){
+ Write-Host "Installing Service as user $($Script:UserCredentials.UserName)"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 2000
+ &sc.exe config Jellyfin obj=".\$($Script:UserCredentials.UserName)" password="$($Script:UserCredentials.GetNetworkCredential().Password)"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }else{
+ Write-Host "Installing Service as LocalSystem"
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" install Jellyfin `"$Script:DefaultJellyfinInstallDirectory\jellyfin.exe`" --datadir `"$Script:JellyfinDataDir`"
+ Start-Sleep -Milliseconds 2000
+ &"$Script:DefaultJellyfinInstallDirectory\nssm.exe" set Jellyfin Start SERVICE_DELAYED_AUTO_START
+ }
+ }
+ $progressbar.Value = 60
+ if($Script:MigrateLibrary){
+ if($Script:defaultEmbyDataDir -ne $LibraryLocationBox.Text){
+ Write-Host "Custom location defined for emby library: $($LibraryLocationBox.Text)"
+ $Script:defaultEmbyDataDir = $LibraryLocationBox.Text
+ }
+ Write-Host "Copying emby library from $Script:defaultEmbyDataDir to $Script:JellyFinDataDir"
+ Write-Host "This could take a while depending on the size of your library. Please be patient"
+ Write-Host "Copying config"
+ Copy-Item -Path $Script:defaultEmbyDataDir/config -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying cache"
+ Copy-Item -Path $Script:defaultEmbyDataDir/cache -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying data"
+ Copy-Item -Path $Script:defaultEmbyDataDir/data -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying metadata"
+ Copy-Item -Path $Script:defaultEmbyDataDir/metadata -Destination $Script:JellyfinDataDir -force -Recurse
+ Write-Host "Copying root dir"
+ Copy-Item -Path $Script:defaultEmbyDataDir/root -Destination $Script:JellyfinDataDir -force -Recurse
+ }
+ $progressbar.Value = 80
+ if($Script:CreateShortcut){
+ Write-Host "Creating Shortcut"
+ $WshShell = New-Object -comObject WScript.Shell
+ $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\Jellyfin.lnk")
+ $Shortcut.TargetPath = "$Script:DefaultJellyfinInstallDirectory\jellyfin.exe"
+ $Shortcut.Save()
+ }
+ $ProgressBar.Value = 90
+ if($Script:StartJellyfin){
+ if($Script:InstallAsService){
+ Write-Host "Starting Jellyfin Service"
+ Get-Service Jellyfin | Start-Service
+ }else{
+ Write-Host "Starting Jellyfin"
+ Start-Process -FilePath $Script:DefaultJellyfinInstallDirectory\jellyfin.exe -PassThru
+ }
+ }
+ $progressbar.Value = 100
+ Write-Host Finished
+ $wshell = New-Object -ComObject Wscript.Shell
+ $wshell.Popup("Operation Completed",0,"Done",0x1)
+ $InstallForm.Close()
+}
+function ServiceBoxCheckChanged {
+ if($InstallAsServiceCheck.Checked){
+ $Script:InstallAsService = $true
+ $ServiceUserLabel.Visible = $true
+ $ServiceUserLabel.Enabled = $true
+ $ServiceUserBox.Visible = $true
+ $ServiceUserBox.Enabled = $true
+ }else{
+ $Script:InstallAsService = $false
+ $ServiceUserLabel.Visible = $false
+ $ServiceUserLabel.Enabled = $false
+ $ServiceUserBox.Visible = $false
+ $ServiceUserBox.Enabled = $false
+ }
+}
+function UserSelect {
+ if($ServiceUserBox.Text -eq 'Local System')
+ {
+ $Script:InstallServiceAsUser = $false
+ $Script:UserCredentials = $null
+ $ServiceUserBox.Items.RemoveAt(1)
+ $ServiceUserBox.Items.Add("Custom User")
+ }elseif($ServiceUserBox.Text -eq 'Custom User'){
+ $Script:InstallServiceAsUser = $true
+ $Script:UserCredentials = Get-Credential -Message "Please enter the credentials of the user you with to run Jellyfin Service as" -UserName $env:USERNAME
+ $ServiceUserBox.Items[1] = "$($Script:UserCredentials.UserName)"
+ }
+}
+function CreateShortcutBoxCheckChanged {
+ if($CreateShortcutCheck.Checked){
+ $Script:CreateShortcut = $true
+ }else{
+ $Script:CreateShortcut = $False
+ }
+}
+function StartJellyFinBoxCheckChanged {
+ if($StartProgramCheck.Checked){
+ $Script:StartJellyfin = $true
+ }else{
+ $Script:StartJellyfin = $false
+ }
+}
+
+function CustomLibraryCheckChanged {
+ if($CustomLibraryCheck.Checked){
+ $Script:UseCustomLibrary = $true
+ $CustomLibraryBox.Enabled = $true
+ }else{
+ $Script:UseCustomLibrary = $false
+ $CustomLibraryBox.Enabled = $false
+ }
+}
+
+function MigrateLibraryCheckboxChanged {
+
+ if($MigrateLibraryCheck.Checked){
+ $Script:MigrateLibrary = $true
+ $LibraryMigrationLabel.Visible = $true
+ $LibraryMigrationLabel.Enabled = $true
+ $LibraryLocationBox.Visible = $true
+ $LibraryLocationBox.Enabled = $true
+ }else{
+ $Script:MigrateLibrary = $false
+ $LibraryMigrationLabel.Visible = $false
+ $LibraryMigrationLabel.Enabled = $false
+ $LibraryLocationBox.Visible = $false
+ $LibraryLocationBox.Enabled = $false
+ }
+
+}
+
+
+#region begin GUI{
+
+$InstallForm = New-Object system.Windows.Forms.Form
+$InstallForm.ClientSize = '320,240'
+$InstallForm.text = "Terrible Jellyfin Installer"
+$InstallForm.TopMost = $false
+
+$GUIElementsCollection = @()
+
+$InstallButton = New-Object system.Windows.Forms.Button
+$InstallButton.text = "Install"
+$InstallButton.width = 60
+$InstallButton.height = 30
+$InstallButton.location = New-Object System.Drawing.Point(5,5)
+$InstallButton.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallButton
+
+$ProgressBar = New-Object system.Windows.Forms.ProgressBar
+$ProgressBar.width = 245
+$ProgressBar.height = 30
+$ProgressBar.location = New-Object System.Drawing.Point(70,5)
+
+$InstallLocationLabel = New-Object system.Windows.Forms.Label
+$InstallLocationLabel.text = "Install Location"
+$InstallLocationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$InstallLocationLabel.AutoSize = $true
+$InstallLocationLabel.width = 100
+$InstallLocationLabel.height = 20
+$InstallLocationLabel.location = New-Object System.Drawing.Point(5,50)
+$InstallLocationLabel.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallLocationLabel
+
+$InstallLocationBox = New-Object system.Windows.Forms.TextBox
+$InstallLocationBox.multiline = $false
+$InstallLocationBox.width = 205
+$InstallLocationBox.height = 20
+$InstallLocationBox.location = New-Object System.Drawing.Point(110,50)
+$InstallLocationBox.Text = $Script:DefaultJellyfinInstallDirectory
+$InstallLocationBox.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallLocationBox
+
+$CustomLibraryCheck = New-Object system.Windows.Forms.CheckBox
+$CustomLibraryCheck.text = "Custom Library Location:"
+$CustomLibraryCheck.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$CustomLibraryCheck.AutoSize = $false
+$CustomLibraryCheck.width = 180
+$CustomLibraryCheck.height = 20
+$CustomLibraryCheck.location = New-Object System.Drawing.Point(5,75)
+$CustomLibraryCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $CustomLibraryCheck
+
+$CustomLibraryBox = New-Object system.Windows.Forms.TextBox
+$CustomLibraryBox.multiline = $false
+$CustomLibraryBox.width = 130
+$CustomLibraryBox.height = 20
+$CustomLibraryBox.location = New-Object System.Drawing.Point(185,75)
+$CustomLibraryBox.Text = $Script:JellyFinDataDir
+$CustomLibraryBox.Font = 'Microsoft Sans Serif,10'
+$CustomLibraryBox.Enabled = $false
+$GUIElementsCollection += $CustomLibraryBox
+
+$InstallAsServiceCheck = New-Object system.Windows.Forms.CheckBox
+$InstallAsServiceCheck.text = "Install as Service"
+$InstallAsServiceCheck.AutoSize = $false
+$InstallAsServiceCheck.width = 140
+$InstallAsServiceCheck.height = 20
+$InstallAsServiceCheck.location = New-Object System.Drawing.Point(5,125)
+$InstallAsServiceCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $InstallAsServiceCheck
+
+$ServiceUserLabel = New-Object system.Windows.Forms.Label
+$ServiceUserLabel.text = "Run Service As:"
+$ServiceUserLabel.AutoSize = $true
+$ServiceUserLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$ServiceUserLabel.width = 100
+$ServiceUserLabel.height = 20
+$ServiceUserLabel.location = New-Object System.Drawing.Point(15,145)
+$ServiceUserLabel.Font = 'Microsoft Sans Serif,10'
+$ServiceUserLabel.Visible = $false
+$ServiceUserLabel.Enabled = $false
+$GUIElementsCollection += $ServiceUserLabel
+
+$ServiceUserBox = New-Object system.Windows.Forms.ComboBox
+$ServiceUserBox.text = "Run Service As"
+$ServiceUserBox.width = 195
+$ServiceUserBox.height = 20
+@('Local System','Custom User') | ForEach-Object {[void] $ServiceUserBox.Items.Add($_)}
+$ServiceUserBox.location = New-Object System.Drawing.Point(120,145)
+$ServiceUserBox.Font = 'Microsoft Sans Serif,10'
+$ServiceUserBox.Visible = $false
+$ServiceUserBox.Enabled = $false
+$ServiceUserBox.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
+$GUIElementsCollection += $ServiceUserBox
+
+$MigrateLibraryCheck = New-Object system.Windows.Forms.CheckBox
+$MigrateLibraryCheck.text = "Import Emby/Old JF Library"
+$MigrateLibraryCheck.AutoSize = $false
+$MigrateLibraryCheck.width = 160
+$MigrateLibraryCheck.height = 20
+$MigrateLibraryCheck.location = New-Object System.Drawing.Point(5,170)
+$MigrateLibraryCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $MigrateLibraryCheck
+
+$LibraryMigrationLabel = New-Object system.Windows.Forms.Label
+$LibraryMigrationLabel.text = "Emby/Old JF Library Path"
+$LibraryMigrationLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleLeft
+$LibraryMigrationLabel.AutoSize = $false
+$LibraryMigrationLabel.width = 120
+$LibraryMigrationLabel.height = 20
+$LibraryMigrationLabel.location = New-Object System.Drawing.Point(15,190)
+$LibraryMigrationLabel.Font = 'Microsoft Sans Serif,10'
+$LibraryMigrationLabel.Visible = $false
+$LibraryMigrationLabel.Enabled = $false
+$GUIElementsCollection += $LibraryMigrationLabel
+
+$LibraryLocationBox = New-Object system.Windows.Forms.TextBox
+$LibraryLocationBox.multiline = $false
+$LibraryLocationBox.width = 175
+$LibraryLocationBox.height = 20
+$LibraryLocationBox.location = New-Object System.Drawing.Point(140,190)
+$LibraryLocationBox.Text = $Script:defaultEmbyDataDir
+$LibraryLocationBox.Font = 'Microsoft Sans Serif,10'
+$LibraryLocationBox.Visible = $false
+$LibraryLocationBox.Enabled = $false
+$GUIElementsCollection += $LibraryLocationBox
+
+$CreateShortcutCheck = New-Object system.Windows.Forms.CheckBox
+$CreateShortcutCheck.text = "Desktop Shortcut"
+$CreateShortcutCheck.AutoSize = $false
+$CreateShortcutCheck.width = 150
+$CreateShortcutCheck.height = 20
+$CreateShortcutCheck.location = New-Object System.Drawing.Point(5,215)
+$CreateShortcutCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $CreateShortcutCheck
+
+$StartProgramCheck = New-Object system.Windows.Forms.CheckBox
+$StartProgramCheck.text = "Start Jellyfin"
+$StartProgramCheck.AutoSize = $false
+$StartProgramCheck.width = 160
+$StartProgramCheck.height = 20
+$StartProgramCheck.location = New-Object System.Drawing.Point(160,215)
+$StartProgramCheck.Font = 'Microsoft Sans Serif,10'
+$GUIElementsCollection += $StartProgramCheck
+
+$InstallForm.controls.AddRange($GUIElementsCollection)
+$InstallForm.Controls.Add($ProgressBar)
+
+#region gui events {
+$InstallButton.Add_Click({ InstallJellyfin })
+$CustomLibraryCheck.Add_CheckedChanged({CustomLibraryCheckChanged})
+$InstallAsServiceCheck.Add_CheckedChanged({ServiceBoxCheckChanged})
+$ServiceUserBox.Add_SelectedValueChanged({ UserSelect })
+$MigrateLibraryCheck.Add_CheckedChanged({MigrateLibraryCheckboxChanged})
+$CreateShortcutCheck.Add_CheckedChanged({CreateShortcutBoxCheckChanged})
+$StartProgramCheck.Add_CheckedChanged({StartJellyFinBoxCheckChanged})
+#endregion events }
+
+#endregion GUI }
+
+
+[void]$InstallForm.ShowDialog()
diff --git a/windows/legacy/install.bat b/windows/legacy/install.bat
new file mode 100644
index 0000000000..e21479a79a
--- /dev/null
+++ b/windows/legacy/install.bat
@@ -0,0 +1 @@
+powershell.exe -executionpolicy Bypass -file install-jellyfin.ps1
--
cgit v1.2.3
From 9169861baab62919e661ec663998c5a4436e4547 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:18:38 -0400
Subject: Add CODEOWNERS for GitHub
---
.github/CODEOWNERS | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 .github/CODEOWNERS
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 0000000000..e902dc7124
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1,3 @@
+# Joshua must review all changes to deployment and build.sh
+deployment/* @joshuaboniface
+build.sh @joshuaboniface
--
cgit v1.2.3
From de66ab4d832664abb5c17005d326e543446aae7d Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:39:11 -0400
Subject: Use git checkout instead of file copies to clean
---
deployment/Dockerfile.debian.amd64 | 2 +-
deployment/Dockerfile.debian.arm64 | 2 +-
deployment/Dockerfile.debian.armhf | 2 +-
deployment/Dockerfile.ubuntu.amd64 | 2 +-
deployment/Dockerfile.ubuntu.arm64 | 2 +-
deployment/Dockerfile.ubuntu.armhf | 2 +-
deployment/build.debian.amd64 | 2 +-
deployment/build.debian.arm64 | 2 +-
deployment/build.debian.armhf | 2 +-
deployment/build.ubuntu.amd64 | 2 +-
deployment/build.ubuntu.arm64 | 2 +-
deployment/build.ubuntu.armhf | 2 +-
12 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/deployment/Dockerfile.debian.amd64 b/deployment/Dockerfile.debian.amd64
index b5a0380489..ea2aba5a89 100644
--- a/deployment/Dockerfile.debian.amd64
+++ b/deployment/Dockerfile.debian.amd64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# 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
+ && 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 git
# Install dotnet repository
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
diff --git a/deployment/Dockerfile.debian.arm64 b/deployment/Dockerfile.debian.arm64
index cfe562df33..db8485b43d 100644
--- a/deployment/Dockerfile.debian.arm64
+++ b/deployment/Dockerfile.debian.arm64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
# Install dotnet repository
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
diff --git a/deployment/Dockerfile.debian.armhf b/deployment/Dockerfile.debian.armhf
index ea8c8c8e62..717bc3c894 100644
--- a/deployment/Dockerfile.debian.armhf
+++ b/deployment/Dockerfile.debian.armhf
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
# Install dotnet repository
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
diff --git a/deployment/Dockerfile.ubuntu.amd64 b/deployment/Dockerfile.ubuntu.amd64
index e61be4efcc..7c2b26dedd 100644
--- a/deployment/Dockerfile.ubuntu.amd64
+++ b/deployment/Dockerfile.ubuntu.amd64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# 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
+ && 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 git
# Install dotnet repository
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
diff --git a/deployment/Dockerfile.ubuntu.arm64 b/deployment/Dockerfile.ubuntu.arm64
index e34ef7edd1..27f8ec11b5 100644
--- a/deployment/Dockerfile.ubuntu.arm64
+++ b/deployment/Dockerfile.ubuntu.arm64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
# Install dotnet repository
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
diff --git a/deployment/Dockerfile.ubuntu.armhf b/deployment/Dockerfile.ubuntu.armhf
index 6f92c81ab1..c888c42df6 100644
--- a/deployment/Dockerfile.ubuntu.armhf
+++ b/deployment/Dockerfile.ubuntu.armhf
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv
+ && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
# Install dotnet repository
# https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
diff --git a/deployment/build.debian.amd64 b/deployment/build.debian.amd64
index 0eb9ee5c83..8e205867b8 100755
--- a/deployment/build.debian.amd64
+++ b/deployment/build.debian.amd64
@@ -21,7 +21,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- mv debian/control.orig debian/control
+ git checkout debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.debian.arm64 b/deployment/build.debian.arm64
index d1ce85e2fa..436602d195 100755
--- a/deployment/build.debian.arm64
+++ b/deployment/build.debian.arm64
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- mv debian/control.orig debian/control
+ git checkout debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.debian.armhf b/deployment/build.debian.armhf
index 3941583544..9ca57b1e46 100755
--- a/deployment/build.debian.armhf
+++ b/deployment/build.debian.armhf
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- mv debian/control.orig debian/control
+ git checkout debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.amd64 b/deployment/build.ubuntu.amd64
index 86653cb384..2b789cc475 100755
--- a/deployment/build.ubuntu.amd64
+++ b/deployment/build.ubuntu.amd64
@@ -21,7 +21,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- mv debian/control.orig debian/control
+ git checkout debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.arm64 b/deployment/build.ubuntu.arm64
index f065170092..9b4e548501 100755
--- a/deployment/build.ubuntu.arm64
+++ b/deployment/build.ubuntu.arm64
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- mv debian/control.orig debian/control
+ git checkout debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.armhf b/deployment/build.ubuntu.armhf
index 679fde5ae1..59912a14f5 100755
--- a/deployment/build.ubuntu.armhf
+++ b/deployment/build.ubuntu.armhf
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- mv debian/control.orig debian/control
+ git checkout debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
--
cgit v1.2.3
From b95bd0e67874f925918eb912d445fb202e4fcee0 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:42:09 -0400
Subject: Bump shared_version to 10.6.0 too
---
SharedVersion.cs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/SharedVersion.cs b/SharedVersion.cs
index d741f379d2..6981c1ca9d 100644
--- a/SharedVersion.cs
+++ b/SharedVersion.cs
@@ -1,4 +1,4 @@
using System.Reflection;
-[assembly: AssemblyVersion("10.5.0")]
-[assembly: AssemblyFileVersion("10.5.0")]
+[assembly: AssemblyVersion("10.6.0")]
+[assembly: AssemblyFileVersion("10.6.0")]
--
cgit v1.2.3
From a561d4ca417b45e983bfe46a70397fb44f7b78a3 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 18:43:54 -0400
Subject: Remove arch from macos
---
build.yaml | 2 +-
deployment/Dockerfile.macos | 31 +++++++++++++++++++++++++++++++
deployment/Dockerfile.macos.amd64 | 31 -------------------------------
deployment/build.macos | 27 +++++++++++++++++++++++++++
deployment/build.macos.amd64 | 27 ---------------------------
5 files changed, 59 insertions(+), 59 deletions(-)
create mode 100644 deployment/Dockerfile.macos
delete mode 100644 deployment/Dockerfile.macos.amd64
create mode 100755 deployment/build.macos
delete mode 100755 deployment/build.macos.amd64
diff --git a/build.yaml b/build.yaml
index a76539d1f3..9e590e5a01 100644
--- a/build.yaml
+++ b/build.yaml
@@ -12,6 +12,6 @@ packages:
- fedora.amd64
- centos.amd64
- linux.amd64
- - macos.amd64
- windows.amd64
+ - macos
- portable
diff --git a/deployment/Dockerfile.macos b/deployment/Dockerfile.macos
new file mode 100644
index 0000000000..ba5da40190
--- /dev/null
+++ b/deployment/Dockerfile.macos
@@ -0,0 +1,31 @@
+FROM debian:10
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+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
+ENV IS_DOCKER=YES
+
+# 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
+
+# Link to docker-build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.macos /build.sh
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.macos.amd64 b/deployment/Dockerfile.macos.amd64
deleted file mode 100644
index aaf9a9692f..0000000000
--- a/deployment/Dockerfile.macos.amd64
+++ /dev/null
@@ -1,31 +0,0 @@
-FROM debian:10
-# Docker build arguments
-ARG SOURCE_DIR=/jellyfin
-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
-ENV IS_DOCKER=YES
-
-# 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
-
-# Link to docker-build script
-RUN ln -sf ${SOURCE_DIR}/deployment/build.macos.amd64 /build.sh
-
-VOLUME ${SOURCE_DIR}/
-
-VOLUME ${ARTIFACT_DIR}/
-
-ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.macos b/deployment/build.macos
new file mode 100755
index 0000000000..16be29eeef
--- /dev/null
+++ b/deployment/build.macos
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+#= MacOS 10.13+ .tar.gz
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_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-server_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
+tar -czf jellyfin-server_${version}_macos-amd64.tar.gz -C dist jellyfin-server_${version}
+rm -rf dist/jellyfin-server_${version}
+
+# Move the artifacts out
+mkdir -p ${ARTIFACT_DIR}/
+mv jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd
diff --git a/deployment/build.macos.amd64 b/deployment/build.macos.amd64
deleted file mode 100755
index 4dca2b6438..0000000000
--- a/deployment/build.macos.amd64
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-
-#= MacOS 10.13+ amd64 .tar.gz
-
-set -o errexit
-set -o xtrace
-
-# Move to source directory
-pushd ${SOURCE_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-server_${version}/ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none;UseAppHost=true"
-tar -czf jellyfin-server_${version}_macos-amd64.tar.gz -C dist jellyfin-server_${version}
-rm -rf dist/jellyfin-server_${version}
-
-# Move the artifacts out
-mkdir -p ${ARTIFACT_DIR}/
-mv jellyfin[-_]*.tar.gz ${ARTIFACT_DIR}/
-
-if [[ ${IS_DOCKER} == YES ]]; then
- chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
-fi
-
-popd
--
cgit v1.2.3
From c478a43fd56993062622c3252be938b01e80854c Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 21:44:33 -0400
Subject: Update package description for Debian
---
debian/control | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/debian/control b/debian/control
index f473dc41d2..648e28ae81 100644
--- a/debian/control
+++ b/debian/control
@@ -26,5 +26,5 @@ Depends: at,
libfreetype6,
libssl1.1
Recommends: jellyfin-web
-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.
+Description: Jellyfin is the Free Software Media System.
+ This package provides the Jellyfin server backend and API.
--
cgit v1.2.3
From e87a10235b960bf28a6a76da762b62a0f0399e2c Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 21:49:07 -0400
Subject: Go back to cp-based control archive but right
---
deployment/Dockerfile.debian.amd64 | 2 +-
deployment/Dockerfile.debian.arm64 | 2 +-
deployment/Dockerfile.debian.armhf | 2 +-
deployment/Dockerfile.ubuntu.amd64 | 2 +-
deployment/Dockerfile.ubuntu.arm64 | 2 +-
deployment/Dockerfile.ubuntu.armhf | 2 +-
deployment/build.debian.amd64 | 4 ++--
deployment/build.debian.arm64 | 4 ++--
deployment/build.debian.armhf | 4 ++--
deployment/build.ubuntu.amd64 | 4 ++--
deployment/build.ubuntu.arm64 | 4 ++--
deployment/build.ubuntu.armhf | 4 ++--
12 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/deployment/Dockerfile.debian.amd64 b/deployment/Dockerfile.debian.amd64
index ea2aba5a89..b5a0380489 100644
--- a/deployment/Dockerfile.debian.amd64
+++ b/deployment/Dockerfile.debian.amd64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# 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 git
+ && 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
diff --git a/deployment/Dockerfile.debian.arm64 b/deployment/Dockerfile.debian.arm64
index db8485b43d..cfe562df33 100644
--- a/deployment/Dockerfile.debian.arm64
+++ b/deployment/Dockerfile.debian.arm64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
+ && 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
diff --git a/deployment/Dockerfile.debian.armhf b/deployment/Dockerfile.debian.armhf
index 717bc3c894..ea8c8c8e62 100644
--- a/deployment/Dockerfile.debian.armhf
+++ b/deployment/Dockerfile.debian.armhf
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
+ && 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
diff --git a/deployment/Dockerfile.ubuntu.amd64 b/deployment/Dockerfile.ubuntu.amd64
index 7c2b26dedd..e61be4efcc 100644
--- a/deployment/Dockerfile.ubuntu.amd64
+++ b/deployment/Dockerfile.ubuntu.amd64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# 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 git
+ && 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
diff --git a/deployment/Dockerfile.ubuntu.arm64 b/deployment/Dockerfile.ubuntu.arm64
index 27f8ec11b5..e34ef7edd1 100644
--- a/deployment/Dockerfile.ubuntu.arm64
+++ b/deployment/Dockerfile.ubuntu.arm64
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
+ && 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
diff --git a/deployment/Dockerfile.ubuntu.armhf b/deployment/Dockerfile.ubuntu.armhf
index c888c42df6..6f92c81ab1 100644
--- a/deployment/Dockerfile.ubuntu.armhf
+++ b/deployment/Dockerfile.ubuntu.armhf
@@ -12,7 +12,7 @@ ENV IS_DOCKER=YES
# Prepare Debian build environment
RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv git
+ && 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
diff --git a/deployment/build.debian.amd64 b/deployment/build.debian.amd64
index 8e205867b8..beaf02bee2 100755
--- a/deployment/build.debian.amd64
+++ b/deployment/build.debian.amd64
@@ -10,7 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
- cp debian/control debian/control.orig
+ cp -a debian/control /tmp/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -21,7 +21,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- git checkout debian/control
+ cp -a /tmp/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.debian.arm64 b/deployment/build.debian.arm64
index 436602d195..6394dddb02 100755
--- a/deployment/build.debian.arm64
+++ b/deployment/build.debian.arm64
@@ -10,7 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
- cp debian/control debian/control.orig
+ cp -a debian/control /tmp/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- git checkout debian/control
+ cp -a /tmp/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.debian.armhf b/deployment/build.debian.armhf
index 9ca57b1e46..d12660760f 100755
--- a/deployment/build.debian.armhf
+++ b/deployment/build.debian.armhf
@@ -10,7 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
- cp debian/control debian/control.orig
+ cp -a debian/control /tmp/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- git checkout debian/control
+ cp -a /tmp/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.amd64 b/deployment/build.ubuntu.amd64
index 2b789cc475..1b90f68f46 100755
--- a/deployment/build.ubuntu.amd64
+++ b/deployment/build.ubuntu.amd64
@@ -10,7 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
- cp debian/control debian/control.orig
+ cp -a debian/control /tmp/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -21,7 +21,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- git checkout debian/control
+ cp -a /tmp/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.arm64 b/deployment/build.ubuntu.arm64
index 9b4e548501..c0a31d764f 100755
--- a/deployment/build.ubuntu.arm64
+++ b/deployment/build.ubuntu.arm64
@@ -10,7 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
- cp debian/control debian/control.orig
+ cp -a debian/control /tmp/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- git checkout debian/control
+ cp -a /tmp/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
diff --git a/deployment/build.ubuntu.armhf b/deployment/build.ubuntu.armhf
index 59912a14f5..e2129357dd 100755
--- a/deployment/build.ubuntu.armhf
+++ b/deployment/build.ubuntu.armhf
@@ -10,7 +10,7 @@ pushd ${SOURCE_DIR}
if [[ ${IS_DOCKER} == YES ]]; then
# Remove build-dep for dotnet-sdk-3.1, since it's installed manually
- cp debian/control debian/control.orig
+ cp -a debian/control /tmp/control.orig
sed -i '/dotnet-sdk-3.1,/d' debian/control
fi
@@ -22,7 +22,7 @@ mkdir -p ${ARTIFACT_DIR}/
mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
- git checkout debian/control
+ cp -a /tmp/control.orig debian/control
chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
fi
--
cgit v1.2.3
From be9eb0f19ed207cabaad48c5b713ac80d9d77397 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 22:51:12 -0400
Subject: Unify dep installation and update
---
deployment/Dockerfile.fedora.amd64 | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/deployment/Dockerfile.fedora.amd64 b/deployment/Dockerfile.fedora.amd64
index 73148763de..01b99deb6d 100644
--- a/deployment/Dockerfile.fedora.amd64
+++ b/deployment/Dockerfile.fedora.amd64
@@ -9,10 +9,8 @@ ENV ARTIFACT_DIR=/dist
ENV IS_DOCKER=YES
# 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
+RUN dnf update -y \
+ && dnf install -y @buildsys-build rpmdevtools git dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel
# Install DotNET SDK
RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc \
--
cgit v1.2.3
From fc5e9324920f5c4bf1341ff99b4e8fd2c07069ef Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 22:55:37 -0400
Subject: Fix makefile formatting
---
fedora/Makefile | 42 +++++++++++++++++++++---------------------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/fedora/Makefile b/fedora/Makefile
index 1d2709a2fe..5a76d7d944 100644
--- a/fedora/Makefile
+++ b/fedora/Makefile
@@ -2,27 +2,27 @@ VERSION := $(shell sed -ne '/^Version:/s/.* *//p' fedora/jellyfin.spec)
srpm:
cd fedora/; \
- SOURCE_DIR=.. \
- WORKDIR="$${PWD}"; \
- package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
- pkg_src_dir="$${WORKDIR}"; \
- GNU_TAR=1; \
- tar \
- --transform "s,^\.,jellyfin-server-$(VERSION)," \
- --exclude='.git*' \
- --exclude='**/.git' \
- --exclude='**/.hg' \
- --exclude='**/.vs' \
- --exclude='**/.vscode' \
- --exclude='deployment' \
- --exclude='**/bin' \
- --exclude='**/obj' \
- --exclude='**/.nuget' \
- --exclude='*.deb' \
- --exclude='*.rpm' \
- --exclude='jellyfin-server-$(VERSION).tar.gz' \
- -czf "jellyfin-server-$(VERSION).tar.gz" \
- -C $${SOURCE_DIR} ./
+ SOURCE_DIR=.. \
+ WORKDIR="$${PWD}"; \
+ package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
+ pkg_src_dir="$${WORKDIR}"; \
+ GNU_TAR=1; \
+ tar \
+ --transform "s,^\.,jellyfin-server-$(VERSION)," \
+ --exclude='.git*' \
+ --exclude='**/.git' \
+ --exclude='**/.hg' \
+ --exclude='**/.vs' \
+ --exclude='**/.vscode' \
+ --exclude='deployment' \
+ --exclude='**/bin' \
+ --exclude='**/obj' \
+ --exclude='**/.nuget' \
+ --exclude='*.deb' \
+ --exclude='*.rpm' \
+ --exclude='jellyfin-server-$(VERSION).tar.gz' \
+ -czf "jellyfin-server-$(VERSION).tar.gz" \
+ -C $${SOURCE_DIR} ./
cd fedora/; \
rpmbuild -bs jellyfin.spec \
--define "_sourcedir $$PWD/" \
--
cgit v1.2.3
From 891aa7c25585dacc490590bc7337b00161a781e6 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 23 Mar 2020 23:00:35 -0400
Subject: Update info in Fedora spec
---
fedora/jellyfin.spec | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fedora/jellyfin.spec b/fedora/jellyfin.spec
index e6a3170b56..c15b4ee957 100644
--- a/fedora/jellyfin.spec
+++ b/fedora/jellyfin.spec
@@ -9,8 +9,8 @@
Name: jellyfin-server
Version: 10.6.0
Release: 1%{?dist}
-Summary: The Free Software Media Browser
-License: GPLv2
+Summary: The Free Software Media System Server backend and API
+License: GPLv3
URL: https://jellyfin.media
# Jellyfin Server tarball created by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
Source0: jellyfin-server-%{version}.tar.gz
--
cgit v1.2.3
From 05aa28a37729e73b99cca2892b34590e456a9f07 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Tue, 24 Mar 2020 00:01:48 -0400
Subject: Clean up redundant Makefile steps
---
fedora/Makefile | 3 ---
1 file changed, 3 deletions(-)
diff --git a/fedora/Makefile b/fedora/Makefile
index 5a76d7d944..97904ddd35 100644
--- a/fedora/Makefile
+++ b/fedora/Makefile
@@ -4,9 +4,6 @@ srpm:
cd fedora/; \
SOURCE_DIR=.. \
WORKDIR="$${PWD}"; \
- package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
- pkg_src_dir="$${WORKDIR}"; \
- GNU_TAR=1; \
tar \
--transform "s,^\.,jellyfin-server-$(VERSION)," \
--exclude='.git*' \
--
cgit v1.2.3
From b9fdd96ece39a6ff0f4ff37ecba36d7a0f65fcba Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Tue, 24 Mar 2020 01:10:29 -0400
Subject: Remove old stuff
---
deployment/old/README.md | 62 -------
deployment/old/centos-package-x64/Dockerfile | 39 -----
deployment/old/centos-package-x64/clean.sh | 32 ----
deployment/old/centos-package-x64/dependencies.txt | 1 -
deployment/old/centos-package-x64/docker-build.sh | 18 --
deployment/old/centos-package-x64/package.sh | 34 ----
deployment/old/centos-package-x64/pkg-src | 1 -
.../old/debian-package-arm64/Dockerfile.amd64 | 43 -----
.../old/debian-package-arm64/Dockerfile.arm64 | 34 ----
deployment/old/debian-package-arm64/clean.sh | 27 ---
.../old/debian-package-arm64/dependencies.txt | 1 -
.../old/debian-package-arm64/docker-build.sh | 21 ---
deployment/old/debian-package-arm64/package.sh | 45 -----
deployment/old/debian-package-arm64/pkg-src | 1 -
.../old/debian-package-armhf/Dockerfile.amd64 | 42 -----
.../old/debian-package-armhf/Dockerfile.armhf | 34 ----
deployment/old/debian-package-armhf/clean.sh | 27 ---
.../old/debian-package-armhf/dependencies.txt | 1 -
.../old/debian-package-armhf/docker-build.sh | 21 ---
deployment/old/debian-package-armhf/package.sh | 45 -----
deployment/old/debian-package-armhf/pkg-src | 1 -
deployment/old/debian-package-x64/Dockerfile | 34 ----
deployment/old/debian-package-x64/clean.sh | 27 ---
deployment/old/debian-package-x64/dependencies.txt | 1 -
deployment/old/debian-package-x64/docker-build.sh | 20 ---
deployment/old/debian-package-x64/package.sh | 34 ----
.../old/debian-package-x64/pkg-src/changelog | 59 -------
deployment/old/debian-package-x64/pkg-src/compat | 1 -
.../old/debian-package-x64/pkg-src/conf/jellyfin | 40 -----
.../pkg-src/conf/jellyfin-sudoers | 37 -----
.../pkg-src/conf/jellyfin.service.conf | 7 -
.../debian-package-x64/pkg-src/conf/logging.json | 30 ----
deployment/old/debian-package-x64/pkg-src/control | 31 ----
.../old/debian-package-x64/pkg-src/copyright | 29 ----
deployment/old/debian-package-x64/pkg-src/gbp.conf | 6 -
deployment/old/debian-package-x64/pkg-src/install | 6 -
.../old/debian-package-x64/pkg-src/jellyfin.init | 61 -------
.../debian-package-x64/pkg-src/jellyfin.service | 14 --
.../debian-package-x64/pkg-src/jellyfin.upstart | 20 ---
.../old/debian-package-x64/pkg-src/po/POTFILES.in | 1 -
.../debian-package-x64/pkg-src/po/templates.pot | 57 -------
deployment/old/debian-package-x64/pkg-src/postinst | 92 -----------
deployment/old/debian-package-x64/pkg-src/postrm | 81 ---------
deployment/old/debian-package-x64/pkg-src/preinst | 78 ---------
deployment/old/debian-package-x64/pkg-src/prerm | 61 -------
deployment/old/debian-package-x64/pkg-src/rules | 66 --------
.../pkg-src/source.lintian-overrides | 3 -
.../old/debian-package-x64/pkg-src/source/format | 1 -
.../old/debian-package-x64/pkg-src/source/options | 11 --
deployment/old/fedora-package-x64/Dockerfile | 33 ----
deployment/old/fedora-package-x64/clean.sh | 32 ----
deployment/old/fedora-package-x64/dependencies.txt | 1 -
deployment/old/fedora-package-x64/docker-build.sh | 18 --
deployment/old/fedora-package-x64/package.sh | 34 ----
.../old/fedora-package-x64/pkg-src/.gitignore | 3 -
.../old/fedora-package-x64/pkg-src/README.md | 43 -----
.../pkg-src/jellyfin-firewalld.xml | 9 -
.../old/fedora-package-x64/pkg-src/jellyfin.env | 34 ----
.../pkg-src/jellyfin.override.conf | 7 -
.../fedora-package-x64/pkg-src/jellyfin.service | 15 --
.../old/fedora-package-x64/pkg-src/jellyfin.spec | 181 ---------------------
.../fedora-package-x64/pkg-src/jellyfin.sudoers | 19 ---
.../old/fedora-package-x64/pkg-src/restart.sh | 36 ----
deployment/old/linux-x64/Dockerfile | 37 -----
deployment/old/linux-x64/clean.sh | 27 ---
deployment/old/linux-x64/dependencies.txt | 1 -
deployment/old/linux-x64/docker-build.sh | 36 ----
deployment/old/linux-x64/package.sh | 34 ----
deployment/old/macos/Dockerfile | 37 -----
deployment/old/macos/clean.sh | 27 ---
deployment/old/macos/dependencies.txt | 1 -
deployment/old/macos/docker-build.sh | 36 ----
deployment/old/macos/package.sh | 34 ----
deployment/old/portable/Dockerfile | 37 -----
deployment/old/portable/clean.sh | 27 ---
deployment/old/portable/dependencies.txt | 1 -
deployment/old/portable/docker-build.sh | 36 ----
deployment/old/portable/package.sh | 34 ----
.../old/ubuntu-package-arm64/Dockerfile.amd64 | 59 -------
.../old/ubuntu-package-arm64/Dockerfile.arm64 | 40 -----
deployment/old/ubuntu-package-arm64/clean.sh | 27 ---
.../old/ubuntu-package-arm64/dependencies.txt | 1 -
.../old/ubuntu-package-arm64/docker-build.sh | 21 ---
deployment/old/ubuntu-package-arm64/package.sh | 45 -----
deployment/old/ubuntu-package-arm64/pkg-src | 1 -
.../old/ubuntu-package-armhf/Dockerfile.amd64 | 59 -------
.../old/ubuntu-package-armhf/Dockerfile.armhf | 40 -----
deployment/old/ubuntu-package-armhf/clean.sh | 27 ---
.../old/ubuntu-package-armhf/dependencies.txt | 1 -
.../old/ubuntu-package-armhf/docker-build.sh | 21 ---
deployment/old/ubuntu-package-armhf/package.sh | 45 -----
deployment/old/ubuntu-package-armhf/pkg-src | 1 -
deployment/old/ubuntu-package-x64/Dockerfile | 36 ----
deployment/old/ubuntu-package-x64/clean.sh | 27 ---
deployment/old/ubuntu-package-x64/dependencies.txt | 1 -
deployment/old/ubuntu-package-x64/docker-build.sh | 20 ---
deployment/old/ubuntu-package-x64/package.sh | 34 ----
deployment/old/ubuntu-package-x64/pkg-src | 1 -
deployment/old/unraid/docker-templates/README.md | 15 --
.../old/unraid/docker-templates/jellyfin.xml | 57 -------
deployment/old/win-x64/Dockerfile | 37 -----
deployment/old/win-x64/clean.sh | 27 ---
deployment/old/win-x64/dependencies.txt | 1 -
deployment/old/win-x64/docker-build.sh | 61 -------
deployment/old/win-x64/package.sh | 34 ----
deployment/old/win-x86/Dockerfile | 37 -----
deployment/old/win-x86/clean.sh | 27 ---
deployment/old/win-x86/dependencies.txt | 1 -
deployment/old/win-x86/docker-build.sh | 61 -------
deployment/old/win-x86/package.sh | 34 ----
110 files changed, 3207 deletions(-)
delete mode 100644 deployment/old/README.md
delete mode 100644 deployment/old/centos-package-x64/Dockerfile
delete mode 100755 deployment/old/centos-package-x64/clean.sh
delete mode 100644 deployment/old/centos-package-x64/dependencies.txt
delete mode 100755 deployment/old/centos-package-x64/docker-build.sh
delete mode 100755 deployment/old/centos-package-x64/package.sh
delete mode 120000 deployment/old/centos-package-x64/pkg-src
delete mode 100644 deployment/old/debian-package-arm64/Dockerfile.amd64
delete mode 100644 deployment/old/debian-package-arm64/Dockerfile.arm64
delete mode 100755 deployment/old/debian-package-arm64/clean.sh
delete mode 100644 deployment/old/debian-package-arm64/dependencies.txt
delete mode 100755 deployment/old/debian-package-arm64/docker-build.sh
delete mode 100755 deployment/old/debian-package-arm64/package.sh
delete mode 120000 deployment/old/debian-package-arm64/pkg-src
delete mode 100644 deployment/old/debian-package-armhf/Dockerfile.amd64
delete mode 100644 deployment/old/debian-package-armhf/Dockerfile.armhf
delete mode 100755 deployment/old/debian-package-armhf/clean.sh
delete mode 100644 deployment/old/debian-package-armhf/dependencies.txt
delete mode 100755 deployment/old/debian-package-armhf/docker-build.sh
delete mode 100755 deployment/old/debian-package-armhf/package.sh
delete mode 120000 deployment/old/debian-package-armhf/pkg-src
delete mode 100644 deployment/old/debian-package-x64/Dockerfile
delete mode 100755 deployment/old/debian-package-x64/clean.sh
delete mode 100644 deployment/old/debian-package-x64/dependencies.txt
delete mode 100755 deployment/old/debian-package-x64/docker-build.sh
delete mode 100755 deployment/old/debian-package-x64/package.sh
delete mode 100644 deployment/old/debian-package-x64/pkg-src/changelog
delete mode 100644 deployment/old/debian-package-x64/pkg-src/compat
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/logging.json
delete mode 100644 deployment/old/debian-package-x64/pkg-src/control
delete mode 100644 deployment/old/debian-package-x64/pkg-src/copyright
delete mode 100644 deployment/old/debian-package-x64/pkg-src/gbp.conf
delete mode 100644 deployment/old/debian-package-x64/pkg-src/install
delete mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.init
delete mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.service
delete mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
delete mode 100644 deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
delete mode 100644 deployment/old/debian-package-x64/pkg-src/po/templates.pot
delete mode 100644 deployment/old/debian-package-x64/pkg-src/postinst
delete mode 100644 deployment/old/debian-package-x64/pkg-src/postrm
delete mode 100644 deployment/old/debian-package-x64/pkg-src/preinst
delete mode 100644 deployment/old/debian-package-x64/pkg-src/prerm
delete mode 100755 deployment/old/debian-package-x64/pkg-src/rules
delete mode 100644 deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
delete mode 100644 deployment/old/debian-package-x64/pkg-src/source/format
delete mode 100644 deployment/old/debian-package-x64/pkg-src/source/options
delete mode 100644 deployment/old/fedora-package-x64/Dockerfile
delete mode 100755 deployment/old/fedora-package-x64/clean.sh
delete mode 100644 deployment/old/fedora-package-x64/dependencies.txt
delete mode 100755 deployment/old/fedora-package-x64/docker-build.sh
delete mode 100755 deployment/old/fedora-package-x64/package.sh
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/.gitignore
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/README.md
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.env
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.service
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
delete mode 100755 deployment/old/fedora-package-x64/pkg-src/restart.sh
delete mode 100644 deployment/old/linux-x64/Dockerfile
delete mode 100755 deployment/old/linux-x64/clean.sh
delete mode 100644 deployment/old/linux-x64/dependencies.txt
delete mode 100755 deployment/old/linux-x64/docker-build.sh
delete mode 100755 deployment/old/linux-x64/package.sh
delete mode 100644 deployment/old/macos/Dockerfile
delete mode 100755 deployment/old/macos/clean.sh
delete mode 100644 deployment/old/macos/dependencies.txt
delete mode 100755 deployment/old/macos/docker-build.sh
delete mode 100755 deployment/old/macos/package.sh
delete mode 100644 deployment/old/portable/Dockerfile
delete mode 100755 deployment/old/portable/clean.sh
delete mode 100644 deployment/old/portable/dependencies.txt
delete mode 100755 deployment/old/portable/docker-build.sh
delete mode 100755 deployment/old/portable/package.sh
delete mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.amd64
delete mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.arm64
delete mode 100755 deployment/old/ubuntu-package-arm64/clean.sh
delete mode 100644 deployment/old/ubuntu-package-arm64/dependencies.txt
delete mode 100755 deployment/old/ubuntu-package-arm64/docker-build.sh
delete mode 100755 deployment/old/ubuntu-package-arm64/package.sh
delete mode 120000 deployment/old/ubuntu-package-arm64/pkg-src
delete mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.amd64
delete mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.armhf
delete mode 100755 deployment/old/ubuntu-package-armhf/clean.sh
delete mode 100644 deployment/old/ubuntu-package-armhf/dependencies.txt
delete mode 100755 deployment/old/ubuntu-package-armhf/docker-build.sh
delete mode 100755 deployment/old/ubuntu-package-armhf/package.sh
delete mode 120000 deployment/old/ubuntu-package-armhf/pkg-src
delete mode 100644 deployment/old/ubuntu-package-x64/Dockerfile
delete mode 100755 deployment/old/ubuntu-package-x64/clean.sh
delete mode 100644 deployment/old/ubuntu-package-x64/dependencies.txt
delete mode 100755 deployment/old/ubuntu-package-x64/docker-build.sh
delete mode 100755 deployment/old/ubuntu-package-x64/package.sh
delete mode 120000 deployment/old/ubuntu-package-x64/pkg-src
delete mode 100644 deployment/old/unraid/docker-templates/README.md
delete mode 100644 deployment/old/unraid/docker-templates/jellyfin.xml
delete mode 100644 deployment/old/win-x64/Dockerfile
delete mode 100755 deployment/old/win-x64/clean.sh
delete mode 100644 deployment/old/win-x64/dependencies.txt
delete mode 100755 deployment/old/win-x64/docker-build.sh
delete mode 100755 deployment/old/win-x64/package.sh
delete mode 100644 deployment/old/win-x86/Dockerfile
delete mode 100755 deployment/old/win-x86/clean.sh
delete mode 100644 deployment/old/win-x86/dependencies.txt
delete mode 100755 deployment/old/win-x86/docker-build.sh
delete mode 100755 deployment/old/win-x86/package.sh
diff --git a/deployment/old/README.md b/deployment/old/README.md
deleted file mode 100644
index a805f59ca3..0000000000
--- a/deployment/old/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# 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 `, 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 `.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 `/pkg-dist` directory.
-
-* Output files will be moved to the directory `jellyfin-build/` one directory above the repository root upon completion.
diff --git a/deployment/old/centos-package-x64/Dockerfile b/deployment/old/centos-package-x64/Dockerfile
deleted file mode 100644
index 08219a2e4a..0000000000
--- a/deployment/old/centos-package-x64/Dockerfile
+++ /dev/null
@@ -1,39 +0,0 @@
-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
deleted file mode 100755
index 31455de0d4..0000000000
--- a/deployment/old/centos-package-x64/clean.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/centos-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/centos-package-x64/docker-build.sh b/deployment/old/centos-package-x64/docker-build.sh
deleted file mode 100755
index 62dd144e50..0000000000
--- a/deployment/old/centos-package-x64/docker-build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/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
deleted file mode 100755
index 1b983f49d9..0000000000
--- a/deployment/old/centos-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 120000
index 3ff4d3cbf5..0000000000
--- a/deployment/old/centos-package-x64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index b63e08b7dd..0000000000
--- a/deployment/old/debian-package-arm64/Dockerfile.amd64
+++ /dev/null
@@ -1,43 +0,0 @@
-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
deleted file mode 100644
index 9ca4868441..0000000000
--- a/deployment/old/debian-package-arm64/Dockerfile.arm64
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100755
index e7bfdf8b4b..0000000000
--- a/deployment/old/debian-package-arm64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/debian-package-arm64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/debian-package-arm64/docker-build.sh b/deployment/old/debian-package-arm64/docker-build.sh
deleted file mode 100755
index 67ab6bd74b..0000000000
--- a/deployment/old/debian-package-arm64/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index 2091982187..0000000000
--- a/deployment/old/debian-package-arm64/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/old/debian-package-arm64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index 1b64b53148..0000000000
--- a/deployment/old/debian-package-armhf/Dockerfile.amd64
+++ /dev/null
@@ -1,42 +0,0 @@
-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
deleted file mode 100644
index dd398b5aa5..0000000000
--- a/deployment/old/debian-package-armhf/Dockerfile.armhf
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100755
index 35a3d3e9ad..0000000000
--- a/deployment/old/debian-package-armhf/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/debian-package-armhf/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/debian-package-armhf/docker-build.sh b/deployment/old/debian-package-armhf/docker-build.sh
deleted file mode 100755
index 1bd7fb2911..0000000000
--- a/deployment/old/debian-package-armhf/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index 4a27dd8283..0000000000
--- a/deployment/old/debian-package-armhf/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 0bb6d55249..0000000000
--- a/deployment/old/debian-package-armhf/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index e863d1edf9..0000000000
--- a/deployment/old/debian-package-x64/Dockerfile
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100755
index 4e507bcb27..0000000000
--- a/deployment/old/debian-package-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/debian-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/debian-package-x64/docker-build.sh b/deployment/old/debian-package-x64/docker-build.sh
deleted file mode 100755
index 962a522ebc..0000000000
--- a/deployment/old/debian-package-x64/docker-build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/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
deleted file mode 100755
index 5a416959ab..0000000000
--- a/deployment/old/debian-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index 51c4822370..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/changelog
+++ /dev/null
@@ -1,59 +0,0 @@
-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 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 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 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 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 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 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 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 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 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 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
deleted file mode 100644
index 45a4fb75db..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/compat
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin
deleted file mode 100644
index c6e595f15a..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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
deleted file mode 100644
index b481ba4ad4..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
+++ /dev/null
@@ -1,37 +0,0 @@
-#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
deleted file mode 100644
index 1b69dd74ef..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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
deleted file mode 100644
index f32b2089eb..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/logging.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "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
deleted file mode 100644
index 13fd3ecabb..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/control
+++ /dev/null
@@ -1,31 +0,0 @@
-Source: jellyfin
-Section: misc
-Priority: optional
-Maintainer: Jellyfin Team
-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
deleted file mode 100644
index 0d7a2a6007..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/copyright
+++ /dev/null
@@ -1,29 +0,0 @@
-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
-Copyright: 2014 Carlos Hernandez
-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
- .
- 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
deleted file mode 100644
index 60b3d28723..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/gbp.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-[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
deleted file mode 100644
index 994322d141..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/install
+++ /dev/null
@@ -1,6 +0,0 @@
-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
deleted file mode 100644
index 7f5642bac1..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/jellyfin.init
+++ /dev/null
@@ -1,61 +0,0 @@
-### 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
deleted file mode 100644
index 1305e238b0..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/jellyfin.service
+++ /dev/null
@@ -1,14 +0,0 @@
-[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
deleted file mode 100644
index ef5bc9bcaf..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index cef83a3407..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
+++ /dev/null
@@ -1 +0,0 @@
-[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
deleted file mode 100644
index 2cdcae4173..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/po/templates.pot
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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 , 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 \n"
-"Language-Team: LANGUAGE \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
deleted file mode 100644
index 860222e051..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/postinst
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/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
deleted file mode 100644
index 1d00a984ec..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/postrm
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/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
deleted file mode 100644
index 2713fb9b80..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/preinst
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/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
deleted file mode 100644
index e965cb7d71..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/prerm
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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
deleted file mode 100755
index c2d57dfb22..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/rules
+++ /dev/null
@@ -1,66 +0,0 @@
-#! /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
deleted file mode 100644
index aeb332f13a..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
+++ /dev/null
@@ -1,3 +0,0 @@
-# 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
deleted file mode 100644
index d3827e75a5..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/source/format
+++ /dev/null
@@ -1 +0,0 @@
-1.0
diff --git a/deployment/old/debian-package-x64/pkg-src/source/options b/deployment/old/debian-package-x64/pkg-src/source/options
deleted file mode 100644
index 17b5373d5e..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/source/options
+++ /dev/null
@@ -1,11 +0,0 @@
-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
deleted file mode 100644
index 87120f3a05..0000000000
--- a/deployment/old/fedora-package-x64/Dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-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
deleted file mode 100755
index 700c8f1bb3..0000000000
--- a/deployment/old/fedora-package-x64/clean.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/fedora-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/fedora-package-x64/docker-build.sh b/deployment/old/fedora-package-x64/docker-build.sh
deleted file mode 100755
index 740e8d35ca..0000000000
--- a/deployment/old/fedora-package-x64/docker-build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/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
deleted file mode 100755
index ae6962dd1f..0000000000
--- a/deployment/old/fedora-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index 6019b98c22..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.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
deleted file mode 100644
index 7ed6f7efc6..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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
deleted file mode 100644
index 538c5d65f8..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- Jellyfin
- The Free Software Media System.
-
-
-
-
-
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.env b/deployment/old/fedora-package-x64/pkg-src/jellyfin.env
deleted file mode 100644
index de48f13af5..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.env
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
deleted file mode 100644
index 8652450bb4..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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
deleted file mode 100644
index f3dc594b1c..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[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
deleted file mode 100644
index 33c6f6f648..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
+++ /dev/null
@@ -1,181 +0,0 @@
-%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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
deleted file mode 100644
index dd245af4b8..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
+++ /dev/null
@@ -1,19 +0,0 @@
-# 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
deleted file mode 100755
index 9b64b6d728..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/restart.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100644
index c47057546d..0000000000
--- a/deployment/old/linux-x64/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/old/linux-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/linux-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/linux-x64/docker-build.sh b/deployment/old/linux-x64/docker-build.sh
deleted file mode 100755
index e33328a36a..0000000000
--- a/deployment/old/linux-x64/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100755
index dfe8a9aa4a..0000000000
--- a/deployment/old/linux-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index b522df8848..0000000000
--- a/deployment/old/macos/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/old/macos/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/macos/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/macos/docker-build.sh b/deployment/old/macos/docker-build.sh
deleted file mode 100755
index f9417388d7..0000000000
--- a/deployment/old/macos/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100755
index 464c0d382f..0000000000
--- a/deployment/old/macos/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index 965eb82b86..0000000000
--- a/deployment/old/portable/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/old/portable/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/portable/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/portable/docker-build.sh b/deployment/old/portable/docker-build.sh
deleted file mode 100755
index 094190bbf6..0000000000
--- a/deployment/old/portable/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100755
index 0ceb54dda1..0000000000
--- a/deployment/old/portable/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index b11994a18a..0000000000
--- a/deployment/old/ubuntu-package-arm64/Dockerfile.amd64
+++ /dev/null
@@ -1,59 +0,0 @@
-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
deleted file mode 100644
index 8f004b2f1a..0000000000
--- a/deployment/old/ubuntu-package-arm64/Dockerfile.arm64
+++ /dev/null
@@ -1,40 +0,0 @@
-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
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/old/ubuntu-package-arm64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/ubuntu-package-arm64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/ubuntu-package-arm64/docker-build.sh b/deployment/old/ubuntu-package-arm64/docker-build.sh
deleted file mode 100755
index 67ab6bd74b..0000000000
--- a/deployment/old/ubuntu-package-arm64/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index d1140a7274..0000000000
--- a/deployment/old/ubuntu-package-arm64/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/old/ubuntu-package-arm64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index e475b14389..0000000000
--- a/deployment/old/ubuntu-package-armhf/Dockerfile.amd64
+++ /dev/null
@@ -1,59 +0,0 @@
-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
deleted file mode 100644
index 0e71fa6938..0000000000
--- a/deployment/old/ubuntu-package-armhf/Dockerfile.armhf
+++ /dev/null
@@ -1,40 +0,0 @@
-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
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/old/ubuntu-package-armhf/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/ubuntu-package-armhf/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/ubuntu-package-armhf/docker-build.sh b/deployment/old/ubuntu-package-armhf/docker-build.sh
deleted file mode 100755
index 1bd7fb2911..0000000000
--- a/deployment/old/ubuntu-package-armhf/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index 2ceb3e8165..0000000000
--- a/deployment/old/ubuntu-package-armhf/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/old/ubuntu-package-armhf/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index e2dda6392c..0000000000
--- a/deployment/old/ubuntu-package-x64/Dockerfile
+++ /dev/null
@@ -1,36 +0,0 @@
-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
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/old/ubuntu-package-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/ubuntu-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/ubuntu-package-x64/docker-build.sh b/deployment/old/ubuntu-package-x64/docker-build.sh
deleted file mode 100755
index 962a522ebc..0000000000
--- a/deployment/old/ubuntu-package-x64/docker-build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/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
deleted file mode 100755
index 08c003778b..0000000000
--- a/deployment/old/ubuntu-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 120000
index 0bb6d55249..0000000000
--- a/deployment/old/ubuntu-package-x64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index 2c268e8b3e..0000000000
--- a/deployment/old/unraid/docker-templates/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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
deleted file mode 100644
index 57b4cc5ae1..0000000000
--- a/deployment/old/unraid/docker-templates/jellyfin.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml
- False
- MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos
- Jellyfin
-
- 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.
-
-
- 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!
-
- https://www.reddit.com/r/jellyfin/
- https://hub.docker.com/r/jellyfin/jellyfin/
- https://github.com/jellyfin/jellyfin/>
- jellyfin/jellyfin
- https://jellyfin.media/
- true
- false
-
- host
-
-
- 8096
- 8096
- tcp
-
-
-
-
-
- /mnt/user/appdata/Jellyfin
- /config
- rw
-
-
- /mnt/user
- /media
- rw
-
-
- /mnt/user/appdata/Jellyfin/cache/
- /cache
- rw
-
-
- http://[IP]:[PORT:8096]/
- https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png
-
-
diff --git a/deployment/old/win-x64/Dockerfile b/deployment/old/win-x64/Dockerfile
deleted file mode 100644
index 8a33749541..0000000000
--- a/deployment/old/win-x64/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index 6c183f3371..0000000000
--- a/deployment/old/win-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/win-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/win-x64/docker-build.sh b/deployment/old/win-x64/docker-build.sh
deleted file mode 100755
index 79e5fb0bcd..0000000000
--- a/deployment/old/win-x64/docker-build.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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
deleted file mode 100755
index a8ab190fa5..0000000000
--- a/deployment/old/win-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index f8dc5be83d..0000000000
--- a/deployment/old/win-x86/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index 8b78c5e4b6..0000000000
--- a/deployment/old/win-x86/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/win-x86/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/win-x86/docker-build.sh b/deployment/old/win-x86/docker-build.sh
deleted file mode 100755
index 977dcf78fa..0000000000
--- a/deployment/old/win-x86/docker-build.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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
deleted file mode 100755
index 65e7e2928c..0000000000
--- a/deployment/old/win-x86/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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}"
--
cgit v1.2.3
From cd616746b9ec4c1e07b84e207104bad01c614dae Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Tue, 24 Mar 2020 11:17:01 -0400
Subject: Use more specific mv source glob
---
deployment/build.debian.amd64 | 2 +-
deployment/build.debian.arm64 | 2 +-
deployment/build.debian.armhf | 2 +-
deployment/build.ubuntu.amd64 | 2 +-
deployment/build.ubuntu.arm64 | 2 +-
deployment/build.ubuntu.armhf | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/deployment/build.debian.amd64 b/deployment/build.debian.amd64
index beaf02bee2..f44c6a7d1d 100755
--- a/deployment/build.debian.amd64
+++ b/deployment/build.debian.amd64
@@ -18,7 +18,7 @@ fi
dpkg-buildpackage -us -uc --pre-clean --post-clean
mkdir -p ${ARTIFACT_DIR}/
-mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
cp -a /tmp/control.orig debian/control
diff --git a/deployment/build.debian.arm64 b/deployment/build.debian.arm64
index 6394dddb02..0127671f3d 100755
--- a/deployment/build.debian.arm64
+++ b/deployment/build.debian.arm64
@@ -19,7 +19,7 @@ export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
dpkg-buildpackage -us -uc -a arm64 --pre-clean --post-clean
mkdir -p ${ARTIFACT_DIR}/
-mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
cp -a /tmp/control.orig debian/control
diff --git a/deployment/build.debian.armhf b/deployment/build.debian.armhf
index d12660760f..02e3db4fca 100755
--- a/deployment/build.debian.armhf
+++ b/deployment/build.debian.armhf
@@ -19,7 +19,7 @@ export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
dpkg-buildpackage -us -uc -a armhf --pre-clean --post-clean
mkdir -p ${ARTIFACT_DIR}/
-mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
cp -a /tmp/control.orig debian/control
diff --git a/deployment/build.ubuntu.amd64 b/deployment/build.ubuntu.amd64
index 1b90f68f46..107ddbe02d 100755
--- a/deployment/build.ubuntu.amd64
+++ b/deployment/build.ubuntu.amd64
@@ -18,7 +18,7 @@ fi
dpkg-buildpackage -us -uc --pre-clean --post-clean
mkdir -p ${ARTIFACT_DIR}/
-mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
cp -a /tmp/control.orig debian/control
diff --git a/deployment/build.ubuntu.arm64 b/deployment/build.ubuntu.arm64
index c0a31d764f..b13868f44b 100755
--- a/deployment/build.ubuntu.arm64
+++ b/deployment/build.ubuntu.arm64
@@ -19,7 +19,7 @@ export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
dpkg-buildpackage -us -uc -a arm64 --pre-clean --post-clean
mkdir -p ${ARTIFACT_DIR}/
-mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
cp -a /tmp/control.orig debian/control
diff --git a/deployment/build.ubuntu.armhf b/deployment/build.ubuntu.armhf
index e2129357dd..0b4dd308a2 100755
--- a/deployment/build.ubuntu.armhf
+++ b/deployment/build.ubuntu.armhf
@@ -19,7 +19,7 @@ export CONFIG_SITE=/etc/dpkg-cross/cross-config.${ARCH}
dpkg-buildpackage -us -uc -a armhf --pre-clean --post-clean
mkdir -p ${ARTIFACT_DIR}/
-mv ../jellyfin[-_]* ${ARTIFACT_DIR}/
+mv ../jellyfin*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
if [[ ${IS_DOCKER} == YES ]]; then
cp -a /tmp/control.orig debian/control
--
cgit v1.2.3
From 8094687b9c589038ce87879c51785cd63c8ef8ac Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 30 Mar 2020 02:40:06 -0400
Subject: Add Debian/Ubuntu metapackage equivs file
---
debian/metapackage/jellyfin | 13 +++++++++++++
1 file changed, 13 insertions(+)
create mode 100644 debian/metapackage/jellyfin
diff --git a/debian/metapackage/jellyfin b/debian/metapackage/jellyfin
new file mode 100644
index 0000000000..9a41eafaed
--- /dev/null
+++ b/debian/metapackage/jellyfin
@@ -0,0 +1,13 @@
+Source: jellyfin
+Section: misc
+Priority: optional
+Homepage: https://jellyfin.org
+Standards-Version: 3.9.2
+
+Package: jellyfin
+Version: 10.6.0
+Maintainer: Jellyfin Packaging Team
+Depends: jellyfin-server, jellyfin-web
+Description: Provides the Jellyfin Free Software Media System
+ Provides the full Jellyfin experience, including both the server and web interface.
+
--
cgit v1.2.3
From 49da8766d8aac23ab6f6c64a4fee1885b04918f3 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Mon, 30 Mar 2020 02:43:13 -0400
Subject: Update bump_version script
1. Remove some cruft
2. Update the metapackage as well
3. Changelogs are automated, don't bother EDITOR-ing them
---
bump_version | 32 ++++++++------------------------
1 file changed, 8 insertions(+), 24 deletions(-)
diff --git a/bump_version b/bump_version
index 106dd7a78e..c868c541e6 100755
--- a/bump_version
+++ b/bump_version
@@ -10,10 +10,6 @@ usage() {
echo -e ""
echo -e "Usage:"
echo -e " $ bump_version "
- echo -e ""
- echo -e "The web_branch defaults to the same branch name as the current main branch."
- echo -e "This helps facilitate releases where both branches would be called release-X.Y.Z"
- echo -e "and would already be created before running this script."
}
if [[ -z $1 ]]; then
@@ -54,37 +50,28 @@ else
new_version_deb="${new_version}-1"
fi
-# Set the Dockerfile web version to the specified new_version
-old_version="$(
- grep "JELLYFIN_WEB_VERSION=" Dockerfile \
- | sed -E 's/ARG JELLYFIN_WEB_VERSION=v([0-9\.]+[-a-z0-9]*)/\1/'
-)"
-echo $old_version
-
-old_version_sed="$( sed 's/\./\\./g' <<<"${old_version}" )" # Escape the '.' chars
-sed -i "s/${old_version_sed}/${new_version}/g" Dockerfile*
+# Update the metapackage equivs file
+debian_equivs_file="debian/metapackage/jellyfin"
+sed -i "s/${old_version_sed}/${new_version}/g" ${debian_equivs_file}
# Write out a temporary Debian changelog with our new stuff appended and some templated formatting
-debian_changelog_file="deployment/debian-package-x64/pkg-src/changelog"
+debian_changelog_file="debian/changelog"
debian_changelog_temp="$( mktemp )"
# Create new temp file with our changelog
-echo -e "### DEBIAN PACKAGE CHANGELOG: Verify this file looks correct or edit accordingly, then delete this line, write, and exit.
-jellyfin (${new_version_deb}) unstable; urgency=medium
+echo -e "jellyfin (${new_version_deb}) unstable; urgency=medium
* New upstream version ${new_version}; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v${new_version}
-- Jellyfin Packaging Team $( date --rfc-2822 )
" >> ${debian_changelog_temp}
cat ${debian_changelog_file} >> ${debian_changelog_temp}
-# Edit the file to verify
-$EDITOR ${debian_changelog_temp}
# Move into place
mv ${debian_changelog_temp} ${debian_changelog_file}
# Clean up
rm -f ${debian_changelog_temp}
# Write out a temporary Yum changelog with our new stuff prepended and some templated formatting
-fedora_spec_file="deployment/fedora-package-x64/pkg-src/jellyfin.spec"
+fedora_spec_file="fedora/jellyfin.spec"
fedora_changelog_temp="$( mktemp )"
fedora_spec_temp_dir="$( mktemp -d )"
fedora_spec_temp="${fedora_spec_temp_dir}/jellyfin.spec.tmp"
@@ -98,13 +85,10 @@ sed -i "s/${old_version_sed}/${new_version_sed}/g" xx00
# Remove the header from xx01
sed -i '/^%changelog/d' xx01
# Create new temp file with our changelog
-echo -e "### YUM SPEC CHANGELOG: Verify this file looks correct or edit accordingly, then delete this line, write, and exit.
-%changelog
+echo -e "%changelog
* $( LANG=C date '+%a %b %d %Y' ) Jellyfin Packaging Team
- New upstream version ${new_version}; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v${new_version}" >> ${fedora_changelog_temp}
cat xx01 >> ${fedora_changelog_temp}
-# Edit the file to verify
-$EDITOR ${fedora_changelog_temp}
# Reassembble
cat xx00 ${fedora_changelog_temp} > ${fedora_spec_temp}
popd
@@ -114,5 +98,5 @@ mv ${fedora_spec_temp} ${fedora_spec_file}
rm -rf ${fedora_changelog_temp} ${fedora_spec_temp_dir}
# Stage the changed files for commit
-git add ${shared_version_file} ${build_file} ${debian_changelog_file} ${fedora_spec_file} Dockerfile*
+git add ${shared_version_file} ${build_file} ${debian_equivs_file} ${debian_changelog_file} ${fedora_spec_file}
git status
--
cgit v1.2.3
From e85f9f5613c009a47c9b59ac59cd5930fc45d96a Mon Sep 17 00:00:00 2001
From: Vasily
Date: Tue, 7 Apr 2020 18:41:15 +0300
Subject: Make localhost LiveTV restreams always use plain HTTP port
---
Emby.Server.Implementations/ApplicationHost.cs | 17 +++++++++--------
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs | 2 +-
.../LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs | 2 +-
.../LiveTv/TunerHosts/SharedHttpStream.cs | 2 +-
MediaBrowser.Controller/IServerApplicationHost.cs | 10 +++++++---
5 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs
index cb32b8c01b..9af89112c5 100644
--- a/Emby.Server.Implementations/ApplicationHost.cs
+++ b/Emby.Server.Implementations/ApplicationHost.cs
@@ -1419,7 +1419,7 @@ namespace Emby.Server.Implementations
public bool SupportsHttps => Certificate != null || ServerConfigurationManager.Configuration.IsBehindProxy;
- public async Task GetLocalApiUrl(CancellationToken cancellationToken)
+ public async Task GetLocalApiUrl(CancellationToken cancellationToken, bool forceHttp=false)
{
try
{
@@ -1428,7 +1428,7 @@ namespace Emby.Server.Implementations
foreach (var address in addresses)
{
- return GetLocalApiUrl(address);
+ return GetLocalApiUrl(address, forceHttp);
}
return null;
@@ -1458,7 +1458,7 @@ namespace Emby.Server.Implementations
}
///
- public string GetLocalApiUrl(IPAddress ipAddress)
+ public string GetLocalApiUrl(IPAddress ipAddress, bool forceHttp=false)
{
if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
{
@@ -1468,20 +1468,21 @@ namespace Emby.Server.Implementations
str.CopyTo(span.Slice(1));
span[^1] = ']';
- return GetLocalApiUrl(span);
+ return GetLocalApiUrl(span, forceHttp);
}
- return GetLocalApiUrl(ipAddress.ToString());
+ return GetLocalApiUrl(ipAddress.ToString(), forceHttp);
}
///
- public string GetLocalApiUrl(ReadOnlySpan host)
+ public string GetLocalApiUrl(ReadOnlySpan host, bool forceHttp=false)
{
var url = new StringBuilder(64);
- url.Append(EnableHttps ? "https://" : "http://")
+ bool useHttps = EnableHttps && !forceHttp;
+ url.Append(useHttps ? "https://" : "http://")
.Append(host)
.Append(':')
- .Append(EnableHttps ? HttpsPort : HttpPort);
+ .Append(useHttps ? HttpsPort : HttpPort);
string baseUrl = ServerConfigurationManager.Configuration.BaseUrl;
if (baseUrl.Length != 0)
diff --git a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
index 139aa19a4b..409917245f 100644
--- a/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
+++ b/Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs
@@ -1062,7 +1062,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
{
var stream = new MediaSourceInfo
{
- EncoderPath = _appHost.GetLocalApiUrl("127.0.0.1") + "/LiveTv/LiveRecordings/" + info.Id + "/stream",
+ EncoderPath = _appHost.GetLocalApiUrl("127.0.0.1", true) + "/LiveTv/LiveRecordings/" + info.Id + "/stream",
EncoderProtocol = MediaProtocol.Http,
Path = info.Path,
Protocol = MediaProtocol.File,
diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs
index 03ee5bfb65..d89a816b3b 100644
--- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs
+++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs
@@ -121,7 +121,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
//OpenedMediaSource.Path = tempFile;
//OpenedMediaSource.ReadAtNativeFramerate = true;
- MediaSource.Path = _appHost.GetLocalApiUrl("127.0.0.1") + "/LiveTv/LiveStreamFiles/" + UniqueId + "/stream.ts";
+ MediaSource.Path = _appHost.GetLocalApiUrl("127.0.0.1", true) + "/LiveTv/LiveStreamFiles/" + UniqueId + "/stream.ts";
MediaSource.Protocol = MediaProtocol.Http;
//OpenedMediaSource.SupportsDirectPlay = false;
//OpenedMediaSource.SupportsDirectStream = true;
diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs
index d63588bbd1..0e600202aa 100644
--- a/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs
+++ b/Emby.Server.Implementations/LiveTv/TunerHosts/SharedHttpStream.cs
@@ -106,7 +106,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
//OpenedMediaSource.Path = tempFile;
//OpenedMediaSource.ReadAtNativeFramerate = true;
- MediaSource.Path = _appHost.GetLocalApiUrl("127.0.0.1") + "/LiveTv/LiveStreamFiles/" + UniqueId + "/stream.ts";
+ MediaSource.Path = _appHost.GetLocalApiUrl("127.0.0.1", true) + "/LiveTv/LiveStreamFiles/" + UniqueId + "/stream.ts";
MediaSource.Protocol = MediaProtocol.Http;
//OpenedMediaSource.Path = TempFilePath;
diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs
index 608ffc61c2..09f6cb0431 100644
--- a/MediaBrowser.Controller/IServerApplicationHost.cs
+++ b/MediaBrowser.Controller/IServerApplicationHost.cs
@@ -65,22 +65,26 @@ namespace MediaBrowser.Controller
///
/// Gets the local API URL.
///
+ /// Token to cancel the request if needed.
+ /// Whether to force usage of plain HTTP protocol.
/// The local API URL.
- Task GetLocalApiUrl(CancellationToken cancellationToken);
+ Task GetLocalApiUrl(CancellationToken cancellationToken, bool forceHttp=false);
///
/// Gets the local API URL.
///
/// The hostname.
+ /// Whether to force usage of plain HTTP protocol.
/// The local API URL.
- string GetLocalApiUrl(ReadOnlySpan hostname);
+ string GetLocalApiUrl(ReadOnlySpan hostname, bool forceHttp=false);
///
/// Gets the local API URL.
///
/// The IP address.
+ /// Whether to force usage of plain HTTP protocol.
/// The local API URL.
- string GetLocalApiUrl(IPAddress address);
+ string GetLocalApiUrl(IPAddress address, bool forceHttp=false);
///
/// Open a URL in an external browser window.
--
cgit v1.2.3
From 626d4dab1062050cca8b4755c79da498f4fed0b7 Mon Sep 17 00:00:00 2001
From: Vasily
Date: Wed, 8 Apr 2020 13:41:11 +0300
Subject: Make sure Jellyfin listens on localhost no matter what This is needed
by LiveTV
---
Jellyfin.Server/Program.cs | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/Jellyfin.Server/Program.cs b/Jellyfin.Server/Program.cs
index e55b0d4ed9..efb049a5bb 100644
--- a/Jellyfin.Server/Program.cs
+++ b/Jellyfin.Server/Program.cs
@@ -267,9 +267,15 @@ namespace Jellyfin.Server
.LocalNetworkAddresses
.Select(appHost.NormalizeConfiguredLocalAddress)
.Where(i => i != null)
- .ToList();
- if (addresses.Any())
+ .ToHashSet();
+ if (addresses.Any() && !addresses.Contains(IPAddress.Any))
{
+ if (!addresses.Contains(IPAddress.Loopback))
+ {
+ // we must listen on loopback for LiveTV to function regardless of the settings
+ addresses.Add(IPAddress.Loopback);
+ }
+
foreach (var address in addresses)
{
_logger.LogInformation("Kestrel listening on {IpAddress}", address);
--
cgit v1.2.3
From 9eab678487e107939e206ec66b0f573463486082 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:17:38 -0400
Subject: Improve Fedora spec and add metapackage
---
fedora/jellyfin.spec | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/fedora/jellyfin.spec b/fedora/jellyfin.spec
index c15b4ee957..4071babcdc 100644
--- a/fedora/jellyfin.spec
+++ b/fedora/jellyfin.spec
@@ -6,10 +6,10 @@
%global dotnet_runtime centos-x64
%endif
-Name: jellyfin-server
+Name: jellyfin
Version: 10.6.0
Release: 1%{?dist}
-Summary: The Free Software Media System Server backend and API
+Summary: The Free Software Media System
License: GPLv3
URL: https://jellyfin.media
# Jellyfin Server tarball created by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
@@ -23,22 +23,27 @@ 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
-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
-
+Requires: %{name}-server = %{version}-%{release}, %{name}-web >= 1, %{name}-web < 2
# 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.
+%package server
+# RPMfusion free
+Summary: The Free Software Media System Server backend
+Requires(pre): shadow-utils
+Requires: ffmpeg
+Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
+
+%description server
+The Jellyfin media server backend.
%prep
%autosetup -n jellyfin-server-%{version} -b 0
@@ -69,7 +74,7 @@ EOF
%{__install} -D -m 0755 %{SOURCE14} %{buildroot}%{_libexecdir}/jellyfin/restart.sh
%{__install} -D -m 0644 %{SOURCE16} %{buildroot}%{_prefix}/lib/firewalld/services/jellyfin.xml
-%files
+%files server
%attr(755,root,root) %{_bindir}/jellyfin
%{_libdir}/jellyfin/*.json
%{_libdir}/jellyfin/*.dll
@@ -92,14 +97,14 @@ EOF
%attr(750,jellyfin,jellyfin) %dir %{_var}/cache/jellyfin
%{_datadir}/licenses/jellyfin/LICENSE
-%pre
+%pre server
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
+%post server
# 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)
@@ -127,10 +132,10 @@ if [ $1 -gt 1 ] ; then
fi
%systemd_post jellyfin.service
-%preun
+%preun server
%systemd_preun jellyfin.service
-%postun
+%postun server
%systemd_postun_with_restart jellyfin.service
%changelog
--
cgit v1.2.3
From c10df2fe85e06efb509a889bd7aae8ab5dc3a512 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:33:22 -0400
Subject: Improve dpkg handling in build.sh
---
build.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/build.sh b/build.sh
index 86c8447933..b4792a25ed 100755
--- a/build.sh
+++ b/build.sh
@@ -34,7 +34,7 @@ list_platforms() {
}
do_build_native() {
- if [[ $( dpkg --print-architecture | head -1 ) != "${PLATFORM##*.}" ]]; then
+ if [[ -f $( which dpkg ) && $( dpkg --print-architecture | head -1 ) != "${PLATFORM##*.}" ]]; then
echo "Cross-building is not supported for native builds, use 'docker' builds on amd64 for cross-building."
exit 1
fi
@@ -43,7 +43,7 @@ do_build_native() {
}
do_build_docker() {
- if ! dpkg --print-architecture | grep -q 'amd64'; then
+ if [[ -f $( which dpkg ) && $( dpkg --print-architecture | head -1 ) != "amd64" ]]; then
echo "Docker-based builds only support amd64-based cross-building; use a 'native' build instead."
exit 1
fi
--
cgit v1.2.3
From 529a9ae544dfd804466d852d3c9babf1a660a1eb Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:37:00 -0400
Subject: Don't remove already-moved files
---
bump_version | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/bump_version b/bump_version
index c868c541e6..46b7f86e05 100755
--- a/bump_version
+++ b/bump_version
@@ -67,8 +67,6 @@ echo -e "jellyfin (${new_version_deb}) unstable; urgency=medium
cat ${debian_changelog_file} >> ${debian_changelog_temp}
# Move into place
mv ${debian_changelog_temp} ${debian_changelog_file}
-# Clean up
-rm -f ${debian_changelog_temp}
# Write out a temporary Yum changelog with our new stuff prepended and some templated formatting
fedora_spec_file="fedora/jellyfin.spec"
@@ -95,7 +93,7 @@ popd
# Move into place
mv ${fedora_spec_temp} ${fedora_spec_file}
# Clean up
-rm -rf ${fedora_changelog_temp} ${fedora_spec_temp_dir}
+rm -rf ${fedora_spec_temp_dir}
# Stage the changed files for commit
git add ${shared_version_file} ${build_file} ${debian_equivs_file} ${debian_changelog_file} ${fedora_spec_file}
--
cgit v1.2.3
From b0e80b486b5a5047f78afd1f680b354daed94542 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:40:04 -0400
Subject: Use jellyfin.org everywhere
---
Emby.Notifications/NotificationEntryPoint.cs | 2 +-
debian/control | 2 +-
fedora/jellyfin.spec | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/Emby.Notifications/NotificationEntryPoint.cs b/Emby.Notifications/NotificationEntryPoint.cs
index befecc570b..869b7407e2 100644
--- a/Emby.Notifications/NotificationEntryPoint.cs
+++ b/Emby.Notifications/NotificationEntryPoint.cs
@@ -143,7 +143,7 @@ namespace Emby.Notifications
var notification = new NotificationRequest
{
- Description = "Please see jellyfin.media for details.",
+ Description = "Please see jellyfin.org for details.",
NotificationType = type,
Name = _localization.GetLocalizedString("NewVersionIsAvailable")
};
diff --git a/debian/control b/debian/control
index 648e28ae81..5559700cf5 100644
--- a/debian/control
+++ b/debian/control
@@ -10,7 +10,7 @@ Build-Depends: debhelper (>= 9),
libfreetype6-dev,
libssl-dev
Standards-Version: 3.9.4
-Homepage: https://jellyfin.media/
+Homepage: https://jellyfin.org/
Vcs-Git: https://github.org/jellyfin/jellyfin.git
Vcs-Browser: https://github.org/jellyfin/jellyfin
diff --git a/fedora/jellyfin.spec b/fedora/jellyfin.spec
index 4071babcdc..4e1045d740 100644
--- a/fedora/jellyfin.spec
+++ b/fedora/jellyfin.spec
@@ -11,7 +11,7 @@ Version: 10.6.0
Release: 1%{?dist}
Summary: The Free Software Media System
License: GPLv3
-URL: https://jellyfin.media
+URL: https://jellyfin.org
# Jellyfin Server tarball created by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
Source0: jellyfin-server-%{version}.tar.gz
Source11: jellyfin.service
--
cgit v1.2.3
From 406d087a465dd62ad376124fcb53692b1f666aef Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:46:16 -0400
Subject: Correct ARCH var in Ubuntu Dockerfiles
---
deployment/Dockerfile.ubuntu.arm64 | 2 +-
deployment/Dockerfile.ubuntu.armhf | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/deployment/Dockerfile.ubuntu.arm64 b/deployment/Dockerfile.ubuntu.arm64
index e34ef7edd1..f91b91cd46 100644
--- a/deployment/Dockerfile.ubuntu.arm64
+++ b/deployment/Dockerfile.ubuntu.arm64
@@ -7,7 +7,7 @@ ARG SDK_VERSION=3.1
ENV SOURCE_DIR=/jellyfin
ENV ARTIFACT_DIR=/dist
ENV DEB_BUILD_OPTIONS=noddebs
-ENV ARCH=arm64
+ENV ARCH=amd64
ENV IS_DOCKER=YES
# Prepare Debian build environment
diff --git a/deployment/Dockerfile.ubuntu.armhf b/deployment/Dockerfile.ubuntu.armhf
index 6f92c81ab1..85414614c0 100644
--- a/deployment/Dockerfile.ubuntu.armhf
+++ b/deployment/Dockerfile.ubuntu.armhf
@@ -7,7 +7,7 @@ ARG SDK_VERSION=3.1
ENV SOURCE_DIR=/jellyfin
ENV ARTIFACT_DIR=/dist
ENV DEB_BUILD_OPTIONS=noddebs
-ENV ARCH=armhf
+ENV ARCH=amd64
ENV IS_DOCKER=YES
# Prepare Debian build environment
--
cgit v1.2.3
From ed735522cfd4ab8edfd7be2e4f6ce52856eb43cd Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:49:14 -0400
Subject: Revert "Remove old stuff"
This reverts commit b9fdd96ece39a6ff0f4ff37ecba36d7a0f65fcba.
---
deployment/old/README.md | 62 +++++++
deployment/old/centos-package-x64/Dockerfile | 39 +++++
deployment/old/centos-package-x64/clean.sh | 32 ++++
deployment/old/centos-package-x64/dependencies.txt | 1 +
deployment/old/centos-package-x64/docker-build.sh | 18 ++
deployment/old/centos-package-x64/package.sh | 34 ++++
deployment/old/centos-package-x64/pkg-src | 1 +
.../old/debian-package-arm64/Dockerfile.amd64 | 43 +++++
.../old/debian-package-arm64/Dockerfile.arm64 | 34 ++++
deployment/old/debian-package-arm64/clean.sh | 27 +++
.../old/debian-package-arm64/dependencies.txt | 1 +
.../old/debian-package-arm64/docker-build.sh | 21 +++
deployment/old/debian-package-arm64/package.sh | 45 +++++
deployment/old/debian-package-arm64/pkg-src | 1 +
.../old/debian-package-armhf/Dockerfile.amd64 | 42 +++++
.../old/debian-package-armhf/Dockerfile.armhf | 34 ++++
deployment/old/debian-package-armhf/clean.sh | 27 +++
.../old/debian-package-armhf/dependencies.txt | 1 +
.../old/debian-package-armhf/docker-build.sh | 21 +++
deployment/old/debian-package-armhf/package.sh | 45 +++++
deployment/old/debian-package-armhf/pkg-src | 1 +
deployment/old/debian-package-x64/Dockerfile | 34 ++++
deployment/old/debian-package-x64/clean.sh | 27 +++
deployment/old/debian-package-x64/dependencies.txt | 1 +
deployment/old/debian-package-x64/docker-build.sh | 20 +++
deployment/old/debian-package-x64/package.sh | 34 ++++
.../old/debian-package-x64/pkg-src/changelog | 59 +++++++
deployment/old/debian-package-x64/pkg-src/compat | 1 +
.../old/debian-package-x64/pkg-src/conf/jellyfin | 40 +++++
.../pkg-src/conf/jellyfin-sudoers | 37 +++++
.../pkg-src/conf/jellyfin.service.conf | 7 +
.../debian-package-x64/pkg-src/conf/logging.json | 30 ++++
deployment/old/debian-package-x64/pkg-src/control | 31 ++++
.../old/debian-package-x64/pkg-src/copyright | 29 ++++
deployment/old/debian-package-x64/pkg-src/gbp.conf | 6 +
deployment/old/debian-package-x64/pkg-src/install | 6 +
.../old/debian-package-x64/pkg-src/jellyfin.init | 61 +++++++
.../debian-package-x64/pkg-src/jellyfin.service | 14 ++
.../debian-package-x64/pkg-src/jellyfin.upstart | 20 +++
.../old/debian-package-x64/pkg-src/po/POTFILES.in | 1 +
.../debian-package-x64/pkg-src/po/templates.pot | 57 +++++++
deployment/old/debian-package-x64/pkg-src/postinst | 92 +++++++++++
deployment/old/debian-package-x64/pkg-src/postrm | 81 +++++++++
deployment/old/debian-package-x64/pkg-src/preinst | 78 +++++++++
deployment/old/debian-package-x64/pkg-src/prerm | 61 +++++++
deployment/old/debian-package-x64/pkg-src/rules | 66 ++++++++
.../pkg-src/source.lintian-overrides | 3 +
.../old/debian-package-x64/pkg-src/source/format | 1 +
.../old/debian-package-x64/pkg-src/source/options | 11 ++
deployment/old/fedora-package-x64/Dockerfile | 33 ++++
deployment/old/fedora-package-x64/clean.sh | 32 ++++
deployment/old/fedora-package-x64/dependencies.txt | 1 +
deployment/old/fedora-package-x64/docker-build.sh | 18 ++
deployment/old/fedora-package-x64/package.sh | 34 ++++
.../old/fedora-package-x64/pkg-src/.gitignore | 3 +
.../old/fedora-package-x64/pkg-src/README.md | 43 +++++
.../pkg-src/jellyfin-firewalld.xml | 9 +
.../old/fedora-package-x64/pkg-src/jellyfin.env | 34 ++++
.../pkg-src/jellyfin.override.conf | 7 +
.../fedora-package-x64/pkg-src/jellyfin.service | 15 ++
.../old/fedora-package-x64/pkg-src/jellyfin.spec | 181 +++++++++++++++++++++
.../fedora-package-x64/pkg-src/jellyfin.sudoers | 19 +++
.../old/fedora-package-x64/pkg-src/restart.sh | 36 ++++
deployment/old/linux-x64/Dockerfile | 37 +++++
deployment/old/linux-x64/clean.sh | 27 +++
deployment/old/linux-x64/dependencies.txt | 1 +
deployment/old/linux-x64/docker-build.sh | 36 ++++
deployment/old/linux-x64/package.sh | 34 ++++
deployment/old/macos/Dockerfile | 37 +++++
deployment/old/macos/clean.sh | 27 +++
deployment/old/macos/dependencies.txt | 1 +
deployment/old/macos/docker-build.sh | 36 ++++
deployment/old/macos/package.sh | 34 ++++
deployment/old/portable/Dockerfile | 37 +++++
deployment/old/portable/clean.sh | 27 +++
deployment/old/portable/dependencies.txt | 1 +
deployment/old/portable/docker-build.sh | 36 ++++
deployment/old/portable/package.sh | 34 ++++
.../old/ubuntu-package-arm64/Dockerfile.amd64 | 59 +++++++
.../old/ubuntu-package-arm64/Dockerfile.arm64 | 40 +++++
deployment/old/ubuntu-package-arm64/clean.sh | 27 +++
.../old/ubuntu-package-arm64/dependencies.txt | 1 +
.../old/ubuntu-package-arm64/docker-build.sh | 21 +++
deployment/old/ubuntu-package-arm64/package.sh | 45 +++++
deployment/old/ubuntu-package-arm64/pkg-src | 1 +
.../old/ubuntu-package-armhf/Dockerfile.amd64 | 59 +++++++
.../old/ubuntu-package-armhf/Dockerfile.armhf | 40 +++++
deployment/old/ubuntu-package-armhf/clean.sh | 27 +++
.../old/ubuntu-package-armhf/dependencies.txt | 1 +
.../old/ubuntu-package-armhf/docker-build.sh | 21 +++
deployment/old/ubuntu-package-armhf/package.sh | 45 +++++
deployment/old/ubuntu-package-armhf/pkg-src | 1 +
deployment/old/ubuntu-package-x64/Dockerfile | 36 ++++
deployment/old/ubuntu-package-x64/clean.sh | 27 +++
deployment/old/ubuntu-package-x64/dependencies.txt | 1 +
deployment/old/ubuntu-package-x64/docker-build.sh | 20 +++
deployment/old/ubuntu-package-x64/package.sh | 34 ++++
deployment/old/ubuntu-package-x64/pkg-src | 1 +
deployment/old/unraid/docker-templates/README.md | 15 ++
.../old/unraid/docker-templates/jellyfin.xml | 57 +++++++
deployment/old/win-x64/Dockerfile | 37 +++++
deployment/old/win-x64/clean.sh | 27 +++
deployment/old/win-x64/dependencies.txt | 1 +
deployment/old/win-x64/docker-build.sh | 61 +++++++
deployment/old/win-x64/package.sh | 34 ++++
deployment/old/win-x86/Dockerfile | 37 +++++
deployment/old/win-x86/clean.sh | 27 +++
deployment/old/win-x86/dependencies.txt | 1 +
deployment/old/win-x86/docker-build.sh | 61 +++++++
deployment/old/win-x86/package.sh | 34 ++++
110 files changed, 3207 insertions(+)
create mode 100644 deployment/old/README.md
create mode 100644 deployment/old/centos-package-x64/Dockerfile
create mode 100755 deployment/old/centos-package-x64/clean.sh
create mode 100644 deployment/old/centos-package-x64/dependencies.txt
create mode 100755 deployment/old/centos-package-x64/docker-build.sh
create mode 100755 deployment/old/centos-package-x64/package.sh
create mode 120000 deployment/old/centos-package-x64/pkg-src
create mode 100644 deployment/old/debian-package-arm64/Dockerfile.amd64
create mode 100644 deployment/old/debian-package-arm64/Dockerfile.arm64
create mode 100755 deployment/old/debian-package-arm64/clean.sh
create mode 100644 deployment/old/debian-package-arm64/dependencies.txt
create mode 100755 deployment/old/debian-package-arm64/docker-build.sh
create mode 100755 deployment/old/debian-package-arm64/package.sh
create mode 120000 deployment/old/debian-package-arm64/pkg-src
create mode 100644 deployment/old/debian-package-armhf/Dockerfile.amd64
create mode 100644 deployment/old/debian-package-armhf/Dockerfile.armhf
create mode 100755 deployment/old/debian-package-armhf/clean.sh
create mode 100644 deployment/old/debian-package-armhf/dependencies.txt
create mode 100755 deployment/old/debian-package-armhf/docker-build.sh
create mode 100755 deployment/old/debian-package-armhf/package.sh
create mode 120000 deployment/old/debian-package-armhf/pkg-src
create mode 100644 deployment/old/debian-package-x64/Dockerfile
create mode 100755 deployment/old/debian-package-x64/clean.sh
create mode 100644 deployment/old/debian-package-x64/dependencies.txt
create mode 100755 deployment/old/debian-package-x64/docker-build.sh
create mode 100755 deployment/old/debian-package-x64/package.sh
create mode 100644 deployment/old/debian-package-x64/pkg-src/changelog
create mode 100644 deployment/old/debian-package-x64/pkg-src/compat
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
create mode 100644 deployment/old/debian-package-x64/pkg-src/conf/logging.json
create mode 100644 deployment/old/debian-package-x64/pkg-src/control
create mode 100644 deployment/old/debian-package-x64/pkg-src/copyright
create mode 100644 deployment/old/debian-package-x64/pkg-src/gbp.conf
create mode 100644 deployment/old/debian-package-x64/pkg-src/install
create mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.init
create mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.service
create mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
create mode 100644 deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
create mode 100644 deployment/old/debian-package-x64/pkg-src/po/templates.pot
create mode 100644 deployment/old/debian-package-x64/pkg-src/postinst
create mode 100644 deployment/old/debian-package-x64/pkg-src/postrm
create mode 100644 deployment/old/debian-package-x64/pkg-src/preinst
create mode 100644 deployment/old/debian-package-x64/pkg-src/prerm
create mode 100755 deployment/old/debian-package-x64/pkg-src/rules
create mode 100644 deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
create mode 100644 deployment/old/debian-package-x64/pkg-src/source/format
create mode 100644 deployment/old/debian-package-x64/pkg-src/source/options
create mode 100644 deployment/old/fedora-package-x64/Dockerfile
create mode 100755 deployment/old/fedora-package-x64/clean.sh
create mode 100644 deployment/old/fedora-package-x64/dependencies.txt
create mode 100755 deployment/old/fedora-package-x64/docker-build.sh
create mode 100755 deployment/old/fedora-package-x64/package.sh
create mode 100644 deployment/old/fedora-package-x64/pkg-src/.gitignore
create mode 100644 deployment/old/fedora-package-x64/pkg-src/README.md
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.env
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.service
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
create mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
create mode 100755 deployment/old/fedora-package-x64/pkg-src/restart.sh
create mode 100644 deployment/old/linux-x64/Dockerfile
create mode 100755 deployment/old/linux-x64/clean.sh
create mode 100644 deployment/old/linux-x64/dependencies.txt
create mode 100755 deployment/old/linux-x64/docker-build.sh
create mode 100755 deployment/old/linux-x64/package.sh
create mode 100644 deployment/old/macos/Dockerfile
create mode 100755 deployment/old/macos/clean.sh
create mode 100644 deployment/old/macos/dependencies.txt
create mode 100755 deployment/old/macos/docker-build.sh
create mode 100755 deployment/old/macos/package.sh
create mode 100644 deployment/old/portable/Dockerfile
create mode 100755 deployment/old/portable/clean.sh
create mode 100644 deployment/old/portable/dependencies.txt
create mode 100755 deployment/old/portable/docker-build.sh
create mode 100755 deployment/old/portable/package.sh
create mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.amd64
create mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.arm64
create mode 100755 deployment/old/ubuntu-package-arm64/clean.sh
create mode 100644 deployment/old/ubuntu-package-arm64/dependencies.txt
create mode 100755 deployment/old/ubuntu-package-arm64/docker-build.sh
create mode 100755 deployment/old/ubuntu-package-arm64/package.sh
create mode 120000 deployment/old/ubuntu-package-arm64/pkg-src
create mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.amd64
create mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.armhf
create mode 100755 deployment/old/ubuntu-package-armhf/clean.sh
create mode 100644 deployment/old/ubuntu-package-armhf/dependencies.txt
create mode 100755 deployment/old/ubuntu-package-armhf/docker-build.sh
create mode 100755 deployment/old/ubuntu-package-armhf/package.sh
create mode 120000 deployment/old/ubuntu-package-armhf/pkg-src
create mode 100644 deployment/old/ubuntu-package-x64/Dockerfile
create mode 100755 deployment/old/ubuntu-package-x64/clean.sh
create mode 100644 deployment/old/ubuntu-package-x64/dependencies.txt
create mode 100755 deployment/old/ubuntu-package-x64/docker-build.sh
create mode 100755 deployment/old/ubuntu-package-x64/package.sh
create mode 120000 deployment/old/ubuntu-package-x64/pkg-src
create mode 100644 deployment/old/unraid/docker-templates/README.md
create mode 100644 deployment/old/unraid/docker-templates/jellyfin.xml
create mode 100644 deployment/old/win-x64/Dockerfile
create mode 100755 deployment/old/win-x64/clean.sh
create mode 100644 deployment/old/win-x64/dependencies.txt
create mode 100755 deployment/old/win-x64/docker-build.sh
create mode 100755 deployment/old/win-x64/package.sh
create mode 100644 deployment/old/win-x86/Dockerfile
create mode 100755 deployment/old/win-x86/clean.sh
create mode 100644 deployment/old/win-x86/dependencies.txt
create mode 100755 deployment/old/win-x86/docker-build.sh
create mode 100755 deployment/old/win-x86/package.sh
diff --git a/deployment/old/README.md b/deployment/old/README.md
new file mode 100644
index 0000000000..a805f59ca3
--- /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 `, 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 `.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 `/pkg-dist` directory.
+
+* Output files will be moved to the directory `jellyfin-build/` 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 0000000000..08219a2e4a
--- /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 0000000000..31455de0d4
--- /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 0000000000..bdb9670965
--- /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 0000000000..62dd144e50
--- /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 0000000000..1b983f49d9
--- /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 0000000000..3ff4d3cbf5
--- /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 0000000000..b63e08b7dd
--- /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 0000000000..9ca4868441
--- /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 0000000000..e7bfdf8b4b
--- /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 0000000000..bdb9670965
--- /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 0000000000..67ab6bd74b
--- /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 0000000000..2091982187
--- /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 0000000000..4c695fea17
--- /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 0000000000..1b64b53148
--- /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 0000000000..dd398b5aa5
--- /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 0000000000..35a3d3e9ad
--- /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 0000000000..bdb9670965
--- /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 0000000000..1bd7fb2911
--- /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 0000000000..4a27dd8283
--- /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 0000000000..0bb6d55249
--- /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 0000000000..e863d1edf9
--- /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 0000000000..4e507bcb27
--- /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 0000000000..bdb9670965
--- /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 0000000000..962a522ebc
--- /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 0000000000..5a416959ab
--- /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 0000000000..51c4822370
--- /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 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 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 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 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 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 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 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 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 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 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 0000000000..45a4fb75db
--- /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 0000000000..c6e595f15a
--- /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 0000000000..b481ba4ad4
--- /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 0000000000..1b69dd74ef
--- /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 0000000000..f32b2089eb
--- /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 0000000000..13fd3ecabb
--- /dev/null
+++ b/deployment/old/debian-package-x64/pkg-src/control
@@ -0,0 +1,31 @@
+Source: jellyfin
+Section: misc
+Priority: optional
+Maintainer: Jellyfin Team
+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 0000000000..0d7a2a6007
--- /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
+Copyright: 2014 Carlos Hernandez
+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
+ .
+ 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 0000000000..60b3d28723
--- /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 0000000000..994322d141
--- /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 0000000000..7f5642bac1
--- /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 0000000000..1305e238b0
--- /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 0000000000..ef5bc9bcaf
--- /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 0000000000..cef83a3407
--- /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 0000000000..2cdcae4173
--- /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 , 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 \n"
+"Language-Team: LANGUAGE \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 0000000000..860222e051
--- /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 0000000000..1d00a984ec
--- /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 0000000000..2713fb9b80
--- /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 0000000000..e965cb7d71
--- /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 0000000000..c2d57dfb22
--- /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 0000000000..aeb332f13a
--- /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 0000000000..d3827e75a5
--- /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 0000000000..17b5373d5e
--- /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 0000000000..87120f3a05
--- /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 0000000000..700c8f1bb3
--- /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 0000000000..bdb9670965
--- /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 0000000000..740e8d35ca
--- /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 0000000000..ae6962dd1f
--- /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 0000000000..6019b98c22
--- /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 0000000000..7ed6f7efc6
--- /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 0000000000..538c5d65f8
--- /dev/null
+++ b/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
@@ -0,0 +1,9 @@
+
+
+ Jellyfin
+ The Free Software Media System.
+
+
+
+
+
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 0000000000..de48f13af5
--- /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 0000000000..8652450bb4
--- /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 0000000000..f3dc594b1c
--- /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 0000000000..33c6f6f648
--- /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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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
+- 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 0000000000..dd245af4b8
--- /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 0000000000..9b64b6d728
--- /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 0000000000..c47057546d
--- /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 0000000000..c07501a7bb
--- /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 0000000000..bdb9670965
--- /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 0000000000..e33328a36a
--- /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 0000000000..dfe8a9aa4a
--- /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 0000000000..b522df8848
--- /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 0000000000..c07501a7bb
--- /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 0000000000..bdb9670965
--- /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 0000000000..f9417388d7
--- /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 0000000000..464c0d382f
--- /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 0000000000..965eb82b86
--- /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 0000000000..c07501a7bb
--- /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 0000000000..bdb9670965
--- /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 0000000000..094190bbf6
--- /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 0000000000..0ceb54dda1
--- /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 0000000000..b11994a18a
--- /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 0000000000..8f004b2f1a
--- /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 0000000000..82d427f9e5
--- /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 0000000000..bdb9670965
--- /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 0000000000..67ab6bd74b
--- /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 0000000000..d1140a7274
--- /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 0000000000..4c695fea17
--- /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 0000000000..e475b14389
--- /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 0000000000..0e71fa6938
--- /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 0000000000..82d427f9e5
--- /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 0000000000..bdb9670965
--- /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 0000000000..1bd7fb2911
--- /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 0000000000..2ceb3e8165
--- /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 0000000000..4c695fea17
--- /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 0000000000..e2dda6392c
--- /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 0000000000..82d427f9e5
--- /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 0000000000..bdb9670965
--- /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 0000000000..962a522ebc
--- /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 0000000000..08c003778b
--- /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 0000000000..0bb6d55249
--- /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 0000000000..2c268e8b3e
--- /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 0000000000..57b4cc5ae1
--- /dev/null
+++ b/deployment/old/unraid/docker-templates/jellyfin.xml
@@ -0,0 +1,57 @@
+
+
+ https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml
+ False
+ MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos
+ Jellyfin
+
+ 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.
+
+
+ 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!
+
+ https://www.reddit.com/r/jellyfin/
+ https://hub.docker.com/r/jellyfin/jellyfin/
+ https://github.com/jellyfin/jellyfin/>
+ jellyfin/jellyfin
+ https://jellyfin.media/
+ true
+ false
+
+ host
+
+
+ 8096
+ 8096
+ tcp
+
+
+
+
+
+ /mnt/user/appdata/Jellyfin
+ /config
+ rw
+
+
+ /mnt/user
+ /media
+ rw
+
+
+ /mnt/user/appdata/Jellyfin/cache/
+ /cache
+ rw
+
+
+ http://[IP]:[PORT:8096]/
+ https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png
+
+
diff --git a/deployment/old/win-x64/Dockerfile b/deployment/old/win-x64/Dockerfile
new file mode 100644
index 0000000000..8a33749541
--- /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 0000000000..6c183f3371
--- /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 0000000000..bdb9670965
--- /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 0000000000..79e5fb0bcd
--- /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 0000000000..a8ab190fa5
--- /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 0000000000..f8dc5be83d
--- /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 0000000000..8b78c5e4b6
--- /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 0000000000..bdb9670965
--- /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 0000000000..977dcf78fa
--- /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 0000000000..65e7e2928c
--- /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}"
--
cgit v1.2.3
From 42813ef06973126151e2c91ecb7aa6836e0d472c Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:50:32 -0400
Subject: Preserve Unraid configuration
---
deployment/unraid/docker-templates/README.md | 15 +++++++
deployment/unraid/docker-templates/jellyfin.xml | 57 +++++++++++++++++++++++++
2 files changed, 72 insertions(+)
create mode 100644 deployment/unraid/docker-templates/README.md
create mode 100644 deployment/unraid/docker-templates/jellyfin.xml
diff --git a/deployment/unraid/docker-templates/README.md b/deployment/unraid/docker-templates/README.md
new file mode 100644
index 0000000000..2c268e8b3e
--- /dev/null
+++ b/deployment/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/unraid/docker-templates/jellyfin.xml b/deployment/unraid/docker-templates/jellyfin.xml
new file mode 100644
index 0000000000..57b4cc5ae1
--- /dev/null
+++ b/deployment/unraid/docker-templates/jellyfin.xml
@@ -0,0 +1,57 @@
+
+
+ https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml
+ False
+ MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos
+ Jellyfin
+
+ 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.
+
+
+ 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!
+
+ https://www.reddit.com/r/jellyfin/
+ https://hub.docker.com/r/jellyfin/jellyfin/
+ https://github.com/jellyfin/jellyfin/>
+ jellyfin/jellyfin
+ https://jellyfin.media/
+ true
+ false
+
+ host
+
+
+ 8096
+ 8096
+ tcp
+
+
+
+
+
+ /mnt/user/appdata/Jellyfin
+ /config
+ rw
+
+
+ /mnt/user
+ /media
+ rw
+
+
+ /mnt/user/appdata/Jellyfin/cache/
+ /cache
+ rw
+
+
+ http://[IP]:[PORT:8096]/
+ https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png
+
+
--
cgit v1.2.3
From fbad4f00b4a95b889708d430ad445a58dad2f964 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:50:46 -0400
Subject: Remove old build infra (again)
---
deployment/old/README.md | 62 -------
deployment/old/centos-package-x64/Dockerfile | 39 -----
deployment/old/centos-package-x64/clean.sh | 32 ----
deployment/old/centos-package-x64/dependencies.txt | 1 -
deployment/old/centos-package-x64/docker-build.sh | 18 --
deployment/old/centos-package-x64/package.sh | 34 ----
deployment/old/centos-package-x64/pkg-src | 1 -
.../old/debian-package-arm64/Dockerfile.amd64 | 43 -----
.../old/debian-package-arm64/Dockerfile.arm64 | 34 ----
deployment/old/debian-package-arm64/clean.sh | 27 ---
.../old/debian-package-arm64/dependencies.txt | 1 -
.../old/debian-package-arm64/docker-build.sh | 21 ---
deployment/old/debian-package-arm64/package.sh | 45 -----
deployment/old/debian-package-arm64/pkg-src | 1 -
.../old/debian-package-armhf/Dockerfile.amd64 | 42 -----
.../old/debian-package-armhf/Dockerfile.armhf | 34 ----
deployment/old/debian-package-armhf/clean.sh | 27 ---
.../old/debian-package-armhf/dependencies.txt | 1 -
.../old/debian-package-armhf/docker-build.sh | 21 ---
deployment/old/debian-package-armhf/package.sh | 45 -----
deployment/old/debian-package-armhf/pkg-src | 1 -
deployment/old/debian-package-x64/Dockerfile | 34 ----
deployment/old/debian-package-x64/clean.sh | 27 ---
deployment/old/debian-package-x64/dependencies.txt | 1 -
deployment/old/debian-package-x64/docker-build.sh | 20 ---
deployment/old/debian-package-x64/package.sh | 34 ----
.../old/debian-package-x64/pkg-src/changelog | 59 -------
deployment/old/debian-package-x64/pkg-src/compat | 1 -
.../old/debian-package-x64/pkg-src/conf/jellyfin | 40 -----
.../pkg-src/conf/jellyfin-sudoers | 37 -----
.../pkg-src/conf/jellyfin.service.conf | 7 -
.../debian-package-x64/pkg-src/conf/logging.json | 30 ----
deployment/old/debian-package-x64/pkg-src/control | 31 ----
.../old/debian-package-x64/pkg-src/copyright | 29 ----
deployment/old/debian-package-x64/pkg-src/gbp.conf | 6 -
deployment/old/debian-package-x64/pkg-src/install | 6 -
.../old/debian-package-x64/pkg-src/jellyfin.init | 61 -------
.../debian-package-x64/pkg-src/jellyfin.service | 14 --
.../debian-package-x64/pkg-src/jellyfin.upstart | 20 ---
.../old/debian-package-x64/pkg-src/po/POTFILES.in | 1 -
.../debian-package-x64/pkg-src/po/templates.pot | 57 -------
deployment/old/debian-package-x64/pkg-src/postinst | 92 -----------
deployment/old/debian-package-x64/pkg-src/postrm | 81 ---------
deployment/old/debian-package-x64/pkg-src/preinst | 78 ---------
deployment/old/debian-package-x64/pkg-src/prerm | 61 -------
deployment/old/debian-package-x64/pkg-src/rules | 66 --------
.../pkg-src/source.lintian-overrides | 3 -
.../old/debian-package-x64/pkg-src/source/format | 1 -
.../old/debian-package-x64/pkg-src/source/options | 11 --
deployment/old/fedora-package-x64/Dockerfile | 33 ----
deployment/old/fedora-package-x64/clean.sh | 32 ----
deployment/old/fedora-package-x64/dependencies.txt | 1 -
deployment/old/fedora-package-x64/docker-build.sh | 18 --
deployment/old/fedora-package-x64/package.sh | 34 ----
.../old/fedora-package-x64/pkg-src/.gitignore | 3 -
.../old/fedora-package-x64/pkg-src/README.md | 43 -----
.../pkg-src/jellyfin-firewalld.xml | 9 -
.../old/fedora-package-x64/pkg-src/jellyfin.env | 34 ----
.../pkg-src/jellyfin.override.conf | 7 -
.../fedora-package-x64/pkg-src/jellyfin.service | 15 --
.../old/fedora-package-x64/pkg-src/jellyfin.spec | 181 ---------------------
.../fedora-package-x64/pkg-src/jellyfin.sudoers | 19 ---
.../old/fedora-package-x64/pkg-src/restart.sh | 36 ----
deployment/old/linux-x64/Dockerfile | 37 -----
deployment/old/linux-x64/clean.sh | 27 ---
deployment/old/linux-x64/dependencies.txt | 1 -
deployment/old/linux-x64/docker-build.sh | 36 ----
deployment/old/linux-x64/package.sh | 34 ----
deployment/old/macos/Dockerfile | 37 -----
deployment/old/macos/clean.sh | 27 ---
deployment/old/macos/dependencies.txt | 1 -
deployment/old/macos/docker-build.sh | 36 ----
deployment/old/macos/package.sh | 34 ----
deployment/old/portable/Dockerfile | 37 -----
deployment/old/portable/clean.sh | 27 ---
deployment/old/portable/dependencies.txt | 1 -
deployment/old/portable/docker-build.sh | 36 ----
deployment/old/portable/package.sh | 34 ----
.../old/ubuntu-package-arm64/Dockerfile.amd64 | 59 -------
.../old/ubuntu-package-arm64/Dockerfile.arm64 | 40 -----
deployment/old/ubuntu-package-arm64/clean.sh | 27 ---
.../old/ubuntu-package-arm64/dependencies.txt | 1 -
.../old/ubuntu-package-arm64/docker-build.sh | 21 ---
deployment/old/ubuntu-package-arm64/package.sh | 45 -----
deployment/old/ubuntu-package-arm64/pkg-src | 1 -
.../old/ubuntu-package-armhf/Dockerfile.amd64 | 59 -------
.../old/ubuntu-package-armhf/Dockerfile.armhf | 40 -----
deployment/old/ubuntu-package-armhf/clean.sh | 27 ---
.../old/ubuntu-package-armhf/dependencies.txt | 1 -
.../old/ubuntu-package-armhf/docker-build.sh | 21 ---
deployment/old/ubuntu-package-armhf/package.sh | 45 -----
deployment/old/ubuntu-package-armhf/pkg-src | 1 -
deployment/old/ubuntu-package-x64/Dockerfile | 36 ----
deployment/old/ubuntu-package-x64/clean.sh | 27 ---
deployment/old/ubuntu-package-x64/dependencies.txt | 1 -
deployment/old/ubuntu-package-x64/docker-build.sh | 20 ---
deployment/old/ubuntu-package-x64/package.sh | 34 ----
deployment/old/ubuntu-package-x64/pkg-src | 1 -
deployment/old/unraid/docker-templates/README.md | 15 --
.../old/unraid/docker-templates/jellyfin.xml | 57 -------
deployment/old/win-x64/Dockerfile | 37 -----
deployment/old/win-x64/clean.sh | 27 ---
deployment/old/win-x64/dependencies.txt | 1 -
deployment/old/win-x64/docker-build.sh | 61 -------
deployment/old/win-x64/package.sh | 34 ----
deployment/old/win-x86/Dockerfile | 37 -----
deployment/old/win-x86/clean.sh | 27 ---
deployment/old/win-x86/dependencies.txt | 1 -
deployment/old/win-x86/docker-build.sh | 61 -------
deployment/old/win-x86/package.sh | 34 ----
110 files changed, 3207 deletions(-)
delete mode 100644 deployment/old/README.md
delete mode 100644 deployment/old/centos-package-x64/Dockerfile
delete mode 100755 deployment/old/centos-package-x64/clean.sh
delete mode 100644 deployment/old/centos-package-x64/dependencies.txt
delete mode 100755 deployment/old/centos-package-x64/docker-build.sh
delete mode 100755 deployment/old/centos-package-x64/package.sh
delete mode 120000 deployment/old/centos-package-x64/pkg-src
delete mode 100644 deployment/old/debian-package-arm64/Dockerfile.amd64
delete mode 100644 deployment/old/debian-package-arm64/Dockerfile.arm64
delete mode 100755 deployment/old/debian-package-arm64/clean.sh
delete mode 100644 deployment/old/debian-package-arm64/dependencies.txt
delete mode 100755 deployment/old/debian-package-arm64/docker-build.sh
delete mode 100755 deployment/old/debian-package-arm64/package.sh
delete mode 120000 deployment/old/debian-package-arm64/pkg-src
delete mode 100644 deployment/old/debian-package-armhf/Dockerfile.amd64
delete mode 100644 deployment/old/debian-package-armhf/Dockerfile.armhf
delete mode 100755 deployment/old/debian-package-armhf/clean.sh
delete mode 100644 deployment/old/debian-package-armhf/dependencies.txt
delete mode 100755 deployment/old/debian-package-armhf/docker-build.sh
delete mode 100755 deployment/old/debian-package-armhf/package.sh
delete mode 120000 deployment/old/debian-package-armhf/pkg-src
delete mode 100644 deployment/old/debian-package-x64/Dockerfile
delete mode 100755 deployment/old/debian-package-x64/clean.sh
delete mode 100644 deployment/old/debian-package-x64/dependencies.txt
delete mode 100755 deployment/old/debian-package-x64/docker-build.sh
delete mode 100755 deployment/old/debian-package-x64/package.sh
delete mode 100644 deployment/old/debian-package-x64/pkg-src/changelog
delete mode 100644 deployment/old/debian-package-x64/pkg-src/compat
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
delete mode 100644 deployment/old/debian-package-x64/pkg-src/conf/logging.json
delete mode 100644 deployment/old/debian-package-x64/pkg-src/control
delete mode 100644 deployment/old/debian-package-x64/pkg-src/copyright
delete mode 100644 deployment/old/debian-package-x64/pkg-src/gbp.conf
delete mode 100644 deployment/old/debian-package-x64/pkg-src/install
delete mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.init
delete mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.service
delete mode 100644 deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
delete mode 100644 deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
delete mode 100644 deployment/old/debian-package-x64/pkg-src/po/templates.pot
delete mode 100644 deployment/old/debian-package-x64/pkg-src/postinst
delete mode 100644 deployment/old/debian-package-x64/pkg-src/postrm
delete mode 100644 deployment/old/debian-package-x64/pkg-src/preinst
delete mode 100644 deployment/old/debian-package-x64/pkg-src/prerm
delete mode 100755 deployment/old/debian-package-x64/pkg-src/rules
delete mode 100644 deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
delete mode 100644 deployment/old/debian-package-x64/pkg-src/source/format
delete mode 100644 deployment/old/debian-package-x64/pkg-src/source/options
delete mode 100644 deployment/old/fedora-package-x64/Dockerfile
delete mode 100755 deployment/old/fedora-package-x64/clean.sh
delete mode 100644 deployment/old/fedora-package-x64/dependencies.txt
delete mode 100755 deployment/old/fedora-package-x64/docker-build.sh
delete mode 100755 deployment/old/fedora-package-x64/package.sh
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/.gitignore
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/README.md
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.env
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.service
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
delete mode 100644 deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
delete mode 100755 deployment/old/fedora-package-x64/pkg-src/restart.sh
delete mode 100644 deployment/old/linux-x64/Dockerfile
delete mode 100755 deployment/old/linux-x64/clean.sh
delete mode 100644 deployment/old/linux-x64/dependencies.txt
delete mode 100755 deployment/old/linux-x64/docker-build.sh
delete mode 100755 deployment/old/linux-x64/package.sh
delete mode 100644 deployment/old/macos/Dockerfile
delete mode 100755 deployment/old/macos/clean.sh
delete mode 100644 deployment/old/macos/dependencies.txt
delete mode 100755 deployment/old/macos/docker-build.sh
delete mode 100755 deployment/old/macos/package.sh
delete mode 100644 deployment/old/portable/Dockerfile
delete mode 100755 deployment/old/portable/clean.sh
delete mode 100644 deployment/old/portable/dependencies.txt
delete mode 100755 deployment/old/portable/docker-build.sh
delete mode 100755 deployment/old/portable/package.sh
delete mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.amd64
delete mode 100644 deployment/old/ubuntu-package-arm64/Dockerfile.arm64
delete mode 100755 deployment/old/ubuntu-package-arm64/clean.sh
delete mode 100644 deployment/old/ubuntu-package-arm64/dependencies.txt
delete mode 100755 deployment/old/ubuntu-package-arm64/docker-build.sh
delete mode 100755 deployment/old/ubuntu-package-arm64/package.sh
delete mode 120000 deployment/old/ubuntu-package-arm64/pkg-src
delete mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.amd64
delete mode 100644 deployment/old/ubuntu-package-armhf/Dockerfile.armhf
delete mode 100755 deployment/old/ubuntu-package-armhf/clean.sh
delete mode 100644 deployment/old/ubuntu-package-armhf/dependencies.txt
delete mode 100755 deployment/old/ubuntu-package-armhf/docker-build.sh
delete mode 100755 deployment/old/ubuntu-package-armhf/package.sh
delete mode 120000 deployment/old/ubuntu-package-armhf/pkg-src
delete mode 100644 deployment/old/ubuntu-package-x64/Dockerfile
delete mode 100755 deployment/old/ubuntu-package-x64/clean.sh
delete mode 100644 deployment/old/ubuntu-package-x64/dependencies.txt
delete mode 100755 deployment/old/ubuntu-package-x64/docker-build.sh
delete mode 100755 deployment/old/ubuntu-package-x64/package.sh
delete mode 120000 deployment/old/ubuntu-package-x64/pkg-src
delete mode 100644 deployment/old/unraid/docker-templates/README.md
delete mode 100644 deployment/old/unraid/docker-templates/jellyfin.xml
delete mode 100644 deployment/old/win-x64/Dockerfile
delete mode 100755 deployment/old/win-x64/clean.sh
delete mode 100644 deployment/old/win-x64/dependencies.txt
delete mode 100755 deployment/old/win-x64/docker-build.sh
delete mode 100755 deployment/old/win-x64/package.sh
delete mode 100644 deployment/old/win-x86/Dockerfile
delete mode 100755 deployment/old/win-x86/clean.sh
delete mode 100644 deployment/old/win-x86/dependencies.txt
delete mode 100755 deployment/old/win-x86/docker-build.sh
delete mode 100755 deployment/old/win-x86/package.sh
diff --git a/deployment/old/README.md b/deployment/old/README.md
deleted file mode 100644
index a805f59ca3..0000000000
--- a/deployment/old/README.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# 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 `, 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 `.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 `/pkg-dist` directory.
-
-* Output files will be moved to the directory `jellyfin-build/` one directory above the repository root upon completion.
diff --git a/deployment/old/centos-package-x64/Dockerfile b/deployment/old/centos-package-x64/Dockerfile
deleted file mode 100644
index 08219a2e4a..0000000000
--- a/deployment/old/centos-package-x64/Dockerfile
+++ /dev/null
@@ -1,39 +0,0 @@
-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
deleted file mode 100755
index 31455de0d4..0000000000
--- a/deployment/old/centos-package-x64/clean.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/centos-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/centos-package-x64/docker-build.sh b/deployment/old/centos-package-x64/docker-build.sh
deleted file mode 100755
index 62dd144e50..0000000000
--- a/deployment/old/centos-package-x64/docker-build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/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
deleted file mode 100755
index 1b983f49d9..0000000000
--- a/deployment/old/centos-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 120000
index 3ff4d3cbf5..0000000000
--- a/deployment/old/centos-package-x64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index b63e08b7dd..0000000000
--- a/deployment/old/debian-package-arm64/Dockerfile.amd64
+++ /dev/null
@@ -1,43 +0,0 @@
-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
deleted file mode 100644
index 9ca4868441..0000000000
--- a/deployment/old/debian-package-arm64/Dockerfile.arm64
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100755
index e7bfdf8b4b..0000000000
--- a/deployment/old/debian-package-arm64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/debian-package-arm64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/debian-package-arm64/docker-build.sh b/deployment/old/debian-package-arm64/docker-build.sh
deleted file mode 100755
index 67ab6bd74b..0000000000
--- a/deployment/old/debian-package-arm64/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index 2091982187..0000000000
--- a/deployment/old/debian-package-arm64/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/old/debian-package-arm64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index 1b64b53148..0000000000
--- a/deployment/old/debian-package-armhf/Dockerfile.amd64
+++ /dev/null
@@ -1,42 +0,0 @@
-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
deleted file mode 100644
index dd398b5aa5..0000000000
--- a/deployment/old/debian-package-armhf/Dockerfile.armhf
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100755
index 35a3d3e9ad..0000000000
--- a/deployment/old/debian-package-armhf/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/debian-package-armhf/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/debian-package-armhf/docker-build.sh b/deployment/old/debian-package-armhf/docker-build.sh
deleted file mode 100755
index 1bd7fb2911..0000000000
--- a/deployment/old/debian-package-armhf/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index 4a27dd8283..0000000000
--- a/deployment/old/debian-package-armhf/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 0bb6d55249..0000000000
--- a/deployment/old/debian-package-armhf/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index e863d1edf9..0000000000
--- a/deployment/old/debian-package-x64/Dockerfile
+++ /dev/null
@@ -1,34 +0,0 @@
-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
deleted file mode 100755
index 4e507bcb27..0000000000
--- a/deployment/old/debian-package-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/debian-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/debian-package-x64/docker-build.sh b/deployment/old/debian-package-x64/docker-build.sh
deleted file mode 100755
index 962a522ebc..0000000000
--- a/deployment/old/debian-package-x64/docker-build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/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
deleted file mode 100755
index 5a416959ab..0000000000
--- a/deployment/old/debian-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index 51c4822370..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/changelog
+++ /dev/null
@@ -1,59 +0,0 @@
-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 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 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 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 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 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 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 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 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 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 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
deleted file mode 100644
index 45a4fb75db..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/compat
+++ /dev/null
@@ -1 +0,0 @@
-8
diff --git a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin b/deployment/old/debian-package-x64/pkg-src/conf/jellyfin
deleted file mode 100644
index c6e595f15a..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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
deleted file mode 100644
index b481ba4ad4..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin-sudoers
+++ /dev/null
@@ -1,37 +0,0 @@
-#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
deleted file mode 100644
index 1b69dd74ef..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/jellyfin.service.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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
deleted file mode 100644
index f32b2089eb..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/conf/logging.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "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
deleted file mode 100644
index 13fd3ecabb..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/control
+++ /dev/null
@@ -1,31 +0,0 @@
-Source: jellyfin
-Section: misc
-Priority: optional
-Maintainer: Jellyfin Team
-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
deleted file mode 100644
index 0d7a2a6007..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/copyright
+++ /dev/null
@@ -1,29 +0,0 @@
-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
-Copyright: 2014 Carlos Hernandez
-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
- .
- 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
deleted file mode 100644
index 60b3d28723..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/gbp.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-[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
deleted file mode 100644
index 994322d141..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/install
+++ /dev/null
@@ -1,6 +0,0 @@
-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
deleted file mode 100644
index 7f5642bac1..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/jellyfin.init
+++ /dev/null
@@ -1,61 +0,0 @@
-### 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
deleted file mode 100644
index 1305e238b0..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/jellyfin.service
+++ /dev/null
@@ -1,14 +0,0 @@
-[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
deleted file mode 100644
index ef5bc9bcaf..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/jellyfin.upstart
+++ /dev/null
@@ -1,20 +0,0 @@
-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
deleted file mode 100644
index cef83a3407..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/po/POTFILES.in
+++ /dev/null
@@ -1 +0,0 @@
-[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
deleted file mode 100644
index 2cdcae4173..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/po/templates.pot
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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 , 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 \n"
-"Language-Team: LANGUAGE \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
deleted file mode 100644
index 860222e051..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/postinst
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/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
deleted file mode 100644
index 1d00a984ec..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/postrm
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/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
deleted file mode 100644
index 2713fb9b80..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/preinst
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/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
deleted file mode 100644
index e965cb7d71..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/prerm
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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
deleted file mode 100755
index c2d57dfb22..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/rules
+++ /dev/null
@@ -1,66 +0,0 @@
-#! /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
deleted file mode 100644
index aeb332f13a..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/source.lintian-overrides
+++ /dev/null
@@ -1,3 +0,0 @@
-# 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
deleted file mode 100644
index d3827e75a5..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/source/format
+++ /dev/null
@@ -1 +0,0 @@
-1.0
diff --git a/deployment/old/debian-package-x64/pkg-src/source/options b/deployment/old/debian-package-x64/pkg-src/source/options
deleted file mode 100644
index 17b5373d5e..0000000000
--- a/deployment/old/debian-package-x64/pkg-src/source/options
+++ /dev/null
@@ -1,11 +0,0 @@
-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
deleted file mode 100644
index 87120f3a05..0000000000
--- a/deployment/old/fedora-package-x64/Dockerfile
+++ /dev/null
@@ -1,33 +0,0 @@
-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
deleted file mode 100755
index 700c8f1bb3..0000000000
--- a/deployment/old/fedora-package-x64/clean.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/fedora-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/fedora-package-x64/docker-build.sh b/deployment/old/fedora-package-x64/docker-build.sh
deleted file mode 100755
index 740e8d35ca..0000000000
--- a/deployment/old/fedora-package-x64/docker-build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/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
deleted file mode 100755
index ae6962dd1f..0000000000
--- a/deployment/old/fedora-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index 6019b98c22..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.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
deleted file mode 100644
index 7ed6f7efc6..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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
deleted file mode 100644
index 538c5d65f8..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin-firewalld.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- Jellyfin
- The Free Software Media System.
-
-
-
-
-
diff --git a/deployment/old/fedora-package-x64/pkg-src/jellyfin.env b/deployment/old/fedora-package-x64/pkg-src/jellyfin.env
deleted file mode 100644
index de48f13af5..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.env
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
deleted file mode 100644
index 8652450bb4..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.override.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-# 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
deleted file mode 100644
index f3dc594b1c..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.service
+++ /dev/null
@@ -1,15 +0,0 @@
-[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
deleted file mode 100644
index 33c6f6f648..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.spec
+++ /dev/null
@@ -1,181 +0,0 @@
-%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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
-- 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
deleted file mode 100644
index dd245af4b8..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/jellyfin.sudoers
+++ /dev/null
@@ -1,19 +0,0 @@
-# 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
deleted file mode 100755
index 9b64b6d728..0000000000
--- a/deployment/old/fedora-package-x64/pkg-src/restart.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100644
index c47057546d..0000000000
--- a/deployment/old/linux-x64/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/old/linux-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/linux-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/linux-x64/docker-build.sh b/deployment/old/linux-x64/docker-build.sh
deleted file mode 100755
index e33328a36a..0000000000
--- a/deployment/old/linux-x64/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100755
index dfe8a9aa4a..0000000000
--- a/deployment/old/linux-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index b522df8848..0000000000
--- a/deployment/old/macos/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/old/macos/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/macos/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/macos/docker-build.sh b/deployment/old/macos/docker-build.sh
deleted file mode 100755
index f9417388d7..0000000000
--- a/deployment/old/macos/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100755
index 464c0d382f..0000000000
--- a/deployment/old/macos/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index 965eb82b86..0000000000
--- a/deployment/old/portable/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index c07501a7bb..0000000000
--- a/deployment/old/portable/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/portable/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/portable/docker-build.sh b/deployment/old/portable/docker-build.sh
deleted file mode 100755
index 094190bbf6..0000000000
--- a/deployment/old/portable/docker-build.sh
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/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
deleted file mode 100755
index 0ceb54dda1..0000000000
--- a/deployment/old/portable/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index b11994a18a..0000000000
--- a/deployment/old/ubuntu-package-arm64/Dockerfile.amd64
+++ /dev/null
@@ -1,59 +0,0 @@
-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
deleted file mode 100644
index 8f004b2f1a..0000000000
--- a/deployment/old/ubuntu-package-arm64/Dockerfile.arm64
+++ /dev/null
@@ -1,40 +0,0 @@
-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
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/old/ubuntu-package-arm64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/ubuntu-package-arm64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/ubuntu-package-arm64/docker-build.sh b/deployment/old/ubuntu-package-arm64/docker-build.sh
deleted file mode 100755
index 67ab6bd74b..0000000000
--- a/deployment/old/ubuntu-package-arm64/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index d1140a7274..0000000000
--- a/deployment/old/ubuntu-package-arm64/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/old/ubuntu-package-arm64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index e475b14389..0000000000
--- a/deployment/old/ubuntu-package-armhf/Dockerfile.amd64
+++ /dev/null
@@ -1,59 +0,0 @@
-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
deleted file mode 100644
index 0e71fa6938..0000000000
--- a/deployment/old/ubuntu-package-armhf/Dockerfile.armhf
+++ /dev/null
@@ -1,40 +0,0 @@
-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
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/old/ubuntu-package-armhf/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/ubuntu-package-armhf/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/ubuntu-package-armhf/docker-build.sh b/deployment/old/ubuntu-package-armhf/docker-build.sh
deleted file mode 100755
index 1bd7fb2911..0000000000
--- a/deployment/old/ubuntu-package-armhf/docker-build.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/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
deleted file mode 100755
index 2ceb3e8165..0000000000
--- a/deployment/old/ubuntu-package-armhf/package.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/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
deleted file mode 120000
index 4c695fea17..0000000000
--- a/deployment/old/ubuntu-package-armhf/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index e2dda6392c..0000000000
--- a/deployment/old/ubuntu-package-x64/Dockerfile
+++ /dev/null
@@ -1,36 +0,0 @@
-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
deleted file mode 100755
index 82d427f9e5..0000000000
--- a/deployment/old/ubuntu-package-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/ubuntu-package-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/ubuntu-package-x64/docker-build.sh b/deployment/old/ubuntu-package-x64/docker-build.sh
deleted file mode 100755
index 962a522ebc..0000000000
--- a/deployment/old/ubuntu-package-x64/docker-build.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/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
deleted file mode 100755
index 08c003778b..0000000000
--- a/deployment/old/ubuntu-package-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 120000
index 0bb6d55249..0000000000
--- a/deployment/old/ubuntu-package-x64/pkg-src
+++ /dev/null
@@ -1 +0,0 @@
-../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
deleted file mode 100644
index 2c268e8b3e..0000000000
--- a/deployment/old/unraid/docker-templates/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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
deleted file mode 100644
index 57b4cc5ae1..0000000000
--- a/deployment/old/unraid/docker-templates/jellyfin.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
- https://raw.githubusercontent.com/jellyfin/jellyfin/deployment/unraid/docker-templates/jellyfin.xml
- False
- MediaApp:Video MediaApp:Music MediaApp:Photos MediaServer:Video MediaServer:Music MediaServer:Photos
- Jellyfin
-
- 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.
-
-
- 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!
-
- https://www.reddit.com/r/jellyfin/
- https://hub.docker.com/r/jellyfin/jellyfin/
- https://github.com/jellyfin/jellyfin/>
- jellyfin/jellyfin
- https://jellyfin.media/
- true
- false
-
- host
-
-
- 8096
- 8096
- tcp
-
-
-
-
-
- /mnt/user/appdata/Jellyfin
- /config
- rw
-
-
- /mnt/user
- /media
- rw
-
-
- /mnt/user/appdata/Jellyfin/cache/
- /cache
- rw
-
-
- http://[IP]:[PORT:8096]/
- https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/jellyfin-icon.png
-
-
diff --git a/deployment/old/win-x64/Dockerfile b/deployment/old/win-x64/Dockerfile
deleted file mode 100644
index 8a33749541..0000000000
--- a/deployment/old/win-x64/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index 6c183f3371..0000000000
--- a/deployment/old/win-x64/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/win-x64/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/win-x64/docker-build.sh b/deployment/old/win-x64/docker-build.sh
deleted file mode 100755
index 79e5fb0bcd..0000000000
--- a/deployment/old/win-x64/docker-build.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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
deleted file mode 100755
index a8ab190fa5..0000000000
--- a/deployment/old/win-x64/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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
deleted file mode 100644
index f8dc5be83d..0000000000
--- a/deployment/old/win-x86/Dockerfile
+++ /dev/null
@@ -1,37 +0,0 @@
-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
deleted file mode 100755
index 8b78c5e4b6..0000000000
--- a/deployment/old/win-x86/clean.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/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
deleted file mode 100644
index bdb9670965..0000000000
--- a/deployment/old/win-x86/dependencies.txt
+++ /dev/null
@@ -1 +0,0 @@
-docker
diff --git a/deployment/old/win-x86/docker-build.sh b/deployment/old/win-x86/docker-build.sh
deleted file mode 100755
index 977dcf78fa..0000000000
--- a/deployment/old/win-x86/docker-build.sh
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/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
deleted file mode 100755
index 65e7e2928c..0000000000
--- a/deployment/old/win-x86/package.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/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}"
--
cgit v1.2.3
From 762a46045ee784c500f7fe4c2c0131ca83e8b50e Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:55:14 -0400
Subject: Update gitignore paths for debian/
---
.gitignore | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/.gitignore b/.gitignore
index 17cf4a6277..f3ad8c09bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -244,14 +244,14 @@ pip-log.txt
#########################
# Artifacts for debian-x64
-deployment/debian-package-x64/pkg-src/.debhelper/
-deployment/debian-package-x64/pkg-src/*.debhelper
-deployment/debian-package-x64/pkg-src/debhelper-build-stamp
-deployment/debian-package-x64/pkg-src/files
-deployment/debian-package-x64/pkg-src/jellyfin.substvars
-deployment/debian-package-x64/pkg-src/jellyfin/
+debian/.debhelper/
+debian/*.debhelper
+debian/debhelper-build-stamp
+debian/files
+debian/jellyfin.substvars
+debian/jellyfin/
# Don't ignore the debian/bin folder
-!deployment/debian-package-x64/pkg-src/bin/
+!debian/bin/
deployment/**/dist/
deployment/**/pkg-dist/
--
cgit v1.2.3
From 7eac3684862380a857edc6c7e98c20f25c5b9a03 Mon Sep 17 00:00:00 2001
From: "Joshua M. Boniface"
Date: Thu, 9 Apr 2020 11:55:27 -0400
Subject: Fix missing restart script
---
debian/bin/restart.sh | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100755 debian/bin/restart.sh
diff --git a/debian/bin/restart.sh b/debian/bin/restart.sh
new file mode 100755
index 0000000000..9b64b6d728
--- /dev/null
+++ b/debian/bin/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
--
cgit v1.2.3
From 4d949cb38b531455bc42551a7c095a0c2a00170e Mon Sep 17 00:00:00 2001
From: hauntingEcho <1661988+hauntingEcho@users.noreply.github.com>
Date: Tue, 31 Mar 2020 21:41:10 -0500
Subject: Specify a version for jellyfin-ffmpeg dependency in .deb
Lower versions cause #2126 in Jellyfin >= 10.4.3
---
debian/control | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/debian/control b/debian/control
index 5559700cf5..896d8286b7 100644
--- a/debian/control
+++ b/debian/control
@@ -21,7 +21,7 @@ Conflicts: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
Architecture: any
Depends: at,
libsqlite3-0,
- jellyfin-ffmpeg,
+ jellyfin-ffmpeg (>= 4.2.1-2),
libfontconfig1,
libfreetype6,
libssl1.1
--
cgit v1.2.3
From 4e894b4b660f33e8c8a6ce9b235edaaf313b9c9e Mon Sep 17 00:00:00 2001
From: ferferga
Date: Thu, 9 Apr 2020 18:23:21 +0200
Subject: Remove unnecessary space in hardware decoders argument for ffmpeg
---
.../MediaEncoding/EncodingHelper.cs | 38 +++++++++++-----------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
index 95b7df9bd6..3fb8c825a6 100644
--- a/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
+++ b/MediaBrowser.Controller/MediaEncoding/EncodingHelper.cs
@@ -2549,7 +2549,7 @@ namespace MediaBrowser.Controller.MediaEncoding
encodingOptions.HardwareDecodingCodecs = Array.Empty();
return null;
}
- return "-c:v h264_qsv ";
+ return "-c:v h264_qsv";
}
break;
case "hevc":
@@ -2557,19 +2557,19 @@ namespace MediaBrowser.Controller.MediaEncoding
if (_mediaEncoder.SupportsDecoder("hevc_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase))
{
//return "-c:v hevc_qsv -load_plugin hevc_hw ";
- return "-c:v hevc_qsv ";
+ return "-c:v hevc_qsv";
}
break;
case "mpeg2video":
if (_mediaEncoder.SupportsDecoder("mpeg2_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg2video", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg2_qsv ";
+ return "-c:v mpeg2_qsv";
}
break;
case "vc1":
if (_mediaEncoder.SupportsDecoder("vc1_qsv") && encodingOptions.HardwareDecodingCodecs.Contains("vc1", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v vc1_qsv ";
+ return "-c:v vc1_qsv";
}
break;
}
@@ -2589,32 +2589,32 @@ namespace MediaBrowser.Controller.MediaEncoding
encodingOptions.HardwareDecodingCodecs = Array.Empty();
return null;
}
- return "-c:v h264_cuvid ";
+ return "-c:v h264_cuvid";
}
break;
case "hevc":
case "h265":
if (_mediaEncoder.SupportsDecoder("hevc_cuvid") && encodingOptions.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v hevc_cuvid ";
+ return "-c:v hevc_cuvid";
}
break;
case "mpeg2video":
if (_mediaEncoder.SupportsDecoder("mpeg2_cuvid") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg2video", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg2_cuvid ";
+ return "-c:v mpeg2_cuvid";
}
break;
case "vc1":
if (_mediaEncoder.SupportsDecoder("vc1_cuvid") && encodingOptions.HardwareDecodingCodecs.Contains("vc1", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v vc1_cuvid ";
+ return "-c:v vc1_cuvid";
}
break;
case "mpeg4":
if (_mediaEncoder.SupportsDecoder("mpeg4_cuvid") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg4", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg4_cuvid ";
+ return "-c:v mpeg4_cuvid";
}
break;
}
@@ -2628,38 +2628,38 @@ namespace MediaBrowser.Controller.MediaEncoding
case "h264":
if (_mediaEncoder.SupportsDecoder("h264_mediacodec") && encodingOptions.HardwareDecodingCodecs.Contains("h264", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v h264_mediacodec ";
+ return "-c:v h264_mediacodec";
}
break;
case "hevc":
case "h265":
if (_mediaEncoder.SupportsDecoder("hevc_mediacodec") && encodingOptions.HardwareDecodingCodecs.Contains("hevc", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v hevc_mediacodec ";
+ return "-c:v hevc_mediacodec";
}
break;
case "mpeg2video":
if (_mediaEncoder.SupportsDecoder("mpeg2_mediacodec") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg2video", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg2_mediacodec ";
+ return "-c:v mpeg2_mediacodec";
}
break;
case "mpeg4":
if (_mediaEncoder.SupportsDecoder("mpeg4_mediacodec") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg4", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg4_mediacodec ";
+ return "-c:v mpeg4_mediacodec";
}
break;
case "vp8":
if (_mediaEncoder.SupportsDecoder("vp8_mediacodec") && encodingOptions.HardwareDecodingCodecs.Contains("vp8", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v vp8_mediacodec ";
+ return "-c:v vp8_mediacodec";
}
break;
case "vp9":
if (_mediaEncoder.SupportsDecoder("vp9_mediacodec") && encodingOptions.HardwareDecodingCodecs.Contains("vp9", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v vp9_mediacodec ";
+ return "-c:v vp9_mediacodec";
}
break;
}
@@ -2673,25 +2673,25 @@ namespace MediaBrowser.Controller.MediaEncoding
case "h264":
if (_mediaEncoder.SupportsDecoder("h264_mmal") && encodingOptions.HardwareDecodingCodecs.Contains("h264", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v h264_mmal ";
+ return "-c:v h264_mmal";
}
break;
case "mpeg2video":
if (_mediaEncoder.SupportsDecoder("mpeg2_mmal") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg2video", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg2_mmal ";
+ return "-c:v mpeg2_mmal";
}
break;
case "mpeg4":
if (_mediaEncoder.SupportsDecoder("mpeg4_mmal") && encodingOptions.HardwareDecodingCodecs.Contains("mpeg4", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v mpeg4_mmal ";
+ return "-c:v mpeg4_mmal";
}
break;
case "vc1":
if (_mediaEncoder.SupportsDecoder("vc1_mmal") && encodingOptions.HardwareDecodingCodecs.Contains("vc1", StringComparer.OrdinalIgnoreCase))
{
- return "-c:v vc1_mmal ";
+ return "-c:v vc1_mmal";
}
break;
}
--
cgit v1.2.3
From 9c679b657045734eef9cbd1c2160602592a30b41 Mon Sep 17 00:00:00 2001
From: Patrick Barron
Date: Tue, 14 Apr 2020 14:45:57 -0400
Subject: Clean up and document ActivityLogEntryPoint.cs
---
.../Activity/ActivityLogEntryPoint.cs | 75 ++++++++--------------
1 file changed, 28 insertions(+), 47 deletions(-)
diff --git a/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs b/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
index d900520b2a..e025417d13 100644
--- a/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
+++ b/Emby.Server.Implementations/Activity/ActivityLogEntryPoint.cs
@@ -1,5 +1,3 @@
-#pragma warning disable CS1591
-
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -27,6 +25,10 @@ using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Activity
{
+ ///
+ /// The activity log entry point.
+ /// .
+ ///
public sealed class ActivityLogEntryPoint : IServerEntryPoint
{
private readonly ILogger _logger;
@@ -42,16 +44,15 @@ namespace Emby.Server.Implementations.Activity
///
/// Initializes a new instance of the class.
///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
+ /// The logger.
+ /// The session manager.
+ /// The device manager.
+ /// The task manager.
+ /// The activity manager.
+ /// The localization manager.
+ /// The installation manager.
+ /// The subtitle manager.
+ /// The user manager.
public ActivityLogEntryPoint(
ILogger logger,
ISessionManager sessionManager,
@@ -74,6 +75,7 @@ namespace Emby.Server.Implementations.Activity
_userManager = userManager;
}
+ ///
public Task RunAsync()
{
_taskManager.TaskCompleted += OnTaskCompleted;
@@ -136,7 +138,7 @@ namespace Emby.Server.Implementations.Activity
CultureInfo.InvariantCulture,
_localization.GetLocalizedString("SubtitleDownloadFailureFromForItem"),
e.Provider,
- Emby.Notifications.NotificationEntryPoint.GetItemName(e.Item)),
+ Notifications.NotificationEntryPoint.GetItemName(e.Item)),
Type = "SubtitleDownloadFailure",
ItemId = e.Item.Id.ToString("N", CultureInfo.InvariantCulture),
ShortOverview = e.Exception.Message
@@ -259,31 +261,20 @@ namespace Emby.Server.Implementations.Activity
private void OnSessionEnded(object sender, SessionEventArgs e)
{
- string name;
var session = e.SessionInfo;
if (string.IsNullOrEmpty(session.UserName))
{
- name = string.Format(
- CultureInfo.InvariantCulture,
- _localization.GetLocalizedString("DeviceOfflineWithName"),
- session.DeviceName);
-
- // Causing too much spam for now
return;
}
- else
+
+ CreateLogEntry(new ActivityLogEntry
{
- name = string.Format(
+ Name = string.Format(
CultureInfo.InvariantCulture,
_localization.GetLocalizedString("UserOfflineFromDevice"),
session.UserName,
- session.DeviceName);
- }
-
- CreateLogEntry(new ActivityLogEntry
- {
- Name = name,
+ session.DeviceName),
Type = "SessionEnded",
ShortOverview = string.Format(
CultureInfo.InvariantCulture,
@@ -382,31 +373,20 @@ namespace Emby.Server.Implementations.Activity
private void OnSessionStarted(object sender, SessionEventArgs e)
{
- string name;
var session = e.SessionInfo;
if (string.IsNullOrEmpty(session.UserName))
{
- name = string.Format(
- CultureInfo.InvariantCulture,
- _localization.GetLocalizedString("DeviceOnlineWithName"),
- session.DeviceName);
-
- // Causing too much spam for now
return;
}
- else
+
+ CreateLogEntry(new ActivityLogEntry
{
- name = string.Format(
+ Name = string.Format(
CultureInfo.InvariantCulture,
_localization.GetLocalizedString("UserOnlineFromDevice"),
session.UserName,
- session.DeviceName);
- }
-
- CreateLogEntry(new ActivityLogEntry
- {
- Name = name,
+ session.DeviceName),
Type = "SessionStarted",
ShortOverview = string.Format(
CultureInfo.InvariantCulture,
@@ -485,8 +465,7 @@ namespace Emby.Server.Implementations.Activity
var result = e.Result;
var task = e.Task;
- var activityTask = task.ScheduledTask as IConfigurableScheduledTask;
- if (activityTask != null && !activityTask.IsLogged)
+ if (task.ScheduledTask is IConfigurableScheduledTask activityTask && !activityTask.IsLogged)
{
return;
}
@@ -560,6 +539,8 @@ namespace Emby.Server.Implementations.Activity
///
/// Constructs a user-friendly string for this TimeSpan instance.
///
+ /// The timespan.
+ /// The user-friendly string.
public static string ToUserFriendlyString(TimeSpan span)
{
const int DaysInYear = 365;
@@ -574,7 +555,7 @@ namespace Emby.Server.Implementations.Activity
{
int years = days / DaysInYear;
values.Add(CreateValueString(years, "year"));
- days = days % DaysInYear;
+ days %= DaysInYear;
}
// Number of months
@@ -582,7 +563,7 @@ namespace Emby.Server.Implementations.Activity
{
int months = days / DaysInMonth;
values.Add(CreateValueString(months, "month"));
- days = days % DaysInMonth;
+ days %= DaysInMonth;
}
// Number of days
--
cgit v1.2.3
From af4d617df22301d2740f1286727280bc1865f889 Mon Sep 17 00:00:00 2001
From: Patrick Barron
Date: Tue, 14 Apr 2020 14:50:19 -0400
Subject: Clean up and document ActivityManager.cs
---
Emby.Server.Implementations/Activity/ActivityManager.cs | 16 ++++++++++------
Emby.Server.Implementations/ApplicationHost.cs | 2 +-
2 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/Emby.Server.Implementations/Activity/ActivityManager.cs b/Emby.Server.Implementations/Activity/ActivityManager.cs
index ee10845cfa..2d2dc8e61e 100644
--- a/Emby.Server.Implementations/Activity/ActivityManager.cs
+++ b/Emby.Server.Implementations/Activity/ActivityManager.cs
@@ -1,32 +1,34 @@
-#pragma warning disable CS1591
-
using System;
using MediaBrowser.Controller.Library;
using MediaBrowser.Model.Activity;
using MediaBrowser.Model.Events;
using MediaBrowser.Model.Querying;
-using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Activity
{
+ ///