6
18
2018
UPnP/OpenHome Music Server の自作(その1)
UPnP/OpenHome Music ServerをAPU2C4で作成してみた

PC Engines APU2C4 ボードに mSATA SSD を追加してMusic Server化する
UPnP/OpenHome対応のミュージックサーバを用意する場合、何十万円もするメーカー製の製品を購入するか、QNAPやSynologyなどの高機能NASボックスを用意し、自分で専用のアプリをインストールする必要がある.メーカー製品を導入するにしても、ネットワークオーディオを始めるにはそれなりの知識とスキルが要求されることはご承知のことと思う.
今回はネットワークオーディオを始めるには無くてはならないUPnP/OpenHome対応のミュージックサーバをちょこちょこっとやっつけで作ってみたので、製作の過程を簡単に紹介することにする.
第1弾:なんちゃってMusicサーバ
本当は1台だけで、ファイルサーバとミュージックサーバ機能 [mpd,UPnP(DLNA)/OpenHome] 、ネットワークルータ機能(オーディオ専用ネットワークの自動作成)を簡単に実現するための手順を示したかったが、自分で試行錯誤している間に、設定内容が高度過ぎてとても一般の人では太刀打ちできない内容になってしまった.やはりLinuxなどのUnix系OSやTCP/IPネットワークに関する専門知識が備わった人でなければ、内容を理解して自分で構築するのは困難だ.
という訳で、とりあえず最初は(比較的)簡単なMusic NAS BOXの作成から行うことにした.勿論、QNAPやSynologyのようなWEB GUIベースの使い易い管理機能などは実装できないので、必要最小限の機能しか使えない『なんちゃってMusicサーバ』だ.
『なんちゃってMusicサーバ』の応用編として、第2弾:オーディオ専用ネットワークセグメントの作成、第3弾:家庭内ネットワークに繋ぐだけで簡単に使えるオールインワンミュージックサーバ...という構成を考えているが先は長そうだ.
物理サーバの選定
家庭用のミュージックサーバを作成するには、先ずは適当な小型のコンピュータを用意しなければならないが、デスクトップコンピュータではサイズや消費電力、騒音などをまき散らすので、ミュージックサーバ用途には不向きだ.画像編集やゲームをやるわけではないので今回の用途であるファイルサービスやネットワークルータとして活用するだけなので、CPUの性能はそこそこあれば大丈夫だ.
APU2C4上では様々なOSを稼働させる事が可能だが、先ずはLinux OSに慣れるという意味で汎用的なサーバOSである CentOS をインストールして、シンプルなNFSファイルサーバを稼働させ、オーディオデータライブラリを作成する.この状態で、VolumioやlightMPD、BeagleBone Botic など mpd クライアントに対して、NFS経由でオーディオデータを供給可能となる.
次に、UPnP(DLNA)/OpenHomeサーバ用のアプリである、MinimServer を稼働させ、mpd以外のクライアントからもオーディオデータにアクセス可能とする.市販のネットワークオーディオ機器としては、大部分の機器がUPnP(DLNA)/OpenHomeを前提に作られているので、汎用的なミュージックサーバとして使うには、UPnP(DLNA)/OpenHome対応は必須となる.
今回はあまりお金を掛けたくないので、手元に余っていたPCEngines社のAPU2C4を省電力・無音のUPnP/OpenHome対応Music Serverに仕立てることにする.APU2C4はスイスのPC Engines社が製造・販売しているX64ベースの組み込み用の小型PCボードで、lightMPDの対応機種にもなっているので、このボードでlightMPDを動かしている人もそこそこ居ることだろう.APU2C4はスイッチサイエンスさんなどからも購入可能だが、安価に仕入れたければPCEngines社のPCEngines shopからダイレクトに購入(本体: $132 USD、専用ケース:$10 + Shipping & Handling: 約$14)することを薦める.国際メール便なので届くまで2週間くらい掛かるが、トラッキングが可能なので今どの辺りに荷物が居るのかチェックしながら気長に待つのも楽しい.前回購入したときは、NL(オランダ)からの発送だった.
APU2シリーズはX86系のCPU(AMD GX-412TC) を搭載しているので、CentOSやVMWare ESXiなども動かす事が可能だ.今回はServer OSとして日頃から馴染んでいるCentOS7をOSとして選択した.汎用的なLinuxサーバなので、Linuxの知識さえあれば、自前で環境を整えるのはそれほど苦労しないはずだ.
APU2C4は1GHz QuadコアCPU、4GB Mem、Intelチップ1000Base-T NIC x 3、μSDカード、 mSATA、miniPCI express X 2、SATAポート など汎用的な小型デスクトップPCとしてもそこそこ使える構成になっている.但し、機器組み込み用のPCボードなのでVGA/HDMIなどのディスプレイ出力は備わっていないので、ヘッドレスタイプのコンソール経由のコマンド入出力が必須となる.ヘッドレスタイプのコンピュータは一般の人達にはかなり敷居が高いのが難点だろうか.
Music Server化するには内部にそれなりの容量のディスクドライブが必要になるが、SAMSUNG製の512MB mSATA SSD (MZ-MTE5120)が有ったので今回はこのSSDをOS起動ドライブ兼データディスクドライブとして利用することにする.マザーボード上にはSATAコネクタ(+5V出力端子)も有るので、実装方法を工夫すれば薄手の2.5InchSSDなども搭載可能だろう.
ファイルサービスとしてはNFSのみ実装することとし、SMB/CIFSのような余計なネットワークトラフィックを大量に発生させるプロトコルは使わないことにする.ネットワークオーディオ的には(一般的にも)SMB/CIFSは駄目プロトコルの筆頭だ.どうしてもSMB/CIFSを使う場合は、ネットワークオーディオクライアントとSMB/CIFSのファイルサービスのネットワークを分離する事を推奨する.ネットワーク分離については、別な機会に紹介する予定だ.
UPnP(DLNA)/OpenHomeミュージックサーバアプリケーション
UPnP(DLNA)ミュージックサーバアプリケーションとしては、有償の twonky serverが有名で、少し前の市販のミュージックサーバ機器に実装されていることが多かったので今でも使っている人は多いことだろう.現在はミュージックサーバ機器単体よりも、QNAPやSynologyなどのNASボックスのオプションで用意されている、MinimServerなどのフリーソフトウェアを用いている人の方が多いかも知れない.

