1
0
mirror of https://pkgs.rpmfusion.org/git/free/jellyfin.git synced 2025-02-22 23:57:13 +00:00
pkg-fedora-jellyfin/jellyfin.spec
Michael Cronenworth f8c4a28f22 Update to 10.10.5
2025-01-25 21:09:15 -06:00

412 lines
12 KiB
RPMSpec

# NuGet packages are stripped packages and no debug info for .NET binaries at this time
%global debug_package %{nil}
%if 0%{?rhel}
%ifarch aarch64
%define dotnet_arch arm64
%else
%define dotnet_arch x64
%endif
%global dotnet_runtime_id rhel.%{?rhel}-%{dotnet_arch}
%endif
Name: jellyfin
Version: 10.10.5
Release: 1%{?dist}
Summary: The Free Software Media System
License: GPL-2.0-only
URL: https://jellyfin.org
Source0: https://github.com/jellyfin/jellyfin/archive/v%{version}/%{name}-%{version}.tar.gz
Source1: https://github.com/jellyfin/jellyfin-web/archive/v%{version}/%{name}-web-%{version}.tar.gz
Source2: %{name}-nupkgs.tar.xz
Source3: %{name}-nupkgs-system.tar.xz
Source4: %{name}-npm.tar.xz
Source5: %{name}-web-package-lock.json
# Jellyfin uses dotnet and npm that both need the Internet to download dependencies.
# Koji / Mock disable Internet access by default so download the required dependencies beforehand.
# The following script requires the 'dotnet-sdk-8.0' and 'npm' packages be installed to run.
Source10: %{name}-offline.sh
Source11: %{name}.service
Source12: %{name}.env
Source13: %{name}.sudoers
Source14: %{name}.override.conf
Source15: %{name}-firewalld.xml
Source16: %{name}-server-lowports.conf
Source17: %{name}.sysusers
# dotnet does not offer a runtime on ppc
ExcludeArch: %{power64} ppc64le %{arm}
%{?systemd_requires}
%{?sysusers_requires_compat}
BuildRequires: firewalld-filesystem
BuildRequires: fontconfig
BuildRequires: systemd-rpm-macros
BuildRequires: dotnet-sdk-8.0
# jellyfin-web
BuildRequires: nodejs >= 20.0.0
BuildRequires: nodejs-npm >= 9.6.4
Requires: %{name}-server = %{version}-%{release}
Requires: %{name}-web = %{version}-%{release}
# /etc/sudoers.d/
Requires: sudo
Requires: (%{name}-firewalld = %{version}-%{release} if firewalld)
%description
Jellyfin is a free software media system that puts you in control of managing
and streaming your media.
%package firewalld
Summary: FirewallD metadata files for Jellyfin
Requires: firewalld-filesystem
Requires(post): firewalld-filesystem
BuildArch: noarch
%description firewalld
This package contains FirewallD files for Jellyfin.
%package server
# RPMfusion free
Summary: The Free Software Media System Server backend
Requires: at
Requires: ffmpeg >= 4.4
Requires: aspnetcore-runtime-8.0
Requires: dotnet-runtime-8.0
%description server
The Jellyfin media server backend.
%package server-lowports
# RPMfusion free
Summary: The Free Software Media System Server backend. Low-port binding.
Requires: jellyfin-server = %{version}-%{release}
BuildArch: noarch
%description server-lowports
The Jellyfin media server backend low port binding package. This package
enables binding to ports < 1024. You would install this if you want
the Jellyfin server to bind to ports 80 and/or 443 for example.
%package web
# RPMfusion free
Summary: The Free Software Media System Server frontend
Requires: jellyfin-server = %{version}-%{release}
BuildArch: noarch
%description web
The Jellyfin media server web frontend.
%prep
%autosetup -p1 -b 1
pushd ..
tar xf %{SOURCE2}
tar xf %{SOURCE3}
tar xf %{SOURCE4}
cp -p %{SOURCE5} %{name}-web-%{version}/package-lock.json
popd
dotnet nuget add source %{_builddir}/jellyfin-nupkgs -n jellyfin-nupkgs
dotnet nuget add source %{_builddir}/jellyfin-nupkgs-system -n jellyfin-nupkgs-system
dotnet nuget disable source nuget
%build
# debug nuget signature verification error
#rpm -qf /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
#ls -l /etc/pki/ca-trust/extracted/pem/
#rpm -vV ca-certificates
#grep 'DigiCert Assured ID Root CA' -A23 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
export DOTNET_CLI_TELEMETRY_OPTOUT=1
export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
# https://bugzilla.rpmfusion.org/show_bug.cgi?id=6944
export DOTNET_NUGET_SIGNATURE_VERIFICATION=false
mkdir build-server
dotnet publish --configuration Release \
--output="build-server" \
--self-contained false \
--runtime %{dotnet_runtime_id} \
"-p:DebugSymbols=false;DebugType=none" \
Jellyfin.Server
cd ../%{name}-web-%{version}
npm config set offline=true
npm config set cache ../jellyfin-npm
npm ci
npm run build:production
%install
# Jellyfin files
mkdir -p %{buildroot}%{_libdir}
cp -rp build-server %{buildroot}%{_libdir}/jellyfin
chmod 644 %{buildroot}%{_libdir}/jellyfin/*.dll
chmod 644 %{buildroot}%{_libdir}/jellyfin/*.so
mkdir -p %{buildroot}%{_bindir}
tee %{buildroot}%{_bindir}/jellyfin << EOF
#!/bin/sh
exec %{_libdir}/jellyfin/jellyfin \${@}
EOF
chmod +x %{buildroot}%{_bindir}/jellyfin
# Jellyfin config
install -p -m 644 -D Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/jellyfin/logging.json
install -p -m 644 -D %{SOURCE12} %{buildroot}%{_sysconfdir}/sysconfig/jellyfin
# system config
install -p -m 644 -D %{SOURCE15} %{buildroot}%{_prefix}/lib/firewalld/services/jellyfin.xml
install -p -m 640 -D %{SOURCE13} %{buildroot}%{_sysconfdir}/sudoers.d/jellyfin-sudoers
install -p -m 644 -D %{SOURCE14} %{buildroot}%{_sysconfdir}/systemd/system/jellyfin.service.d/override.conf
install -p -m 644 -D %{SOURCE11} %{buildroot}%{_unitdir}/jellyfin.service
install -p -m 644 -D %{SOURCE17} %{buildroot}%{_sysusersdir}/jellyfin.conf
# empty directories
mkdir -p %{buildroot}%{_sharedstatedir}/jellyfin
mkdir -p %{buildroot}%{_sysconfdir}/jellyfin
mkdir -p %{buildroot}%{_localstatedir}/cache/jellyfin
mkdir -p %{buildroot}%{_localstatedir}/log/jellyfin
# jellyfin-server-lowports subpackage
install -p -m 644 -D %{SOURCE16} %{buildroot}%{_unitdir}/jellyfin.service.d/jellyfin-server-lowports.conf
cd ../%{name}-web-%{version}
# move web licenses prior to installation
mv dist/*.js.LICENSE.txt ../jellyfin-%{version}/
mv dist/libraries/*.js.LICENSE.txt ../jellyfin-%{version}/
mkdir -p %{buildroot}%{_datadir}/
mv dist %{buildroot}%{_datadir}/jellyfin-web/
# allow easier usage outside service file
ln -s %{_datadir}/jellyfin-web %{buildroot}%{_libdir}/jellyfin/jellyfin-web
%check
for TEST in Api Common Controller Extensions LiveTv MediaEncoding.Hls MediaEncoding.Keyframes MediaEncoding Model Naming Providers Server.Implementations Server.Integration Server XbmcMetadata
do
dotnet test tests/Jellyfin.$TEST.Tests/Jellyfin.$TEST.Tests.csproj \
--configuration Release \
--collect:"XPlat Code Coverage" \
--settings tests/coverletArgs.runsettings
done
%files
# empty as this is just a meta-package
%files firewalld
%license LICENSE
%{_prefix}/lib/firewalld/services/jellyfin.xml
%files server
%license LICENSE
# Jellyfin files
%{_bindir}/jellyfin
# Needs 755 else only root can run it since binary build by dotnet is 722
%{_libdir}/jellyfin/
# Jellyfin config
%config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/jellyfin/logging.json
# user should override systemd service instead so the following will NOT be (noreplace)
%config %{_sysconfdir}/sysconfig/jellyfin
# system config
%{_unitdir}/jellyfin.service
%config(noreplace) %{_sysconfdir}/sudoers.d/jellyfin-sudoers
%dir %{_sysconfdir}/systemd/system/jellyfin.service.d/
%config(noreplace) %{_sysconfdir}/systemd/system/jellyfin.service.d/override.conf
%{_sysusersdir}/jellyfin.conf
# empty directories
%attr(750,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin
%attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/jellyfin
%attr(750,jellyfin,jellyfin) %dir %{_localstatedir}/cache/jellyfin
%attr(-, jellyfin,jellyfin) %dir %{_localstatedir}/log/jellyfin
%files server-lowports
%dir %{_unitdir}/jellyfin.service.d/
%{_unitdir}/jellyfin.service.d/jellyfin-server-lowports.conf
%files web
%license *.js.LICENSE.txt
%{_datadir}/jellyfin-web
%post firewalld
%firewalld_reload
%pretrans server
# handle upgrade path from upstream
if [ -d %{_libdir}/jellyfin/jellyfin-web ] && [ ! -L %{_libdir}/jellyfin/jellyfin-web ]
then
mv %{_libdir}/jellyfin/jellyfin-web/ %{_libdir}/jellyfin/jellyfin-web.tmp/
fi
%pre server
%sysusers_create_compat %{SOURCE17}
%post server
%systemd_post jellyfin.service
# handle upgrade path from upstream
if [ -d %{_libdir}/jellyfin/jellyfin-web.tmp ] && [ ! -L %{_libdir}/jellyfin/jellyfin-web.tmp ]
then
mv %{_libdir}/jellyfin/jellyfin-web %{_libdir}/jellyfin/jellyfin-web.tmplink
mv %{_libdir}/jellyfin/jellyfin-web.tmp/ %{_libdir}/jellyfin/jellyfin-web/
fi
%posttrans server
# handle upgrade path from upstream
if [ -d %{_libdir}/jellyfin/jellyfin-web ] && [ ! -L %{_libdir}/jellyfin/jellyfin-web ]
then
rm -rf %{_libdir}/jellyfin/jellyfin-web/
mv %{_libdir}/jellyfin/jellyfin-web.tmplink %{_libdir}/jellyfin/jellyfin-web
fi
%preun server
%systemd_preun jellyfin.service
%postun server
%systemd_postun_with_restart jellyfin.service
%post server-lowports
%systemd_post jellyfin.service
%preun server-lowports
%systemd_preun jellyfin.service
%postun server-lowports
%systemd_postun_with_restart jellyfin.service
%changelog
* Sat Jan 25 2025 Michael Cronenworth <mike@cchtml.com> - 10.10.5-1
- Update to 10.10.5
* Wed Jan 22 2025 Michael Cronenworth <mike@cchtml.com> - 10.10.4-1
- Update to 10.10.4
* Mon Nov 18 2024 Michael Cronenworth <mike@cchtml.com> - 10.10.2-1
- Update to 10.10.2
* Sun Nov 03 2024 Michael Cronenworth <mike@cchtml.com> - 10.10.1-1
- Update to 10.10.1
* Sun Oct 27 2024 Michael Cronenworth <mike@cchtml.com> - 10.10.0-1
- Update to 10.10.0
* Fri Sep 27 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.11-1
- Update to 10.9.10
* Sun Aug 25 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.10-1
- Update to 10.9.10
* Mon Aug 05 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.9-1
- Update to 10.9.9
* Fri Aug 02 2024 RPM Fusion Release Engineering <sergiomb@rpmfusion.org> - 10.9.8-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Sun Jul 21 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.8-1
- Update to 10.9.8
* Sat Jul 13 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.7-1
- Update to 10.9.7
* Sun Jun 09 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.6-1
- Update to 10.9.6
* Sun Jun 02 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.4-1
- Update to 10.9.4
* Sun May 12 2024 Michael Cronenworth <mike@cchtml.com> - 10.9.1-1
- Update to 10.9.1
* Sat Feb 03 2024 RPM Fusion Release Engineering <sergiomb@rpmfusion.org> - 10.8.13-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Wed Nov 29 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.13-1
- Update to 10.8.13
* Sun Nov 05 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.12-1
- Update to 10.8.12
* Sun Oct 01 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.11-3
- Restore playlist view
* Mon Sep 25 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.11-2
- Fix LiveTV with FFMPEG 6
* Sun Sep 24 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.11-1
- Update to 10.8.11
* Wed Aug 02 2023 RPM Fusion Release Engineering <sergiomb@rpmfusion.org> - 10.8.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Sun Apr 23 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.10-1
- Update to 10.8.10
- Switch to use systemd sysusers config for creating user and group
* Wed Mar 08 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.9-3
- Handle package upgrade path from upstream (RFBZ#6590)
- Fix firewalld scriptlet (RFBZ#6593)
* Thu Feb 16 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.9-2
- Fix runtime id for ARM build (RFBZ#6580)
* Sun Jan 22 2023 Michael Cronenworth <mike@cchtml.com> - 10.8.9-1
- Update to 10.8.9
* Wed Dec 28 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.8-2
- Reintroduce firewalld package (RFBZ#6542)
- Rebuild for dotnet-6.0.12
* Wed Nov 30 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.8-1
- Update to 10.8.8
* Mon Nov 28 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.7-5
- Add symlink to default web location (RFBZ#6515)
* Wed Nov 23 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.7-4
- Drop firewalld sub-package as it is now upstream as of firewalld 1.2
* Sun Nov 20 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.7-3
- Rebuild for dotnet-6.0.11
* Sun Nov 20 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.7-2
- Rebuild for dotnet-6.0.10
* Tue Nov 01 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.7-1
- Update to 10.8.7
* Sat Oct 29 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.6-1
- Update to 10.8.6
* Mon Oct 24 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.5-2
- Rebuild for dotnet-6.0.9
* Wed Sep 28 2022 Michael Cronenworth <mike@cchtml.com> - 10.8.5-1
- Initial spec