Systemd mythbackend Configuration

From MythTV Official Wiki
Revision as of 21:53, 19 February 2012 by Gtb (talk | contribs) (Created page with 'Some newer Linux distributions replace the traditional LSB init script startup management process with a program called systemd, which does things differently; here are some note…')

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Some newer Linux distributions replace the traditional LSB init script startup management process with a program called systemd, which does things differently; here are some notes on how to make MythTV play nicely with systemd.

Note that much of the example startup code that follows is based on the rpmfusion packaging of MythTV by Richard Shaw.


Default configuration

Save the configuration file below in /etc/systemd/system/mythbackend.service


Script.png /etc/systemd/system/mythbackend.service


# MythTV backend service

[Unit]
Description=MythTV backend service
After=network.target mysqld.service

[Service]
Type=simple
Environment=MYTHCONFDIR=/etc/mythtv
Environment=HOME=/usr/share/mythtv
User=mythtv
ExecStart=/usr/bin/mythbackend --logfile /var/log/mythtv/mythbackend.log

[Install]
WantedBy=multi-user.target


Important.png Note: The example runs the backend as user mythtv. You will need to insure that your files/directories/capture cards can be accessed by the mythtv user, or run the backend as root (not recommended).


Delay starting the backend until all tuners have initialised

Some tuners take a long time to initialize (typically, firmware loading) and may therefore not yet be available when the backend starts. Since the backend checks for the presence of tuners upon startup, tuner initialization needs to be completed before the backend is started.

This can be accomplished by adding additional Wants= and After= stanza to the unit file, but to have systemd create device units, you must add a rule to the udev rules directory.


Script.png /etc/udev/rules.d/99-mythbackend

#
# Create systemd device units for capture devices
#
SUBSYSTEM=="video4linux", TAG+="systemd"
SUBSYSTEM=="dvb", TAG+="systemd"
SUBSYSTEM=="firewire", TAG+="systemd"


With the udev rule tag, systemd will create a device unit at startup that one can add to the [Unit] stanza in the startup. Note that one must use the systemd mangled names (generally /dev/some/thing is mangled into dev-some-thing.device). It is highly recommended that you use udev persistent names rather than base names such as /dev/video0.


Script.png device wait code for a typical v4l2 device


Wants=dev-video300.device
After=dev-video300.device


Script.png device wait code for a typical dvb device


Wants=dev-dvb-adapter200-frontend0.device
After=dev-dvb-adapter200-frontend0.device


Systemd has a built-in timeout on device units so that startup will not wait forever for a failed device startup.