Hi,
I wrote down the thoughts I had in mind when developing the conf.d patch which
got integrated in vdr 2.1.7.
Also I like to give some advice to distributors how I think, this feature
should be used. If we can agree on a
consistent naming and file-layout all users can profit.
At the end there's an RFC for an interface to a not-yet-written tool vdrctl
for managing the args-conf-files.
Any comments and improvements are welcome.
Regards,
Lars.
Using ARGSDIR
-
The target of the conf.d patch is to simplify the start of vdr esp. with the
newer init systems Upstart and systemd.
These systems expect a single exec line to start a daemon. Additionally they
provide mechanism for monitoring, restart
on failure and controlled stopping on shutdown with defined dependencies.
In the past vdr needed a long list of options, every plugin had to be
mentioned, and if a plugin also needs options, the
commandline gets longer and confusing. There's also the runvdr template for
controlling the start and restart of vdr,
which has to be adjusted to your personally needs, which makes it difficult for
distributions to update these script.
That is why the different distributions developed their own starting mechanisms
and reading options for vdr and plugins
from different files. Now with all options separated from the starting script,
it will be easier to share the same
configuration on different platforms and improve helping each other in adding
the right options to your vdr installation.
By default, the conf-files are located at /etc/vdr/conf.d, of course this can
be changed via the Make.config, but not on
the commandline itself, because a vdr with an option won't read the options
from the conf-files to maintain backwards
compatibility, so you can't choose a directory on demand. But what you can do,
is to symlink different files to your
conf.d-directory or even symlink the whole directory, to adjust your
configuration. Additionally the directory can be
retrieved by using pkg-config --variable=argsdir vdr.
To check the current configuration the vdr would use if you start it right now,
you can call vdr --showargs.
Here's an example from my installation:
$ vdr --showargs
--video=/srv/vdr/video.00
--config=/var/lib/vdr
--lib=/usr/lib/vdr/plugins
--record=/usr/lib/vdr/vdr-recordingaction
--shutdown=/usr/lib/vdr/vdr-shutdown.wrapper
--epgfile=/var/cache/vdr/epg.data
--user=vdr
--grab=/tmp
--port=6419
--resdir=/usr/share/vdr
--cachedir=/var/cache/vdr
--dirnames=,,1
--watchdog=0
--userdump
--plugin=epg2vdr
--plugin=channellists
--plugin=sundtek
--plugin=avahi4vdr
--plugin=dbus2vdr --shutdown-hooks=/usr/share/vdr/shutdown-hooks
--shutdown-hooks-wrapper=/usr/share/vdr-plugin-dbus2vdr/shutdown-wrapper
--upstart
--plugin=epgsearch -f /usr/bin/svdrpsend
--plugin=live --port=8008 --ip=0.0.0.0 --log=INFO
--epgimages=/var/cache/vdr/epgimages
--plugin=menuorg
--plugin=vnsiserver -t 10
--plugin=streamdev-server
--plugin=softhddevice -D
--plugin=epgsearchonly
--plugin=recsearch
--plugin=restfulapi --port=8002 --ip=0.0.0.0
--epgimages=/var/cache/vdr/epgimages
--channellogos=/usr/share/vdr-channellogos
--webapp=/var/lib/vdr/plugins/restfulapi/webapp
--plugin=quickepgsearch
--plugin=conflictcheckonly
--plugin=skindesigner --epgimages=/var/cache/vdr/epgimages
--plugin=dynamite
The corresponding conf file looks like:
/etc/vdr/conf.d/vdr.conf
[vdr]
--video=/srv/vdr/video.00
--config=/var/lib/vdr
--lib=/usr/lib/vdr/plugins
--record=/usr/lib/vdr/vdr-recordingaction
--shutdown=/usr/lib/vdr/vdr-shutdown.wrapper
--epgfile=/var/cache/vdr/epg.data
--user=vdr
--grab=/tmp
--port=6419
--resdir=/usr/share/vdr
--cachedir=/var/cache/vdr
--dirnames=,,1
--watchdog=0
--userdump
[epg2vdr]
[channellists]
[sundtek]
[avahi4vdr]
[dbus2vdr]
--shutdown-hooks=/usr/share/vdr/shutdown-hooks
--shutdown-hooks-wrapper=/usr/share/vdr-plugin-dbus2vdr/shutdown-wrapper
--upstart
[epgsearch]
-f /usr/bin/svdrpsend
[live]
--port=8008
--ip=0.0.0.0
--log=INFO
--epgimages=/var/cache/vdr/epgimages
[menuorg]
[vnsiserver]
-t 10
[streamdev-server]
[softhddevice]
-D
[epgsearchonly]
[recsearch]
[restfulapi]
--port=8002
--ip=0.0.0.0
--epgimages=/var/cache/vdr/epgimages
--channellogos=/usr/share/vdr-channellogos
--webapp=/var/lib/vdr/plugins/restfulapi/webapp
[quickepgsearch]
[conflictcheckonly]
[skindesigner]
--epgimages=/var/cache/vdr/epgimages
[dynamite]
end of /etc/vdr/conf.d/vdr.conf
showargs takes as an optional parameter a directory. It will read all *.conf
files from the given directory and prints
the corresponding configuration. This is helpful if you have various
configurations and want to compare them.
Distributors
In the example above I use a single conf file. For a self maintained
installation this may be usable, but from the
perspective of a distributor the configuration should be splitted into one file
per plugin and a file