[Buildroot] [PATCH 09/16] package/minidlna: improve systemd support

Maxim Mikityanskiy maxtram95 at gmail.com
Mon Feb 2 21:30:04 UTC 2015


Hi Samuel,

2015-02-02 23:12 GMT+02:00 Samuel Martin <s.martin49 at gmail.com>:
> Hi Maxim,
>
> On Mon, Jan 19, 2015 at 5:14 PM, Maxim Mikityanskiy <maxtram95 at gmail.com> wrote:
>> Support running minidlna in system-wide mode using systemd:
>>
>> 1. Set --with-db-path and --with-log-path configure options to make
>> default minidlna directories comply with FHS.
>>
>> 2. Install suitable minidlna.conf for system-wide mode.
>>
>> 3. Install sysctl.d config file to increase inotify watches count.
>>
>> 4. Install tmpfiles.d config file to mkdir and chmod necessary
>> directories for minidlna running in system-wide mode.
>>
>> 5. Install sysusers.d config file to create minidlna user when using
>> systemd.
>
> To make minidlna compliant with non-systemd ssytem, you should add the
> user using _USERS infra [1].

There were two reasons I preferred sysusers over _USERS. At first, my
patch only adds systemd unit file and doesn't add initscript for
SysVinit-based systems. So minidlna user will be useless on
non-systemd systems. At second, I've noticed that _USERS create users
with UID >= 1000. UIDs < 1000 are reserved for system users, and UIDs
>= 1000 are for real users. Systemd-sysusers, however, creates users
with UID < 1000. I think minidlna user should have UID < 1000. So
should I really replace sysusers with _USERS for creating minidlna
user here?

>>
>> 6. Install minidlna.service for systemd.
>>
>> Note: User=minidlna should be set in minidlna.service, not in
>> minidlna.conf, because minidlna is unable to drop privileges correctly
>> by itself: it does not get any privileges provided by groups of minidlna
>> user. Systemd drops privileges correctly in that case.
>>
>> Signed-off-by: Maxim Mikityanskiy <maxtram95 at gmail.com>
>> ---
>>  package/minidlna/minidlna.conf          | 74 +++++++++++++++++++++++++++++++++
>>  package/minidlna/minidlna.mk            | 37 +++++++++++++++++
>>  package/minidlna/minidlna.service       | 12 ++++++
>>  package/minidlna/minidlna_sysctl.conf   |  1 +
>>  package/minidlna/minidlna_sysusers.conf |  1 +
>>  package/minidlna/minidlna_tmpfiles.conf |  3 ++
>>  6 files changed, 128 insertions(+)
>>  create mode 100644 package/minidlna/minidlna.conf
>>  create mode 100644 package/minidlna/minidlna.service
>>  create mode 100644 package/minidlna/minidlna_sysctl.conf
>>  create mode 100644 package/minidlna/minidlna_sysusers.conf
>>  create mode 100644 package/minidlna/minidlna_tmpfiles.conf
>>
>> diff --git a/package/minidlna/minidlna.conf b/package/minidlna/minidlna.conf
>> new file mode 100644
>> index 0000000..9e4fbc9
>> --- /dev/null
>> +++ b/package/minidlna/minidlna.conf
>> @@ -0,0 +1,74 @@
>> +# port for HTTP (descriptions, SOAP, media transfer) traffic
>> +port=8200
>> +
>> +# network interfaces to serve, comma delimited
>> +#network_interface=eth0
>> +
>> +# set this to the directory you want scanned.
>> +# * if you want multiple directories, you can have multiple media_dir= lines
>> +# * if you want to restrict a media_dir to specific content types, you
>> +#   can prepend the types, followed by a comma, to the directory:
>> +#   + "A" for audio  (eg. media_dir=A,/home/jmaggard/Music)
>> +#   + "V" for video  (eg. media_dir=V,/home/jmaggard/Videos)
>> +#   + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
>> +#   + "PV" for pictures and video (eg. media_dir=PV,/home/jmaggard/digital_camera)
>> +#media_dir=/home
>> +
>> +# set this to merge all media_dir base contents into the root container
>> +# note: the default is no
>> +#merge_media_dirs=no
>> +
>> +# set this if you want to customize the name that shows up on your clients
>> +friendly_name=Buildroot DLNA Server
>> +
>> +# set this to change the verbosity of the information that is logged
>> +# each section can use a different level: off, fatal, error, warn, info, or debug
>> +#log_level=general,artwork,database,inotify,scanner,metadata,http,ssdp,tivo=warn
>> +
>> +# this should be a list of file names to check for when searching for album art
>> +# note: names should be delimited with a forward slash ("/")
>> +album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
>> +
>> +# set this to no to disable inotify monitoring to automatically discover new files
>> +# note: the default is yes
>> +inotify=yes
>> +
>> +# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
>> +enable_tivo=no
>> +
>> +# set this to strictly adhere to DLNA standards.
>> +# * This will allow server-side downscaling of very large JPEG images,
>> +#   which may hurt JPEG serving performance on (at least) Sony DLNA products.
>> +strict_dlna=no
>> +
>> +# default presentation url is http address on port 80
>> +#presentation_url=http://www.mylan/index.php
>> +
>> +# notify interval in seconds. default is 895 seconds.
>> +notify_interval=900
>> +
>> +# serial and model number the daemon will report to clients
>> +# in its XML description
>> +serial=12345678
>> +model_number=1
>> +
>> +# specify the path to the MiniSSDPd socket
>> +#minissdpdsocket=/var/run/minissdpd.sock
>> +
>> +# use different container as root of the tree
>> +# possible values:
>> +#   + "." - use standard container (this is the default)
>> +#   + "B" - "Browse Directory"
>> +#   + "M" - "Music"
>> +#   + "V" - "Video"
>> +#   + "P" - "Pictures"
>> +#   + Or, you can specify the ObjectID of your desired root container (eg. 1$F for Music/Playlists)
>> +# if you specify "B" and client device is audio-only then "Music/Folders" will be used as root
>> +#root_container=.
>> +
>> +# always force SortCriteria to this value, regardless of the SortCriteria passed by the client
>> +#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title
>> +
>> +# maximum number of simultaneous connections
>> +# note: many clients open several simultaneous connections while streaming
>> +#max_connections=50
>
> We usually prefer minmal default configuration files, with only
> necessary stuff (i.e. no comments), letting the user browsing the
> package manual to set all config he/she needs.

