Browse Source

Move Debian folder to root of repo

Joshua M. Boniface 5 years ago
parent
commit
8b620ed26a

+ 59 - 0
debian/changelog

@@ -0,0 +1,59 @@
+jellyfin (10.5.0-1) unstable; urgency=medium
+
+  * New upstream version 10.5.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.5.0
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Fri, 11 Oct 2019 20:12:38 -0400
+
+jellyfin (10.4.0-1) unstable; urgency=medium
+
+  * New upstream version 10.4.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.4.0
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Sat, 31 Aug 2019 21:38:56 -0400
+
+jellyfin (10.3.7-1) unstable; urgency=medium
+
+  * New upstream version 10.3.7; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.7
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Wed, 24 Jul 2019 10:48:28 -0400
+
+jellyfin (10.3.6-1) unstable; urgency=medium
+
+  * New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Sat, 06 Jul 2019 13:34:19 -0400
+
+jellyfin (10.3.5-1) unstable; urgency=medium
+
+  * New upstream version 10.3.5; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.5
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Sun, 09 Jun 2019 21:47:35 -0400
+
+jellyfin (10.3.4-1) unstable; urgency=medium
+
+  * New upstream version 10.3.4; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.4
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Thu, 06 Jun 2019 22:45:31 -0400
+
+jellyfin (10.3.3-1) unstable; urgency=medium
+
+  * New upstream version 10.3.3; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.3
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Fri, 17 May 2019 23:12:08 -0400
+
+jellyfin (10.3.2-1) unstable; urgency=medium
+
+  * New upstream version 10.3.2; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.2
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Tue, 30 Apr 2019 20:18:44 -0400
+
+jellyfin (10.3.1-1) unstable; urgency=medium
+
+  * New upstream version 10.3.1; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.1
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Sat, 20 Apr 2019 14:24:07 -0400
+
+jellyfin (10.3.0-1) unstable; urgency=medium
+
+  * New upstream version 10.3.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.0
+
+ -- Jellyfin Packaging Team <packaging@jellyfin.org>  Fri, 19 Apr 2019 14:24:29 -0400

+ 1 - 0
debian/compat

@@ -0,0 +1 @@
+8

+ 40 - 0
debian/conf/jellyfin

@@ -0,0 +1,40 @@
+# Jellyfin default configuration options
+# This is a POSIX shell fragment
+
+# Use this file to override the default configurations; add additional
+# options with JELLYFIN_ADD_OPTS.
+
+# Under systemd, use
+#  /etc/systemd/system/jellyfin.service.d/jellyfin.service.conf
+# to override the user or this config file's location.
+
+#
+# General options
+#
+
+# Program directories
+JELLYFIN_DATA_DIR="/var/lib/jellyfin"
+JELLYFIN_CONFIG_DIR="/etc/jellyfin"
+JELLYFIN_LOG_DIR="/var/log/jellyfin"
+JELLYFIN_CACHE_DIR="/var/cache/jellyfin"
+
+# Restart script for in-app server control
+JELLYFIN_RESTART_OPT="--restartpath=/usr/lib/jellyfin/restart.sh"
+
+# ffmpeg binary paths, overriding the system values
+JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"
+
+# [OPTIONAL] run Jellyfin as a headless service
+#JELLYFIN_SERVICE_OPT="--service"
+
+# [OPTIONAL] run Jellyfin without the web app
+#JELLYFIN_NOWEBAPP_OPT="--noautorunwebapp"
+
+#
+# SysV init/Upstart options
+#
+
+# Application username
+JELLYFIN_USER="jellyfin"
+# Full application command
+JELLYFIN_ARGS="$JELLYFIN_RESTART_OPT $JELLYFIN_FFMPEG_OPT $JELLYFIN_SERVICE_OPT $JELLFIN_NOWEBAPP_OPT"

+ 37 - 0
debian/conf/jellyfin-sudoers

