Accepting request 923735 from multimedia:apps

- Update to 1.9.2:
* Titles of search results can be configured
* Containers in virtual layout can be defined as search result, so,
  e.g. albums, located in several places are only found once
* Metadata, like artist, appearing multiple times are now stored
  in that way and can be sent to UPnP clients as separate entries
  as well or addressed in layout scripts. If you have a custom js
  import script which updates metadata you have to modify it using
  the new properties (see doc on scripting)
* DLNA profile can be configured using video and audio codec,
  allow devices to pick supported streams
* DLNA profile can be set for transcoding
- Fix spec file
- Add config.xml
- Remove unneeded tmpfile
- Added hardening to systemd service(s) (bsc#1181400). Added patch(es):
  * harden_gerbera.service.patch

OBS-URL: https://build.opensuse.org/request/show/923735
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gerbera?expand=0&rev=4
This commit is contained in:
Dominique Leuenberger 2021-10-07 22:06:16 +00:00 committed by Git OBS Bridge
commit dac0f7fa90
8 changed files with 267 additions and 33 deletions

165
config.xml Normal file
View File

@ -0,0 +1,165 @@
<?xml version="1.0" encoding="UTF-8"?>
<config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd">
<!--
See http://gerbera.io or read the docs for more
information on creating and using config.xml configuration files.
-->
<server>
<ui enabled="yes" show-tooltips="yes">
<accounts enabled="no" session-timeout="30">
<account user="gerbera" password="gerbera" />
</accounts>
</ui>
<name>Gerbera</name>
<udn>uuid:ebc72883-bdd4-432e-be5f-87051d2d0091</udn>
<home>/etc/gerbera</home>
<webroot>/usr/share/gerbera/web</webroot>
<!--
How frequently (in seconds) to send ssdp:alive advertisements.
Minimum alive value accepted is: 62
The advertisement will be sent every (A/2)-30 seconds,
and will have a cache-control max-age of A where A is
the value configured here. Ex: A value of 62 will result
in an SSDP advertisement being sent every second.
-->
<alive>1800</alive>
<storage>
<sqlite3 enabled="yes">
<database-file>gerbera.db</database-file>
</sqlite3>
</storage>
<containers enabled="yes">
<container location="/LastAdded" title="Recently Added" sort="-last_updated">
<filter>upnp:class derivedfrom "object.item" and last_updated &gt; "@last7"</filter>
</container>
<container location="/LastModified" title="Recently Modified" sort="-last_modified">
<filter>upnp:class derivedfrom "object.item" and last_modified &gt; "@last7"</filter>
</container>
</containers>
<extended-runtime-options>
<ffmpegthumbnailer enabled="no">
<thumbnail-size>128</thumbnail-size>
<seek-percentage>5</seek-percentage>
<filmstrip-overlay>yes</filmstrip-overlay>
<workaround-bugs>no</workaround-bugs>
<image-quality>8</image-quality>
</ffmpegthumbnailer>
<mark-played-items enabled="no" suppress-cds-updates="yes">
<string mode="prepend">*</string>
<mark>
<content>video</content>
</mark>
</mark-played-items>
</extended-runtime-options>
</server>
<import hidden-files="no">
<scripting script-charset="UTF-8">
<common-script>/usr/share/gerbera/js/common.js</common-script>
<playlist-script>/usr/share/gerbera/js/playlists.js</playlist-script>
<virtual-layout type="builtin">
<import-script>/usr/share/gerbera/js/import.js</import-script>
</virtual-layout>
</scripting>
<mappings>
<extension-mimetype ignore-unknown="no">
<map from="asf" to="video/x-ms-asf" />
<map from="asx" to="video/x-ms-asf" />
<map from="dff" to="audio/x-dsd" />
<map from="dsf" to="audio/x-dsd" />
<map from="flv" to="video/x-flv" />
<map from="m2ts" to="video/mp2t" />
<map from="m3u" to="audio/x-mpegurl" />
<map from="m3u8" to="audio/x-mpegurl" />
<map from="m4a" to="audio/mp4" />
<map from="mka" to="audio/x-matroska" />
<map from="mkv" to="video/x-matroska" />
<map from="mp3" to="audio/mpeg" />
<map from="mts" to="video/mp2t" />
<map from="oga" to="audio/ogg" />
<map from="ogg" to="audio/ogg" />
<map from="ogm" to="video/ogg" />
<map from="ogv" to="video/ogg" />
<map from="ogx" to="application/ogg" />
<map from="pls" to="audio/x-scpls" />
<map from="ts" to="video/mp2t" />
<map from="tsa" to="audio/mp2t" />
<map from="tsv" to="video/mp2t" />
<map from="wax" to="audio/x-ms-wax" />
<map from="wm" to="video/x-ms-wm" />
<map from="wma" to="audio/x-ms-wma" />
<map from="wmv" to="video/x-ms-wmv" />
<map from="wmx" to="video/x-ms-wmx" />
<map from="wv" to="audio/x-wavpack" />
<map from="wvx" to="video/x-ms-wvx" />
<!-- Uncomment the line below for PS3 divx support -->
<!-- <map from="avi" to="video/divx" /> -->
<!-- Uncomment the line below for D-Link DSM / ZyXEL DMA-1000 -->
<!-- <map from="avi" to="video/avi" /> -->
</extension-mimetype>
<mimetype-upnpclass>
<map from="application/ogg" to="object.item.audioItem.musicTrack" />
<map from="audio/*" to="object.item.audioItem.musicTrack" />
<map from="image/*" to="object.item.imageItem" />
<map from="video/*" to="object.item.videoItem" />
</mimetype-upnpclass>
<mimetype-contenttype>
<treat mimetype="application/ogg" as="ogg" />
<treat mimetype="audio/L16" as="pcm" />
<treat mimetype="audio/flac" as="flac" />
<treat mimetype="audio/mp4" as="mp4" />
<treat mimetype="audio/mpeg" as="mp3" />
<treat mimetype="audio/ogg" as="ogg" />
<treat mimetype="audio/x-dsd" as="dsd" />
<treat mimetype="audio/x-flac" as="flac" />
<treat mimetype="audio/x-matroska" as="mka" />
<treat mimetype="audio/x-mpegurl" as="playlist" />
<treat mimetype="audio/x-ms-wma" as="wma" />
<treat mimetype="audio/x-scpls" as="playlist" />
<treat mimetype="audio/x-wav" as="pcm" />
<treat mimetype="audio/x-wavpack" as="wv" />
<treat mimetype="image/jpeg" as="jpg" />
<treat mimetype="video/mp4" as="mp4" />
<treat mimetype="video/x-matroska" as="mkv" />
<treat mimetype="video/x-msvideo" as="avi" />
</mimetype-contenttype>
<contenttype-dlnaprofile>
<map from="avi" to="AVI" />
<map from="mkv" to="MKV" />
<map from="mp3" to="MP3" />
<map from="mp4" to="AVC_MP4_EU" />
<map from="mpeg" to="MPEG_PS_PAL" />
<map from="pcm" to="LPCM" />
</contenttype-dlnaprofile>
</mappings>
<online-content>
<AppleTrailers enabled="no" refresh="43200" update-at-start="no" resolution="640" />
</online-content>
</import>
<transcoding enabled="no">
<mimetype-profile-mappings>
<transcode mimetype="application/ogg" using="vlcmpeg" />
<transcode mimetype="audio/ogg" using="ogg2mp3" />
<transcode mimetype="video/x-flv" using="vlcmpeg" />
</mimetype-profile-mappings>
<profiles>
<profile name="ogg2mp3" enabled="no" type="external">
<mimetype>audio/mpeg</mimetype>
<accept-url>no</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>no</accept-ogg-theora>
<agent command="ffmpeg" arguments="-y -i %in -f mp3 %out" />
<buffer size="1048576" chunk-size="131072" fill-size="262144" />
</profile>
<profile name="vlcmpeg" enabled="no" type="external">
<mimetype>video/mpeg</mimetype>
<accept-url>yes</accept-url>
<first-resource>yes</first-resource>
<accept-ogg-theora>yes</accept-ogg-theora>
<agent command="vlc" arguments="-I dummy %in --sout #transcode{venc=ffmpeg,vcodec=mp2v,vb=4096,fps=25,aenc=ffmpeg,acodec=mpga,ab=192,samplerate=44100,channels=2}:standard{access=file,mux=ps,dst=%out} vlc:quit" />
<buffer size="14400000" chunk-size="512000" fill-size="120000" />
</profile>
</profiles>
</transcoding>
</config>

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5d323c6cb4150e3454b8c6e0012f41648441799ba44cb59436b124b54d3fc82b
size 3665530

3
gerbera-1.9.2.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dee562cc5d22e8442e2fe1620b073bda612c80f9c4a8333311c647db06c1c4cd
size 3671452

View File

@ -1,3 +1,32 @@
-------------------------------------------------------------------
Thu Oct 7 12:51:58 UTC 2021 - Paolo Stivanin <info@paolostivanin.com>
- Update to 1.9.2:
* Titles of search results can be configured
* Containers in virtual layout can be defined as search result, so,
e.g. albums, located in several places are only found once
* Metadata, like artist, appearing multiple times are now stored
in that way and can be sent to UPnP clients as separate entries
as well or addressed in layout scripts. If you have a custom js
import script which updates metadata you have to modify it using
the new properties (see doc on scripting)
* DLNA profile can be configured using video and audio codec,
allow devices to pick supported streams
* DLNA profile can be set for transcoding
-------------------------------------------------------------------
Tue Sep 21 12:33:17 UTC 2021 - Paolo Stivanin <info@paolostivanin.com>
- Fix spec file
- Add config.xml
- Remove unneeded tmpfile
-------------------------------------------------------------------
Tue Sep 21 09:51:10 UTC 2021 - Johannes Segitz <jsegitz@suse.com>
- Added hardening to systemd service(s) (bsc#1181400). Added patch(es):
* harden_gerbera.service.patch
-------------------------------------------------------------------
Thu Sep 2 07:25:06 UTC 2021 - Paolo Stivanin <info@paolostivanin.com>

View File

@ -17,15 +17,16 @@
Name: gerbera
Version: 1.9.1
Version: 1.9.2
Release: 0
Summary: UPnP Media Server
License: GPL-2.0-only
Group: Productivity/Multimedia/Other
URL: https://gerbera.io
Source0: https://github.com/gerbera/gerbera/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
Source3: gerbera.tmpfile.in
Source4: gerbera.sysusers.in
Source1: config.xml
Source2: gerbera.sysusers.in
Patch0: harden_gerbera.service.patch
BuildRequires: cmake >= 3.13
BuildRequires: fdupes
BuildRequires: file-devel
@ -67,22 +68,18 @@ media through a network and consume it on a variety of UPnP
compatible devices.
%prep
%autosetup
%autosetup -p1
# server test hardcodes alpha strings
sed -i -e '/test_server/d' test/CMakeLists.txt
for _file in %{SOURCE3} %{SOURCE4}; do
sed -e 's/@USER@/gerbera/' \
-e 's/@GROUP@/gerbera/' \
< $_file > ${_file##*/}
done
sed -i -e 's/@USER@/gerbera/' %{SOURCE2}
sed -i -e 's/@GROUP@/gerbera/' %{SOURCE2}
%build
export CFLAGS="${CFLAGS} -fPIE"
export CXXFLAGS="${CXXFLAGS} -fPIE"
export LDFLAGS="${LDFLAGS} -pie"
%cmake \
-DWITH_JS=1 \
-DWITH_TAGLIB=1 \
-DWITH_MAGIC=1 \
-DWITH_AVCODEC=1 \
-DWITH_EXIF=0 \
-DWITH_EXIV2=1 \
@ -91,6 +88,8 @@ export LDFLAGS="${LDFLAGS} -pie"
-DCMAKE_C_COMPILER=gcc-10 \
%endif
-DWITH_FFMPEGTHUMBNAILER=1 \
-DWITH_INOTIFY=1 \
-DWITH_SYSTEMD=1 \
-DWITH_TESTS=1 \
-Wno-dev
%cmake_build
@ -98,13 +97,25 @@ export LDFLAGS="${LDFLAGS} -pie"
%install
%cmake_install
mkdir -p %{buildroot}%{_sysconfdir}/gerbera
touch %{buildroot}%{_sysconfdir}/gerbera/{gerbera.db,gerbera.html}
mkdir -p %{buildroot}%{_localstatedir}/log/gerbera
touch %{buildroot}%{_localstatedir}/log/%{name}
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
cat > %{buildroot}%{_sysconfdir}/logrotate.d/%{name} << 'EOF'
/var/log/gerbera/gerbera {
create 644 gerbera gerbera
monthly
compress
missingok
}
EOF
install -d %{buildroot}%{_sbindir}
ln -s service %{buildroot}%{_sbindir}/rc%{name}
install -Dm 0644 %{name}.tmpfile.in %{buildroot}%{_tmpfilesdir}/%{name}.conf
install -Dm 0644 %{name}.sysusers.in %{buildroot}%{_sysusersdir}/%{name}.conf
install -d %{buildroot}%{_localstatedir}/lib/%{name}
touch %{buildroot}%{_localstatedir}/lib/%{name}/{config.xml,%{name}.db,%{name}.html}
install -p -D -m0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/gerbera/config.xml
install -p -D -m0644 %{SOURCE2} %{buildroot}%{_sysusersdir}/gerbera.conf
%check
%ctest
@ -118,7 +129,6 @@ useradd -r -g gerbera -d %{_sysconfdir}/gerbera -s /sbin/nologin \
%post
%service_add_post %{name}.service
%tmpfiles_create %{_tmpfilesdir}/%{name}.conf
%sysusers_create %{_sysusersdir}/%{name}.conf
%preun
@ -130,16 +140,24 @@ useradd -r -g gerbera -d %{_sysconfdir}/gerbera -s /sbin/nologin \
%files
%license LICENSE.md
%doc AUTHORS CONTRIBUTING.md ChangeLog.md
%attr(-,gerbera,gerbera)%dir %{_sysconfdir}/%{name}/
%attr(-,gerbera,gerbera)%config(noreplace) %{_sysconfdir}/%{name}/*
%attr(-,gerbera,gerbera) %{_localstatedir}/log/%{name}
%dir %{_sysconfdir}/logrotate.d
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%{_bindir}/%{name}
%{_datadir}/%{name}/
%{_unitdir}/%{name}.service
%{_sbindir}/rc%{name}
%{_tmpfilesdir}/%{name}.conf
%{_sysusersdir}/%{name}.conf
%{_unitdir}/gerbera.service
%{_sysusersdir}/gerbera.conf
%{_mandir}/man?/%{name}.?%{?ext_man}
%ghost %attr(-,gerbera,gerbera) %dir %{_localstatedir}/lib/%{name}
%ghost %attr(0660,gerbera,gerbera) %{_localstatedir}/lib/%{name}/config.xml
%ghost %attr(0750,gerbera,gerbera) %{_localstatedir}/lib/%{name}/%{name}.db
%ghost %attr(0660,gerbera,gerbera) %{_localstatedir}/lib/%{name}/%{name}.html
%{_datadir}/gerbera/mysql-upgrade.xml
%{_datadir}/gerbera/mysql.sql
%{_datadir}/gerbera/sqlite3-upgrade.xml
%{_datadir}/gerbera/sqlite3.sql
%dir %{_datadir}/gerbera
%dir %{_datadir}/gerbera/js
%dir %{_datadir}/gerbera/web
%{_datadir}/gerbera/js/*
%{_datadir}/gerbera/web/*
%changelog

View File

@ -1,2 +1,2 @@
u @USER@ - "Gerbera daemon user" /var/lib/gerbera
m @USER@ video
m @GROUP@ video

View File

@ -1,3 +0,0 @@
d /var/lib/gerbera 0755 @USER@ @GROUP@ -
d /var/log/gerbera 0755 @USER@ @GROUP@ -
d /run/gerbera 0750 @USER@ @GROUP@ -

View File

@ -0,0 +1,25 @@
Index: gerbera-1.9.1/scripts/systemd/gerbera.service.cmake
===================================================================
--- gerbera-1.9.1.orig/scripts/systemd/gerbera.service.cmake
+++ gerbera-1.9.1/scripts/systemd/gerbera.service.cmake
@@ -3,6 +3,20 @@ Description=${SYSTEMD_DESCRIPTION}
After=${SYSTEMD_AFTER_TARGET}
[Service]
+# added automatically, for details please see
+# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
+ProtectSystem=full
+ProtectHome=true
+PrivateDevices=true
+ProtectHostname=true
+ProtectClock=true
+ProtectKernelTunables=true
+ProtectKernelModules=true
+ProtectKernelLogs=true
+ProtectControlGroups=true
+RestrictRealtime=true
+ReadWritePaths=/usr/share/gerbera/ /etc/gerbera/
+# end of automatic additions
Type=simple
User=gerbera
Group=gerbera