Gentoo Music Player Daemon (MPD) and ALSA installing: различия между версиями

Материал из AlexNook
Перейти к навигацииПерейти к поиску
 
(не показаны 72 промежуточные версии этого же участника)
Строка 1: Строка 1:
Решил использовать свой gentoo server box для проигрывания музыки. Купил нужные провода для соединения с системой 5.1. Дальше встал вопрос - как проигрывать музыку удалённо, управляя сервером. ПОтратил некоторое время для поиска консольного плеера, чтобы запускать его по ssh, но случайно наткрунлся на клиент-серверную программу [[ru:wikipedia:Music_Player_Daemon|MPD]]. Прочитал о программе, крайне понравилась идея и огромное количество клиентов подовсе ОС, и даже, веб клиенты, что мне особенно понравилось! Решено, надо установить эту замечательную штуку.
Решил я как-то использовать свой gentoo server box для проигрывания музыки. Купил нужные провода для соединения с системой 5.1. Дальше встал вопрос - как проигрывать музыку удалённо, управляя сервером по SSH или как-то ещё. Потратил некоторое время для поиска консольного плеера, чтобы запускать его по ssh, но случайно наткрунлся на клиент-серверную программу [[wikipedia:ru:Music_Player_Daemon|MPD]]. Прочитал о программе, крайне понравилась идея и огромное количество клиентов подовсе ОС, и даже, веб клиенты, что мне особенно понравилось! Решено, надо установить эту замечательную штуку.


==Утсновка Music Player Daemon под Gentoo==
==Утсновка Music Player Daemon под Gentoo==
Сперва надо выполнить стандартный
Сперва надо выполнить стандартный
{{root|emerge -v mpd}}
{{root|emerge -v mpd}}
Обратите внимание на USE Flags, от них сильно зависит сможет ли программа проигрывать те или иные форматы аудио, например. Причём некоторые флаги лично мне показались с весьма странными названиями, например, '''mad''' - отвечает за поддержку '''mp3'''.


{{USEFlag|extended=yes| {{EnableFlag|aac}} {{EnableFlag|alsa}} {{EnableFlag|bzip2}} {{EnableFlag|cue}} {{EnableFlag|curl}} {{EnableFlag|flac}} {{EnableFlag|id3}} {{EnableFlag|ipv6}} {{EnableFlag|lame}} {{EnableFlag|network}} {{EnableFlag|sqlite}} {{EnableFlag|unicode}} {{EnableFlag|wavpack}} {{EnableFlag|zip}} {{DisableFlag|ao}} {{DisableFlag|audiofile}} {{DisableFlag|avahi}} {{DisableFlag|cdio}} {{DisableFlag|debug}} {{DisableFlag|ffmpeg}} {{DisableFlag|fifo}} {{DisableFlag|fluidsynth}} {{DisableFlag|jack}} {{DisableFlag|lastfmradio}} {{DisableFlag|libmms}} {{DisableFlag|libsamplerate}} {{DisableFlag|mad}} {{DisableFlag|mikmod}} {{DisableFlag|modplug}} {{DisableFlag|musepack}} {{DisableFlag|ogg}} {{DisableFlag|oss}} {{DisableFlag|pipe}} {{DisableFlag|profile}} {{DisableFlag|pulseaudio}} {{DisableFlag|sid}} {{DisableFlag|vorbis}} {{DisableFlag|wildmidi}} }}
{{USEFlag|extended=yes| {{EnableFlag|aac}} {{EnableFlag|alsa}} {{EnableFlag|audiofile}} {{EnableFlag|bzip2}} {{EnableFlag|cue}} {{EnableFlag|curl}} {{EnableFlag|ffmpeg}} {{EnableFlag|flac}} {{EnableFlag|id3}} {{EnableFlag|ipv6}} {{EnableFlag|lame}} {{EnableFlag|mad}} {{EnableFlag|mikmod}} {{EnableFlag|network}} {{EnableFlag|ogg}} {{EnableFlag|sqlite}} {{EnableFlag|unicode}} {{EnableFlag|vorbis}} {{EnableFlag|wavpack}} {{EnableFlag|wildmidi}} {{EnableFlag|zip}} {{DisableFlag|ao}} {{DisableFlag|avahi}} {{DisableFlag|cdio}} {{DisableFlag|debug}} {{DisableFlag|fifo}} {{DisableFlag|fluidsynth}} {{DisableFlag|jack}} {{DisableFlag|lastfmradio}} {{DisableFlag|libmms}} {{DisableFlag|libsamplerate}} {{DisableFlag|modplug}} {{DisableFlag|musepack}} {{DisableFlag|oss}} {{DisableFlag|pipe}} {{DisableFlag|profile}} {{DisableFlag|pulseaudio}} {{DisableFlag|sid}} }}


