소스 검색

Merge pull request #2656 from joshuaboniface/improve-builds

Improve builds
Vasily 5 년 전
부모
커밋
655a3ac54b
100개의 변경된 파일686개의 추가작업 그리고 1375개의 파일을 삭제
  1. 0 59
      .copr/Makefile
  2. 1 0
      .copr/Makefile
  3. 3 0
      .github/CODEOWNERS
  4. 12 7
      .gitignore
  5. 1 1
      Emby.Notifications/NotificationEntryPoint.cs
  6. 2 2
      SharedVersion.cs
  7. 0 197
      build
  8. 1 0
      build
  9. 114 0
      build.sh
  10. 11 12
      build.yaml
  11. 9 27
      bump_version
  12. 0 0
      debian/bin/restart.sh
  13. 6 0
      debian/changelog
  14. 0 0
      debian/compat
  15. 4 1
      debian/conf/jellyfin
  16. 0 0
      debian/conf/jellyfin-sudoers
  17. 0 0
      debian/conf/jellyfin.service.conf
  18. 0 0
      debian/conf/logging.json
  19. 8 9
      debian/control
  20. 0 0
      debian/copyright
  21. 0 0
      debian/gbp.conf
  22. 0 0
      debian/install
  23. 0 0
      debian/jellyfin.init
  24. 1 1
      debian/jellyfin.service
  25. 0 0
      debian/jellyfin.upstart
  26. 13 0
      debian/metapackage/jellyfin
  27. 0 0
      debian/po/POTFILES.in
  28. 0 0
      debian/po/templates.pot
  29. 0 0
      debian/postinst
  30. 0 0
      debian/postrm
  31. 0 0
      debian/preinst
  32. 0 0
      debian/prerm
  33. 0 15
      debian/rules
  34. 0 0
      debian/source.lintian-overrides
  35. 0 0
      debian/source/format
  36. 0 0
      debian/source/options
  37. 32 0
      deployment/Dockerfile.centos.amd64
  38. 31 0
      deployment/Dockerfile.debian.amd64
  39. 6 10
      deployment/Dockerfile.debian.arm64
  40. 6 9
      deployment/Dockerfile.debian.armhf
  41. 9 11
      deployment/Dockerfile.fedora.amd64
  42. 5 11
      deployment/Dockerfile.linux.amd64
  43. 5 11
      deployment/Dockerfile.macos
  44. 5 12
      deployment/Dockerfile.portable
  45. 31 0
      deployment/Dockerfile.ubuntu.amd64
  46. 5 14
      deployment/Dockerfile.ubuntu.arm64
  47. 5 14
      deployment/Dockerfile.ubuntu.armhf
  48. 5 12
      deployment/Dockerfile.windows.amd64
  49. 0 62
      deployment/README.md
  50. 24 0
      deployment/build.centos.amd64
  51. 28 0
      deployment/build.debian.amd64
  52. 29 0
      deployment/build.debian.arm64
  53. 29 0
      deployment/build.debian.armhf
  54. 24 0
      deployment/build.fedora.amd64
  55. 27 0
      deployment/build.linux.amd64
  56. 27 0
      deployment/build.macos
  57. 27 0
      deployment/build.portable
  58. 28 0
      deployment/build.ubuntu.amd64
  59. 29 0
      deployment/build.ubuntu.arm64
  60. 29 0
      deployment/build.ubuntu.armhf
  61. 54 0
      deployment/build.windows.amd64
  62. 0 39
      deployment/centos-package-x64/Dockerfile
  63. 0 32
      deployment/centos-package-x64/clean.sh
  64. 0 1
      deployment/centos-package-x64/dependencies.txt
  65. 0 18
      deployment/centos-package-x64/docker-build.sh
  66. 0 34
      deployment/centos-package-x64/package.sh
  67. 0 1
      deployment/centos-package-x64/pkg-src
  68. 0 34
      deployment/debian-package-arm64/Dockerfile.arm64
  69. 0 27
      deployment/debian-package-arm64/clean.sh
  70. 0 1
      deployment/debian-package-arm64/dependencies.txt
  71. 0 21
      deployment/debian-package-arm64/docker-build.sh
  72. 0 45
      deployment/debian-package-arm64/package.sh
  73. 0 1
      deployment/debian-package-arm64/pkg-src
  74. 0 34
      deployment/debian-package-armhf/Dockerfile.armhf
  75. 0 27
      deployment/debian-package-armhf/clean.sh
  76. 0 1
      deployment/debian-package-armhf/dependencies.txt
  77. 0 21
      deployment/debian-package-armhf/docker-build.sh
  78. 0 45
      deployment/debian-package-armhf/package.sh
  79. 0 1
      deployment/debian-package-armhf/pkg-src
  80. 0 34
      deployment/debian-package-x64/Dockerfile
  81. 0 27
      deployment/debian-package-x64/clean.sh
  82. 0 1
      deployment/debian-package-x64/dependencies.txt
  83. 0 20
      deployment/debian-package-x64/docker-build.sh
  84. 0 34
      deployment/debian-package-x64/package.sh
  85. 0 32
      deployment/fedora-package-x64/clean.sh
  86. 0 1
      deployment/fedora-package-x64/dependencies.txt
  87. 0 18
      deployment/fedora-package-x64/docker-build.sh
  88. 0 34
      deployment/fedora-package-x64/package.sh
  89. 0 27
      deployment/linux-x64/clean.sh
  90. 0 1
      deployment/linux-x64/dependencies.txt
  91. 0 36
      deployment/linux-x64/docker-build.sh
  92. 0 34
      deployment/linux-x64/package.sh
  93. 0 27
      deployment/macos/clean.sh
  94. 0 1
      deployment/macos/dependencies.txt
  95. 0 36
      deployment/macos/docker-build.sh
  96. 0 34
      deployment/macos/package.sh
  97. 0 27
      deployment/portable/clean.sh
  98. 0 1
      deployment/portable/dependencies.txt
  99. 0 36
      deployment/portable/docker-build.sh
  100. 0 34
      deployment/portable/package.sh