OK, I'll consider it. This config has lots of comments because it's
based on default one shipped with package.

>> diff --git a/package/minidlna/minidlna.mk b/package/minidlna/minidlna.mk
>> index bcbe5fa..fcc9d06 100644
>> --- a/package/minidlna/minidlna.mk
>> +++ b/package/minidlna/minidlna.mk
>> @@ -24,4 +24,41 @@ MINIDLNA_CONF_OPTS = \
>>         --disable-static
>>  endif
>>
>> +MINIDLNA_CONF_OPTS += \
>> +       --with-db-path=/var/cache/minidlna \
>> +       --with-log-path=/var/log/minidlna
>> +
>> +define MINIDLNA_INSTALL_CONF_HOOK
>> +       $(INSTALL) -D -m 644 package/minidlna/minidlna.conf \
>> +               $(TARGET_DIR)/etc/minidlna.conf
>> +endef
>> +
>> +define MINIDLNA_INSTALL_SYSUSERS_HOOK
>> +       $(INSTALL) -D -m 644 package/minidlna/minidlna_sysusers.conf \
>> +               $(TARGET_DIR)/usr/lib/sysusers.d/minidlna.conf
>> +endef
>> +
>> +define MINIDLNA_INSTALL_TMPFILES_HOOK
>> +       $(INSTALL) -D -m 644 package/minidlna/minidlna_tmpfiles.conf \
>> +               $(TARGET_DIR)/usr/lib/tmpfiles.d/minidlna.conf
>> +endef
>> +
>> +define MINIDLNA_INSTALL_SYSCTL_HOOK
>> +       $(INSTALL) -D -m 644 package/minidlna/minidlna_sysctl.conf \
>> +               $(TARGET_DIR)/usr/lib/sysctl.d/20-minidlna.conf
>> +endef
>> +
>> +ifeq ($(BR2_INIT_SYSTEMD),y)
>> +MINIDLNA_POST_INSTALL_TARGET_HOOKS += \
>> +       MINIDLNA_INSTALL_CONF_HOOK \
>
> This hook could be run even if init is not systemd, no?

It could be run, but it will be useless because there is no initscript
for non-systemd systems anyway. Maybe I should resend this patch with
initscript added.

>> +       MINIDLNA_INSTALL_SYSUSERS_HOOK \
>> +       MINIDLNA_INSTALL_TMPFILES_HOOK \
>> +       MINIDLNA_INSTALL_SYSCTL_HOOK
>
> Maybe you could put all systemd stuff in 1 and single hook.
>
>> +endif
>> +
>> +define MINIDLNA_INSTALL_INIT_SYSTEMD
>> +       $(INSTALL) -D -m 644 package/minidlna/minidlna.service \
>> +               $(TARGET_DIR)/lib/systemd/system/minidlna.service
>> +endef
>> +
>>  $(eval $(autotools-package))
>> diff --git a/package/minidlna/minidlna.service b/package/minidlna/minidlna.service
>> new file mode 100644
>> index 0000000..45b72f0
>> --- /dev/null
>> +++ b/package/minidlna/minidlna.service
>> @@ -0,0 +1,12 @@
>> +[Unit]
>> +Description=minidlna server
>> +After=network.target
>> +
>> +[Service]
>> +User=minidlna
>> +Type=forking
>> +ExecStart=/usr/sbin/minidlnad -P /run/minidlna/minidlna.pid
>> +PIDFile=/run/minidlna/minidlna.pid
>> +
>> +[Install]
>> +WantedBy=multi-user.target
>> diff --git a/package/minidlna/minidlna_sysctl.conf b/package/minidlna/minidlna_sysctl.conf
>> new file mode 100644
>> index 0000000..0745b37
>> --- /dev/null
>> +++ b/package/minidlna/minidlna_sysctl.conf
>> @@ -0,0 +1 @@
>> +fs.inotify.max_user_watches = 65536
>> diff --git a/package/minidlna/minidlna_sysusers.conf b/package/minidlna/minidlna_sysusers.conf
>> new file mode 100644
>> index 0000000..1dc06f3
>> --- /dev/null
>> +++ b/package/minidlna/minidlna_sysusers.conf
>> @@ -0,0 +1 @@
>> +u minidlna - "DLNA server"
>> diff --git a/package/minidlna/minidlna_tmpfiles.conf b/package/minidlna/minidlna_tmpfiles.conf
>> new file mode 100644
>> index 0000000..a6e66e7
>> --- /dev/null
>> +++ b/package/minidlna/minidlna_tmpfiles.conf
>> @@ -0,0 +1,3 @@
>> +d /var/run/minidlna 0755 minidlna minidlna -
>> +d /var/cache/minidlna 0700 minidlna minidlna -
>> +d /var/log/minidlna 0755 minidlna minidlna -
>> --
>> 2.2.1
>>
>
> [1] http://nightly.buildroot.org/manual.html#customize-users
>
> Regards,
>
> --
> Samuel

Cheers,
Maxim



More information about the buildroot mailing list