Quick start: install larigira on Debian buster

This guides have this assumptions or conventions:
  • you have a Debian buster installation - actually 99% of this should work in any distro with recent-enough python3 and systemd - if you don’t like systemd, you are free to use any other service manager; larigira integrates nicely with systemd, but has no requirement at all on it.
  • you have a non-root main user, which we’ll call radio
  • all commands are meant to be run as root. Use sudo -i if you don’t have root password

Install

Let’s start!:

apt-get install python3 python3-dev build-essential virtualenv mpd mpc libxml2-dev libxslt1-dev zlib1g-dev
virtualenv -p /usr/bin/python3 /opt/larigira/
/opt/larigira/bin/pip3 install --no-binary :all: larigira
touch /etc/default/larigira
mkdir -p /home/radio/.mpd/ /etc/larigira/ /var/log/larigira/
chown radio. /home/radio/.mpd/
chown radio:adm /var/log/larigira/
touch /etc/systemd/system/larigira.service

Edit /etc/systemd/system/larigira.service and put this content:

[Unit]
Description=Radio Automation
After=mpd.service

[Service]
Type=notify
NotifyAccess=all
EnvironmentFile=/etc/default/larigira
User=radio
ExecStart=/opt/larigira/bin/larigira
Restart=always

[Install]
WantedBy=multi-user.target

Now let’s edit /etc/mpd.conf:

music_directory              "/home/radio/Music/"
playlist_directory           "/home/radio/.mpd/playlists"
db_file                      "/home/radio/.mpd/tag_cache"
log_file                     "syslog"
pid_file                     "/home/radio/.mpd/pid"
state_file                   "/home/radio/.mpd/state"
sticker_file                   "/home/radio/.mpd/sticker.sql"
user                         "radio"
bind_to_address              "/home/radio/.mpd/socket"
bind_to_address                      "127.0.0.1"
port                         "6600"
log_level                    "default"
replaygain                   "track"
replaygain_limit             "yes"
volume_normalization         "yes"
max_connections "30"

Now let’s edit larigira settings, editing the file /etc/default/larigira:

MPD_HOST=/home/radio/.mpd/socket
LARIGIRA_DEBUG=false
LARIGIRA_LOG_CONFIG=/etc/larigira/logging.ini

LARIGIRA_EVENT_FILTERS='["percentwait"]'
LARIGIRA_EF_MAXWAIT_PERC=400
LARIGIRA_MPD_ENFORCE_ALWAYS_PLAYING=1
LARIGIRA_SECRET_KEY="changeme with a random, secret string of any length"

Let’s include logging configuration, editing /etc/larigira/logging.ini:

[loggers]
keys=root

[formatters]
keys=brief,ext,debug

[handlers]
keys=syslog,own,owndebug,ownerr

[logger_root]
handlers=syslog,own,owndebug,ownerr
level=DEBUG

[handler_syslog]
class=handlers.SysLogHandler
level=INFO
args=('/dev/log', handlers.SysLogHandler.LOG_USER)
formatter=brief

[handler_own]
class=handlers.WatchedFileHandler
level=INFO
args=('/var/log/larigira/larigira.log',)
formatter=ext
[handler_owndebug]
class=handlers.WatchedFileHandler
level=DEBUG
args=('/var/log/larigira/larigira.debug',)
formatter=debug
[handler_ownerr]
class=handlers.WatchedFileHandler
level=ERROR
args=('/var/log/larigira/larigira.err',)
formatter=ext

[formatter_ext]
format=%(asctime)s|%(levelname)s[%(name)s] %(message)s

[formatter_debug]
format=%(asctime)s|%(levelname)s[%(name)s:%(lineno)d] %(message)s

[formatter_brief]
format=%(levelname)s:%(message)s

For hygiene’s sake, let’s configure rotation for this log, editing /etc/logrotate.d/larigira:

/var/log/larigira/*.err
/var/log/larigira/*.log {
        daily
        missingok
        rotate 14
        compress
        notifempty
        copytruncate
        create 600
}

/var/log/larigira/*.debug {
        daily
        rotate 2
        missingok
        compress
        notifempty
        copytruncate
        create 600
}

Restart everything:

systemctl daemon-reload
systemctl restart mpd
systemctl restart larigira
systemctl enable larigira
systemctl enable mpd

Everything should work now!