今回は Linux サーバ機で音楽を鳴らすというお題目です。
実は Lenny の時代に一度行っていたのですが、ハードウェア老朽化により機器交換となり、現バージョンの Wheezy で動かした時の記録です。
※某所で館内放送を使い、Linux サーバ機で時報(業務開始、お昼休み、業務終了)を鳴らしたり、BGM を流したりしています。

目的:Linuxサーバ機でMP3やWAV音源の音楽を鳴らす。また、インターネットラジオの受信方法も合わせて記載します。

 ハードウェア shuttle製XS35 V2

http://global.shuttle.com/news/productsDetail?productId=1487
※このマシンはファンレスでCPUがAtom D525(1.8GHz)ですので、そこそこ使えます。…というか、SSD を搭載すると可動部品が無くなるので、マイクロサーバとしては優秀ですが、以下の点に注意が必要です。

Realtek の r8168 というギガ NIC を搭載しています。この NIC は Linux のインストーラーが誤認識するので、OS のインストール後に手動でドライバーの再インストールを行うか、Linux kernel に、Realtek のファームウェアを読み込ませる 必要があります。

このファームウェアを読み込ませる方法であれば、kernel がアップデートされても、ドライバ等を再インストールする必要がありません。詳しくは、こちら をご覧下さい。

また、ファンレスなので夏場に室温が 35℃ を超えるような場合にはちょっと辛くなります。この際には、USB 扇風機等を使い強制空冷する事をお勧めします。

 Linux

Debian 6.0 GNU Linux Wheezy  kernel 3.2.0-4-686-pae

 NIC のドライバーをインストールする準備

aptitude install vim linux-headers-3.2.0-4-686-pae make

Realtek の Web サイトより最新のドライバーをダウンロードして、/usr/src に置きます。
※2015/03/09 現在は 8.039.00 が最新です。
【追記】2016/08/10 現在は 8.042 が最新です。

tar xvfj r8168-8.039.00.tar.bz2
cd r8168-8.039.00
./autorun.sh

ドライバーのインストールが始まります。もし、SSH で接続していても大丈夫です。結構時間がかかりますが、気長に待って下さい。

Check old driver and unload it.
rmmod r8168
Build the module and install
Warning: you may need to install module-init-tools
See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt
DEPMOD 3.2.0-4-686-pae
load module r8168
Updating initramfs. Please wait.
update-initramfs: Generating /boot/initrd.img-3.2.0-4-686-pae
Completed.

プロンプトが戻ってきてインストール終了です。再起動しましょう。
注意:kernel のアップデート等で initrd を再作成した際には、必ず上記 NIC のドライバーも再インストールして下さい(自動でできる方法もあるみたいですが…)。

再起動後、

# dmesg | grep r8
[    2.612289] r8168 Gigabit Ethernet driver 8.039.00-NAPI loaded
[    2.612418] r8168 0000:02:00.2: setting latency timer to 64
[    2.612565] r8168 0000:02:00.2: irq 43 for MSI/MSI-X
[    2.638595] r8168: This product is covered by one or more of the following patents: US6,570,884, US6,115,776, and US6,327,625.
[    2.638626] r8168  Copyright (C) 2014  Realtek NIC software team <nicfae@realtek.com>
[   10.707096] r8168: eth0: link up

と表示されれば正常に新しいドライバーがインストールされています。

 音楽再生用のプレーヤーをインストール

サーバ機の場合には GUI 環境は無い事の方が多いので、CUI 環境で使うよう、テキストベースのプレーヤーをインストールします。

aptitude install alsaplayer-text alsa-base

インストール後、プレーヤーの初期化をします。
※これはインストール直後に1度行えば再起動しても有効です。
※Linux カーネールでちゃんと認識しているのに音が出ない…という時は、この初期化を忘れている場合が多いです。Wheezy では alsaconf というコマンドはなくなりました。

