jellyfin.spec 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. %global debug_package %{nil}
  2. # jellyfin tag to package
  3. %global gittag v10.0.2
  4. # Taglib-sharp commit of the submodule since github archive doesn't include submodules
  5. %global taglib_commit ee5ab21742b71fd1b87ee24895582327e9e04776
  6. %global taglib_shortcommit %(c=%{taglib_commit}; echo ${c:0:7})
  7. AutoReq: no
  8. Name: jellyfin
  9. Version: 10.0.2
  10. Release: 1%{?dist}
  11. Summary: The Free Software Media Browser
  12. License: GPLv2
  13. URL: https://jellyfin.media
  14. Source0: %{name}-%{version}.tar.gz
  15. Source1: jellyfin.service
  16. Source2: jellyfin.env
  17. Source3: jellyfin.sudoers
  18. Source4: restart.sh
  19. Source5: jellyfin.override.conf
  20. Source6: jellyfin-firewalld.xml
  21. %{?systemd_requires}
  22. BuildRequires: systemd
  23. Requires(pre): shadow-utils
  24. BuildRequires: libcurl-devel, fontconfig-devel, freetype-devel, openssl-devel, glibc-devel, libicu-devel
  25. Requires: libcurl, fontconfig, freetype, openssl, glibc libicu
  26. # Requirements not packaged in main repos
  27. # COPR @dotnet-sig/dotnet
  28. BuildRequires: dotnet-sdk-2.2
  29. # RPMfusion free
  30. Requires: ffmpeg
  31. # For the update-db-paths.sh script to fix emby paths to jellyfin
  32. %{?fedora:Recommends: sqlite}
  33. # Fedora has openssl1.1 which is incompatible with dotnet
  34. %{?fedora:Requires: compat-openssl10}
  35. # Disable Automatic Dependency Processing for Centos
  36. %{?el7:AutoReqProv: no}
  37. %description
  38. Jellyfin is a free software media system that puts you in control of managing and streaming your media.
  39. %prep
  40. %autosetup -n %{name}-%{version}
  41. %build
  42. %install
  43. export DOTNET_CLI_TELEMETRY_OPTOUT=1
  44. export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
  45. dotnet publish --configuration Release --output='%{buildroot}%{_libdir}/jellyfin' --self-contained --runtime fedora-x64 Jellyfin.Server
  46. %{__install} -D -m 0644 LICENSE %{buildroot}%{_datadir}/licenses/%{name}/LICENSE
  47. %{__install} -D -m 0644 %{SOURCE5} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/override.conf
  48. %{__install} -D -m 0644 Jellyfin.Server/Resources/Configuration/logging.json %{buildroot}%{_sysconfdir}/%{name}/logging.json
  49. %{__mkdir} -p %{buildroot}%{_bindir}
  50. tee %{buildroot}%{_bindir}/jellyfin << EOF
  51. #!/bin/sh
  52. exec %{_libdir}/%{name}/%{name} \${@}
  53. EOF
  54. %{__mkdir} -p %{buildroot}%{_sharedstatedir}/jellyfin
  55. %{__mkdir} -p %{buildroot}%{_sysconfdir}/%{name}
  56. %{__mkdir} -p %{buildroot}%{_var}/log/jellyfin
  57. %{__install} -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
  58. %{__install} -D -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
  59. %{__install} -D -m 0600 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/%{name}-sudoers
  60. %{__install} -D -m 0755 %{SOURCE4} %{buildroot}%{_libexecdir}/%{name}/restart.sh
  61. %{__install} -D -m 0644 %{SOURCE6} %{buildroot}%{_prefix}/lib/firewalld/service/%{name}.xml
  62. %files
  63. %{_libdir}/%{name}/jellyfin-web/*
  64. %attr(755,root,root) %{_bindir}/%{name}
  65. %{_libdir}/%{name}/*.json
  66. %{_libdir}/%{name}/*.pdb
  67. %{_libdir}/%{name}/*.dll
  68. %{_libdir}/%{name}/*.so
  69. %{_libdir}/%{name}/*.a
  70. %{_libdir}/%{name}/createdump
  71. # Needs 755 else only root can run it since binary build by dotnet is 722
  72. %attr(755,root,root) %{_libdir}/%{name}/jellyfin
  73. %{_libdir}/%{name}/sosdocsunix.txt
  74. %{_unitdir}/%{name}.service
  75. %{_libexecdir}/%{name}/restart.sh
  76. %{_prefix}/lib/firewalld/service/%{name}.xml
  77. %attr(755,jellyfin,jellyfin) %dir %{_sysconfdir}/%{name}
  78. %config %{_sysconfdir}/sysconfig/%{name}
  79. %config(noreplace) %attr(600,root,root) %{_sysconfdir}/sudoers.d/%{name}-sudoers
  80. %config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/override.conf
  81. %config(noreplace) %attr(644,jellyfin,jellyfin) %{_sysconfdir}/%{name}/logging.json
  82. %attr(-,jellyfin,jellyfin) %dir %{_sharedstatedir}/jellyfin
  83. %attr(-,jellyfin,jellyfin) %dir %{_var}/log/jellyfin
  84. %if 0%{?fedora}
  85. %license LICENSE
  86. %else
  87. %{_datadir}/licenses/%{name}/LICENSE
  88. %endif
  89. %pre
  90. getent group jellyfin >/dev/null || groupadd -r jellyfin
  91. getent passwd jellyfin >/dev/null || \
  92. useradd -r -g jellyfin -d %{_sharedstatedir}/jellyfin -s /sbin/nologin \
  93. -c "Jellyfin default user" jellyfin
  94. exit 0
  95. %post
  96. # Move existing configuration to /etc/jellyfin and symlink config to /etc/jellyfin
  97. if [ $1 -gt 1 ] ; then
  98. service_state=$(systemctl is-active jellyfin.service)
  99. if [ "${service_state}" = "active" ]; then
  100. systemctl stop jellyfin.service
  101. fi
  102. if [ ! -L %{_sharedstatedir}/%{name}/config ]; then
  103. mv %{_sharedstatedir}/%{name}/config/* %{_sysconfdir}/%{name}/
  104. rmdir %{_sharedstatedir}/%{name}/config
  105. ln -sf %{_sysconfdir}/%{name} %{_sharedstatedir}/%{name}/config
  106. fi
  107. if [ ! -L %{_sharedstatedir}/%{name}/logs ]; then
  108. mv %{_sharedstatedir}/%{name}/logs/* %{_var}/log/jellyfin
  109. rmdir %{_sharedstatedir}/%{name}/logs
  110. ln -sf %{_var}/log/jellyfin %{_sharedstatedir}/%{name}/logs
  111. fi
  112. if [ "${service_state}" = "active" ]; then
  113. systemctl start jellyfin.service
  114. fi
  115. fi
  116. %systemd_post jellyfin.service
  117. %preun
  118. %systemd_preun jellyfin.service
  119. %postun
  120. %systemd_postun_with_restart jellyfin.service
  121. %changelog
  122. * Fri Jan 11 2019 Thomas Büttner <thomas@vergesslicher.tech> - 10.0.2-1
  123. - TODO Changelog for 10.0.2