diff --git a/.copr/Makefile b/.copr/Makefile
deleted file mode 100644
index ba330ada95..0000000000
--- a/.copr/Makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-VERSION := $(shell sed -ne '/^Version:/s/.* *//p' \
- deployment/fedora-package-x64/pkg-src/jellyfin.spec)
-
-deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz:
- curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
- https://github.com/jellyfin/jellyfin-web/archive/v$(VERSION).tar.gz \
- || curl -f -L -o deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz \
- https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz \
-
-srpm: deployment/fedora-package-x64/pkg-src/jellyfin-web-$(VERSION).tar.gz
- cd deployment/fedora-package-x64; \
- SOURCE_DIR=../.. \
- WORKDIR="$${PWD}"; \
- package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
- pkg_src_dir="$${WORKDIR}/pkg-src"; \
- GNU_TAR=1; \
- tar \
- --transform "s,^\.,jellyfin-$(VERSION)," \
- --exclude='.git*' \
- --exclude='**/.git' \
- --exclude='**/.hg' \
- --exclude='**/.vs' \
- --exclude='**/.vscode' \
- --exclude='deployment' \
- --exclude='**/bin' \
- --exclude='**/obj' \
- --exclude='**/.nuget' \
- --exclude='*.deb' \
- --exclude='*.rpm' \
- -czf "pkg-src/jellyfin-$(VERSION).tar.gz" \
- -C $${SOURCE_DIR} ./ || GNU_TAR=0; \
- if [ $${GNU_TAR} -eq 0 ]; then \
- package_temporary_dir="$$(mktemp -d)"; \
- mkdir -p "$${package_temporary_dir}/jellyfin"; \
- tar \
- --exclude='.git*' \
- --exclude='**/.git' \
- --exclude='**/.hg' \
- --exclude='**/.vs' \
- --exclude='**/.vscode' \
- --exclude='deployment' \
- --exclude='**/bin' \
- --exclude='**/obj' \
- --exclude='**/.nuget' \
- --exclude='*.deb' \
- --exclude='*.rpm' \
- -czf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
- -C $${SOURCE_DIR} ./; \
- mkdir -p "$${package_temporary_dir}/jellyfin-$(VERSION)"; \
- tar -xzf "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz" \
- -C "$${package_temporary_dir}/jellyfin-$(VERSION); \
- rm -f "$${package_temporary_dir}/jellyfin/jellyfin-$(VERSION).tar.gz"; \
- tar -czf "$${SOURCE_DIR}/SOURCES/pkg-src/jellyfin-$(VERSION).tar.gz" \
- -C "$${package_temporary_dir}" "jellyfin-$(VERSION); \
- rm -rf $${package_temporary_dir}; \
- fi; \
- rpmbuild -bs pkg-src/jellyfin.spec \
- --define "_sourcedir $$PWD/pkg-src/" \
- --define "_srcrpmdir $(outdir)"
diff --git a/.copr/Makefile b/.copr/Makefile
new file mode 120000
index 0000000000..ec3c90dfd9
--- /dev/null
+++ b/.copr/Makefile
@@ -0,0 +1 @@
+../fedora/Makefile
\ No newline at end of file
diff --git a/deployment/Dockerfile.centos.amd64 b/deployment/Dockerfile.centos.amd64
new file mode 100644
index 0000000000..39788cc0ee
--- /dev/null
+++ b/deployment/Dockerfile.centos.amd64
@@ -0,0 +1,32 @@
+FROM centos:7
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV IS_DOCKER=YES
+
+# Prepare CentOS environment
+RUN yum update -y \
+ && yum install -y epel-release \
+ && yum install -y @buildsys-build rpmdevtools yum-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel git
+
+# Install DotNET SDK
+RUN rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm \
+ && rpmdev-setuptree \
+ && yum install -y dotnet-sdk-${SDK_VERSION}
+
+# Create symlinks and directories
+RUN ln -sf ${SOURCE_DIR}/deployment/build.centos.amd64 /build.sh \
+ && mkdir -p ${SOURCE_DIR}/SPECS \
+ && ln -s ${SOURCE_DIR}/fedora/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && mkdir -p ${SOURCE_DIR}/SOURCES \
+ && ln -s ${SOURCE_DIR}/fedora ${SOURCE_DIR}/SOURCES
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/Dockerfile.fedora.amd64 b/deployment/Dockerfile.fedora.amd64
new file mode 100644
index 0000000000..73148763de
--- /dev/null
+++ b/deployment/Dockerfile.fedora.amd64
@@ -0,0 +1,33 @@
+FROM fedora:31
+# Docker build arguments
+ARG SOURCE_DIR=/jellyfin
+ARG ARTIFACT_DIR=/dist
+ARG SDK_VERSION=3.1
+# Docker run environment
+ENV SOURCE_DIR=/jellyfin
+ENV ARTIFACT_DIR=/dist
+ENV IS_DOCKER=YES
+
+# Prepare Fedora environment
+RUN dnf update -y
+
+# Install build dependencies
+RUN dnf install -y @buildsys-build rpmdevtools git dnf-plugins-core libcurl-devel fontconfig-devel freetype-devel openssl-devel glibc-devel libicu-devel
+
+# Install DotNET SDK
+RUN rpm --import https://packages.microsoft.com/keys/microsoft.asc \
+ && curl -o /etc/yum.repos.d/microsoft-prod.repo https://packages.microsoft.com/config/fedora/$(rpm -E %fedora)/prod.repo \
+ && dnf install -y dotnet-sdk-${SDK_VERSION} dotnet-runtime-${SDK_VERSION}
+
+# Create symlinks and directories
+RUN ln -sf ${SOURCE_DIR}/deployment/build.fedora.amd64 /build.sh \
+ && mkdir -p ${SOURCE_DIR}/SPECS \
+ && ln -s ${SOURCE_DIR}/fedora/jellyfin.spec ${SOURCE_DIR}/SPECS/jellyfin.spec \
+ && mkdir -p ${SOURCE_DIR}/SOURCES \
+ && ln -s ${SOURCE_DIR}/fedora ${SOURCE_DIR}/SOURCES
+
+VOLUME ${SOURCE_DIR}/
+
+VOLUME ${ARTIFACT_DIR}/
+
+ENTRYPOINT ["/build.sh"]
diff --git a/deployment/build.centos.amd64 b/deployment/build.centos.amd64
new file mode 100755
index 0000000000..939bbc45a4
--- /dev/null
+++ b/deployment/build.centos.amd64
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+#= CentOS/RHEL 7+ amd64 .rpm
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Build RPM
+make -f fedora/Makefile srpm outdir=/root/rpmbuild/SRPMS
+rpmbuild --rebuild -bb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
+
+# Move the artifacts out
+mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+rm -f fedora/jellyfin*.tar.gz
+
+popd
diff --git a/deployment/build.fedora.amd64 b/deployment/build.fedora.amd64
new file mode 100755
index 0000000000..8ac99decc1
--- /dev/null
+++ b/deployment/build.fedora.amd64
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+#= Fedora 29+ amd64 .rpm
+
+set -o errexit
+set -o xtrace
+
+# Move to source directory
+pushd ${SOURCE_DIR}
+
+# Build RPM
+make -f fedora/Makefile srpm outdir=/root/rpmbuild/SRPMS
+rpmbuild -rb /root/rpmbuild/SRPMS/jellyfin-*.src.rpm
+
+# Move the artifacts out
+mv /root/rpmbuild/RPMS/x86_64/jellyfin-*.rpm /root/rpmbuild/SRPMS/jellyfin-*.src.rpm ${ARTIFACT_DIR}/
+
+if [[ ${IS_DOCKER} == YES ]]; then
+ chown -Rc $(stat -c %u:%g ${ARTIFACT_DIR}) ${ARTIFACT_DIR}
+fi
+
+rm -f fedora/jellyfin*.tar.gz
+
+popd
diff --git a/fedora/.gitignore b/fedora/.gitignore
new file mode 100644
index 0000000000..6019b98c22
--- /dev/null
+++ b/fedora/.gitignore
@@ -0,0 +1,3 @@
+*.rpm
+*.zip
+*.tar.gz
\ No newline at end of file
diff --git a/fedora/Makefile b/fedora/Makefile
new file mode 100644
index 0000000000..1d2709a2fe
--- /dev/null
+++ b/fedora/Makefile
@@ -0,0 +1,29 @@
+VERSION := $(shell sed -ne '/^Version:/s/.* *//p' fedora/jellyfin.spec)
+
+srpm:
+ cd fedora/; \
+ SOURCE_DIR=.. \
+ WORKDIR="$${PWD}"; \
+ package_temporary_dir="$${WORKDIR}/pkg-dist-tmp"; \
+ pkg_src_dir="$${WORKDIR}"; \
+ GNU_TAR=1; \
+ tar \
+ --transform "s,^\.,jellyfin-server-$(VERSION)," \
+ --exclude='.git*' \
+ --exclude='**/.git' \
+ --exclude='**/.hg' \
+ --exclude='**/.vs' \
+ --exclude='**/.vscode' \
+ --exclude='deployment' \
+ --exclude='**/bin' \
+ --exclude='**/obj' \
+ --exclude='**/.nuget' \
+ --exclude='*.deb' \
+ --exclude='*.rpm' \
+ --exclude='jellyfin-server-$(VERSION).tar.gz' \
+ -czf "jellyfin-server-$(VERSION).tar.gz" \
+ -C $${SOURCE_DIR} ./
+ cd fedora/; \
+ rpmbuild -bs jellyfin.spec \
+ --define "_sourcedir $$PWD/" \
+ --define "_srcrpmdir $(outdir)"
diff --git a/fedora/README.md b/fedora/README.md
new file mode 100644
index 0000000000..7ed6f7efc6
--- /dev/null
+++ b/fedora/README.md
@@ -0,0 +1,43 @@
+# Jellyfin RPM
+
+## Build Fedora Package with docker
+
+Change into this directory `cd rpm-package`
+Run the build script `./build-fedora-rpm.sh`.
+Resulting RPM and src.rpm will be in `../../jellyfin-*.rpm`
+
+## ffmpeg
+
+The RPM package for Fedora/CentOS requires some additional repositories as ffmpeg is not in the main repositories.
+
+```shell
+# ffmpeg from RPMfusion free
+# Fedora
+$ sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm
+# CentOS 7
+$ sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
+```
+
+## ISO mounting
+
+To allow Jellyfin to mount/umount ISO files uncomment these two lines in `/etc/sudoers.d/jellyfin-sudoers`
+```
+# %jellyfin ALL=(ALL) NOPASSWD: /bin/mount
+# %jellyfin ALL=(ALL) NOPASSWD: /bin/umount
+```
+
+## Building with dotnet
+
+Jellyfin is build with `--self-contained` so no dotnet required for runtime.
+
+```shell
+# dotnet required for building the RPM
+# Fedora
+$ sudo dnf copr enable @dotnet-sig/dotnet
+# CentOS
+$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
+```
+
+## TODO
+
+- [ ] OpenSUSE
\ No newline at end of file
diff --git a/fedora/jellyfin-firewalld.xml b/fedora/jellyfin-firewalld.xml
new file mode 100644
index 0000000000..538c5d65f8
--- /dev/null
+++ b/fedora/jellyfin-firewalld.xml
@@ -0,0 +1,9 @@
+
+
+ Jellyfin
+ The Free Software Media System.
+
+
+
+
+
diff --git a/fedora/jellyfin.env b/fedora/jellyfin.env
new file mode 100644
index 0000000000..de48f13af5
--- /dev/null
+++ b/fedora/jellyfin.env
@@ -0,0 +1,34 @@
+# Jellyfin default configuration options
+
+# Use this file to override the default configurations; add additional
+# options with JELLYFIN_ADD_OPTS.
+
+# To override the user or this config file's location, use
+# /etc/systemd/system/jellyfin.service.d/override.conf
+
+#
+# This is a POSIX shell fragment
+#
+
+#
+# General options
+#
+
+# Program directories
+JELLYFIN_DATA_DIR="/var/lib/jellyfin"
+JELLYFIN_CONFIG_DIR="/etc/jellyfin"
+JELLYFIN_LOG_DIR="/var/log/jellyfin"
+JELLYFIN_CACHE_DIR="/var/cache/jellyfin"
+
+# In-App service control
+JELLYFIN_RESTART_OPT="--restartpath=/usr/libexec/jellyfin/restart.sh"
+
+# [OPTIONAL] ffmpeg binary paths, overriding the UI-configured values
+#JELLYFIN_FFMPEG_OPT="--ffmpeg=/usr/bin/ffmpeg"
+
+# [OPTIONAL] run Jellyfin as a headless service
+#JELLYFIN_SERVICE_OPT="--service"
+
+# [OPTIONAL] run Jellyfin without the web app
+#JELLYFIN_NOWEBAPP_OPT="--noautorunwebapp"
+
diff --git a/fedora/jellyfin.override.conf b/fedora/jellyfin.override.conf
new file mode 100644
index 0000000000..8652450bb4
--- /dev/null
+++ b/fedora/jellyfin.override.conf
@@ -0,0 +1,7 @@
+# Jellyfin systemd configuration options
+
+# Use this file to override the user or environment file location.
+
+[Service]
+#User = jellyfin
+#EnvironmentFile = /etc/sysconfig/jellyfin
diff --git a/fedora/jellyfin.service b/fedora/jellyfin.service
new file mode 100644
index 0000000000..f3dc594b1c
--- /dev/null
+++ b/fedora/jellyfin.service
@@ -0,0 +1,15 @@
+[Unit]
+After=network.target
+Description=Jellyfin is a free software media system that puts you in control of managing and streaming your media.
+
+[Service]
+EnvironmentFile=/etc/sysconfig/jellyfin
+WorkingDirectory=/var/lib/jellyfin
+ExecStart=/usr/bin/jellyfin ${JELLYFIN_RESTART_OPT} ${JELLYFIN_FFMPEG_OPT} ${JELLYFIN_SERVICE_OPT} ${JELLYFIN_NOWEBAPP_OPT}
+TimeoutSec=15
+Restart=on-failure
+User=jellyfin
+Group=jellyfin
+
+[Install]
+WantedBy=multi-user.target
diff --git a/fedora/jellyfin.spec b/fedora/jellyfin.spec
new file mode 100644
index 0000000000..e6a3170b56
--- /dev/null
+++ b/fedora/jellyfin.spec
@@ -0,0 +1,158 @@
+%global debug_package %{nil}
+# Set the dotnet runtime
+%if 0%{?fedora}
+%global dotnet_runtime fedora-x64
+%else
+%global dotnet_runtime centos-x64
+%endif
+
+Name: jellyfin-server
+Version: 10.6.0
+Release: 1%{?dist}
+Summary: The Free Software Media Browser
+License: GPLv2
+URL: https://jellyfin.media
+# Jellyfin Server tarball created by `make -f .copr/Makefile srpm`, real URL ends with `v%{version}.tar.gz`
+Source0: jellyfin-server-%{version}.tar.gz
+Source11: jellyfin.service
+Source12: jellyfin.env
+Source13: jellyfin.sudoers
+Source14: restart.sh
+Source15: jellyfin.override.conf
+Source16: jellyfin-firewalld.xml
+
+%{?systemd_requires}
+BuildRequires: systemd
+Requires(pre): shadow-utils
+BuildRequires: libcurl-devel, fontconfig-devel, freetype-devel, openssl-devel, glibc-devel, libicu-devel
+Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
+# Requirements not packaged in main repos
+# COPR @dotnet-sig/dotnet or
+# https://packages.microsoft.com/rhel/7/prod/
+BuildRequires: dotnet-runtime-3.1, dotnet-sdk-3.1
+# RPMfusion free
+Requires: ffmpeg
+
+# Disable Automatic Dependency Processing
+AutoReqProv: no
+
+%description
+Jellyfin is a free software media system that puts you in control of managing and streaming your media.
+
+
+%prep
+%autosetup -n jellyfin-server-%{version} -b 0
+
+%build
+
+%install
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime %{dotnet_runtime} \
+ "-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
+%{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/jellyfin/LICENSE
+%{__install} -D -m 0644 %{SOURCE15} %{buildroot}%{_sysconfdir}/systemd/system/jellyfin.service.d/override.conf
+%{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/jellyfin/logging.json
+%{__mkdir} -p %{buildroot}%{_bindir}
+tee %{buildroot}%{_bindir}/jellyfin << EOF
+#!/bin/sh
+exec %{_libdir}/jellyfin/jellyfin \${@}
+EOF
+%{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin
+%{__mkdir} -p %{buildroot}%{_sysconfdir}/jellyfin
+%{__mkdir} -p %{buildroot}%{_var}/log/jellyfin
+%{__mkdir} -p %{buildroot}%{_var}/cache/jellyfin
+
+%{__install} -D -m 0644 %{SOURCE11} %{buildroot}%{_unitdir}/jellyfin.service
+%{__install} -D -m 0644 %{SOURCE12} %{buildroot}%{_sysconfdir}/sysconfig/jellyfin
+%{__install} -D -m 0600 %{SOURCE13} %{buildroot}%{_sysconfdir}/sudoers.d/jellyfin-sudoers
+%{__install} -D -m 0755 %{SOURCE14} %{buildroot}%{_libexecdir}/jellyfin/restart.sh
+%{__install} -D -m 0644 %{SOURCE16} %{buildroot}%{_prefix}/lib/firewalld/services/jellyfin.xml
+
+%files
+%attr(755,root,root) %{_bindir}/jellyfin
+%{_libdir}/jellyfin/*.json
+%{_libdir}/jellyfin/*.dll
+%{_libdir}/jellyfin/*.so
+%{_libdir}/jellyfin/*.a
+%{_libdir}/jellyfin/createdump
+# Needs 755 else only root can run it since binary build by dotnet is 722
+%attr(755,root,root) %{_libdir}/jellyfin/jellyfin
+%{_libdir}/jellyfin/SOS_README.md
+%{_unitdir}/jellyfin.service
+%{_libexecdir}/jellyfin/restart.sh
+%{_prefix}/lib/firewalld/services/jellyfin.xml
+%attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/jellyfin
+%config %{_sysconfdir}/sysconfig/jellyfin
+%config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/jellyfin-sudoers
+%config(noreplace) %{_sysconfdir}/systemd/system/jellyfin.service.d/override.conf
+%config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/jellyfin/logging.json
+%attr(750,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin
+%attr(-,jellyfin,jellyfin) %dir %{_var}/log/jellyfin
+%attr(750,jellyfin,jellyfin) %dir %{_var}/cache/jellyfin
+%{_datadir}/licenses/jellyfin/LICENSE
+
+%pre
+getent group jellyfin >/dev/null || groupadd -r jellyfin
+getent passwd jellyfin >/dev/null || \
+ useradd -r -g jellyfin -d %{_sharedstatedir}/jellyfin -s /sbin/nologin \
+ -c "Jellyfin default user" jellyfin
+exit 0
+
+%post
+# Move existing configuration cache and logs to their new locations and symlink them.
+if [ $1 -gt 1 ] ; then
+ service_state=$(systemctl is-active jellyfin.service)
+ if [ "${service_state}" = "active" ]; then
+ systemctl stop jellyfin.service
+ fi
+ if [ ! -L %{_sharedstatedir}/jellyfin/config ]; then
+ mv %{_sharedstatedir}/jellyfin/config/* %{_sysconfdir}/jellyfin/
+ rmdir %{_sharedstatedir}/jellyfin/config
+ ln -sf %{_sysconfdir}/jellyfin %{_sharedstatedir}/jellyfin/config
+ fi
+ if [ ! -L %{_sharedstatedir}/jellyfin/logs ]; then
+ mv %{_sharedstatedir}/jellyfin/logs/* %{_var}/log/jellyfin
+ rmdir %{_sharedstatedir}/jellyfin/logs
+ ln -sf %{_var}/log/jellyfin %{_sharedstatedir}/jellyfin/logs
+ fi
+ if [ ! -L %{_sharedstatedir}/jellyfin/cache ]; then
+ mv %{_sharedstatedir}/jellyfin/cache/* %{_var}/cache/jellyfin
+ rmdir %{_sharedstatedir}/jellyfin/cache
+ ln -sf %{_var}/cache/jellyfin %{_sharedstatedir}/jellyfin/cache
+ fi
+ if [ "${service_state}" = "active" ]; then
+ systemctl start jellyfin.service
+ fi
+fi
+%systemd_post jellyfin.service
+
+%preun
+%systemd_preun jellyfin.service
+
+%postun
+%systemd_postun_with_restart jellyfin.service
+
+%changelog
+* Mon Mar 23 2020 Jellyfin Packaging Team
+- Forthcoming stable release
+* Fri Oct 11 2019 Jellyfin Packaging Team
+- New upstream version 10.5.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.5.0
+* Sat Aug 31 2019 Jellyfin Packaging Team
+- New upstream version 10.4.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.4.0
+* Wed Jul 24 2019 Jellyfin Packaging Team
+- New upstream version 10.3.7; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.7
+* Sat Jul 06 2019 Jellyfin Packaging Team
+- New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
+* Sun Jun 09 2019 Jellyfin Packaging Team
+- New upstream version 10.3.5; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.5
+* Thu Jun 06 2019 Jellyfin Packaging Team
+- New upstream version 10.3.4; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.4
+* Fri May 17 2019 Jellyfin Packaging Team
+- New upstream version 10.3.3; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.3
+* Tue Apr 30 2019 Jellyfin Packaging Team
+- New upstream version 10.3.2; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.2
+* Sat Apr 20 2019 Jellyfin Packaging Team
+- New upstream version 10.3.1; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.1
+* Fri Apr 19 2019 Jellyfin Packaging Team
+- New upstream version 10.3.0; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.0
diff --git a/fedora/jellyfin.sudoers b/fedora/jellyfin.sudoers
new file mode 100644
index 0000000000..dd245af4b8
--- /dev/null
+++ b/fedora/jellyfin.sudoers
@@ -0,0 +1,19 @@
+# Allow jellyfin group to start, stop and restart itself
+Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
+Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
+Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
+
+
+jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSTEMD
+jellyfin ALL=(ALL) NOPASSWD: STOPSERVER_SYSTEMD
+
+Defaults!RESTARTSERVER_SYSTEMD !requiretty
+Defaults!STARTSERVER_SYSTEMD !requiretty
+Defaults!STOPSERVER_SYSTEMD !requiretty
+
+# Allow the server to mount iso images
+jellyfin ALL=(ALL) NOPASSWD: /bin/mount
+jellyfin ALL=(ALL) NOPASSWD: /bin/umount
+
+Defaults:jellyfin !requiretty
diff --git a/fedora/restart.sh b/fedora/restart.sh
new file mode 100755
index 0000000000..9e53efecd0
--- /dev/null
+++ b/fedora/restart.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# restart.sh - Jellyfin server restart script
+# Part of the Jellyfin project (https://github.com/jellyfin)
+#
+# This script restarts the Jellyfin daemon on Linux when using
+# the Restart button on the admin dashboard. It supports the
+# systemctl, service, and traditional /etc/init.d (sysv) restart
+# methods, chosen automatically by which one is found first (in
+# that order).
+#
+# This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
+
+get_service_command() {
+ for command in systemctl service; do
+ if which $command &>/dev/null; then
+ echo $command && return
+ fi
+ done
+ echo "sysv"
+}
+
+cmd="$( get_service_command )"
+echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
+case $cmd in
+ 'systemctl')
+ echo "sleep 2; /usr/bin/sudo $( which systemctl ) restart jellyfin" | at now
+ ;;
+ 'service')
+ echo "sleep 2; /usr/bin/sudo $( which service ) jellyfin restart" | at now
+ ;;
+ 'sysv')
+ echo "sleep 2; /usr/bin/sudo /etc/init.d/jellyfin restart" | at now
+ ;;
+esac
+exit 0