Synology NAS(画面はDS916+) ではサードパーティーアプリケーションを簡単にインストール可能
サーバOSのインストール
前準備(シリアルポート)
APU2シリーズはヘッドレスなので、OSのインストールなどの操作はシリアルコンソールを通じて行わなければならない.先ずはDB9タイプのシリアルコンソールケーブルと、シリアルコンソールが使えるPCとターミナル(コンソール)アプリケーションを用意する.最近のPCやMacではシリアルポートはほぼ全滅しているので、一般的には USBシリアルポートアダプタを使うことになるだろう.
APU2のシリアルポートはモデムやNW機器などのDCEではなく、コンピュータ側なのでDTEポートとして振る舞うことになる.従ってPC(Mac)側とは DTE/DTE となるので、DB9メス・メスのクロスケーブルが必要になる.一般的なDB9のクロスタイプの結線は次の様になる.

自作DB9メス・メスクロスケーブル
CentOS7 USBインストールメディアの作成
APU2シリーズはUSBポートに挿したUSBマスストレージメディアから起動させることが可能なので、今回はCentOS7のミニマルインストーライメージをUSBメモリに書き込んでおく.Macのコマンドラインで行う場合は、
この場合の、USBメモリのデバイス名は "/dev/disk6" であるので、 ddコマンドの出力先のデバイスは、 of=/dev/rdisk6 と指定する.
シリアルコンソール経由のCentOS 7インストール作業
PC側のターミナルアプリケーションとしては、WindowsではTeraTerm、Mac OS X では標準の "Terminal" アプリケーションなどで構わないだろう.APU2のシリアルポートは 115200bps 8bit parity none (115200 8N1)で設定されている.
Mac OS X の"Terminal" 上で screenコマンドを入力した時の様子を示す.まず最初にUSBシリアルアダプタのデバイス名を確認しておく.一連のコマンドは次の様になる.
screenコマンド実行後にAPU2C4の電源を入れるとコンソール画面に次の様なメッセージが表示され、"Press F10 key now for boot menu" という行が表示されたらF10キーを入力し、ブートデバイスセレクトモードに入る.
ここでは、1番のUSBインストールメディアを選択する.尚、2番は今回OSをインストールする mSATA SSD である.1番のUSBインストールメディアを選ぶと、CentOS7のテキストインストール画面が現れるので、カウントダウンされている60秒以内に"TAB" キーを押下して、オプションパラメータの編集モードに入る.下段に
>vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.c
heck quiet
という文字列が表示されるので、最後の "quiet" を削除して、後に "console=ttyS0,115200n8" という文字列を追加する.これを行わないと、インストール画面が表示されない.

