今回は 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