@@ -0,0 +1,37 @@
+#Allow jellyfin group to start, stop and restart itself
+Cmnd_Alias RESTARTSERVER_SYSV = /sbin/service jellyfin restart, /usr/sbin/service jellyfin restart
+Cmnd_Alias STARTSERVER_SYSV = /sbin/service jellyfin start, /usr/sbin/service jellyfin start
+Cmnd_Alias STOPSERVER_SYSV = /sbin/service jellyfin stop, /usr/sbin/service jellyfin stop
+Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
+Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
+Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
+Cmnd_Alias RESTARTSERVER_INITD = /etc/init.d/jellyfin restart
+Cmnd_Alias STARTSERVER_INITD = /etc/init.d/jellyfin start
+Cmnd_Alias STOPSERVER_INITD = /etc/init.d/jellyfin stop
+
+
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSV
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSV
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSV
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_INITD
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_INITD
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_INITD
+
+Defaults!RESTARTSERVER_SYSV !requiretty
+Defaults!STARTSERVER_SYSV !requiretty
+Defaults!STOPSERVER_SYSV !requiretty
+Defaults!RESTARTSERVER_SYSTEMD !requiretty
+Defaults!STARTSERVER_SYSTEMD !requiretty
+Defaults!STOPSERVER_SYSTEMD !requiretty
+Defaults!RESTARTSERVER_INITD !requiretty
+Defaults!STARTSERVER_INITD !requiretty
+Defaults!STOPSERVER_INITD !requiretty
+
+#Allow the server to mount iso images
+jellyfin ALL=(ALL) NOPASSWD: /bin/mount
+jellyfin ALL=(ALL) NOPASSWD: /bin/umount
+
+Defaults:jellyfin !requiretty

+ 7 - 0
debian/conf/jellyfin.service.conf

@@ -0,0 +1,7 @@
+# Jellyfin systemd configuration options
+
+# Use this file to override the user or environment file location.
+
+[Service]
+#User = jellyfin
+#EnvironmentFile = /etc/default/jellyfin

+ 30 - 0
debian/conf/logging.json

@@ -0,0 +1,30 @@
+{
+    "Serilog": {
+        "MinimumLevel": "Information",
+        "WriteTo": [
+            {
+                "Name": "Console",
+                "Args": {
+                    "outputTemplate": "[{Timestamp:HH:mm:ss}] [{Level:u3}] {Message:lj}{NewLine}{Exception}"
+                }
+            },
+            {
+                "Name": "Async",
+                "Args": {
+                    "configure": [
+                        {
+                            "Name": "File",
+                            "Args": {
+                                "path": "%JELLYFIN_LOG_DIR%//jellyfin.log",
+                                "fileSizeLimitBytes": 10485700,
+                                "rollOnFileSizeLimit": true,
+                                "retainedFileCountLimit": 10,
+                                "outputTemplate": "[{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}] [{Level:u3}] {Message}{NewLine}{Exception}"
+                            }
+                        }
+                    ]
+                }
+            }
+        ]
+    }
+}

+ 31 - 0
debian/control

@@ -0,0 +1,31 @@
+Source: jellyfin
+Section: misc
+Priority: optional
+Maintainer: Jellyfin Team <team@jellyfin.org>
+Build-Depends:  debhelper (>= 9),
+                dotnet-sdk-3.1,
+                libc6-dev,
+                libcurl4-openssl-dev,
+                libfontconfig1-dev,
+                libfreetype6-dev,
+                libssl-dev,
+                wget,
+                npm | nodejs
+Standards-Version: 3.9.4
+Homepage: https://jellyfin.media/
+Vcs-Git: https://github.org/jellyfin/jellyfin.git
+Vcs-Browser: https://github.org/jellyfin/jellyfin
+
+Package: jellyfin
+Replaces: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
+Breaks: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
+Conflicts: mediabrowser, emby, emby-server-beta, jellyfin-dev, emby-server
+Architecture: any
+Depends: at,
+         libsqlite3-0,
+         jellyfin-ffmpeg,
+         libfontconfig1,
+         libfreetype6,
+         libssl1.1
+Description: Jellyfin is a home media server.
+ It is built on top of other popular open source technologies such as Service Stack, jQuery, jQuery mobile, and Mono. It features a REST-based api with built-in documentation to facilitate client development. We also have client libraries for our api to enable rapid development.

+ 29 - 0
debian/copyright

