[Eisfair] MPD Paket für eisfair
Peter Bäumer
peter at baeumer.duckdns.org
So Feb 16 09:47:38 CET 2025
Am 15.02.2025 um 18:36 schrieb Daniel Vogel:
> Hallo Dirk,
Update Installation da fehlte mir libplacebo264
kann aber nach installiert werden...
Starten vom mpd geht :) , hat aber einen Hinweis auf einen zu kleinen buffer:
mpd[26020]: Feb 16 07:33 : config: buffer size 10240 is too small, using 131072 bytes instead
Läuft aber trotzdem :)
Nach einem reboot kann der User mpd unter run sein Ordner/Dateien nicht anlegen.
exception: Failed to configure output in line 42; Couldn't create FIFO "/run/mpd/mpd.fifo": Permission denied
In der Systemunit die Zeile ExecStartPre mit > ; chown mpd:mpd /run/mpd < ergänzen.
ExecStartPre=-/bin/mkdir -p /run/mpd ; chown mpd:mpd /run/mpd
Das ; muss alleine stehen, bei /run/mpd; gibt es dann auch den Ordner mir ; am Ende --> /run/mpd;
Da ist systemd doch eigen...
> Am 15.02.25 um 13:37 schrieb Dirk Alberti:
>>> Anregungen oder Verbesserungsvorschläge sind gerne willkommen.
>>
>> Ich hoffe, Wünsche gehen auch noch. ;-)
>>
>> Ich hätte gerne die Möglichkeit, mehre Instanzen von MPD laufen zu lassen, auf verschiedenen Ports.
>
> hast Du schon mal über den Einsatz von docker nachgedacht? Für mich schreit Deine Anwendung regelrecht danach, mehrere Container mit verschiedenen Port-Mappings aus einem gemeinsamen Image heraus zu starten. Da wir ja auch docker für eisfair haben, wäre das ggf. auch eine Lösung. Vielleicht passt sogar eines der bereits bestehenden Images gut für Dich? Beispiel:
>
> https://hub.docker.com/r/gists/mpd
> https://hub.docker.com/r/vimagick/mpd
>
> Den MPD so umzubauen, dass mehrere Dienst-Instanzen verwaltet werden können, stelle ich mir im ersten Moment recht aufwendig vor. Insbesondere in Hinblick auf systemd. Zudem macht es die Konfiguration komplizierter als notwendig, da Dein Anwendungsfall (zumindest meiner Einschätzung nach) schon sehr speziell ist.
Das ist mit systemd "relative einfach", da brauchen die Units nur kleine Anpassungen.
Eine @ im Namen mpd at .service / mpd at .socket und ein paar %i müssen anpassender stelle verteilt werden :)
Das Starten des mpd auf eienem abweichenden Port geht dann so:
systemctl start mpd at 6001.socket
systemctl start mpd at 6001.service
systemctl enable mpd at 6001.socket
systemctl enable mpd at 6001.service
%i wird dann mit 6001 ersetzt ;)
Hier noch was da alles zu machen wäre (ohne Anpassung der Skripte für das Eis Setup, da müsste dann für jede zusätzliche Instanz ein eigener Konfigurationsbereich geben...)
mkdir /var/lib/mpd6001; chown mpd:mpd /var/lib/mpd6001
mkdir /var/lib/mpd6002; chown mpd:mpd /var/lib/mpd6002
mkdir /var/lib/mpd6003; chown mpd:mpd /var/lib/mpd6003
cp /usr/lib/systemd/system/mpd.service /usr/lib/systemd/system/mpd at .service
mpd at .service anpassen:
[Unit]
Description=Music Player Daemon Port:%i
Documentation=man:mpd(1) man:mpd.conf(5)
After=network.target sound.target
[Service]
Type=notify
ExecStartPre=-/bin/mkdir -p /run/mpd%i
ExecStart=/usr/bin/mpd /etc/mpd%i.conf --systemd
ExecStopPost=/bin/rm -rf /run/mpd%i ; chown mpd:mpd /run/mpd%i
# Enable this setting to ask systemd to watch over MPD, see
# systemd.service(5). This is disabled by default because it causes
# periodic wakeups which are unnecessary if MPD is not playing.
#WatchdogSec=120
# allow MPD to use real-time priority 40
LimitRTPRIO=40
LimitRTTIME=infinity
# for io_uring
LimitMEMLOCK=64M
# disallow writing to /usr, /bin, /sbin, ...
ProtectSystem=yes
# more paranoid security settings
NoNewPrivileges=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
# AF_NETLINK is required by libsmbclient, or it will exit() .. *sigh*
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
RestrictNamespaces=yes
# Ensure MPD can access audio devices
SupplementaryGroups=audio
[Install]
WantedBy=multi-user.target
Also=mpd@%i.socket
#-END---------------------------------------------------------------------------------
cp /usr/lib/systemd/system/mpd.socket /usr/lib/systemd/system/mpd at .socket
mpd at .socket anpassen
[Socket]
ListenStream=%t/mpd%i/socket
ListenStream=%i
Backlog=5
KeepAlive=true
PassCredentials=true
[Install]
WantedBy=sockets.target
#-END---------------------------------------------------------------------------------
cp /etc/mpd.conf /etc/mpd6001.conf
cp /etc/mpd.conf /etc/mpd6002.conf
cp /etc/mpd.conf /etc/mpd6003.conf
Beispiel für /etc/mpd6001.conf
#! /bin/sh
#----------------------------------------------------------------------------------
# file generated by /var/install/config.d/mpd.sh
# /etc/mpd.conf
# Do not change this file; instead change /etc/config.d/mpd
# Creation date: Sun Feb 16 07:16:42 CET 2025
#----------------------------------------------------------------------------------
#
# Files and directories -----------------------------------------------------------
music_directory "/data/mpd/music"
db_file "/var/lib/mpd6001/database"
playlist_directory "/data/mpd/playlists"
log_file "/var/log/mpd6001.log"
state_file "/var/lib/mpd6001/state"
sticker_file "/var/lib/mpd6001/sticker.sql"
# General music options -----------------------------------------------------------
user "mpd"
group "mpd"
bind_to_address "0.0.0.0"
port "6001"
log_level "default"
restore_paused "yes"
save_absolute_paths_in_playlists "yes"
auto_update "yes"
# Symbolic link behavior ----------------------------------------------------------
follow_outside_symlinks "no"
follow_inside_symlinks "no"
# Input ---------------------------------------------------------------------------
input {
plugin "curl"
#proxy "proxy.isp.com:8080"
#proxy_user "user"
#proxy_password "password"
}
# Audio Output --------------------------------------------------------------------
audio_output {
type "fifo"
name "My FIFO"
path "/run/mpd6001/mpd.fifo"
format "44100:16:2"
}
audio_output {
type "httpd"
name "My HTTP Stream"
encoder "vorbis" # optional, vorbis or lame
port "8001"
# bind_to_address "0.0.0.0"
# quality "5.0" # do not define if bitrate is defined
bitrate "128" # do not define if quality is defined
format "44100:16:2"
# max_clients "0" # optional 0=no limit
}
# MPD Internal Buffering --------------------------------------- -------------
audio_buffer_size "10"
# Character Encoding ------------------------------------------ --------------
filesystem_charset "UTF-8"
# Normaliztion automatic volume adjustments-----------------------------------
replaygain "auto"
replaygain_preamp "0"
replaygain_missing_preamp "0"
replaygain_limit "yes"
#-END---------------------------------------------------------------------------------
Mehr Informationen über die Mailingliste Eisfair