{{note| Для установки всех флагов их надо занести в {{root|nano /etc/portage/package.use}}
Почитать о флагах MPD можно [http://gentoo-portage.com/media-sound/mpd/USE#ptabs тут] на Gentoo Portage) или вот [http://mpd.wikia.com/wiki/Dependencies тут] на официальной вики MPD. }}
===Проблема установки MPD под Gentoo - создание нового пользователя===
Однако, как обычно всё гладко не бывает в жизни. После установки всех необходимых сопуствующих программ система приступила к установке собственного самого mpd и на этом остановилась с ошибкой:
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
* 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
</syntaxhighlight>
Подтверждение этой ошибки я нашёл вот [http://www.musicpd.org/mantis/view.php?id=3092 тут]. Если прочитать ошибку, то видно, что проблема в невозможности создать пользователя для '''mpd''', чтобы он не запускался от root'а. Далее я открыл на правку файл, который и вызвал этот затык и внёс в него следующие коррективы:
{{root|vim /usr/portage/eclass/eutils.eclass}}
{{File|/usr/portage/eclass/eutils.eclass|
<syntaxhighlight lang="bash" line start="729" line="GESHI_FANCY_LINE_NUMBERS" highlight="2" enclose="div">
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
</syntaxhighlight>
}}
На выделенной 730-й строчке я убрал параметр '''-r''' у команды '''useradd'''. Ещё раз пробуем пересобрать '''mpd'''. Всё должно сработать.
==Настройка MPD под Gentoo==
Теперь приступаем к настройке конфигурационнго файла MPD:
{{root|vim /etc/mpd.conf}}
{{File|/etc/mpd.conf|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" highlight="6" enclose="div">
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"
</syntaxhighlight>
}}
{{warning|Обратите внимание на выделенную строчку номер '''6'''. Все файлы, указанные в конфигурационном файле {{Codeline|mpd.conf}} должны принадлежать пользователю, указанному в строке №'''6'''! Все файлы должны существовать, группа у файлов должна быть audio, а пользователь должен иметь права на чтение и запись. На папки естественно и исполнение. Кроме файла {{Codeline|socket}}.}}
Привер вывода команды {{root|ls -l}}
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
-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
</syntaxhighlight>
Так же я бы посоветовал не углублятся сильно в настройки устройства вывода, в частности не использовать прямое обращение к звуковой карте - параметр '''hw:0,0'''.
После этого запускаем MPD:
{{root|/etc/init.d/mpd start}}
Добавляем MPD в автозагрузку:
{{root|rc-update add mpd default}}
===Автоматизация сканирования базы песен===
{{Warning|Опция '''--create-db''' была упразднена из программы и больше не поддерживается, однако, если файл обнулить и перезапустить 1-2 раза демон, он заполнит файл базы данных информацией о песнях.}}
Для того, чтобы '''MPD''' сканировал автоматом при запуске папки с песнями и обновлял свой файл базы данных для этого надо добавить параметр в скрипт инициализации при запуске '''mpd'''.
{{root|nano /etc/init.d/mpd}}
{{File|/etc/init.d/mpd|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" highlight="4" enclose="div">
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
</syntaxhighlight>
}}
{{note|Обратите внимание на последнюю опцию {{Codeline|--create-db}} }}. Она как раз и пересоздаёт базу данных песен. Если у вас как и у меня сервер, работающий постоянно, то часто перезапускать mpd вам не нужно, что не будет влиять на скорость запуска mpd. Кстати, сканирование всего моего много гигабайтного раздела с песнями и создание файла database занимает секунду.
После чего перезапускаем MPD:
{{root|/etc/init.d/mpd restart}}
===Добавляем в базу с песнями папки с других носителей===
У меня все мои файлы хранятся на других носителях, не там где установленна ситсема, а так же они имеют других владельцев и другую группу (не '''mpd''' и не '''audio'''). Да и хранить каталоги с песнями на сисетмном разделе в {{path|var/lib}} как-то не хорошо. Как быть?
Для этого добавлям пользователя '''mpd''' в нужную нам группу:
{{root|usermod -a -G GroupName mpd}}
Проверить изменения можно так:
{{root|id mpd}}
Затем создаём символическую ссылку внутри нашей папки {{path|musci}}, которая будет ссылаться на нужные нам папки с музыкой.
{{root|ln -s /home/ftp/.../AUDIO/ /var/lib/mpd/music/}}
Далее изменяем владельца на ссылку AUDIO, которую только что создали:
{{root|chown -R user:group music/}}
Мы добиваемся требуемого эффекта - символическая ссылка меняет владельца и группу с рута на нужные, но как побочный эффект, у нас меняются права на оригинальных папках на '''mpd:audio'''.
Возвращаем всё назад:
{{root|chown  user:group /home/ftp/.../AUDIO/}}
{{root|chown  user:group /home/ftp/.../files/}}
==Проблемы запуска MPD - TroubleShooting==
В случае возникновения каких-либо сложностей или проблем при запуске '''mpd''', надо смотреть вот эту [http://mpd.wikia.com/wiki/Music_Player_Daemon_HOWTO_Troubleshoot '''ссылку''']. Это официальная Wiki и раздел TroubleShoot.
Причём для отладки крайне помогает следующая команда запуска '''mpd'''
{{root|/usr/bin/mpd --stdout --no-daemon --verbose}}
Того же эффекта можно добится, если занести в конфиг {{Path|/etc/mpd.conf}} строчку: {{Codeline|log_level "verbose"}}. Теперь в наших логах будет содержаться подробный отчёт обовсех событиях и ошибках. Посмотреть ошибки можно вот тут {{path|/var/log/mpd/mpd.log}}
И наконец, крайне важная ссылка - [http://mpd.wikia.com/wiki/FAQ FAQ], который помогает в поиске ошибок. Очень полезная ссылка.
===MPD не видит файлы в папке music===
Если у вас в папке {{path|/var/lib/mpd/music}} лежат аудиофайлы, но mpd их не добавляет в базу данных, то как правило проблема вызвана правами на папки и файлы. Проверьте всё десять раз! Даже, если вы уверены 100%, надо проверить всё ещё раз, чтобы быть уверенным на 200%. Однако, такой эффект вполне может быть вызван и тем, что MPD не поддерживает ваши аудио форматы. Важно собрать MPD с нужными поддерживаемыми форматами.
О том, какие форматы на данный момент поддерживает ваша сборка '''mpd''', можно узнать по команде:
{{root|mpd --version}}
В общем подробнее об этом можно прочитать вот [http://mpd.wikia.com/wiki/Music_Player_Daemon_Database_Troubleshooting тут].
==Установка ALSA под Gentoo==
В качестве устройства вывода звука я решил использовать ALSA. Для её установки на свой компьютер, мне пришлось пересобрать ядро, включив поддержку ALSA, а так же необходимых драйверов под свою звуковую карту.
===Найстройка ядра Gentoo для поддержки ALSA на P5Q-e===
Для начала сразу скажу, что у меня в сервере стоит мать ASUS P5Q-e с слудующей звуковухой:
{{root|<nowiki>lspci -v | grep -i audio</nowiki>}}
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
00:1b.0 Audio device: Intel Corporation 82801JI (ICH10 Family) HD Audio Controller
</syntaxhighlight>
Таким образом запускаем Genkernel и выбираем следующие настройки:
{{Kernel|2.6.36 P5Q-e kernel config|<pre>
[*] 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
</pre>}}
{{Note|Причём очень важно обратить на то, что часть пунктов выбрано в виде модулей. ALSA не будет рабоать, если эти пункты интегрировать в ядро системы. На это у меня ушло пару часов, прежде, чем я нашёл в нете об этом ошибку.}}
Почитать об этом можно вот [http://www.linuxquestions.org/questions/linux-software-2/alsa-said-could-not-find-module-snd-602406/ тут].
Узнал я намёк, что проблема вся в том, что нет модулей при запуске конфигуратора alsa.
При запуске конфигуратора выпадает следующая ошибка, которую реально заметить крайне сложно, т.к. она выпадает всего на полсекунды:
{{root|alsaconf}}
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
modinfo: could not find module snd
modinfo: could not find module snd
modinfo: could not find module snd
</syntaxhighlight>
Посмотреть загруженные модули можно стандартной командой:
{{root|lsmod}}
Теперь ставим библиотеки ALSA, которые будут работать с аудио:
{{root|emerge media-libs/alsa-lib}}
Причём очень важно обратить внимание на то, что у нас активированны все {{Codeline|ALSA_PCM_PLUGINS}}, возможно какие-то из них вам не потребуются, но разобраться в них очень сложно, они занимают малое места и практически все полезны и более того, необходимы.
Так что в файл {{path|/etc/make.conf}} добавляем следующую строчку:
{{File|/etc/make.conf|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
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"
</syntaxhighlight>
}}
Причём, сперва я не добавлял некоторые плагины, тогда в логах выпадала следующая ошибка:
{{File|/var/log/mpd/mpd.log|
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" enclose="div">
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"
</syntaxhighlight>
}}
==Настройка ALSA под Gentoo==
Поскольку ядро под alsa и нашу звуковуху в конкретно нашей материнке p5q-e настроено, а так же стоят библиотеки alsa - {{Package|media-libs/alsa-lib|direct=yes}}, то
теперь ставим утилиты, помогающие настраивать '''ALSA''':
{{root|emerge alsa-utils}}
Добавляем их в автозапуск:
{{root|rc-update add alsasound boot}}
(это что-то типа драйверов настройки звука в Windows, иконка от которых висит в трее с часами, но я точно не уверен).
[[Image:alsa_mixer.png|thumb|Выключенные линии обозначены как '''MM''', а включенные как '''OO''']]
Так же можно подправить конфигурационный файл {{path|/etc/conf.d/alsasound}}.
Запускаем утилиты:
{{root|/etc/init.d/alsasound start}}
Для настройки ALSA запускаем:
{{root|alsaconf}}
Это поможет в графическом режиме настроить всё, и сгенерирует файл {{Path|/etc/modprobe.d/alsa}}, который в принципе мы можем поправить руками.
Настроить громкость можно благодаря установленной нами ранее программы из набора утилит, выполнив:
{{root|alsamixer}}
Обратите внимание на рисунок.
Причём, замъютить (отключить) тот или иной канал можно нажав клавишу {{key|m}}
==Установка и настройка web-based клиента для MPD==
Из всех клиентов, я поставил наиболее простой с понятным и светлым интерфейсом. [http://crsw.dk/Projects/Mpd/extmpd.php ExtJS MPD] - это клиент, который просто копируется в папку на веб сервере и тут же начинает работать "из коробки". Если у вас установлены специфические адрес и порт, которые слушает MPD, то вы можете указать их в файле {{path|mpd-control/configuration.php}}. Некоторые минусы у него есть, но вроде на первых порах нормально. Просто и работает "из коробки". Для себя я отметил ещё парочку клиентов для веб сервера на php. [http://sites.google.com/site/cseickel/mpdwebamp Первый] из них и [http://relaxx.dirk-hoeschen.de/index.php/photos/album/1/photo/17.html второй].
===Добавляем защиту от произвольного доступа к клиенту===
Для того, чтобы к нашему клиенту не подсоединились люди из вне (собственно им нечего делать там =) ), я ограничил доступ к web-based клиенту с помощью mod_rewrite из поставки Apache.
<syntaxhighlight lang="bash" line start="1" line="GESHI_FANCY_LINE_NUMBERS" highlight="3" enclose="div">
RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^192\.168\..*\..*$
RewriteRule ^.*$ /index.php
</syntaxhighlight>
Как видно из третьей строчки, я ограничил доступ по IP адресу. Только люди из 192.168.0.0\16 могут попасть в нужную папку на веб сервере, стальные переадресуются на файл index.php с обычным HTML кодом, выводящим сообщение типа: '''Access Denied!'''
==Ссылки==
Постарался собрать все полезные ссылки, упоминаемые в заметке.
* [http://en.gentoo-wiki.com/wiki/Asus_P5Q-E P5Q-e] настройка под Gentoo.
===ALSA===
* [http://www.gentoo.org/doc/ru/alsa-guide.xml ALSA] под Gentoo по-русски и вот [http://www.gentoo.org/doc/en/alsa-guide.xml тут] ALSA под Gentoo на английском.
* [http://en.gentoo-wiki.com/wiki/ALSA ALSA] на Gentoo Wiki на английском.
===MPD===
====USE Flags====
* [http://gentoo-portage.com/media-sound/mpd/USE#ptabs тут] на Gentoo Portage
* [http://mpd.wikia.com/wiki/Dependencies Официальная] wiki
====TroubleShoot====
* [http://mpd.wikia.com/wiki/Music_Player_Daemon_HOWTO_Troubleshoot Официальная] Wiki и раздел TroubleShoot.
* [http://mpd.wikia.com/wiki/FAQ '''FAQ'''] который надо прочитать очень внимательно!
====Установка и настройка====
* [http://mpd.wikia.com/wiki/Configuration Процесс] конфигурирования '''MPD''' на официальном вики. В частности подробно расмотрены варианты ''Audio device outputs''.
* [http://www.gentoo-wiki.info/MPD Процесс] установки на ''Gentoo Wiki Archive''.
* [http://mpd.wikia.com/wiki/Install Установка] и настройки под различные ОС
* [https://wiki.archlinux.org/index.php/Music_Player_Daemon_(Русский) Установка] под ArchLinux.
====Список клиентов для MPD====
* [http://mpd.wikia.com/wiki/Clients Список] клиентов на официальном Wiki/




[[Category:Index]]
[[Category:Index]]
[[Category:Linux]]
[[Category:Linux]]

Текущая версия на 18:39, 17 июля 2012

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

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

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

emerge -v mpd

Обратите внимание на USE Flags, от них сильно зависит сможет ли программа проигрывать те или иные форматы аудио, например. Причём некоторые флаги лично мне показались с весьма странными названиями, например, mad - отвечает за поддержку mp3.

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

Note: Для установки всех флагов их надо занести в
nano /etc/portage/package.use
Почитать о флагах MPD можно тут на Gentoo Portage) или вот тут на официальной вики MPD.

Проблема установки MPD под Gentoo - создание нового пользователя

Однако, как обычно всё гладко не бывает в жизни. После установки всех необходимых сопуствующих программ система приступила к установке собственного самого 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 под Gentoo

Теперь приступаем к настройке конфигурационнго файла 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

Так же я бы посоветовал не углублятся сильно в настройки устройства вывода, в частности не использовать прямое обращение к звуковой карте - параметр hw:0,0.

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

/etc/init.d/mpd start

Добавляем MPD в автозагрузку:

rc-update add mpd default

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

Warning: Опция --create-db была упразднена из программы и больше не поддерживается, однако, если файл обнулить и перезапустить 1-2 раза демон, он заполнит файл базы данных информацией о песнях.

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

nano /etc/init.d/mpd
File: /etc/init.d/mpd
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 вам не нужно, что не будет влиять на скорость запуска mpd. Кстати, сканирование всего моего много гигабайтного раздела с песнями и создание файла database занимает секунду.

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

/etc/init.d/mpd restart

Добавляем в базу с песнями папки с других носителей

У меня все мои файлы хранятся на других носителях, не там где установленна ситсема, а так же они имеют других владельцев и другую группу (не mpd и не audio). Да и хранить каталоги с песнями на сисетмном разделе в var/lib как-то не хорошо. Как быть?

Для этого добавлям пользователя mpd в нужную нам группу:

usermod -a -G GroupName mpd

Проверить изменения можно так:

id mpd

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

ln -s /home/ftp/.../AUDIO/ /var/lib/mpd/music/

Далее изменяем владельца на ссылку AUDIO, которую только что создали:

chown -R user:group music/

Мы добиваемся требуемого эффекта - символическая ссылка меняет владельца и группу с рута на нужные, но как побочный эффект, у нас меняются права на оригинальных папках на mpd:audio. Возвращаем всё назад:

chown user:group /home/ftp/.../AUDIO/
chown user:group /home/ftp/.../files/

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

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

Причём для отладки крайне помогает следующая команда запуска mpd

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

Того же эффекта можно добится, если занести в конфиг /etc/mpd.conf строчку: log_level "verbose". Теперь в наших логах будет содержаться подробный отчёт обовсех событиях и ошибках. Посмотреть ошибки можно вот тут /var/log/mpd/mpd.log

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

MPD не видит файлы в папке music

Если у вас в папке /var/lib/mpd/music лежат аудиофайлы, но mpd их не добавляет в базу данных, то как правило проблема вызвана правами на папки и файлы. Проверьте всё десять раз! Даже, если вы уверены 100%, надо проверить всё ещё раз, чтобы быть уверенным на 200%. Однако, такой эффект вполне может быть вызван и тем, что MPD не поддерживает ваши аудио форматы. Важно собрать MPD с нужными поддерживаемыми форматами. О том, какие форматы на данный момент поддерживает ваша сборка mpd, можно узнать по команде:

mpd --version

В общем подробнее об этом можно прочитать вот тут.

Установка 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 не будет рабоать, если эти пункты интегрировать в ядро системы. На это у меня ушло пару часов, прежде, чем я нашёл в нете об этом ошибку.

Почитать об этом можно вот тут.

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

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

Посмотреть загруженные модули можно стандартной командой:

lsmod

Теперь ставим библиотеки 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 и нашу звуковуху в конкретно нашей материнке p5q-e настроено, а так же стоят библиотеки alsa - media-libs/alsa-lib, то теперь ставим утилиты, помогающие настраивать ALSA:

emerge alsa-utils

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

rc-update add alsasound boot

(это что-то типа драйверов настройки звука в Windows, иконка от которых висит в трее с часами, но я точно не уверен).

Выключенные линии обозначены как MM, а включенные как OO

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

Запускаем утилиты:

/etc/init.d/alsasound start

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

alsaconf

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

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

alsamixer

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

Установка и настройка web-based клиента для MPD

Из всех клиентов, я поставил наиболее простой с понятным и светлым интерфейсом. ExtJS MPD - это клиент, который просто копируется в папку на веб сервере и тут же начинает работать "из коробки". Если у вас установлены специфические адрес и порт, которые слушает MPD, то вы можете указать их в файле mpd-control/configuration.php. Некоторые минусы у него есть, но вроде на первых порах нормально. Просто и работает "из коробки". Для себя я отметил ещё парочку клиентов для веб сервера на php. Первый из них и второй.

Добавляем защиту от произвольного доступа к клиенту

Для того, чтобы к нашему клиенту не подсоединились люди из вне (собственно им нечего делать там =) ), я ограничил доступ к web-based клиенту с помощью mod_rewrite из поставки Apache.

RewriteEngine on
RewriteBase /
RewriteCond %{REMOTE_ADDR} !^192\.168\..*\..*$
RewriteRule ^.*$ /index.php

Как видно из третьей строчки, я ограничил доступ по IP адресу. Только люди из 192.168.0.0\16 могут попасть в нужную папку на веб сервере, стальные переадресуются на файл index.php с обычным HTML кодом, выводящим сообщение типа: Access Denied!

Ссылки

Постарался собрать все полезные ссылки, упоминаемые в заметке.

  • P5Q-e настройка под Gentoo.

ALSA

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

MPD

USE Flags

TroubleShoot

  • Официальная Wiki и раздел TroubleShoot.
  • FAQ который надо прочитать очень внимательно!

Установка и настройка

  • Процесс конфигурирования MPD на официальном вики. В частности подробно расмотрены варианты Audio device outputs.
  • Процесс установки на Gentoo Wiki Archive.
  • Установка и настройки под различные ОС
  • Установка под ArchLinux.

Список клиентов для MPD

  • Список клиентов на официальном Wiki/