# alsactl init
Found hardware: "HDA-Intel" "Intel CedarTrail HDMI" "HDA:111d76d1,12974012,00100107 HDA:80862880,80860101,00100000" "0x1297" "0x4012"
Hardware is initialized using a generic method

それでは音楽を再生してみましょう。
本体のスピーカージャックにイヤフォンかヘッドフォンを接続します。
何か mp3 の音源ファイルを用意して下さい。

alsaplayer sample.mp3

で無事音楽が流れてくれば成功です。音量が大きい時には音量調整ができます。
※音量パラメータは 0~1.0 で、私の場合は 0.4 位が丁度良かったです。詳しくは man をご覧下さい。

alsaplayer sample.mp3 -l 0.4

最後にインターネットラジオを受信する方法です。
.pls というフォーマットのファイルを用意します。中身はこんな感じです。

このファイルは、 http://www.shoutcast.com/ へ行き、画面左のメニューより気に入ったジャンルを選んで下さい。
画 面の右側にインターネットラジオ局が表示されますので、右向き三角マークで視聴が出来ます。その右側にあるダウンロード・ボタンをclickすると、 Winamp M3U XSPF と 3 択が出ますので、一番上の Winamp を選ぶとplsフォーマットのファイルがダウンロードできます。

alsaplayer tunein-station.pls -l 0.4

この pls ファイルをプレーヤーに指定するとインターネットラジオ局につながります。Bitrate が 256 な局を選んでみて下さい。音質も素晴らしく BGM としては申し分有りません。


 追記 2016/01/06

新しい shuttle のベアボーン機(DS57U)に Debian 8.0 Jessieを インストールしました。
上記の手順では音が出なかったので追記です。
※Debian 9.0 stretch でも、同様の手順で音がでるようになります。
※DS57U の NIC はインテル製なので、NIC ドライバーの再インストールは必要ありません。

インストールは、

aptitude install alsa-utils alsaplayer-text

で、最低限のモジュールはインストールされます。

# alsactl init
Found hardware: "HDA-Intel" "Intel Broadwell HDMI" "HDA:80862808,80860101,00100000" "0x1297" "0x4028"
Hardware is initialized using a generic method

初期化が正常に完了しているようですが、実はこの状態では音が出ません。MP3 ファイル等を再生しようとすると、このようなメッセージが表示されます。

ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
snd_pcm_open: No such file or directory (default)
Failed to initialize plugin!
Failed to register plugin: /usr/lib/alsaplayer/output/libalsa_out.so
Failed to load output plugin "alsa". Trying defaults.
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
snd_pcm_open: No such file or directory (default)
Failed to initialize plugin!
/usr/lib/alsaplayer/output/libalsa_out.so failed to load
NOTE: THIS IS THE NULL PLUGIN.      YOU WILL NOT HEAR SOUND!!

調べてみると、2つの音源デバイスがあってデフォルトは HDA Intel HDMI ( HDMI で接続したスピーカー内蔵のディスプレイ等から音を出す) が使われているようです。

しかし背面のコネクターはアナログ用なので、もう一つの音源デバイスである ALC662 rev3 Analog をデフォルトにしなくてはいけません。

/etc/modprobe.d/default.conf というファイルを新しく作成して、この一行だけ中に書いておきます。
※これは Index=0 が最優先(デフォルト)になるので、HDMI の優先度を下げる意味になります

options snd_hda_intel index=1

上記ファイルを作成したら、reboot します。

立ち上がってきたら、もう一度初期化をします。

# alsactl init
Found hardware: "HDA-Intel" "Realtek ALC662 rev3" "HDA:10ec0662,12972048,00100300" "0x1297" "0x4028"
Hardware is initialized using a generic method

このように Realtek ALC662 rev3 が見えたら初期化成功です。
これで正常に音楽が再生されました。

 参考にしたサイト

http://forums.debian.net/viewtopic.php?f=6&t=123902
http://docs.slackware.com/howtos:hardware:audio_and_snd-hda-intel