* [Buildroot] [PATCH v3 1/2] package/mpd: use upstream mpd.conf w/ buildroot modifications
2026-08-27 3:26 [Buildroot] [PATCH v3 0/2] Add runtime test for mpd Andreas Ziegler
@ 2026-08-27 3:26 ` Andreas Ziegler
2026-08-27 5:40 ` Thomas Petazzoni via buildroot
2026-08-27 3:26 ` [Buildroot] [PATCH v3 2/2] support/testing: add runtime test for mpd Andreas Ziegler
1 sibling, 1 reply; 5+ messages in thread
From: Andreas Ziegler @ 2026-08-27 3:26 UTC (permalink / raw)
To: buildroot; +Cc: Thomas Petazzoni, Marcus Hoffmann, Andreas Ziegler
The configuration file supplied by Buildroot is only a sample; it will
not start MPD on a default installation. In a production build, a custom
mpd.conf has to be supplied via rootfs overlay.
Treat Buildroot mpd.conf as a fragment file, containing the minimum
modifications necessary to run mpd in a default build. Install the
upstream sample and inject the values from the Buildroot fragment.
* log_file, pid_file: Buildroot specific; referenced in mpd.mk and S95mpd
* audio_output: At least one output has to be defined to run mpd
Signed-off-by: Andreas Ziegler <br025@umbiko.net>
---
Changes v2 -> v3:
reintroduce Buildroot mpd.conf as fragment file
package/mpd/mpd.conf | 31 ++++++++-----------------------
package/mpd/mpd.mk | 22 +++++++++++++++++++++-
2 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/package/mpd/mpd.conf b/package/mpd/mpd.conf
index 5956b75e24..db81d69d73 100644
--- a/package/mpd/mpd.conf
+++ b/package/mpd/mpd.conf
@@ -1,32 +1,17 @@
#
-# Sample configuration file for mpd
-# This is a minimal configuration, see the manpage for more options
+# The configuration file is provided by the mpd package. This file
+# contains values that will override settings from the main config
+# file to make mpd startable in a default configuration.
#
-# Directory where the music is stored
-music_directory "/var/lib/mpd/music"
-
-# Directory where user-made playlists are stored (RW)
-playlist_directory "/var/lib/mpd/playlists"
-
-# Database file (RW)
-db_file "/var/lib/mpd/database"
-
# Log file (RW)
log_file "/var/log/mpd.log"
# Process ID file (RW)
pid_file "/var/run/mpd.pid"
-# State file (RW)
-state_file "/var/lib/mpd/state"
-
-# User id to run the daemon as
-#user "nobody"
-
-# TCP socket binding
-bind_to_address "any"
-#bind_to_address "localhost"
-
-# Unix socket to listen on
-bind_to_address "/var/lib/mpd/socket"
+# One output has to be defined
+audio_output {
+ type "null"
+ name "/dev/null"
+}
diff --git a/package/mpd/mpd.mk b/package/mpd/mpd.mk
index d063d509f4..d8e1d22611 100644
--- a/package/mpd/mpd.mk
+++ b/package/mpd/mpd.mk
@@ -345,8 +345,28 @@ else
MPD_CONF_OPTS += -Dzzip=disabled
endif
+# sed snippet from https://stackoverflow.com/a/37911473
+# single-line configurations will be inserted behind the last matching line
+# in the target file, multi-line blocks are just appended at the bottom.
define MPD_INSTALL_EXTRA_FILES
- $(INSTALL) -m 0644 -D package/mpd/mpd.conf $(TARGET_DIR)/etc/mpd.conf
+ $(INSTALL) -m 0644 -D $(@D)/doc/mpdconf.example $(TARGET_DIR)/etc/mpd.conf
+ export multiline=0
+ while read -r line; do \
+ if [[ $$line =~ ^[a-zA-Z] ]]; then \
+ if [ "$${line##*[[:space:]]}" == "{" ]; then \
+ export multiline=1; \
+ printf "%s\n" "$$line" >> "$(TARGET_DIR)"/etc/mpd.conf; \
+ else \
+ [ $$multiline ] && \
+ printf "\t%s\n" "$$line" >> "$(TARGET_DIR)"/etc/mpd.conf; \
+ [ ! $$multiline ] && \
+ sed '/#'$${line%%[[:space:]]*}'[^\n]*/,$$!b;//{x;//p;g};//!H;$$!d;x;s||&\n'"$$line"'|' -i "$(TARGET_DIR)"/etc/mpd.conf; \
+ fi \
+ elif [ "$$line" == "}" ]; then \
+ printf "%s\n" "$$line" >> "$(TARGET_DIR)"/etc/mpd.conf; \
+ export multiline=0; \
+ fi \
+ done < package/mpd/mpd.conf
mkdir -p $(TARGET_DIR)/var/lib/mpd/music
mkdir -p $(TARGET_DIR)/var/lib/mpd/playlists
endef
--
2.53.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread* [Buildroot] [PATCH v3 2/2] support/testing: add runtime test for mpd
2026-08-27 3:26 [Buildroot] [PATCH v3 0/2] Add runtime test for mpd Andreas Ziegler
2026-08-27 3:26 ` [Buildroot] [PATCH v3 1/2] package/mpd: use upstream mpd.conf w/ buildroot modifications Andreas Ziegler
@ 2026-08-27 3:26 ` Andreas Ziegler
1 sibling, 0 replies; 5+ messages in thread
From: Andreas Ziegler @ 2026-08-27 3:26 UTC (permalink / raw)
To: buildroot; +Cc: Thomas Petazzoni, Marcus Hoffmann, Andreas Ziegler
Signed-off-by: Andreas Ziegler <br025@umbiko.net>
---
Changes v2 -> v3:
simplify test to be used without test data
remove mpd.conf rootfs overlay
DEVELOPERS | 2 +
support/testing/tests/package/test_mpd.py | 51 +++++++++++++++++++
.../tests/package/test_mpd/busybox.fragment | 4 ++
.../test_mpd/rootfs-overlay/root/test_mpd.sh | 35 +++++++++++++
4 files changed, 92 insertions(+)
create mode 100644 support/testing/tests/package/test_mpd.py
create mode 100644 support/testing/tests/package/test_mpd/busybox.fragment
create mode 100755 support/testing/tests/package/test_mpd/rootfs-overlay/root/test_mpd.sh
diff --git a/DEVELOPERS b/DEVELOPERS
index 5eb438906f..dae1d39ee1 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -205,6 +205,8 @@ F: package/qt6/qt6opcua/
N: Andreas Ziegler <br025@umbiko.net>
F: package/mpd/
+F: support/testing/tests/package/test_mpd
+F: support/testing/tests/package/test_mpd.py
N: Andrey Smirnov <andrew.smirnov@gmail.com>
F: package/python-decorator/
diff --git a/support/testing/tests/package/test_mpd.py b/support/testing/tests/package/test_mpd.py
new file mode 100644
index 0000000000..f93033260e
--- /dev/null
+++ b/support/testing/tests/package/test_mpd.py
@@ -0,0 +1,51 @@
+#!/bin/python
+
+import os
+import infra.basetest
+
+class TestMpd(infra.basetest.BRTest):
+
+ rootfs_overlay = \
+ infra.filepath("tests/package/test_mpd/rootfs-overlay")
+ busybox_fragment = \
+ infra.filepath("tests/package/test_mpd/busybox.fragment")
+
+ # use a custom configuration
+ config = \
+ """
+ BR2_x86_64=y
+ BR2_x86_x86_64_v2=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_X86_64_GLIBC_BLEEDING_EDGE=y
+ BR2_TARGET_GENERIC_GETTY_PORT="ttyS0"
+ BR2_ROOTFS_OVERLAY="{}"
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_LATEST_VERSION=y
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86_64/linux.config"
+ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
+ BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="{}"
+ BR2_PACKAGE_MPD=y
+ # BR2_PACKAGE_MPD_MAD is not set
+ # BR2_PACKAGE_MPD_ALSA is not set
+ BR2_TARGET_ROOTFS_INITRAMFS=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """.format(rootfs_overlay, busybox_fragment)
+
+ def test_run(self):
+ cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
+ kern = os.path.join(self.builddir, "images", "bzImage")
+ self.emulator.boot(arch="x86_64",
+ kernel=kern,
+ kernel_cmdline=["console=ttyS0"],
+ options=[
+ "-M", "q35",
+ "-cpu", "Westmere",
+ "-smp", "2",
+ "-initrd", cpio_file,
+ ])
+
+ self.emulator.login()
+
+ self.assertRunOk("/root/test_mpd.sh", timeout=30)
diff --git a/support/testing/tests/package/test_mpd/busybox.fragment b/support/testing/tests/package/test_mpd/busybox.fragment
new file mode 100644
index 0000000000..0c92d86c49
--- /dev/null
+++ b/support/testing/tests/package/test_mpd/busybox.fragment
@@ -0,0 +1,4 @@
+#
+# Networking Utilities
+#
+CONFIG_NC=y
diff --git a/support/testing/tests/package/test_mpd/rootfs-overlay/root/test_mpd.sh b/support/testing/tests/package/test_mpd/rootfs-overlay/root/test_mpd.sh
new file mode 100755
index 0000000000..4cc6895602
--- /dev/null
+++ b/support/testing/tests/package/test_mpd/rootfs-overlay/root/test_mpd.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+mpd_command() {
+ mpd_result=""
+ mpd_state=""
+ printf "Execute %s" "$1"
+ while IFS= read -r line; do
+ case $line in
+ OK) mpd_result=$line ;;
+ OK\ MPD*) mpd_protocol=${line##* } ;;
+ state:*) mpd_state=${line##*: } ;;
+ ACK\ \[[0-9]*@[0-9]*\]*) mpd_error=${line##*\} } ;;
+ esac
+ done <<- EOF
+ $( ( echo "$1"; echo "close" ) | nc localhost 6600 )
+EOF
+
+ if [ "$mpd_result" != "OK" ]; then
+ printf "\nmpd protocol error: %s\n" "$mpd_error"
+ return 1
+ else
+ printf " [OK]\n"
+ fi
+
+ export mpd_protocol
+ export mpd_state
+}
+
+test_mpd() {
+ mpd_command "status" || return 1
+ printf "MPD protocol version: %s\n" "$mpd_protocol"
+}
+
+# run main function if invoked from a subshell
+[ "$0" = "-sh" ] || test_mpd
--
2.53.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 5+ messages in thread