"TAB"キーを押下してオプション指定モードに入る

"quiet" を消して " console=ttyS0,115200n8" を追加する
テキストベースのインストール画面が表示され、1~9までの項目について対話形式で項目を指定して行くことになるが、このテキストベースのインストーラが非常に曲者で、入力した項目が反映されなかったり、前の状態に戻ったりするなど、思った通りに項目を設定させてくれない.最初は訳が分からず戸惑ったが、項目を設定したら、少し時間を置いてから"Reflesh(r)" を行って入力内容を確認するというのがミソで、この挙動を理解するまでは中々先へ進めなかった.
CentOS 7 基本設定
CentOSのMinimal Installパッケージは必要最小限のパッケージ構成なので、この状態のままではメディアサーバとして殆ど使いものにならない.今回はUPnP/OpenHome Music Serverを構築する事が目的なので、必要なパッケージを後から追加する必要がある.
私の環境ではCentOS 7 のインストール作業自体は40分弱で終了した.とりあえず"yum update"コマンドでパッケージを最新の状態にしておく.作業用のユーザアカウントとMusic Dataを格納するためのディレクトリを作成し、sudo権限とssh接続のための基本設定を済ませておく.CentOS 7ではデフォルト状態で SE Linux機能が有効になっているので、構築作業が完了するまで一時的にSE Linux機能を無効にしておくと良いだろう.今回は公開系のサーバではないので、SE Linux機能は完全にOFFにしておいた方が無難だ.Firewall関係も細かな設定が必要になるが、家庭内のクローズドなシステムとしての利用で有れば、初心者はFirewall機能を無効にしておいた方が無難だ.
CentOS7のインストーラの項目 "[7] Network Configuration" で ネットワークポートに割り当てるIPアドレスなどの基本的な初期設定が行えるが、この設定については自分の家のネットワーク環境に応じて個別に設定しなければならない.今回は3つあるポートの内、向かって一番左側(DB9コンソールポート側)のポート (CentOS 7でのデバイス名は "enp1s0" )に、192.168.100.12/24 を割り当てている.ここは各自で自分の環境に合わせる必要があるが、この後のオーディオ専用ネットワークセグメント化を行うことを想定して、固定IPアドレスの設定を行っておく.
家庭用の一般的なブロードバンドルータを使っているのであれば、LAN側のIPアドレスはブロードバンドルータのDHCPサーバ機能で管理されており、デフォルトでネットワークレンジが192.168.1.0/24 に設定されていることが多い.ブロードバンドルータの管理コンソールで確認し、適切なIPアドレスを設定しておいて欲しい.この辺の設定方法が解らないのであれば、ネットワークオーディオの利用は諦めた方が良いだろう.
CentOS 7の初期環境設定については多くの人達が紹介しているので、ここでは詳しい設定内容は紹介しない.UNIX系のOSでは一般的なお作法として、rootアカウントで作業するのではなく、一般のユーザアカウントに sudo 権限を設定し、そのアカウントで sudoコマンドを使って作業を行うのが一般的だが、今回は直接rootアカウントで作業を行っている.
NFSサーバの設定
音源データはサーバのローカルストレージ(SSD)上に格納することになるが、外部のLinux PCやMacなどからのデータ管理やmpdクライアントへ音源データをネットワークファイルサービスとして提供する必要がある.
このための仕組みとしてNFSサーバを稼働させることにする.QNAPやSynologyなどのNASでは、NFS、SMB/CIFS、AFPなどのマルチファイルサービスに対応しているが、今回はNFSのみとする.SMB/CIFSについては、第2弾のオーディオ専用ネットワークセグメント化の際に実装方法について説明することにする.
CentOS 7 のMinimal Installパッケージには、NFS関係のモジュールが含まれていないので、yum コマンド等を用いてNFS関係のモジュールをインストールする.インストール後に、音源データ格納用のディレクトリを作成し、そのディレクトリをNFSで公開するための設定を行う.
NFS公開ディレクトリの設定は、"/etc/exports" ファイルに、下記の様な内容で設定を行う.左からサーバ上の公開ディレクトリ、公開するネットワークの範囲、括弧内にNFSの公開オプションを指定する.
上記の例では、"/home/music" ディレクトリ配下を、家庭内LANのネットワーク範囲 192.168.100.0/24 に公開(このネットワーク配下のサーバやPCのみからアクセス可能)している.括弧内のオプションについては、環境や利用状況に応じて細かく設定しておく方が望ましいが、良く解らない場合はとりあえずこのオプションで設定しておいて、後で自分で設定変更しておいて欲しい.
NFSのバージョンはV3/V4のどちらでも構わないが、V4はセキュリティー機能が豊富な分設定が難しいので、簡単に運用したければV3に合わせておいた方が無難だろう.
NFS関連の一連の設定が終わったら、実際にクライアント環境からNFSサーバの公開ディレクトリにアクセス可能であることを確認しておく.ここでは手元のMac(High Sierra)からコマンドラインとFinder上でNFSマウントを行ってみる.