+ 0 - 59
.copr/Makefile

@@ -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)"

+ 1 - 0
.copr/Makefile

@@ -0,0 +1 @@
+../fedora/Makefile

+ 3 - 0
.github/CODEOWNERS

@@ -0,0 +1,3 @@
+# Joshua must review all changes to deployment and build.sh
+deployment/*    @joshuaboniface
+build.sh        @joshuaboniface

+ 12 - 7
.gitignore

@@ -245,14 +245,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/
@@ -272,3 +272,8 @@ dist
 
 # BenchmarkDotNet artifacts
 BenchmarkDotNet.Artifacts
+
+# Ignore web artifacts from native builds
+web/
+web-src.*
+MediaBrowser.WebDashboard/jellyfin-web/

+ 1 - 1
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")
             };

+ 2 - 2
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")]

+ 0 - 197
build

@@ -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 <platform>"
-    echo -e " $ build [-k/--keep-artifacts] [-b/--web-branch <web_branch>] <platform> <action>"
-    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/<platform>'."
-}
-
-# 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 <platform>' 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

+ 1 - 0
build

@@ -0,0 +1 @@
+build.sh

+ 114 - 0
build.sh

@@ -0,0 +1,114 @@
+#!/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 <BUILD_TYPE> -p/--platform <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; 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"
+}
+
+list_platforms() {
+    declare -a platforms
+    platforms=(
+        $( 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
+    for platform in ${platforms[@]}; do
+        echo -e "* ${platform} : $( grep '^#=' deployment/build.${platform} | sed 's/^#= //' )"
+    done
+}
+
+do_build_native() {
+    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
+    export IS_DOCKER=NO
+    deployment/build.${PLATFORM}
+}
+
+do_build_docker() {
+    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
+    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 "${SOURCE_DIR}:/jellyfin" -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

+ 11 - 12
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
+  - debian.amd64
+  - debian.arm64
+  - debian.armhf
+  - ubuntu.amd64
+  - ubuntu.arm64
+  - ubuntu.armhf
+  - fedora.amd64
+  - centos.amd64
+  - linux.amd64
+  - windows.amd64
   - macos
   - portable
-  - win-x64
-  - win-x86

+ 9 - 27
bump_version

@@ -10,10 +10,6 @@ usage() {
     echo -e ""
     echo -e "Usage:"
     echo -e " $ bump_version <new_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,26 @@ 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 <packaging@jellyfin.org>  $( 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,21 +83,18 @@ 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 <packaging@jellyfin.org>
 - 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
 # 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_changelog_file} ${fedora_spec_file} Dockerfile*
+git add ${shared_version_file} ${build_file} ${debian_equivs_file} ${debian_changelog_file} ${fedora_spec_file}
 git status

+ 0 - 0
deployment/debian-package-x64/pkg-src/bin/restart.sh → debian/bin/restart.sh


+ 6 - 0
deployment/debian-package-x64/pkg-src/changelog → debian/changelog

@@ -1,3 +1,9 @@
+jellyfin-server (10.6.0-1) unstable; urgency=medium
+
+  * Forthcoming stable release
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  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

+ 0 - 0
deployment/debian-package-x64/pkg-src/compat → debian/compat


+ 4 - 1
deployment/debian-package-x64/pkg-src/conf/jellyfin → debian/conf/jellyfin

@@ -18,6 +18,9 @@ JELLYFIN_CONFIG_DIR="/etc/jellyfin"
 JELLYFIN_LOG_DIR="/var/log/jellyfin"
 JELLYFIN_CACHE_DIR="/var/cache/jellyfin"
 
+# web client path, installed by the jellyfin-web package
+JELLYFIN_WEB_OPT="--webdir=/usr/share/jellyfin/web"
+
 # Restart script for in-app server control
 JELLYFIN_RESTART_OPT="--restartpath=/usr/lib/jellyfin/restart.sh"
 
@@ -37,4 +40,4 @@ JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"
 # Application username
 JELLYFIN_USER="jellyfin"
 # Full application command
-JELLYFIN_ARGS="$JELLYFIN_RESTART_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLFIN_NOWEBAPP_OPT"
+JELLYFIN_ARGS="$JELLYFIN_WEB_OPT $JELLYFIN_RESTART_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLFIN_NOWEBAPP_OPT"

+ 0 - 0
deployment/debian-package-x64/pkg-src/conf/jellyfin-sudoers → debian/conf/jellyfin-sudoers


+ 0 - 0
deployment/debian-package-x64/pkg-src/conf/jellyfin.service.conf → debian/conf/jellyfin.service.conf


+ 0 - 0
deployment/debian-package-x64/pkg-src/conf/logging.json → debian/conf/logging.json


+ 8 - 9
deployment/debian-package-x64/pkg-src/control → debian/control

@@ -1,4 +1,4 @@
-Source: jellyfin
+Source: jellyfin-server
 Section: misc
 Priority: optional
 Maintainer: Jellyfin Team <team@jellyfin.org>
@@ -8,24 +8,23 @@ 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/
+Homepage: https://jellyfin.org/
 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
 Architecture: any
 Depends: at,
          libsqlite3-0,
-         jellyfin-ffmpeg,
+         jellyfin-ffmpeg (>= 4.2.1-2),
          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.
+Recommends: jellyfin-web
+Description: Jellyfin is the Free Software Media System.
+ This package provides the Jellyfin server backend and API.

+ 0 - 0
deployment/debian-package-x64/pkg-src/copyright → debian/copyright


+ 0 - 0
deployment/debian-package-x64/pkg-src/gbp.conf → debian/gbp.conf


+ 0 - 0
deployment/debian-package-x64/pkg-src/install → debian/install


+ 0 - 0
deployment/debian-package-x64/pkg-src/jellyfin.init → debian/jellyfin.init


+ 1 - 1
deployment/debian-package-x64/pkg-src/jellyfin.service → debian/jellyfin.service

@@ -6,7 +6,7 @@ After = network.target
 Type = simple
 EnvironmentFile = /etc/default/jellyfin
 User = jellyfin
-ExecStart = /usr/bin/jellyfin ${JELLYFIN_RESTART_OPT} ${JELLYFIN_FFMPEG_OPT} ${JELLYFIN_SERVICE_OPT} ${JELLYFIN_NOWEBAPP_OPT}
+ExecStart = /usr/bin/jellyfin ${JELLYFIN_WEB_OPT} ${JELLYFIN_RESTART_OPT} ${JELLYFIN_FFMPEG_OPT} ${JELLYFIN_SERVICE_OPT} ${JELLYFIN_NOWEBAPP_OPT}
 Restart = on-failure
 TimeoutSec = 15
 

+ 0 - 0
deployment/debian-package-x64/pkg-src/jellyfin.upstart → debian/jellyfin.upstart


+ 13 - 0
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 <packaging@jellyfin.org>
+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.
+

+ 0 - 0
deployment/debian-package-x64/pkg-src/po/POTFILES.in → debian/po/POTFILES.in


+ 0 - 0
deployment/debian-package-x64/pkg-src/po/templates.pot → debian/po/templates.pot


+ 0 - 0
deployment/debian-package-x64/pkg-src/postinst → debian/postinst


+ 0 - 0
deployment/debian-package-x64/pkg-src/postrm → debian/postrm


+ 0 - 0
deployment/debian-package-x64/pkg-src/preinst → debian/preinst


+ 0 - 0
deployment/debian-package-x64/pkg-src/prerm → debian/prerm


+ 0 - 15
deployment/debian-package-x64/pkg-src/rules → 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:

+ 0 - 0
deployment/debian-package-x64/pkg-src/source.lintian-overrides → debian/source.lintian-overrides


+ 0 - 0
deployment/debian-package-x64/pkg-src/source/format → debian/source/format


+ 0 - 0
deployment/debian-package-x64/pkg-src/source/options → debian/source/options


+ 32 - 0
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"]

+ 31 - 0
deployment/Dockerfile.debian.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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.amd64 /build.sh
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]

+ 6 - 10
deployment/debian-package-arm64/Dockerfile.amd64 → deployment/Dockerfile.debian.arm64

@@ -1,7 +1,6 @@
 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
@@ -9,10 +8,11 @@ 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
+ && 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
@@ -29,15 +29,11 @@ RUN dpkg --add-architecture arm64 \
  && 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.arm64 /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 ${SOURCE_DIR}/
 
 VOLUME ${ARTIFACT_DIR}/
 
-COPY . ${SOURCE_DIR}/
-
-ENTRYPOINT ["/docker-build.sh"]
-#ENTRYPOINT ["/bin/bash"]
+ENTRYPOINT ["/build.sh"]

+ 6 - 9
deployment/debian-package-armhf/Dockerfile.amd64 → deployment/Dockerfile.debian.armhf

@@ -1,7 +1,6 @@
 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
@@ -9,10 +8,11 @@ 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
+ && 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
@@ -29,14 +29,11 @@ RUN dpkg --add-architecture armhf \
  && 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /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 ${SOURCE_DIR}/
 
 VOLUME ${ARTIFACT_DIR}/
 
-COPY . ${SOURCE_DIR}/
-
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 9 - 11
deployment/fedora-package-x64/Dockerfile → deployment/Dockerfile.fedora.amd64

@@ -1,18 +1,16 @@
 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
+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 nodejs-yarn
+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 \
@@ -20,14 +18,14 @@ RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc \
  && 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 \
+RUN ln -sf ${SOURCE_DIR}/deployment/build.fedora.amd64 /build.sh \
  && mkdir -p ${SOURCE_DIR}/SPECS \
- && ln -s ${PLATFORM_DIR}/pkg-src/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && ln -s ${SOURCE_DIR}/fedora/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
  && mkdir -p ${SOURCE_DIR}/SOURCES \
- && ln -s ${PLATFORM_DIR}/pkg-src ${SOURCE_DIR}/SOURCES
+ && ln -s ${SOURCE_DIR}/fedora ${SOURCE_DIR}/SOURCES
 
-VOLUME ${ARTIFACT_DIR}/
+VOLUME ${SOURCE_DIR}/
 
-COPY . ${SOURCE_DIR}/
+VOLUME ${ARTIFACT_DIR}/
 
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 5 - 11
deployment/macos/Dockerfile → deployment/Dockerfile.linux.amd64

@@ -1,7 +1,6 @@
 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
@@ -9,6 +8,7 @@ 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 \
@@ -21,17 +21,11 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
  && 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
+RUN ln -sf ${SOURCE_DIR}/deployment/build.linux.amd64 /build.sh
 
-VOLUME ${ARTIFACT_DIR}/
+VOLUME ${SOURCE_DIR}/
 
-COPY . ${SOURCE_DIR}/
+VOLUME ${ARTIFACT_DIR}/
 
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 5 - 11
deployment/portable/Dockerfile → deployment/Dockerfile.macos

@@ -1,7 +1,6 @@
 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
@@ -9,6 +8,7 @@ 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 \
@@ -21,17 +21,11 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
  && 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
+RUN ln -sf ${SOURCE_DIR}/deployment/build.macos /build.sh
 
-VOLUME ${ARTIFACT_DIR}/
+VOLUME ${SOURCE_DIR}/
 
-COPY . ${SOURCE_DIR}/
+VOLUME ${ARTIFACT_DIR}/
 
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 5 - 12
deployment/linux-x64/Dockerfile → deployment/Dockerfile.portable

@@ -1,14 +1,13 @@
 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
+ENV IS_DOCKER=YES
 
 # Prepare Debian build environment
 RUN apt-get update \
@@ -21,17 +20,11 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
  && 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
+RUN ln -sf ${SOURCE_DIR}/deployment/build.portable /build.sh
 
-VOLUME ${ARTIFACT_DIR}/
+VOLUME ${SOURCE_DIR}/
 
-COPY . ${SOURCE_DIR}/
+VOLUME ${ARTIFACT_DIR}/
 
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 31 - 0
deployment/Dockerfile.ubuntu.amd64

@@ -0,0 +1,31 @@
+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
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]

+ 5 - 14
deployment/ubuntu-package-arm64/Dockerfile.amd64 → deployment/Dockerfile.ubuntu.arm64

@@ -1,7 +1,6 @@
 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
@@ -9,6 +8,7 @@ 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 \
@@ -21,12 +21,6 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
  && 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 )" \
@@ -46,14 +40,11 @@ RUN rm /etc/apt/sources.list \
  && 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.ubuntu.arm64 /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 ${SOURCE_DIR}/
 
 VOLUME ${ARTIFACT_DIR}/
 
-COPY . ${SOURCE_DIR}/
-
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 5 - 14
deployment/ubuntu-package-armhf/Dockerfile.amd64 → deployment/Dockerfile.ubuntu.armhf

@@ -1,7 +1,6 @@
 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
@@ -9,6 +8,7 @@ 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 \
@@ -21,12 +21,6 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
  && 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 )" \
@@ -46,14 +40,11 @@ RUN rm /etc/apt/sources.list \
  && 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 build script
+RUN ln -sf ${SOURCE_DIR}/deployment/build.debian.armhf /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 ${SOURCE_DIR}/
 
 VOLUME ${ARTIFACT_DIR}/
 
-COPY . ${SOURCE_DIR}/
-
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 5 - 12
deployment/win-x64/Dockerfile → deployment/Dockerfile.windows.amd64

@@ -1,14 +1,13 @@
 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
+ENV IS_DOCKER=YES
 
 # Prepare Debian build environment
 RUN apt-get update \
@@ -21,17 +20,11 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/d731f991-8e68-4
  && 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
+RUN ln -sf ${SOURCE_DIR}/deployment/build.windows.amd64 /build.sh
 
-VOLUME ${ARTIFACT_DIR}/
+VOLUME ${SOURCE_DIR}/
 
-COPY . ${SOURCE_DIR}/
+VOLUME ${ARTIFACT_DIR}/
 
-ENTRYPOINT ["/docker-build.sh"]
+ENTRYPOINT ["/build.sh"]

+ 0 - 62
deployment/README.md

@@ -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 <binary>`, should be specified in a `dependencies.txt` file inside the platform directory.
-
-* Each dependency should be present on its own line.
-
-### Action Scripts
-
-* Actions are defined in BASH scripts with the name `<action>.sh` within the platform directory.
-
-* The list of valid actions are:
-
-    1. `build`: Builds a set of binaries.
-    2. `package`: Assembles the compiled binaries into a package.
-    3. `sign`: Performs signing actions on a package.
-    4. `publish`: Performs a publishing action for a package.
-    5. `clean`: Cleans up any artifacts from the previous actions.
-
-* All package actions are optional, however at least one should generate output files, and any that do should contain a `clean` action.
-
-* Actions are executed in the order specified above, and later actions may depend on former actions.
-
-* Actions except for `clean` should `set -o errexit` to terminate on failed actions.
-
-* The `clean` action should always `exit 0` even if no work is done or it fails.
-
-* The `clean` action can be passed a variable as argument 1, named `keep_artifacts`, containing either the value `y` or `n`. It is indended to handle situations when the user runs `build --keep-artifacts` and should be handled intelligently. Usually, this is used to preserve Docker images while still removing temporary directories.
-
-### Output Files
-
-* Upon completion of the defined actions, at least one output file must be created in the `<platform>/pkg-dist` directory.
-
-* Output files will be moved to the directory `jellyfin-build/<platform>` one directory above the repository root upon completion.

+ 24 - 0
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

+ 28 - 0
deployment/build.debian.amd64

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+#= Debian 10+ 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
+    cp -a debian/control /tmp/control.orig
+    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*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+    cp -a /tmp/control.orig debian/control
+    chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd

+ 29 - 0
deployment/build.debian.arm64

@@ -0,0 +1,29 @@
+#!/bin/bash
+
+#= Debian 10+ 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
+    cp -a debian/control /tmp/control.orig
+    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*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+    cp -a /tmp/control.orig debian/control
+    chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd

+ 29 - 0
deployment/build.debian.armhf

@@ -0,0 +1,29 @@
+#!/bin/bash
+
+#= Debian 10+ 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
+    cp -a debian/control /tmp/control.orig
+    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*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+    cp -a /tmp/control.orig debian/control
+    chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd

+ 24 - 0
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

+ 27 - 0
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

+ 27 - 0
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

+ 27 - 0
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

+ 28 - 0
deployment/build.ubuntu.amd64

@@ -0,0 +1,28 @@
+#!/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
+    cp -a debian/control /tmp/control.orig
+    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*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+    cp -a /tmp/control.orig debian/control
+    chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd

+ 29 - 0
deployment/build.ubuntu.arm64

@@ -0,0 +1,29 @@
+#!/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
+    cp -a debian/control /tmp/control.orig
+    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*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+    cp -a /tmp/control.orig debian/control
+    chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd

+ 29 - 0
deployment/build.ubuntu.armhf

@@ -0,0 +1,29 @@
+#!/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
+    cp -a debian/control /tmp/control.orig
+    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*.{deb,dsc,tar.gz,buildinfo,changes} ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+    cp -a /tmp/control.orig debian/control
+    chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+popd

+ 54 - 0
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

+ 0 - 39
deployment/centos-package-x64/Dockerfile

@@ -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"]

+ 0 - 32
deployment/centos-package-x64/clean.sh

@@ -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

+ 0 - 1
deployment/centos-package-x64/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 18
deployment/centos-package-x64/docker-build.sh

@@ -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}

+ 0 - 34
deployment/centos-package-x64/package.sh

@@ -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}"

+ 0 - 1
deployment/centos-package-x64/pkg-src

@@ -1 +0,0 @@
-../fedora-package-x64/pkg-src/

+ 0 - 34
deployment/debian-package-arm64/Dockerfile.arm64

@@ -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"]

+ 0 - 27
deployment/debian-package-arm64/clean.sh

@@ -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

+ 0 - 1
deployment/debian-package-arm64/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 21
deployment/debian-package-arm64/docker-build.sh

@@ -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}

+ 0 - 45
deployment/debian-package-arm64/package.sh

@@ -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}"

+ 0 - 1
deployment/debian-package-arm64/pkg-src

@@ -1 +0,0 @@
-../debian-package-x64/pkg-src

+ 0 - 34
deployment/debian-package-armhf/Dockerfile.armhf

@@ -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"]

+ 0 - 27
deployment/debian-package-armhf/clean.sh

@@ -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

+ 0 - 1
deployment/debian-package-armhf/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 21
deployment/debian-package-armhf/docker-build.sh

@@ -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}

+ 0 - 45
deployment/debian-package-armhf/package.sh

@@ -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}"

+ 0 - 1
deployment/debian-package-armhf/pkg-src

@@ -1 +0,0 @@
-../debian-package-x64/pkg-src/

+ 0 - 34
deployment/debian-package-x64/Dockerfile

@@ -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"]

+ 0 - 27
deployment/debian-package-x64/clean.sh

@@ -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

+ 0 - 1
deployment/debian-package-x64/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 20
deployment/debian-package-x64/docker-build.sh

@@ -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}

+ 0 - 34
deployment/debian-package-x64/package.sh

@@ -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}"

+ 0 - 32
deployment/fedora-package-x64/clean.sh

@@ -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

+ 0 - 1
deployment/fedora-package-x64/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 18
deployment/fedora-package-x64/docker-build.sh

@@ -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}

+ 0 - 34
deployment/fedora-package-x64/package.sh

@@ -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}"

+ 0 - 27
deployment/linux-x64/clean.sh

@@ -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

+ 0 - 1
deployment/linux-x64/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 36
deployment/linux-x64/docker-build.sh

@@ -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}

+ 0 - 34
deployment/linux-x64/package.sh

@@ -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}"

+ 0 - 27
deployment/macos/clean.sh

@@ -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

+ 0 - 1
deployment/macos/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 36
deployment/macos/docker-build.sh

@@ -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}

+ 0 - 34
deployment/macos/package.sh

@@ -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}"

+ 0 - 27
deployment/portable/clean.sh

@@ -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

+ 0 - 1
deployment/portable/dependencies.txt

@@ -1 +0,0 @@
-docker

+ 0 - 36
deployment/portable/docker-build.sh

@@ -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}

+ 0 - 34
deployment/portable/package.sh

@@ -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}"

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.