CentOS8でRoon Serverを構築する方法

えー、今回はちょっとオーディオマニア的な趣味に走って、CentOS8でRoon Serverを作った時の手順について書きます。
Roon Serverというのは、統合音楽ソフトウェアである「Roon」の中核を成す音楽サーバのことです。正確にはもっといろいろやっていることがあるんですが、Roonについてここで詳しく書くのは本筋ではないので、こちらの記事をご参照ください。
まあ、この記事にたどり着いた方ならRoonやCentOSについてはいちいち説明する必要は無いと思いますので、細かい説明はいろいろはしょります。ご了承ください。

なぜCentOSなのか?

最初にRoon Serverを作った時は、お試し的なノリで手軽に作ろうと思って、Ubuntuで構築したのです。が、できたものを実際に運用してみると、これが少々というか、かなり動作不安定でして。途中で再生が切れたり、サーバが無応答になったり等々、細かいトラブルが不意に起こることが多く、使っていてストレスが溜まるようになっていったのです。

  • やっぱり元々デスクトップ向けのUbuntuでは24時間動かすサーバとしては頼りない
  • そもそもUbuntuには余計なものがたくさん入っている(サーバとしてならX11すら必要ない)
  • GUIを使って設定することが前提になっているのは面倒くさい(コマンドレベルで運用したい)

といった事項を勘案した結果、やはりサーバ用OSとして安定感のあるCentOSを使って構築した方がいいんじゃないかと。で、どうせなら現在のカレントであるCentOS8で立ててみようじゃないか、というサーバ屋としての好奇心が出てきまして、これまで動いてきたUbuntu版を潰して、CentOS8をインストールすることにしたのでした。

使用するマシン(参考として)

サーバとして使うマシンは、ASUSのPN50という小型PCにメモリ16GB、128GのSSDを入れたものを使います。このPCは24時間稼働することも考慮された耐久性があり、しかも軽い動作をさせる分にはほとんど動作音がしないという、自宅サーバ用としてはなかなか優秀なマシンです。

OSのインストール

PN50には当然のように光学ドライブがありませんので、インストール用のUSBメモリを作成します。今回はこの辺から今現在で最新のCentOS8.2のminimal.isoイメージをダウンロードしてきて、Rufusを使って起動可能なUSBメモリを作成しました。

インストールについての細かい手順は割愛します。「CentOS8 インストール」で検索すれば山ほど情報が手に入りますので、そちらをご参照ください。
今回は、パーティション構成のみに手を入れました。自動構成のパーティション構成だと/homeのパーティションに半分がた持って行かれてしまうので、ちともったいなさげです。とはいえ、Roonがどの辺のディレクトリを消費するかよくわからなかったので、手動構成にしてrootパーティション1本にしてしまいました(手抜き)。

OSインストール後の基本設定

まず、何はなくともSELinuxをdisabledにして再起動します。所詮自宅サーバですから、セキュリティよりも運用性の良さ優先ということで。disabledする方法は割愛します。「CentOS SELinux 無効化」で検索してください。

ネットワークの構成

これは特にどうということもなく、外部に接続できるようにできればそれで構いません。
今回の場合、インストールした直後に(ネットワークデバイス名と同じ)「enp2s0f0」というネットワーク接続ができていたので、以下のように設定しました。

$ sudo nmcli con mod enp2s0f0 ipv4.method manual ipv4.adresses [サーバのIPアドレス/サブネット]
$ sudo nmcli con mod enp2s0f0 ipv4.dns [参照するDNSサーバのIPアドレス] ipv4.gateway [ゲートウェイアドレス]

で、ここでひとつ確認することがあるので以下を実行します。

$ nmcli con show enp2s0f0 | grep "connection.autoconnect:"

これの結果が「yes」とか「はい」でない場合は、以下を実行します。

$ sudo nmcli con mod enp2s0f0 connection.autoconnect "yes"

connection.autoconnectがyesになっていないと、再起動した際にネットワーク接続の設定が全部飛んでしまうのです。私はこれに2度ほど引っかかったので、念のために付記しておきます。

これで、外部のサーバ(たとえばgoogle.co.jp)とかにpingが通れば、今の時点ではOKです。

必要なパッケージのインストール

Roon Serverを動作させるために必要なのは、以下の3つ4つです。

  • FFmpeg
  • ALSA library
  • cifs-utils
  • libicu

それぞれ、インストールする手順は以下のとおりです。