Finderの "Go" ⇒ "Connect to Server..." メニューからアクセス

"music" ディレクトリがNFSボリュームとしてマウントされる
MinimServerのインストール
MinimServerはJavaベースのアプリケーションなので、先ずはサーバにJavaの実行環境をインストールする必要がある.Linux環境でのインストール方法は、"Installing MinimServer on Linux" に説明がある.
今回のサーバOSであるCentOS 7(Linux x64)の環境に合わせて、JRE(Java Runtime Environment)をインストールすることになるが、最近OracleがJavaの方針変更を行った関係で、Javaを取り巻く環境が大きく変化している.できればOracleなどと係わりたくないが、仕方が無いので Java SE(現時点での最新版は 10.0.1)をインストールすることにする.今後のサポートなどを考えると最新版の方が良いのだが、OracleがJavaサポート有料化に梶を切ってしまったので悩ましいところだ.
"Java SE Downloads" ページ
Javaのバージョンが色々あって、どれを使って良いのか解りにくいが、開発者向けの環境が"JDK" (Java SE Development Kit)、サーバでの実行環境が Server JRE (Server Java Runtime Environment) 、デスクトップクライアント環境での実行環境がJRE: (Java Runtime Environment)と理解しておけば良いだろう.
今回は、MinimServerのホームページに記載されている、V8環境をインストールすることにする.(V10でも簡単に試してみたところ、そこそこ動いていたので、V10でも問題無いかもしれない.但し、安定稼働するかどうかは未検証)
サーバ環境用の "Java SE 8u171/ 8u172" をダウンロードする.
http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html
CentOS7上からwgetでダウンロードリンクを直接辿って取得した物を解凍しようとすると、何故かgzip形式ではないと怒られてしまうので、一旦Mac上でダウンロード・解凍した物をサーバに持ってきた.
展開した "server-jre-8u172" を /usr/local 配下にコピーし、実行環境( bin/java)のシンボリックリンクを /usr/local/bin 配下に張っておく.
Javaの実行環境が整ったら、MinimServerのインストールを行う.MinimServerのダウンロードページから自分の環境に合った物(Linux Intel x86 or x64: MinimServer-0.8.5.2-linux-intel.tar.gz)をダウンロードする.リンク先は実際の"MinimServer-0.8.5.2-linux-intel.tar.gz" ではなく、Javascriptによる間接的にダウンロードする仕組みになっている.WEBブラウザ経由でコマンドラインから直接ダウンロードするには、Javascriptのソースコードを参照して、自分でお目当てのURLを探しだしておけば良い.
3カ所あるディレクトリを適当に選んで、自分でURLを適切に組みあわせれば良い.
"http://jminim.com/cada/MinimServer-0.8.5.2-linux-intel.tar.gz"
MinimServerをダウンロードしたら、sudo 権限のあるアカウントのホームディレクトリ配下に適当な名前のディレクトリを作成し、そこにダウンロードしたMinimServerを展開しておく."root" アカウントを使って適当なディレクトリ配下でもMinimServerを動かすことは可能だが、MinimServerのsetupスクリプトなどは、sudo権限を持つユーザの配下で動かすことを前提に作成してあるので、面倒な調整をしたくなければユーザのホームディレクトリ配下にMinimServerを展開することを薦める.MinimServerの実行権限も、sudo権限のあるユーザのプロセスとして実行されるので、セキュリティー面でもその方が好ましいだろう.
プロセスリストの下から4行目が "MinimServer" の実行プロセスで、ユーザ権限で実行されていることが確認できる.MinimServerが無事起動できたら、WEBブラウザで MinimServerの管理画面にアクセスし、初期環境設定を済ませておく.

