From a2c1ec0de341b1ce1cdfe7404901d5350d1f2929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Sat, 5 Jan 2019 11:14:24 +0100 Subject: [PATCH 01/21] Add RPM package spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/.gitignore | 3 + rpm-package/README.md | 44 ++++++++++++ rpm-package/jellyfin.env | 27 +++++++ rpm-package/jellyfin.service | 15 ++++ rpm-package/jellyfin.spec | 135 +++++++++++++++++++++++++++++++++++ rpm-package/jellyfin.sudoers | 19 +++++ rpm-package/restart.sh | 6 ++ rpm-package/update-db.sh | 12 ++++ 8 files changed, 261 insertions(+) create mode 100644 rpm-package/.gitignore create mode 100644 rpm-package/README.md create mode 100644 rpm-package/jellyfin.env create mode 100644 rpm-package/jellyfin.service create mode 100644 rpm-package/jellyfin.spec create mode 100644 rpm-package/jellyfin.sudoers create mode 100755 rpm-package/restart.sh create mode 100755 rpm-package/update-db.sh diff --git a/rpm-package/.gitignore b/rpm-package/.gitignore new file mode 100644 index 0000000000..6019b98c22 --- /dev/null +++ b/rpm-package/.gitignore @@ -0,0 +1,3 @@ +*.rpm +*.zip +*.tar.gz \ No newline at end of file diff --git a/rpm-package/README.md b/rpm-package/README.md new file mode 100644 index 0000000000..1fba9eaadd --- /dev/null +++ b/rpm-package/README.md @@ -0,0 +1,44 @@ +# unoffical jellyfin RPM + + + +## ffmpeg + +The RPM package for Fedora/CentOS requires some additional repos 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 +``` + +## In-App service control + +A sample sudoers-policy is located at `/usr/share/jellyfin/jellyfin-sudoers` which you need to review and copy to `/etc/sudoers.d`. +Use `install -D -m 0600 -o root -g root /usr/share/jellyfin/jellyfin-sudoers /etc/sudoers.d/jellyfin-sudoers` for the right permissions. +Finally uncomment JELLYFIN_RESTART_OPT in /etc/sysconfig/jellyfin and restart the service. + +## Database patching +To fix the paths in the emby database for a migration to jellyfin run the script: +```shell +/usr/share/jellyfin/update-db-paths.sh +``` +PS: Please **backup your emby database beforehand**. + +## 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/rpm-package/jellyfin.env b/rpm-package/jellyfin.env new file mode 100644 index 0000000000..a935db68ae --- /dev/null +++ b/rpm-package/jellyfin.env @@ -0,0 +1,27 @@ +# 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 +# + +# Tell jellyfin wich ffmpeg/ffprobe to use +# JELLYFIN_FFMPEG="-ffmpeg /usr/bin/ffmpeg -ffprobe /usr/bin/ffprobe" + +# Data directory +JELLYFIN_DATA="/var/lib/jellyfin" +# To enable In-App service control uncomment JELLYFIN_RESTART_OPT +# and install the sample sudo policy to Allow jellyfin group to start, stop and restart itself. +# /usr/share/jellyfin/jellyfin-sudoers to /etc/sudoers.d/ +# JELLYFIN_RESTART_OPT="-restartpath /usr/libexec/jellyfin/restart.sh" +# Additional options for the binary +JELLYFIN_ADD_OPTS="" \ No newline at end of file diff --git a/rpm-package/jellyfin.service b/rpm-package/jellyfin.service new file mode 100644 index 0000000000..26d82a825f --- /dev/null +++ b/rpm-package/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 -programdata ${JELLYFIN_DATA} ${JELLYFIN_RESTART_OPT} ${JELLYFIN_ADD_OPTS} ${JELLYFIN_FFMPEG} +TimeoutSec=15 +Restart=on-failure +User=jellyfin +Group=jellyfin + +[Install] +WantedBy=multi-user.target diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec new file mode 100644 index 0000000000..af2f929b18 --- /dev/null +++ b/rpm-package/jellyfin.spec @@ -0,0 +1,135 @@ +%global debug_package %{nil} +# jellyfin commit to package +%global commit f8a720d3d8adbdb1f092a42e592dae37ba3f25bb +%global gittag v3.5.2-5 +%global shortcommit %(c=%{commit}; echo ${c:0:7}) +# Taglib-sharp commit of the submodule since github archive doesn't include submodules +%global taglib_commit ee5ab21742b71fd1b87ee24895582327e9e04776 +%global taglib_shortcommit %(c=%{taglib_commit}; echo ${c:0:7}) + +Name: jellyfin +Version: 3.5.2.git%{shortcommit} +Release: 3%{?dist} +Summary: The Free Software Media Browser. +License: GPLv2 +URL: https://jellyfin.media +Source0: https://github.com/%{name}/%{name}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz +Source1: jellyfin.service +Source2: jellyfin.env +Source3: jellyfin.sudoers +Source4: restart.sh +Source5: https://github.com/mono/taglib-sharp/archive/%{taglib_commit}/taglib-sharp-%{taglib_shortcommit}.tar.gz +Source6: update-db.sh + +%{?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 +BuildRequires: dotnet-sdk-2.2 +# RPMfusion free +Requires: ffmpeg + +# For the update-db-paths.sh script to fix emby paths to jellyfin +Recommends: sqlite + +# Fedora has openssl1.1 which is incompatible with dotnet +%{?fedora:Requires: compat-openssl10} +# Disable Automatic Dependency Processing for Centos +%{?el7:AutoReqProv: no} + +%description +Jellyfin is a free software media system that puts you in control of managing and streaming your media. + + +%prep +%autosetup -n %{name}-%{commit} +pushd ThirdParty + tar xf %{S:5} + rm -rf taglib-sharp + mv taglib-sharp-%{taglib_commit} taglib-sharp +popd + +%build +export DOTNET_CLI_TELEMETRY_OPTOUT=1 +export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 +dotnet build --runtime linux-x64 + +%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 linux-x64 +%{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE +%{__install} -D -m 0644 debian/conf/jellyfin.service.conf %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf +%{__mkdir} -p %{buildroot}%{_bindir} +tee %{buildroot}%{_bindir}/jellyfin << EOF +#!/bin/sh +exec %{_libdir}/%{name}/%{name} \${@} +EOF +%{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin +%{__install} -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service +%{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} +%{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_datadir}/%{name}/%{name}-sudoers +%{__install} -D -m 0750 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh +%{__install} -D -m 0755 %{SOURCE6} %{buildroot}%{_datadir}/%{name}/update-db-paths.sh + +%files +%{_libdir}/%{name}/dashboard-ui/* +%attr(755,root,root) %{_bindir}/%{name} +%attr(644,root,root) %{_libdir}/%{name}/*.json +%attr(644,root,root) %{_libdir}/%{name}/*.pdb +%attr(755,root,root) %{_libdir}/%{name}/*.dll +%attr(755,root,root) %{_libdir}/%{name}/*.so +%attr(755,root,root) %{_libdir}/%{name}/*.a +%attr(755,root,root) %{_libdir}/%{name}/createdump +%attr(755,root,root) %{_libdir}/%{name}/jellyfin +%attr(644,root,root) %{_libdir}/%{name}/sosdocsunix.txt +%attr(644,root,root) %{_unitdir}/%{name}.service +%attr(600,root,root) %{_datadir}/%{name}/%{name}-sudoers +%attr(755,root,root) %{_datadir}/%{name}/update-db-paths.sh +%attr(750,root,root) %{_libexecdir}/%{name}/restart.sh +%config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf +%attr(-,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin +%if 0%{?fedora} +%license LICENSE +%else +%{_datadir}/licenses/%{name}/LICENSE +%endif + +%pre +getent group jellyfin >/dev/null || groupadd -r jellyfin +getent passwd jellyfin >/dev/null || \ + useradd -r -g jellyfin -d %{_sharedstatedir}/jellyfin -s /sbin/nologin \ + -c "Jellyfin default user" jellyfin +exit 0 + +%post +%systemd_post jellyfin.service + +%preun +%systemd_preun jellyfin.service + +%postun +%systemd_postun_with_restart jellyfin.service + +%posttrans +echo -e "\e[31m +To enable In-App service control copy the sudo-policy (be sure to check it contents) with: + +install -D -m 0600 %{_datadir}/%{name}/%{name}-sudoers %{_sysconfdir}/sudoers.d/%{name}-sudoers + +and uncomment JELLYFIN_RESTART_OPT in %{_sysconfdir}/sysconfig/%{name} \e[0m" >> /dev/stderr + +%changelog +* Sat Jan 05 2019 Thomas Büttner - 3.5.2-3 +- Added script for database migration + +* Fri Jan 04 2019 Thomas Büttner - 3.5.2-2 +- Moved sudoers policy and added a note for In-App service control +- Set Restart=on-failure in jellyfin.service + +* Thu Jan 03 2019 Thomas Büttner - 3.5.2-1 +- Initial RPM package diff --git a/rpm-package/jellyfin.sudoers b/rpm-package/jellyfin.sudoers new file mode 100644 index 0000000000..b31d52f7ec --- /dev/null +++ b/rpm-package/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 + +# Uncomment to 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/rpm-package/restart.sh b/rpm-package/restart.sh new file mode 100755 index 0000000000..e84dca587f --- /dev/null +++ b/rpm-package/restart.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +NAME=jellyfin +restart_cmd="/usr/bin/systemctl restart ${NAME}" +echo "sleep 2; sudo $restart_cmd > /dev/null 2>&1" | at now > /dev/null 2>&1 +exit 0 \ No newline at end of file diff --git a/rpm-package/update-db.sh b/rpm-package/update-db.sh new file mode 100755 index 0000000000..5866495126 --- /dev/null +++ b/rpm-package/update-db.sh @@ -0,0 +1,12 @@ +#!/bin/sh +db=${1:-/var/lib/jellyfin/data/library.db} +embypath=${2:-/var/lib/emby-server} +jellyfinpath=${3:-/var/lib/jellyfin} +sqlite3 ${db} << SQL +UPDATE Chapters2 +SET ImagePath=REPLACE(ImagePath, '${embypath}', '${jellyfinpath}'); +UPDATE TypedBaseItems +SET Path=REPLACE(Path, '${embypath}', '${jellyfinpath}'); +UPDATE TypedBaseItems +SET data=REPLACE(data, '${embypath}', '${jellyfinpath}'); +SQL From a968913e9f855a99435c7506431a5ec3d3ba1f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Sat, 5 Jan 2019 11:22:03 +0100 Subject: [PATCH 02/21] CentOS Build fails since it has no Recommends: tag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/README.md | 1 + rpm-package/jellyfin.spec | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/rpm-package/README.md b/rpm-package/README.md index 1fba9eaadd..bbc8e7348e 100644 --- a/rpm-package/README.md +++ b/rpm-package/README.md @@ -21,6 +21,7 @@ Use `install -D -m 0600 -o root -g root /usr/share/jellyfin/jellyfin-sudoers /et Finally uncomment JELLYFIN_RESTART_OPT in /etc/sysconfig/jellyfin and restart the service. ## Database patching +You may need to install sqlite since CentOS has no `Recommends:` with `yum install sqlite`. To fix the paths in the emby database for a migration to jellyfin run the script: ```shell /usr/share/jellyfin/update-db-paths.sh diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index af2f929b18..5cadf779d5 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -33,7 +33,7 @@ BuildRequires: dotnet-sdk-2.2 Requires: ffmpeg # For the update-db-paths.sh script to fix emby paths to jellyfin -Recommends: sqlite +%{?fedora:Recommends: sqlite} # Fedora has openssl1.1 which is incompatible with dotnet %{?fedora:Requires: compat-openssl10} From 0eafc3fd1136a4c1356812d89650331002b9b666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Sat, 5 Jan 2019 17:47:57 +0100 Subject: [PATCH 03/21] Update update-db.sh --- rpm-package/update-db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpm-package/update-db.sh b/rpm-package/update-db.sh index 5866495126..92c13cb8a9 100755 --- a/rpm-package/update-db.sh +++ b/rpm-package/update-db.sh @@ -1,7 +1,7 @@ #!/bin/sh -db=${1:-/var/lib/jellyfin/data/library.db} embypath=${2:-/var/lib/emby-server} jellyfinpath=${3:-/var/lib/jellyfin} +db=${1:-${jellyfinpath}/data/library.db} sqlite3 ${db} << SQL UPDATE Chapters2 SET ImagePath=REPLACE(ImagePath, '${embypath}', '${jellyfinpath}'); From b3de385d5b94166b32c67c63345c282e6564c11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Sat, 5 Jan 2019 21:30:45 +0100 Subject: [PATCH 04/21] Re-add sudo policy for in-app service restart. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/README.md | 11 +++++++---- rpm-package/jellyfin.env | 6 ++---- rpm-package/jellyfin.spec | 17 ++++++----------- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/rpm-package/README.md b/rpm-package/README.md index bbc8e7348e..84aded8c6a 100644 --- a/rpm-package/README.md +++ b/rpm-package/README.md @@ -14,11 +14,14 @@ $ sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-re $ sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm ``` -## In-App service control +## ISO mounting + +To allow jellyfin to mount/umonut ISO files uncomment these two lines in `/etc/sudoers.d/jellyfin-sudoers` +``` +# %jellyfin ALL=(ALL) NOPASSWD: /bin/mount +# %jellyfin ALL=(ALL) NOPASSWD: /bin/umount +``` -A sample sudoers-policy is located at `/usr/share/jellyfin/jellyfin-sudoers` which you need to review and copy to `/etc/sudoers.d`. -Use `install -D -m 0600 -o root -g root /usr/share/jellyfin/jellyfin-sudoers /etc/sudoers.d/jellyfin-sudoers` for the right permissions. -Finally uncomment JELLYFIN_RESTART_OPT in /etc/sysconfig/jellyfin and restart the service. ## Database patching You may need to install sqlite since CentOS has no `Recommends:` with `yum install sqlite`. diff --git a/rpm-package/jellyfin.env b/rpm-package/jellyfin.env index a935db68ae..2e2b2ba8e5 100644 --- a/rpm-package/jellyfin.env +++ b/rpm-package/jellyfin.env @@ -19,9 +19,7 @@ # Data directory JELLYFIN_DATA="/var/lib/jellyfin" -# To enable In-App service control uncomment JELLYFIN_RESTART_OPT -# and install the sample sudo policy to Allow jellyfin group to start, stop and restart itself. -# /usr/share/jellyfin/jellyfin-sudoers to /etc/sudoers.d/ -# JELLYFIN_RESTART_OPT="-restartpath /usr/libexec/jellyfin/restart.sh" +# In-App service control +JELLYFIN_RESTART_OPT="-restartpath /usr/libexec/jellyfin/restart.sh" # Additional options for the binary JELLYFIN_ADD_OPTS="" \ No newline at end of file diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 5cadf779d5..090f6e319b 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -9,7 +9,7 @@ Name: jellyfin Version: 3.5.2.git%{shortcommit} -Release: 3%{?dist} +Release: 4%{?dist} Summary: The Free Software Media Browser. License: GPLv2 URL: https://jellyfin.media @@ -71,7 +71,7 @@ EOF %{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin %{__install} -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service %{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} -%{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_datadir}/%{name}/%{name}-sudoers +%{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers %{__install} -D -m 0750 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh %{__install} -D -m 0755 %{SOURCE6} %{buildroot}%{_datadir}/%{name}/update-db-paths.sh @@ -87,10 +87,10 @@ EOF %attr(755,root,root) %{_libdir}/%{name}/jellyfin %attr(644,root,root) %{_libdir}/%{name}/sosdocsunix.txt %attr(644,root,root) %{_unitdir}/%{name}.service -%attr(600,root,root) %{_datadir}/%{name}/%{name}-sudoers %attr(755,root,root) %{_datadir}/%{name}/update-db-paths.sh %attr(750,root,root) %{_libexecdir}/%{name}/restart.sh %config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers %config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf %attr(-,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin %if 0%{?fedora} @@ -115,15 +115,10 @@ exit 0 %postun %systemd_postun_with_restart jellyfin.service -%posttrans -echo -e "\e[31m -To enable In-App service control copy the sudo-policy (be sure to check it contents) with: - -install -D -m 0600 %{_datadir}/%{name}/%{name}-sudoers %{_sysconfdir}/sudoers.d/%{name}-sudoers - -and uncomment JELLYFIN_RESTART_OPT in %{_sysconfdir}/sysconfig/%{name} \e[0m" >> /dev/stderr - %changelog +* Sat Jan 05 2019 Thomas Büttner - 3.5.2-4 +- Re-added sudoers policy + * Sat Jan 05 2019 Thomas Büttner - 3.5.2-3 - Added script for database migration From 90ab6a40fcdc97bd845c67e65f916210de59552d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Sat, 5 Jan 2019 22:06:10 +0100 Subject: [PATCH 05/21] add Firewalld serivce.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin-firewalld.xml | 9 +++++++++ rpm-package/jellyfin.spec | 8 +++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 rpm-package/jellyfin-firewalld.xml diff --git a/rpm-package/jellyfin-firewalld.xml b/rpm-package/jellyfin-firewalld.xml new file mode 100644 index 0000000000..062db370da --- /dev/null +++ b/rpm-package/jellyfin-firewalld.xml @@ -0,0 +1,9 @@ + + + Jellyfin + The Free Software Media System. + + + + + \ No newline at end of file diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 090f6e319b..17da904269 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -9,7 +9,7 @@ Name: jellyfin Version: 3.5.2.git%{shortcommit} -Release: 4%{?dist} +Release: 5%{?dist} Summary: The Free Software Media Browser. License: GPLv2 URL: https://jellyfin.media @@ -20,6 +20,7 @@ Source3: jellyfin.sudoers Source4: restart.sh Source5: https://github.com/mono/taglib-sharp/archive/%{taglib_commit}/taglib-sharp-%{taglib_shortcommit}.tar.gz Source6: update-db.sh +Source7: jellyfin-firewalld.xml %{?systemd_requires} BuildRequires: systemd @@ -74,6 +75,7 @@ EOF %{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers %{__install} -D -m 0750 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh %{__install} -D -m 0755 %{SOURCE6} %{buildroot}%{_datadir}/%{name}/update-db-paths.sh +%{__install} -D -m 0755 %{SOURCE7} %{buildroot}%{_prefix}/lib/firewalld/service/%{name}.xml %files %{_libdir}/%{name}/dashboard-ui/* @@ -89,6 +91,7 @@ EOF %attr(644,root,root) %{_unitdir}/%{name}.service %attr(755,root,root) %{_datadir}/%{name}/update-db-paths.sh %attr(750,root,root) %{_libexecdir}/%{name}/restart.sh +%attr(644,root,root) %{_prefix}/lib/firewalld/service/%{name}.xml %config(noreplace) %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers %config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf @@ -116,6 +119,9 @@ exit 0 %systemd_postun_with_restart jellyfin.service %changelog +* Sat Jan 05 2019 Thomas Büttner - 3.5.2-5 +- Add firewalld service.xml + * Sat Jan 05 2019 Thomas Büttner - 3.5.2-4 - Re-added sudoers policy From 79229fe3ae80bd0f10d2aadb09737170ce0af936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Sat, 5 Jan 2019 22:44:46 +0100 Subject: [PATCH 06/21] bump to 10.0.0 and use simple version scheme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 17da904269..5b53bd005e 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -1,19 +1,17 @@ %global debug_package %{nil} -# jellyfin commit to package -%global commit f8a720d3d8adbdb1f092a42e592dae37ba3f25bb -%global gittag v3.5.2-5 -%global shortcommit %(c=%{commit}; echo ${c:0:7}) +# jellyfin tag to package +%global gittag v10.0.0 # Taglib-sharp commit of the submodule since github archive doesn't include submodules %global taglib_commit ee5ab21742b71fd1b87ee24895582327e9e04776 %global taglib_shortcommit %(c=%{taglib_commit}; echo ${c:0:7}) Name: jellyfin -Version: 3.5.2.git%{shortcommit} -Release: 5%{?dist} +Version: 10.0.0 +Release: 1%{?dist} Summary: The Free Software Media Browser. License: GPLv2 URL: https://jellyfin.media -Source0: https://github.com/%{name}/%{name}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz +Source0: https://github.com/%{name}/%{name}/archive/%{gittag}.tar.gz Source1: jellyfin.service Source2: jellyfin.env Source3: jellyfin.sudoers @@ -46,7 +44,7 @@ Jellyfin is a free software media system that puts you in control of managing an %prep -%autosetup -n %{name}-%{commit} +%autosetup -n %{name}-%{version} pushd ThirdParty tar xf %{S:5} rm -rf taglib-sharp @@ -119,6 +117,9 @@ exit 0 %systemd_postun_with_restart jellyfin.service %changelog +* Sat Jan 05 2019 Thomas Büttner - 10.0.0-1 +- Bump version to 10.0.0 + * Sat Jan 05 2019 Thomas Büttner - 3.5.2-5 - Add firewalld service.xml From cbff18edb5ce0921cad626264708e3de4ebe0832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Mon, 7 Jan 2019 18:51:37 +0100 Subject: [PATCH 07/21] Add logging and config directories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.env | 6 ++++-- rpm-package/jellyfin.service | 2 +- rpm-package/jellyfin.spec | 10 +++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/rpm-package/jellyfin.env b/rpm-package/jellyfin.env index 2e2b2ba8e5..827a33f468 100644 --- a/rpm-package/jellyfin.env +++ b/rpm-package/jellyfin.env @@ -17,8 +17,10 @@ # Tell jellyfin wich ffmpeg/ffprobe to use # JELLYFIN_FFMPEG="-ffmpeg /usr/bin/ffmpeg -ffprobe /usr/bin/ffprobe" -# Data directory -JELLYFIN_DATA="/var/lib/jellyfin" +# Program directories +JELLYFIN_DATA_DIRECTORY="/var/lib/jellyfin" +JELLYFIN_CONFIG_DIRECTORY="/etc/jellyfin" +JELLYFIN_LOG_DIRECTORY="/var/log/jellyfin" # In-App service control JELLYFIN_RESTART_OPT="-restartpath /usr/libexec/jellyfin/restart.sh" # Additional options for the binary diff --git a/rpm-package/jellyfin.service b/rpm-package/jellyfin.service index 26d82a825f..0ece5b57f4 100644 --- a/rpm-package/jellyfin.service +++ b/rpm-package/jellyfin.service @@ -5,7 +5,7 @@ Description=Jellyfin is a free software media system that puts you in control of [Service] EnvironmentFile=/etc/sysconfig/jellyfin WorkingDirectory=/var/lib/jellyfin -ExecStart=/usr/bin/jellyfin -programdata ${JELLYFIN_DATA} ${JELLYFIN_RESTART_OPT} ${JELLYFIN_ADD_OPTS} ${JELLYFIN_FFMPEG} +ExecStart=/usr/bin/jellyfin -programdata ${JELLYFIN_DATA_DIRECTORY} -configdir ${JELLYFIN_CONFIG_DIRECTORY} -logdir ${JELLYFIN_LOG_DIRECTORY} ${JELLYFIN_RESTART_OPT} ${JELLYFIN_ADD_OPTS} ${JELLYFIN_FFMPEG} TimeoutSec=15 Restart=on-failure User=jellyfin diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 5b53bd005e..a7619ea05c 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -62,12 +62,16 @@ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime linux-x64 %{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE %{__install} -D -m 0644 debian/conf/jellyfin.service.conf %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf +%{__install} -D -m 0644 debian/conf/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json %{__mkdir} -p %{buildroot}%{_bindir} tee %{buildroot}%{_bindir}/jellyfin << EOF #!/bin/sh exec %{_libdir}/%{name}/%{name} \${@} EOF %{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin +%{__mkdir} -p %{buildroot}%{_sysconfdir}/%{name} +%{__mkdir} -p %{buildroot}%{_var}/log/jellyfin + %{__install} -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service %{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} %{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers @@ -90,10 +94,13 @@ EOF %attr(755,root,root) %{_datadir}/%{name}/update-db-paths.sh %attr(750,root,root) %{_libexecdir}/%{name}/restart.sh %attr(644,root,root) %{_prefix}/lib/firewalld/service/%{name}.xml +%attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name} %config(noreplace) %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers %config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf +%config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/%{name}/logging.json %attr(-,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin +%attr(-,jellyfin,jellyfin) %dir %{_var}/log/jellyfin %if 0%{?fedora} %license LICENSE %else @@ -117,8 +124,9 @@ exit 0 %systemd_postun_with_restart jellyfin.service %changelog -* Sat Jan 05 2019 Thomas Büttner - 10.0.0-1 +* Mon Jan 07 2019 Thomas Büttner - 10.0.0-1 - Bump version to 10.0.0 +- Add logging and config directories * Sat Jan 05 2019 Thomas Büttner - 3.5.2-5 - Add firewalld service.xml From 0e455b0f6232751d72580b5454303cfaee371aaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Mon, 7 Jan 2019 19:28:04 +0100 Subject: [PATCH 08/21] fixed restart.sh permissions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index a7619ea05c..c55d1d2605 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -92,7 +92,7 @@ EOF %attr(644,root,root) %{_libdir}/%{name}/sosdocsunix.txt %attr(644,root,root) %{_unitdir}/%{name}.service %attr(755,root,root) %{_datadir}/%{name}/update-db-paths.sh -%attr(750,root,root) %{_libexecdir}/%{name}/restart.sh +%attr(755,root,root) %{_libexecdir}/%{name}/restart.sh %attr(644,root,root) %{_prefix}/lib/firewalld/service/%{name}.xml %attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name} %config(noreplace) %{_sysconfdir}/sysconfig/%{name} From 7f4a073b05ac9c4ce4ef6d499cd5bfba40f72415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Tue, 8 Jan 2019 18:56:55 +0100 Subject: [PATCH 09/21] Add %post script to move exitsting config to /etc/jellyfin and symlink it. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index c55d1d2605..f6585a3d34 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -95,7 +95,7 @@ EOF %attr(755,root,root) %{_libexecdir}/%{name}/restart.sh %attr(644,root,root) %{_prefix}/lib/firewalld/service/%{name}.xml %attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name} -%config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%config %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers %config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf %config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/%{name}/logging.json @@ -115,6 +115,21 @@ getent passwd jellyfin >/dev/null || \ exit 0 %post +# Move existing configuration to /etc/jellyfin and symlink config to /etc/jellyfin +if [ $1 -gt 1 ] ; then + if [ ! -L %{_sharedstatedir}/%{name}/config ]; then + service_state=$(systemctl is-active jellyfin.service) + if [ "${service_state}" = "active" ]; then + systemctl stop jellyfin.service + fi + mv %{_sharedstatedir}/%{name}/config/* %{_sysconfdir}/%{name}/ + rmdir %{_sharedstatedir}/%{name}/config + ln -sf %{_sysconfdir}/%{name} %{_sharedstatedir}/%{name}/config + if [ "${service_state}" = "active" ]; then + systemctl start jellyfin.service + fi + fi +fi %systemd_post jellyfin.service %preun @@ -127,6 +142,7 @@ exit 0 * Mon Jan 07 2019 Thomas Büttner - 10.0.0-1 - Bump version to 10.0.0 - Add logging and config directories +- Add %post script to move exitsting config to /etc/jellyfin and symlink it. * Sat Jan 05 2019 Thomas Büttner - 3.5.2-5 - Add firewalld service.xml From ad36f9ec8951de61a605ceb247296a884e81f6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Tue, 8 Jan 2019 19:04:52 +0100 Subject: [PATCH 10/21] Add rpm build script for fedora and update README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/Dockerfile.fedora_package | 17 +++++++++++++++++ rpm-package/README.md | 16 ++++++++++------ rpm-package/build-fedora-rpm.sh | 24 ++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 rpm-package/Dockerfile.fedora_package create mode 100755 rpm-package/build-fedora-rpm.sh diff --git a/rpm-package/Dockerfile.fedora_package b/rpm-package/Dockerfile.fedora_package new file mode 100644 index 0000000000..35650106d1 --- /dev/null +++ b/rpm-package/Dockerfile.fedora_package @@ -0,0 +1,17 @@ +FROM fedora:29 +ARG HOME=/build +RUN mkdir /build && \ + dnf install -y @buildsys-build rpmdevtools dnf-plugins-core && \ + dnf copr enable -y @dotnet-sig/dotnet && \ + rpmdev-setuptree + +WORKDIR /build/rpmbuild +COPY jellyfin.spec SPECS +COPY . SOURCES + +RUN spectool -g -R SPECS/jellyfin.spec && \ + rpmbuild -bs SPECS/jellyfin.spec && \ + dnf build-dep -y SRPMS/jellyfin-*.src.rpm && \ + rpmbuild -bb SPECS/jellyfin.spec && \ + mkdir /jellyfin && \ + find . -name 'jellyfin-*.rpm' -print -exec cp {} /jellyfin \; \ No newline at end of file diff --git a/rpm-package/README.md b/rpm-package/README.md index 84aded8c6a..5944f9e9b0 100644 --- a/rpm-package/README.md +++ b/rpm-package/README.md @@ -1,29 +1,33 @@ -# unoffical jellyfin RPM +# 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 repos as ffmpeg is not in the main repositories. +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 +# 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/umonut ISO files uncomment these two lines in `/etc/sudoers.d/jellyfin-sudoers` +To allow Jellyfin to mount/umonut ISO files uncomment these two lines in `/etc/sudoers.d/jellyfin-sudoers` ``` # %jellyfin ALL=(ALL) NOPASSWD: /bin/mount # %jellyfin ALL=(ALL) NOPASSWD: /bin/umount ``` - ## Database patching + You may need to install sqlite since CentOS has no `Recommends:` with `yum install sqlite`. To fix the paths in the emby database for a migration to jellyfin run the script: ```shell diff --git a/rpm-package/build-fedora-rpm.sh b/rpm-package/build-fedora-rpm.sh new file mode 100755 index 0000000000..87c94e0812 --- /dev/null +++ b/rpm-package/build-fedora-rpm.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env sh + +# Build a Jellyfin .rpm file with Docker on Linux +# Places the output .rpm file in the parent directory + +set -o errexit +set -o xtrace +set -o nounset + +package_temporary_dir="`mktemp -d`" +current_user="`whoami`" +image_name="jellyfin-rpmbuild" + +cleanup() { + set +o errexit + docker image rm $image_name --force + rm -rf "$package_temporary_dir" +} +trap cleanup EXIT INT + +docker build . -t "$image_name" -f ./Dockerfile.fedora_package +docker run --rm -v "$package_temporary_dir:/temp" "$image_name" cp -r /jellyfin /temp/ +sudo chown -R "$current_user" "$package_temporary_dir" +mv "$package_temporary_dir"/jellyfin/*.rpm ../../ From 4e7f4754917a2ec5814cbd495532e4765e165773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Tue, 8 Jan 2019 19:44:51 +0100 Subject: [PATCH 11/21] Also symlink logs to /var/log, changed changelog to lastest entry of the debian package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 45 ++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index f6585a3d34..315a542e39 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -117,17 +117,22 @@ exit 0 %post # Move existing configuration to /etc/jellyfin and symlink config to /etc/jellyfin if [ $1 -gt 1 ] ; then + service_state=$(systemctl is-active jellyfin.service) + if [ "${service_state}" = "active" ]; then + systemctl stop jellyfin.service + fi if [ ! -L %{_sharedstatedir}/%{name}/config ]; then - service_state=$(systemctl is-active jellyfin.service) - if [ "${service_state}" = "active" ]; then - systemctl stop jellyfin.service - fi mv %{_sharedstatedir}/%{name}/config/* %{_sysconfdir}/%{name}/ rmdir %{_sharedstatedir}/%{name}/config ln -sf %{_sysconfdir}/%{name} %{_sharedstatedir}/%{name}/config - if [ "${service_state}" = "active" ]; then - systemctl start jellyfin.service - fi + fi + if [ ! -L %{_sharedstatedir}/%{name}/logs ]; then + mv %{_sharedstatedir}/%{name}/logs/* %{_var}/log/jellyfin + rmdir %{_sharedstatedir}/%{name}/logs + ln -sf %{_var}/log/jellyfin %{_sharedstatedir}/%{name}/logs + fi + if [ "${service_state}" = "active" ]; then + systemctl start jellyfin.service fi fi %systemd_post jellyfin.service @@ -139,23 +144,9 @@ fi %systemd_postun_with_restart jellyfin.service %changelog -* Mon Jan 07 2019 Thomas Büttner - 10.0.0-1 -- Bump version to 10.0.0 -- Add logging and config directories -- Add %post script to move exitsting config to /etc/jellyfin and symlink it. - -* Sat Jan 05 2019 Thomas Büttner - 3.5.2-5 -- Add firewalld service.xml - -* Sat Jan 05 2019 Thomas Büttner - 3.5.2-4 -- Re-added sudoers policy - -* Sat Jan 05 2019 Thomas Büttner - 3.5.2-3 -- Added script for database migration - -* Fri Jan 04 2019 Thomas Büttner - 3.5.2-2 -- Moved sudoers policy and added a note for In-App service control -- Set Restart=on-failure in jellyfin.service - -* Thu Jan 03 2019 Thomas Büttner - 3.5.2-1 -- Initial RPM package +* Tue Jan 08 2019 Thomas Büttner - 10.0.0-1 +- The first Jellyfin release under our new versioning scheme +- Numerous bugfixes and code readability improvements +- Updated logging configuration, including flag for it and configdir +- Updated theming including logo +- Dozens of other improvements as documented in GitHub pull request 419 From 8eb2fe1b5874feb6a1379b9c10ab3dff7700eb97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 16:15:06 +0100 Subject: [PATCH 12/21] Remove references to Debian package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.override.conf | 7 +++++++ rpm-package/jellyfin.spec | 5 +++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 rpm-package/jellyfin.override.conf diff --git a/rpm-package/jellyfin.override.conf b/rpm-package/jellyfin.override.conf new file mode 100644 index 0000000000..9764a0621f --- /dev/null +++ b/rpm-package/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/default/jellyfin \ No newline at end of file diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 315a542e39..8c1aa37ac5 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -19,6 +19,7 @@ Source4: restart.sh Source5: https://github.com/mono/taglib-sharp/archive/%{taglib_commit}/taglib-sharp-%{taglib_shortcommit}.tar.gz Source6: update-db.sh Source7: jellyfin-firewalld.xml +Source8: jellyfin.override.conf %{?systemd_requires} BuildRequires: systemd @@ -61,8 +62,8 @@ export DOTNET_CLI_TELEMETRY_OPTOUT=1 export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime linux-x64 %{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE -%{__install} -D -m 0644 debian/conf/jellyfin.service.conf %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf -%{__install} -D -m 0644 debian/conf/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json +%{__install} -D -m 0644 %{SOURCE8} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf +%{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json %{__mkdir} -p %{buildroot}%{_bindir} tee %{buildroot}%{_bindir}/jellyfin << EOF #!/bin/sh From cb328e4b6fcf39f4c32cabbe9ab165d52b294758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 16:42:26 +0100 Subject: [PATCH 13/21] Remove DB migration script. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 6 ++---- rpm-package/update-db.sh | 12 ------------ 2 files changed, 2 insertions(+), 16 deletions(-) delete mode 100755 rpm-package/update-db.sh diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 8c1aa37ac5..b93f8c8182 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -17,9 +17,8 @@ Source2: jellyfin.env Source3: jellyfin.sudoers Source4: restart.sh Source5: https://github.com/mono/taglib-sharp/archive/%{taglib_commit}/taglib-sharp-%{taglib_shortcommit}.tar.gz -Source6: update-db.sh +Source6: jellyfin.override.conf Source7: jellyfin-firewalld.xml -Source8: jellyfin.override.conf %{?systemd_requires} BuildRequires: systemd @@ -62,7 +61,7 @@ export DOTNET_CLI_TELEMETRY_OPTOUT=1 export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime linux-x64 %{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE -%{__install} -D -m 0644 %{SOURCE8} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf +%{__install} -D -m 0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf %{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json %{__mkdir} -p %{buildroot}%{_bindir} tee %{buildroot}%{_bindir}/jellyfin << EOF @@ -77,7 +76,6 @@ EOF %{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} %{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers %{__install} -D -m 0750 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh -%{__install} -D -m 0755 %{SOURCE6} %{buildroot}%{_datadir}/%{name}/update-db-paths.sh %{__install} -D -m 0755 %{SOURCE7} %{buildroot}%{_prefix}/lib/firewalld/service/%{name}.xml %files diff --git a/rpm-package/update-db.sh b/rpm-package/update-db.sh deleted file mode 100755 index 92c13cb8a9..0000000000 --- a/rpm-package/update-db.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -embypath=${2:-/var/lib/emby-server} -jellyfinpath=${3:-/var/lib/jellyfin} -db=${1:-${jellyfinpath}/data/library.db} -sqlite3 ${db} << SQL -UPDATE Chapters2 -SET ImagePath=REPLACE(ImagePath, '${embypath}', '${jellyfinpath}'); -UPDATE TypedBaseItems -SET Path=REPLACE(Path, '${embypath}', '${jellyfinpath}'); -UPDATE TypedBaseItems -SET data=REPLACE(data, '${embypath}', '${jellyfinpath}'); -SQL From fa01c4f02e9c6ecc459eb719ecc96e9190cbe833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 16:44:18 +0100 Subject: [PATCH 14/21] Remove DB migration script also from %files. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index b93f8c8182..f5b2b4b2af 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -90,7 +90,6 @@ EOF %attr(755,root,root) %{_libdir}/%{name}/jellyfin %attr(644,root,root) %{_libdir}/%{name}/sosdocsunix.txt %attr(644,root,root) %{_unitdir}/%{name}.service -%attr(755,root,root) %{_datadir}/%{name}/update-db-paths.sh %attr(755,root,root) %{_libexecdir}/%{name}/restart.sh %attr(644,root,root) %{_prefix}/lib/firewalld/service/%{name}.xml %attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name} From 40e509588e4fee3ab1e532c09dab839926c2b5e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 16:58:41 +0100 Subject: [PATCH 15/21] Remove explicit permissions for files who don't need them. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index f5b2b4b2af..9b16f13abf 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -75,23 +75,23 @@ EOF %{__install} -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service %{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} %{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers -%{__install} -D -m 0750 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh +%{__install} -D -m 0755 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh %{__install} -D -m 0755 %{SOURCE7} %{buildroot}%{_prefix}/lib/firewalld/service/%{name}.xml %files %{_libdir}/%{name}/dashboard-ui/* %attr(755,root,root) %{_bindir}/%{name} -%attr(644,root,root) %{_libdir}/%{name}/*.json -%attr(644,root,root) %{_libdir}/%{name}/*.pdb -%attr(755,root,root) %{_libdir}/%{name}/*.dll -%attr(755,root,root) %{_libdir}/%{name}/*.so -%attr(755,root,root) %{_libdir}/%{name}/*.a -%attr(755,root,root) %{_libdir}/%{name}/createdump -%attr(755,root,root) %{_libdir}/%{name}/jellyfin -%attr(644,root,root) %{_libdir}/%{name}/sosdocsunix.txt -%attr(644,root,root) %{_unitdir}/%{name}.service -%attr(755,root,root) %{_libexecdir}/%{name}/restart.sh -%attr(644,root,root) %{_prefix}/lib/firewalld/service/%{name}.xml +%{_libdir}/%{name}/*.json +%{_libdir}/%{name}/*.pdb +%{_libdir}/%{name}/*.dll +%{_libdir}/%{name}/*.so +%{_libdir}/%{name}/*.a +%{_libdir}/%{name}/createdump +%{_libdir}/%{name}/jellyfin +%{_libdir}/%{name}/sosdocsunix.txt +%{_unitdir}/%{name}.service +%{_libexecdir}/%{name}/restart.sh +%{_prefix}/lib/firewalld/service/%{name}.xml %attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name} %config %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers From b6c0e5d4720e71165259f5d6788dd239abfc5dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 17:01:22 +0100 Subject: [PATCH 16/21] Also remove DB mirgration part from README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/rpm-package/README.md b/rpm-package/README.md index 5944f9e9b0..1449b54ccf 100644 --- a/rpm-package/README.md +++ b/rpm-package/README.md @@ -26,15 +26,6 @@ To allow Jellyfin to mount/umonut ISO files uncomment these two lines in `/etc/s # %jellyfin ALL=(ALL) NOPASSWD: /bin/umount ``` -## Database patching - -You may need to install sqlite since CentOS has no `Recommends:` with `yum install sqlite`. -To fix the paths in the emby database for a migration to jellyfin run the script: -```shell -/usr/share/jellyfin/update-db-paths.sh -``` -PS: Please **backup your emby database beforehand**. - ## Building with dotnet Jellyfin is build with `--self-contained` so no dotnet required for runtime. From 101f47b6d40a7ce6150a29685f047221001314ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 17:02:52 +0100 Subject: [PATCH 17/21] Fix typo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpm-package/README.md b/rpm-package/README.md index 1449b54ccf..7ed6f7efc6 100644 --- a/rpm-package/README.md +++ b/rpm-package/README.md @@ -20,7 +20,7 @@ $ sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpm ## ISO mounting -To allow Jellyfin to mount/umonut ISO files uncomment these two lines in `/etc/sudoers.d/jellyfin-sudoers` +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 From 7bda21295830d100359182ac4fae0b40d4bbede3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 17:05:28 +0100 Subject: [PATCH 18/21] Bump spec version to 10.0.2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Büttner --- rpm-package/jellyfin.spec | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 9b16f13abf..30631283dc 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -1,12 +1,12 @@ %global debug_package %{nil} # jellyfin tag to package -%global gittag v10.0.0 +%global gittag v10.0.2 # Taglib-sharp commit of the submodule since github archive doesn't include submodules %global taglib_commit ee5ab21742b71fd1b87ee24895582327e9e04776 %global taglib_shortcommit %(c=%{taglib_commit}; echo ${c:0:7}) Name: jellyfin -Version: 10.0.0 +Version: 10.0.2 Release: 1%{?dist} Summary: The Free Software Media Browser. License: GPLv2 @@ -76,7 +76,7 @@ EOF %{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} %{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers %{__install} -D -m 0755 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh -%{__install} -D -m 0755 %{SOURCE7} %{buildroot}%{_prefix}/lib/firewalld/service/%{name}.xml +%{__install} -D -m 0644 %{SOURCE7} %{buildroot}%{_prefix}/lib/firewalld/service/%{name}.xml %files %{_libdir}/%{name}/dashboard-ui/* @@ -142,9 +142,5 @@ fi %systemd_postun_with_restart jellyfin.service %changelog -* Tue Jan 08 2019 Thomas Büttner - 10.0.0-1 -- The first Jellyfin release under our new versioning scheme -- Numerous bugfixes and code readability improvements -- Updated logging configuration, including flag for it and configdir -- Updated theming including logo -- Dozens of other improvements as documented in GitHub pull request 419 +* Fri Jan 11 2019 Thomas Büttner - 10.0.2-1 +- TODO Changelog for 10.0.2 From 5ffea816a1a428ac7480e114af96d8519cd198fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 17:43:42 +0100 Subject: [PATCH 19/21] Change EnvironmentFile path to /etc/sysconfig --- rpm-package/jellyfin.override.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpm-package/jellyfin.override.conf b/rpm-package/jellyfin.override.conf index 9764a0621f..8652450bb4 100644 --- a/rpm-package/jellyfin.override.conf +++ b/rpm-package/jellyfin.override.conf @@ -4,4 +4,4 @@ [Service] #User = jellyfin -#EnvironmentFile = /etc/default/jellyfin \ No newline at end of file +#EnvironmentFile = /etc/sysconfig/jellyfin From 559ecb2afcf82e685bd6393b3429ea988a518f84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 20:06:08 +0100 Subject: [PATCH 20/21] Fix permissions for the main binary. The /usr/lib64/jellyfin/jellyfin binary has 0744 permission after build by dotnet so set explicit permission to 0755 in .spec --- rpm-package/jellyfin.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 30631283dc..4448683cfa 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -87,7 +87,8 @@ EOF %{_libdir}/%{name}/*.so %{_libdir}/%{name}/*.a %{_libdir}/%{name}/createdump -%{_libdir}/%{name}/jellyfin +# Needs 755 else only root can run it since binary build by dotnet is 744 +%attr(755,root,root) %{_libdir}/%{name}/jellyfin %{_libdir}/%{name}/sosdocsunix.txt %{_unitdir}/%{name}.service %{_libexecdir}/%{name}/restart.sh From 3f9b0058857149a1c299b65117e13ea82b2bc1e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20B=C3=BCttner?= Date: Fri, 11 Jan 2019 20:21:40 +0100 Subject: [PATCH 21/21] Fix typo --- rpm-package/jellyfin.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpm-package/jellyfin.spec b/rpm-package/jellyfin.spec index 4448683cfa..ff5725f871 100644 --- a/rpm-package/jellyfin.spec +++ b/rpm-package/jellyfin.spec @@ -87,7 +87,7 @@ EOF %{_libdir}/%{name}/*.so %{_libdir}/%{name}/*.a %{_libdir}/%{name}/createdump -# Needs 755 else only root can run it since binary build by dotnet is 744 +# Needs 755 else only root can run it since binary build by dotnet is 722 %attr(755,root,root) %{_libdir}/%{name}/jellyfin %{_libdir}/%{name}/sosdocsunix.txt %{_unitdir}/%{name}.service