@@ -0,0 +1,29 @@
+Format: http://dep.debian.net/deps/dep5
+Upstream-Name: jellyfin
+Source: https://github.com/jellyfin/jellyfin
+
+Files: *
+Copyright: 2018 Jellyfin Team
+License: GPL-2.0+
+
+Files: debian/*
+Copyright: 2018 Joshua Boniface <joshua@boniface.me>
+Copyright: 2014 Carlos Hernandez <carlos@techbyte.ca>
+License: GPL-2.0+
+
+License: GPL-2.0+
+ This package is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ This package is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ .
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>
+ .
+ On Debian systems, the complete text of the GNU General
+ Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".

+ 6 - 0
debian/gbp.conf

@@ -0,0 +1,6 @@
+[DEFAULT]
+pristine-tar = False
+cleaner = fakeroot debian/rules clean
+
+[import-orig]
+filter = [ ".git*", ".hg*", ".vs*", ".vscode*" ]

+ 6 - 0
debian/install

@@ -0,0 +1,6 @@
+usr/lib/jellyfin usr/lib/
+debian/conf/jellyfin etc/default/
+debian/conf/logging.json etc/jellyfin/
+debian/conf/jellyfin.service.conf etc/systemd/system/jellyfin.service.d/
+debian/conf/jellyfin-sudoers etc/sudoers.d/
+debian/bin/restart.sh usr/lib/jellyfin/

+ 61 - 0
debian/jellyfin.init

@@ -0,0 +1,61 @@
+### BEGIN INIT INFO
+# Provides:          Jellyfin Media Server
+# Required-Start:    $local_fs $network
+# Required-Stop:     $local_fs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Jellyfin Media Server
+# Description:       Runs Jellyfin Server
+### END INIT INFO
+
+set -e
+
+# Carry out specific functions when asked to by the system
+
+if test -f /etc/default/jellyfin; then
+    . /etc/default/jellyfin
+fi
+
+. /lib/lsb/init-functions
+
+PIDFILE="/run/jellyfin.pid"
+
+case "$1" in
+  start)
+	log_daemon_msg "Starting Jellyfin Media Server" "jellyfin" || true
+
+	if start-stop-daemon --start --quiet --oknodo --background --pidfile $PIDFILE --make-pidfile --user $JELLYFIN_USER --chuid $JELLYFIN_USER --exec /usr/bin/jellyfin -- $JELLYFIN_ARGS; then
+	    log_end_msg 0 || true
+	else
+	    log_end_msg 1 || true
+	fi
+    ;;
+
+  stop)
+	log_daemon_msg "Stopping Jellyfin Media Server" "jellyfin" || true
+	if start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --remove-pidfile; then
+	    log_end_msg 0 || true
+	else
+	    log_end_msg 1 || true
+	fi
+    ;;
+
+  restart)
+	log_daemon_msg "Restarting Jellyfin Media Server" "jellyfin" || true
+	start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE --remove-pidfile
+	if start-stop-daemon --start --quiet --oknodo --background --pidfile $PIDFILE --make-pidfile --user $JELLYFIN_USER --chuid $JELLYFIN_USER --exec /usr/bin/jellyfin -- $JELLYFIN_ARGS; then
+	    log_end_msg 0 || true
+	else
+	    log_end_msg 1 || true
+	fi
+	;;
+
+  status)
+	status_of_proc -p $PIDFILE /usr/bin/jellyfin jellyfin && exit 0 || exit $?
+  ;;
+
+  *)
+    echo "Usage: $0 {start|stop|restart|status}"
+    exit 1
+    ;;
+esac

+ 14 - 0
debian/jellyfin.service

@@ -0,0 +1,14 @@
+[Unit]
+Description = Jellyfin Media Server
+After = network.target
+
+[Service]
+Type = simple
+EnvironmentFile = /etc/default/jellyfin
+User = jellyfin
+ExecStart = /usr/bin/jellyfin ${JELLYFIN_RESTART_OPT} ${JELLYFIN_FFMPEG_OPT} ${JELLYFIN_SERVICE_OPT} ${JELLYFIN_NOWEBAPP_OPT}
+Restart = on-failure
+TimeoutSec = 15
+
+[Install]
+WantedBy = multi-user.target

+ 20 - 0
debian/jellyfin.upstart

@@ -0,0 +1,20 @@
+description "jellyfin daemon"
+
+start on (local-filesystems and net-device-up IFACE!=lo)
+stop on runlevel [!2345]
+
+console log
+respawn
+respawn limit 10 5
+
+kill timeout 20
+
+script
+	set -x
+	echo "Starting $UPSTART_JOB"
+
+	# Log file
+	logger -t "$0" "DEBUG: `set`"
+    . /etc/default/jellyfin
+    exec su -u $JELLYFIN_USER -c /usr/bin/jellyfin $JELLYFIN_ARGS
+end script

+ 1 - 0
debian/po/POTFILES.in

@@ -0,0 +1 @@
+[type: gettext/rfc822deb] templates

+ 57 - 0
debian/po/templates.pot

@@ -0,0 +1,57 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: jellyfin-server\n"
+"Report-Msgid-Bugs-To: jellyfin-server@packages.debian.org\n"
+"POT-Creation-Date: 2015-06-12 20:51-0600\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: note
+#. Description
+#: ../templates:1001
+msgid "Jellyfin permission info:"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:1001
+msgid ""
+"Jellyfin by default runs under a user named \"jellyfin\".  Please ensure that the "
+"user jellyfin has read and write access to any folders you wish to add to your "
+"library. Otherwise please run jellyfin under a different user."
+msgstr ""
+
+#. Type: string
+#. Description
+#: ../templates:2001
+msgid "Username to run Jellyfin as:"
+msgstr ""
+
+#. Type: string
+#. Description
+#: ../templates:2001
+msgid "The user that jellyfin will run as."
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:3001
+msgid "Jellyfin still running"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../templates:3001
+msgid "Jellyfin is currently running. Please close it and try again."
+msgstr ""

+ 92 - 0
debian/postinst

@@ -0,0 +1,92 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+  . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+case "$1" in
+  configure)
+    # create jellyfin group if it does not exist
+    if [[ -z "$(getent group jellyfin)" ]]; then
+      addgroup --quiet --system jellyfin > /dev/null 2>&1
+    fi
+    # create jellyfin user if it does not exist
+    if [[ -z "$(getent passwd jellyfin)"  ]]; then
+      adduser --system --ingroup jellyfin --shell /bin/false jellyfin --no-create-home --home ${PROGRAMDATA} \
+        --gecos "Jellyfin default user" > /dev/null 2>&1
+    fi
+    # ensure $PROGRAMDATA exists
+    if [[ ! -d $PROGRAMDATA ]]; then
+      mkdir $PROGRAMDATA
+    fi
+    # ensure $CONFIGDATA exists
+    if [[ ! -d $CONFIGDATA ]]; then
+      mkdir $CONFIGDATA
+    fi
+    # ensure $LOGDATA exists
+    if [[ ! -d $LOGDATA ]]; then
+      mkdir $LOGDATA
+    fi
+    # ensure $CACHEDATA exists
+    if [[ ! -d $CACHEDATA ]]; then
+      mkdir $CACHEDATA
+    fi
+    # Ensure permissions are correct on all config directories
+    chown -R jellyfin $PROGRAMDATA $CONFIGDATA $LOGDATA $CACHEDATA
+    chgrp adm $PROGRAMDATA $CONFIGDATA $LOGDATA $CACHEDATA
+    chmod 0750 $PROGRAMDATA $CONFIGDATA $LOGDATA $CACHEDATA
+
+    chmod +x /usr/lib/jellyfin/restart.sh > /dev/null 2>&1 || true
+
+    # Install jellyfin symlink into /usr/bin
+    ln -sf /usr/lib/jellyfin/bin/jellyfin /usr/bin/jellyfin
+
+    ;;
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+    *)
+      echo "postinst called with unknown argument \`$1'" >&2
+      exit 1
+    ;;
+esac
+
+#DEBHELPER
+
+if [[ -x "/usr/bin/deb-systemd-helper" ]]; then
+  # Manual init script handling
+  deb-systemd-helper unmask jellyfin.service >/dev/null || true
+  # was-enabled defaults to true, so new installations run enable.
+  if deb-systemd-helper --quiet was-enabled jellyfin.service; then
+    # Enables the unit on first installation, creates new
+    # symlinks on upgrades if the unit file has changed.
+    deb-systemd-helper enable jellyfin.service >/dev/null || true
+  else
+    # Update the statefile to add new symlinks (if any), which need to be
+    # cleaned up on purge. Also remove old symlinks.
+    deb-systemd-helper update-state jellyfin.service >/dev/null || true
+  fi
+fi
+
+# End automatically added section
+# Automatically added by dh_installinit
+if [[ "$1" == "configure" ]] || [[ "$1" == "abort-upgrade" ]]; then
+  if [[ -d "/run/systemd/systemd" ]]; then
+    systemctl --system daemon-reload >/dev/null || true
+    deb-systemd-invoke start jellyfin >/dev/null || true
+  elif [[ -x "/etc/init.d/jellyfin" ]] || [[ -e "/etc/init/jellyfin.conf" ]]; then
+    update-rc.d jellyfin defaults >/dev/null
+    invoke-rc.d jellyfin start || exit $?
+  fi
+fi
+exit 0

+ 81 - 0
debian/postrm

@@ -0,0 +1,81 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+  . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+# In case this system is running systemd, we make systemd reload the unit files
+# to pick up changes.
+if [[ -d /run/systemd/system ]] ; then
+  systemctl --system daemon-reload >/dev/null || true
+fi
+
+case "$1" in
+  purge)
+    echo PURGE | debconf-communicate $NAME > /dev/null 2>&1 || true
+
+    if [[ -x "/etc/init.d/jellyfin" ]] || [[ -e "/etc/init/jellyfin.connf" ]]; then
+      update-rc.d jellyfin remove >/dev/null 2>&1 || true
+    fi
+
+    if [[ -x "/usr/bin/deb-systemd-helper" ]]; then
+      deb-systemd-helper purge jellyfin.service >/dev/null
+      deb-systemd-helper unmask jellyfin.service >/dev/null
+    fi
+
+    # Remove user and group
+    userdel jellyfin > /dev/null 2>&1 || true
+    delgroup --quiet jellyfin > /dev/null 2>&1 || true
+    # Remove config dir
+    if [[ -d $CONFIGDATA ]]; then
+      rm -rf $CONFIGDATA
+    fi
+    # Remove log dir
+    if [[ -d $LOGDATA ]]; then
+      rm -rf $LOGDATA
+    fi
+    # Remove cache dir
+    if [[ -d $CACHEDATA ]]; then
+      rm -rf $CACHEDATA
+    fi
+    # Remove program data dir
+    if [[ -d $PROGRAMDATA ]]; then
+      rm -rf $PROGRAMDATA
+    fi
+    # Remove binary symlink
+    [[ -f /usr/bin/jellyfin ]] && rm /usr/bin/jellyfin
+    # Remove sudoers config
+    [[ -f /etc/sudoers.d/jellyfin-sudoers ]] && rm /etc/sudoers.d/jellyfin-sudoers
+    # Remove anything at the default locations; catches situations where the user moved the defaults
+    [[ -e /etc/jellyfin ]] && rm -rf /etc/jellyfin
+    [[ -e /var/log/jellyfin ]] && rm -rf /var/log/jellyfin
+    [[ -e /var/cache/jellyfin ]] && rm -rf /var/cache/jellyfin
+    [[ -e /var/lib/jellyfin ]] && rm -rf /var/lib/jellyfin
+    ;;
+  remove)
+    if [[ -x "/usr/bin/deb-systemd-helper" ]]; then
+      deb-systemd-helper mask jellyfin.service >/dev/null
+    fi
+    ;;
+  upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+  *)
+    echo "postrm called with unknown argument \`$1'" >&2
+    exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0

+ 78 - 0
debian/preinst

@@ -0,0 +1,78 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+  . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+# In case this system is running systemd, we make systemd reload the unit files
+# to pick up changes.
+if [[ -d /run/systemd/system ]] ; then
+  systemctl --system daemon-reload >/dev/null || true
+fi
+
+case "$1" in
+  install|upgrade)
+    # try graceful termination;
+    if [[ -d /run/systemd/system ]]; then
+      deb-systemd-invoke stop ${NAME}.service > /dev/null 2>&1 || true
+    elif [ -x "/etc/init.d/${NAME}" ] || [ -e "/etc/init/${NAME}.conf" ]; then
+      invoke-rc.d ${NAME} stop > /dev/null 2>&1 || true
+    fi
+    # try and figure out if jellyfin is running
+    PIDFILE=$(find /var/run/ -maxdepth 1 -mindepth 1  -name "jellyfin*.pid" -print -quit)
+    [[ -n "$PIDFILE" ]] && [[ -s "$PIDFILE" ]] && JELLYFIN_PID=$(cat ${PIDFILE})
+    # if its running, let's stop it
+    if [[ -n "$JELLYFIN_PID" ]]; then
+      echo "Stopping Jellyfin!"
+      # if jellyfin is still running, kill it
+      if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+        CPIDS=$(pgrep -P $JELLYFIN_PID)
+        sleep 2 && kill -KILL $CPIDS
+        kill -TERM $CPIDS > /dev/null 2>&1
+      fi
+      sleep 1
+      # if it's still running, show error
+      if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+        echo "Could not successfully stop JellyfinServer, please do so before uninstalling."
+        exit 1
+      else
+        [[ -f $PIDFILE ]] && rm $PIDFILE
+      fi
+    fi
+
+    # Clean up old Emby cruft that can break the user's system
+    [[ -f /etc/sudoers.d/emby ]] && rm -f /etc/sudoers.d/emby
+
+    # If we have existing config, log, or cache dirs in /var/lib/jellyfin, move them into the right place
+    if [[ -d $PROGRAMDATA/config ]]; then
+        mv $PROGRAMDATA/config $CONFIGDATA
+    fi
+    if [[ -d $PROGRAMDATA/logs ]]; then
+        mv $PROGRAMDATA/logs $LOGDATA
+    fi
+    if [[ -d $PROGRAMDATA/logs ]]; then
+        mv $PROGRAMDATA/cache $CACHEDATA
+    fi
+
+    ;;
+  abort-upgrade)
+    ;;
+  *)
+    echo "preinst called with unknown argument \`$1'" >&2
+    exit 1
+    ;;
+esac
+#DEBHELPER#
+
+exit 0

+ 61 - 0
debian/prerm

@@ -0,0 +1,61 @@
+#!/bin/bash
+set -e
+
+NAME=jellyfin
+DEFAULT_FILE=/etc/default/${NAME}
+
+# Source Jellyfin default configuration
+if [[ -f $DEFAULT_FILE ]]; then
+  . $DEFAULT_FILE
+fi
+
+# Data directories for program data (cache, db), configs, and logs
+PROGRAMDATA=${JELLYFIN_DATA_DIRECTORY-/var/lib/$NAME}
+CONFIGDATA=${JELLYFIN_CONFIG_DIRECTORY-/etc/$NAME}
+LOGDATA=${JELLYFIN_LOG_DIRECTORY-/var/log/$NAME}
+CACHEDATA=${JELLYFIN_CACHE_DIRECTORY-/var/cache/$NAME}
+
+case "$1" in
+  remove|upgrade|deconfigure)
+    echo "Stopping Jellyfin!"
+    # try graceful termination;
+    if [[ -d /run/systemd/system ]]; then
+      deb-systemd-invoke stop ${NAME}.service > /dev/null 2>&1 || true
+    elif [ -x "/etc/init.d/${NAME}" ] || [ -e "/etc/init/${NAME}.conf" ]; then
+      invoke-rc.d ${NAME} stop > /dev/null 2>&1 || true
+    fi
+    # Ensure that it is shutdown
+    PIDFILE=$(find /var/run/ -maxdepth 1 -mindepth 1 -name "jellyfin*.pid" -print -quit)
+    [[ -n "$PIDFILE" ]] && [[ -s "$PIDFILE" ]] && JELLYFIN_PID=$(cat ${PIDFILE})
+    # if its running, let's stop it
+    if [[ -n "$JELLYFIN_PID" ]]; then
+      # if jellyfin is still running, kill it
+      if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+        CPIDS=$(pgrep -P $JELLYFIN_PID)
+        sleep 2 && kill -KILL $CPIDS
+        kill -TERM $CPIDS > /dev/null 2>&1
+      fi
+      sleep 1
+      # if it's still running, show error
+      if [[ -n "$(ps -p $JELLYFIN_PID -o pid=)" ]]; then
+        echo "Could not successfully stop Jellyfin, please do so before uninstalling."
+        exit 1
+      else
+        [[ -f $PIDFILE ]] && rm $PIDFILE
+      fi
+    fi
+    if [[ -f /usr/lib/jellyfin/bin/MediaBrowser.Server.Mono.exe.so ]]; then
+      rm /usr/lib/jellyfin/bin/MediaBrowser.Server.Mono.exe.so
+    fi
+    ;;
+  failed-upgrade)
+    ;;
+  *)
+    echo "prerm called with unknown argument \`$1'" >&2
+    exit 1
+    ;;
+esac
+
+#DEBHELPER#
+
+exit 0

+ 66 - 0
debian/rules

@@ -0,0 +1,66 @@
+#! /usr/bin/make -f
+CONFIG := Release
+TERM := xterm
+SHELL := /bin/bash
+WEB_TARGET := $(CURDIR)/MediaBrowser.WebDashboard/jellyfin-web
+WEB_VERSION := $(shell sed -n -e 's/^version: "\(.*\)"/\1/p' $(CURDIR)/build.yaml)
+
+HOST_ARCH := $(shell arch)
+BUILD_ARCH := ${DEB_HOST_MULTIARCH}
+ifeq ($(HOST_ARCH),x86_64)
+    # Building AMD64
+    DOTNETRUNTIME := debian-x64
+    ifeq ($(BUILD_ARCH),arm-linux-gnueabihf)
+        # Cross-building ARM on AMD64
+        DOTNETRUNTIME := debian-arm
+    endif
+    ifeq ($(BUILD_ARCH),aarch64-linux-gnu)
+        # Cross-building ARM on AMD64
+        DOTNETRUNTIME := debian-arm64
+    endif
+endif
+ifeq ($(HOST_ARCH),armv7l)
+    # Building ARM
+    DOTNETRUNTIME := debian-arm
+endif
+ifeq ($(HOST_ARCH),arm64)
+    # Building ARM
+    DOTNETRUNTIME := debian-arm64
+endif
+
+export DH_VERBOSE=1
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+
+%:
+	dh $@
+
+# disable "make check"
+override_dh_auto_test:
+
+# disable stripping debugging symbols
+override_dh_clistrip:
+
+override_dh_auto_build:
+	echo $(WEB_VERSION)
+	# Clone down and build Web frontend
+	mkdir -p $(WEB_TARGET)
+	wget -O web-src.tgz https://github.com/jellyfin/jellyfin-web/archive/v$(WEB_VERSION).tar.gz || wget -O web-src.tgz https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz
+	mkdir -p $(CURDIR)/web
+	tar -xzf web-src.tgz -C $(CURDIR)/web/ --strip 1
+	cd $(CURDIR)/web/ && npm install yarn
+	cd $(CURDIR)/web/ && node_modules/yarn/bin/yarn install
+	mv $(CURDIR)/web/dist/* $(WEB_TARGET)/
+	# Build the application
+	dotnet publish --configuration $(CONFIG) --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) \
+		"-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
+
+override_dh_auto_clean:
+	dotnet clean -maxcpucount:1 --configuration $(CONFIG) Jellyfin.Server || true
+	rm -f  '$(CURDIR)/web-src.tgz'
+	rm -rf '$(CURDIR)/usr'
+	rm -rf '$(CURDIR)/web'
+	rm -rf '$(WEB_TARGET)'
+
+# Force the service name to jellyfin even if we're building jellyfin-nightly
+override_dh_installinit:
+	dh_installinit --name=jellyfin

+ 3 - 0
debian/source.lintian-overrides

@@ -0,0 +1,3 @@
+# This is an override for the following lintian errors:
+jellyfin source: license-problem-md5sum-non-free-file Emby.Drawing/ImageMagick/fonts/webdings.ttf*
+jellyfin source: source-is-missing

+ 1 - 0
debian/source/format

@@ -0,0 +1 @@
+1.0

+ 11 - 0
debian/source/options

@@ -0,0 +1,11 @@
+tar-ignore='.git*'
+tar-ignore='**/.git'
+tar-ignore='**/.hg'
+tar-ignore='**/.vs'
+tar-ignore='**/.vscode'
+tar-ignore='deployment'
+tar-ignore='**/bin'
+tar-ignore='**/obj'
+tar-ignore='**/.nuget'
+tar-ignore='*.deb'
+tar-ignore='ThirdParty'