MinimServerの管理ポート(http:9790)にWEBブラウザでアクセスする

"Content directory" 欄にミュージックデータが置かれているディレクトリを指定する

MinimServerが "Running" 状態になっていることを確認

ミュージックデータをコンテンツ格納ディレクトリ配下にコピーする

Linn KinskyなどのUPnP(DLNA)/OpenHome対応クライアントから MinimServerが見えている事を確認

Kinskyでアルバム表示させてみる
以上で、APU2C4によるUPnP(DLNA)/OpenHomeミュージックサーバの環境構築は終了である.音楽データファイルの更新が有った場合は、MinimServerの管理画面で "Rescan" 作業を行えば良い.今回の作業で一番難しいのは、APU2C4へのヘッドレス環境でのOSインストール作業だろうか.そこさえクリアできれば後はそれなりのLinuxのスキルがあれば大丈夫だろう.
単純なUPnP(DLNA)/OpenHomeミュージックサーバが必要なだけならば、こんな面倒な事をせずにQNAPやSynologyなどのNAS製品で十分事足りるので、自作大好き人間以外にはとてもお薦めできない内容になってしまった...
とても長い記事になってしまったが、次回(その2)は余っているAPU2C4のセカンドポートを利用して、mpdクライアントをノイジーなホームネットワークから分離し、綺麗なネットワーク接続環境を提供するための、ネットワーク分離について紹介することにする.
最終回(その3)ではネットワークルータ機能を組み込んで、ミュージックネットワークを分離したついでに、mpdクライアントをUPnP経由でコントロールすることが可能となる "upmpdlient" をAPU2C4上で稼働させ、APU2C41台でオールインワンミュージックサーバ化を試みることにする.
当初はAPU2C4上の物理OSであるCentOS7配下で直接"upmpdlient" を稼働させようとしたが、ソースプログラムからのコンパイルで問題が生じたので、CentOS7配下での直接稼働は諦めて、KVM仮想環境下でDebian OS をゲストOSとして立ち上げ、"upmpdlient" を稼働させる方法を紹介する.KVM仮想環境下で別なOSを稼働させるには、Linuxサーバに精通していなければ無理なので、一般的なオーディオマニアには敷居が高いが頑張って挑戦して見て欲しい.

2ndネットワークポートを使って、mpdクライアントのネットワークを分離する