FFmpeg

$ sudo dnf install epel-release
$ sudo dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
$ sudo dnf --enablerepo=PowerTools install SDL2
$ sudo dnf install ffmpeg

コマンドとしてはわずが4つなのですが、方法を探るのにかなり時間を要しました。
FFmpegに必要なライブラリであるSDL2がPowerToolsに入っていたというところに一番シビレましたね。

ALSA library

FFmpegをインストールする際に依存関係で同時にインストールされるので、操作は不要です。

cifs-utils

普通にdnfでインストールします。

$ sudo dnf install cifs-utils

libicu

(2021/12/31追記)
Roon 1.8になってから、libicuも必須となりました。
これも普通にdnfでインストールします。

$ sudo dnf install libicu

以上で、必要なパッケージはすべてインストールされました。

Roon Serverのインストール

これは、Roon公式サイトに書いてあった方法をそのまま行ないます。

$ cd ~
$ curl -O http://download.roonlabs.com/builds/roonserver-installer-linuxx64.sh
$ chmod +x ./roonserver-installer-linuxx64.sh
$ sudo ./roonserver-installer-linuxx64.sh

何も異常がなければ、この時点でRoon Serverが起動するはずです。
ちなみに、Roon Serverは「roonserver.service」としてsystemdの配下でコントロールされます。

ファイアウォールの設定

さて、ここが肝心なところです。CentOS8ではデフォルトでfirewalldが起動していて、ssh他の最小限の通信しか許可されていません。
このままだとRoon Serverが正常に外部と通信できないので、以下のルールでファイアウォールに穴を開けます。

(11/29追記:以下の設定内容は不完全なものです。より細かいところまで詰めた設定を行なった記事をご覧下さい。

  • 9003/UDPを許可
  • 9100-9200/TCPを許可
  • 9330-9332/tcpを許可 (←2021/12/31追記、Roon 1.8 build 880で必要になった)
  • IGMPプロトコルを許可
  • マルチキャストを受け取るために、以下を許可
    • 224.0.0.0/4からの入力
    • 240.0.0.0/5からの入力
    • 224.0.0.0/4向けの通信の受信

firewalldのコマンドにすると、以下のとおりです。

(11/28 追記

$ sudo firewall-cmd --permanent --add-port=9003/udp
$ sudo firewall-cmd --permanent --add-port=9100-9200/tcp
$ sudo firewall-cmd --permanent --add-port=9330-9332/tcp
$ sudo firewall-cmd --permanent --add-protocol=igmp
$ sudo firewall-cmd --permanent --add-source=224.0.0.0/4
$ sudo firewall-cmd --permanent --add-source=240.0.0.0/5
$ sudo firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" destination address="224.0.0.0/4" accept'
$ sudo firewall-cmd --reload

いやあ、このルールを見つけるまで苦労しました。特にマルチキャストのところは、これをやっておかないとネットワーク上のRoon Output(簡単に言えば音を出すスピーカー等のオーディオデバイス)が認識されないのです。

我が家ではRoonでサポートされているSONOS One SLを設置していたのですが、CentOSにしたらこれがオーディオデバイスとして認識されなくなってしまい、firewalldを止めると認識される、ということが起きたので、まあ必死になってルールを調べたんですよ(Ubuntuではデフォルトでファイアウォールが起動していないので気がつかなかった)。で、ようやく上のようなものを見つけ出したという次第です。

以上で、Roon Serverの構築は終わりです。整理してしまえばたいした工数ではないのですが、いろいろ調べるのに時間がかかりました……。

結果として

まだ日が浅いのであくまで感覚としてなのですが、CentOS8でRoon Serverを稼働させてから、再生に関するトラブルはほぼなくなった感じです。やっぱり、サーバOSとしての安定度の違いでしょうか。これから使い込んでみてどうなるかですが、RHEL系OSのサーバ屋としては、もうこれでいいんじゃないかと満足しております。

最後に

数ヶ月前に導入したばかりで言うのも何ですが、Roonは音がいいですね。音楽ファイルをオーディオデバイスで直接デコードするよりも、一段上質な音になります。NASに貯めた音楽データをPCで再生したり、そのNASをDLNAサーバとして使ってらっしゃる方には、ぜひ導入をお勧めしたいです。まあ、この記事にたどり着くような方にとっては、釈迦に説法かもしれませんが……。

以上、どなたかのお役に立てば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください