Gentoo Music Player Daemon (MPD) and ALSA installing

Материал из AlexNook
Перейти к навигацииПерейти к поиску

Решил использовать свой gentoo server box для проигрывания музыки. Купил нужные провода для соединения с системой 5.1. Дальше встал вопрос - как проигрывать музыку удалённо, управляя сервером. ПОтратил некоторое время для поиска консольного плеера, чтобы запускать его по ssh, но случайно наткрунлся на клиент-серверную программу MPD. Прочитал о программе, крайне понравилась идея и огромное количество клиентов подовсе ОС, и даже, веб клиенты, что мне особенно понравилось! Решено, надо установить эту замечательную штуку.

Утсновка Music Player Daemon под Gentoo

Сперва надо выполнить стандартный

emerge -v mpd

Use Flags: aac alsa audiofile bzip2 cue curl flac id3 ipv6 lame mad mikmod network ogg sqlite unicode vorbis wavpack wildmidi zip -ao -avahi -cdio -debug -ffmpeg -fifo -fluidsynth -jack -lastfmradio -libmms -libsamplerate -modplug -musepack -oss -pipe -profile -pulseaudio -sid (?)

Note: Для установки всех флагов их надо занести в
nano /etc/portage/package.use

Однако, как обычно всё гладко не бывает в жизни. После установки всех необходимых сопуствующих программ система приступила к установке собственного самого mpd и на этом остановилась с ошибкой:

 * ERROR: media-sound/mpd-0.15.15 failed.
 * Call stack:
 * ebuild.sh, line 49: Called pkg_setup
 * mpd-0.15.15.ebuild, line 60: Called enewuser 'mpd' '' '' '/var/lib/mpd' 'audio'
 * eutils.eclass, line 726: Called die
 * The specific snippet of code:
 * useradd -r ${opts} \
 * -c "added by portage for ${PN}" \
 * ${euser} \
 * || die "enewuser failed"
 * The die message:
 * enewuser failed

Подтверждение этой ошибки я нашёл вот тут. Если прочитать ошибку, то видно, что проблема в невозможности создать пользователя для mpd, что он не запускался от root'а. Далее я открыл на правку файл, который и вызвал этот затык и внёс в него следующие коррективы:

vim /usr/portage/eclass/eutils.eclass
File: /usr/portage/eclass/eutils.eclass
if [[ -z $@ ]] ; then
	useradd  ${opts} \
	-c "added by portage for ${PN}" \
		${euser} \
		|| die "enewuser failed"
else
	einfo " - Extra: $@"
	useradd -r ${opts} "$@" \
		${euser} \
		|| die "enewuser failed"
fi

На выделенной 730-й строчке я убрал параметр -r у команды useradd. Ещё раз пробуем пересобрать mpd. Всё должно сработать.

Настройка

Теперь приступаем к настройке конфигурационнго файла MPD:

vim /etc/mpd.conf
File: /etc/mpd.conf
music_directory         "/var/lib/mpd/music"
playlist_directory      "/var/lib/mpd/playlists"
db_file                 "/var/lib/mpd/database"
log_file                "/var/log/mpd/mpd.log"
state_file              "/var/lib/mpd/state"
user                    "mpd"
bind_to_address         "localhost"
bind_to_address         "/var/lib/mpd/socket"
port                            "6600"
log_level                       "default"

input {
        plugin "curl"
#       proxy "proxy.isp.com:8080"
#       proxy_user "user"
#       proxy_password "password"
}

audio_output {
        type            "alsa"
        name            "P5Q-E ALSA Device"
#       device          "hw:0,0"        # optional
#       format          "44100:16:2"    # optional
#       mixer_device    "default"       # optional
#       mixer_control   "PCM"           # optional
#       mixer_index     "0"             # optional
}

filesystem_charset "UTF-8"
Warning: Обратите внимание на выделенную строчку номер 6. Все файлы, указанные в конфигурационном файле mpd.conf должны принадлежать пользователю, указанному в строке №6! Все файлы должны существовать, группа у файлов должна быть audio, а пользователь должен иметь права на чтение и запись. На папки естественно и исполнение. Кроме файла socket.

Привер вывода команды

ls -l
-rw-r--r-- 1 mpd  audio 2532 Mar  7 19:53 database
drwxr-xr-x 2 mpd  audio 4096 Mar  7 19:35 music
drwxr-xr-x 2 mpd  audio 4096 Mar  7 19:41 playlists
srw-rw-rw- 1 root root     0 Mar  7 19:53 socket
-rw-r--r-- 1 mpd  audio  493 Mar  7 20:23 state

После этого запускаем MPD:

/etc/init.d/mpd start

Автоматизация сканирования базы песен

Для того, чтобы MPD сканировал автоматом при запуске папки с песнями и обновлял свой файл базы данных надо добавить параметр для этого в скрипт инициализации.

nano /etc/init.d/mpd
File: /etc/mpd.conf
start() {
		checkconfig || return 1
		ebegin "Starting Music Player Daemon"
		start-stop-daemon --start --quiet --background --exec /usr/bin/mpd --pidfile /var/run/mpd.pid --make-pidfile -- --no-daemon /etc/mpd.conf --create-db 2>/dev/null
Note: Обратите внимание на последнюю опцию --create-db

После чего перезапускаем MPD:

/etc/init.d/mpd restart

Проблемы запуска MPD - TroubleShooting

В случае возникновения каких-либо сложностей, надо смотреть вот эту ссылку.

Причём крайне помогает команда

/usr/bin/mpd --stdout --no-daemon --verbose

или же занесения в конфиг /etc/mpd.conf строчки: log_level "verbose"

Так же можно посмтреть вот эту ссылку, которая описывает процесс установки и настройки (в кратце) под различные ОС, или вот процесс установки под ArchLinux.

И наконец, крайне важная ссылка - FAQ, который помогает в поиске ошибок. Очень полезная ссылка.

А вот пример одного из ответов на вопросы, который помог лично мне. Важно собрать MPD с нужными поддерживаемыми форматами, о поддержке которых можно узнать по команде

mpd --version

. В общем читать надо тут.

Процесс конфигурирования MPD описан на официальном вики вот тут. В частности подробно расмотрены варианты Audio device outputs.

Процесс установки под Gentoo на Gentoo Wiki Archive вот тут.

Посмотреть ошибки можно вот тут:

less /var/log/mpd/mpd.log

Установка ALSA под Gentoo

В качестве устройства вывода звука я решил использовать ALSA. Для её установки на свой компьютер, мне пришлось пересобрать ядро, вклчив поддержку ALSA, а так же необходимых драйверов под свою звуковую карту.

Найстройка ядра Gentoo для поддержки ALSA на P5Q-e

Для начала сразу скажу, что у меня в сервере стоит мать ASUS P5Q-e с слудующей звуковухой:

lspci -v | grep -i audio
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller

Таким образом запускаем Genkernel и выбираем следующие настройки:

Linux Kernel Configuration: 2.6.36 P5Q-e kernel config
[*] Enable loadable module support  --->
--- Enable loadable module support  
	[*]   Forced module loading
	[*]   Module unloading
	[*]     Forced module unloading
	[*]   Module versioning support
	[ ]   Source checksum for all modules

Device Drivers  --->
	Character devices  --->
		<*> Enhanced Real Time Clock Support (legacy PC RTC driver)

Device Drivers  --->
	<*> Sound card support  --->
		--- Sound card support
		[*]   Preclaim OSS device numbers
		<M>   Advanced Linux Sound Architecture  --->

		--- Advanced Linux Sound Architecture
		<M>   Sequencer support
		<M>     Sequencer dummy client
		<M>   OSS Mixer API
		<M>   OSS PCM (digital audio) API
		[*]     OSS PCM (digital audio) API - Include plugin system
		[*]   OSS Sequencer API
		<M>   RTC Timer support
		[*]     Use RTC as default sequencer timer
		-*-   Dynamic device file minor numbers
		[*]   Support old ALSA API
		[*]   Generic sound devices  --->
			 --- Generic sound devices
			<M>   Virtual MIDI soundcard
		[*]   PCI sound devices  --->
			--- PCI sound devices
			<M>   Intel HD Audio  --->
				--- Intel HD Audio
				[*]   Build Realtek HD-audio codec support
				[*]   Build Analog Device HD-audio codec support
				[*]   Build IDT/Sigmatel HD-audio codec support
				[*]   Build VIA HD-audio codec support
				[*]   Build ATI HDMI HD-audio codec support
				[*]   Build NVIDIA HDMI HD-audio codec support
				[*]   Build INTEL HDMI HD-audio codec support
				[*]   Build Cirrus Logic codec support
				[*]   Build Conexant HD-audio codec support
				[*]   Build Creative CA0110-IBG codec support
				[*]   Build C-Media HD-audio codec support
				[*]   Build Silicon Labs 3054 HD-modem codec support
				[*]   Enable generic HD-audio codec parser
Note: Причём очень важно обратить на то, что часть пунктов выбрано в виде модулей. ALSA не будет рабоать, если эти пункты итегрировать в ядро системы.

Почитать об этом можно вот тут. Если этого не делать, то выпадает следующая ошибка:

alsaconf
modinfo: could not find module snd
modinfo: could not find module snd
modinfo: could not find module snd


Теперь ставим библиотерки ALSA:

emerge media-libs/alsa-lib

Причём очень важно обратить внимание на то, что у нас активированны все ALSA_PCM_PLUGINS, возможно какие-то из них вам не потребуются, но разобраться в них очень сложно, они занимают малое места и практически все полезны.

Так что в файл /etc/make.conf добавляем следующую строчку:

File: /etc/make.conf
ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"

Причём, если этого не сделать, то в логах выпадает следующая ошибка:

File: /var/log/mpd/mpd.log
Mar 07 17:01 : decoder: audio_format=44100:24:2, seekable=true
ALSA lib dlmisc.c:121:(snd_dlsym_verify) unable to verify version for symbol _snd_pcm_empty_open
ALSA lib pcm.c:2175:(snd_pcm_open_conf) symbol _snd_pcm_empty_open is not defined inside [builtin]
Mar 07 17:01 : output: Failed to open "P5Q-E ALSA Device" [alsa]: Failed to open ALSA device "default": No such device or address
Mar 07 17:01 : player_thread: problems opening audio device while playing "04_-_Rock_And_Roll_Music_(2009_Digital_Remaster).flac"

Настройка ALSA под Gentoo

Теперь ставим утилиты, помогающие настраивать ALSA:

emerge alsa-utils

Добавляем в автозапуск:

rc-update add alsasound boot
Выключенные линии обозначены как MM, а включенные как OO

Так же можно подправить конфигурационный файл: /etc/conf.d/alsasound Запускаем

/etc/init.d/alsasound start

Для настройки запускаем:

alsaconf

Это поможет в графическом режиме настроить всё, и сгенерирует файл /etc/modprobe.d/alsa

Настроить громкость можно благодаря установленной нами ранее утилиты, выполнив:

alsamixer

Обратите внимание на рисунок. Причём, замъютить (отключить) тот или иной канал можно нажав клавишу m Посмотреть загруженные модули можно стандартной командой:

lsmod

Ссылки

  • ALSA под Gentoo по-русски.
  • ALSA под Gentoo на английском.
  • P5Q-e под Gentoo.
  • ALSA на Gentoo Wiki.