四万十川(四万十大橋) 高知県


Date/Time: 2007:04:29 12:35:45
Camera: Panasonic
Model: DMC-LX2
Exporsure Time: 1/400
FNumber: 6.3
Aperture Value: 5.3
Focal Length: 6.3

Close

y2blog » UPnP/OpenHome Music Server の自作(その1)

6

18

2018

UPnP/OpenHome Music Server の自作(その1)

UPnP/OpenHome Music ServerをAPU2C4で作成してみた


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 GUI Installer
Synology NAS(画面はDS916+) ではサードパーティーアプリケーションを簡単にインストール可能



サーバOSのインストール


前準備(シリアルポート)


APU2シリーズはヘッドレスなので、OSのインストールなどの操作はシリアルコンソールを通じて行わなければならない.先ずはDB9タイプのシリアルコンソールケーブルと、シリアルコンソールが使えるPCとターミナル(コンソール)アプリケーションを用意する.最近のPCやMacではシリアルポートはほぼ全滅しているので、一般的には USBシリアルポートアダプタを使うことになるだろう.


APU2のシリアルポートはモデムやNW機器などのDCEではなく、コンピュータ側なのでDTEポートとして振る舞うことになる.従ってPC(Mac)側とは DTE/DTE となるので、DB9メス・メスのクロスケーブルが必要になる.一般的なDB9のクロスタイプの結線は次の様になる.



     DB9             DB9

    CD   1          1  CD(通常未結線)
    RX   2 ======== 3  TX(必須)
    TX   3 ======== 2  RX(必須)
    DTR  4 -------- 6 DSR
    GND  5 ======== 5 GND(必須)
    DSR  6 -------- 4 DTR
    RTS  7 -------- 8 CTS
    CTS  8 -------- 7 RTS
    RI   9          9 RI


DB9 Cross Cable
自作DB9メス・メスクロスケーブル

CentOS7 USBインストールメディアの作成


APU2シリーズはUSBポートに挿したUSBマスストレージメディアから起動させることが可能なので、今回はCentOS7のミニマルインストーライメージをUSBメモリに書き込んでおく.Macのコマンドラインで行う場合は、


iMac27:CentOS yasuaki$ diskutil list <=== USBメディアのデバイス名確認
/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *3.0 TB     disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage MavericsHDD             128.3 GB   disk0s2
   3:                 Apple_Boot Boot OS X               134.2 MB   disk0s3
   4:                  Apple_HFS SierraBackup            127.8 GB   disk0s4
   5:                 Apple_Boot Recovery HD             650.0 MB   disk0s5
   6:       Microsoft Basic Data SHARED                  256.7 GB   disk0s6
   7:          Apple_CoreStorage Home                    1.0 TB     disk0s7
   8:                 Apple_Boot Boot OS X               134.2 MB   disk0s8
   9:                  Apple_HFS Data                    1000.0 GB  disk0s9
  10:                  Apple_HFS Tmp                     484.1 GB   disk0s10

 ...
  【途中省略】
 ...

/dev/disk6 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *8.1 GB     disk6
   1:                       0xEF                         9.2 MB     disk6s2

この場合の、USBメモリのデバイス名は "/dev/disk6" であるので、 ddコマンドの出力先のデバイスは、 of=/dev/rdisk6 と指定する.



iMac27:CentOS yasuaki$ ls -la
total 18167824
drwxrwxrwx@  6 yasuaki  staff         204 Jun 16 20:09 .
drwxrwxr-x@ 59 yasuaki  staff        2074 Jun 16 20:09 ..
-rwxrwxrwx@  1 yasuaki  staff  3972005888 Jun 11  2017 CentOS-6.9-x86_64-bin-DVD1.iso
-rw-r--r--@  1 yasuaki  staff  4379901952 Dec  5  2016 CentOS-7-x86_64-DVD-1611.iso
-rw-r--r--@  1 yasuaki  staff   950009856 Jun 16 20:09 CentOS-7-x86_64-Minimal-1804.iso

iMac27:CentOS yasuaki$ sudo dd bs=8m if=CentOS-7-x86_64-Minimal-1804.iso of=/dev/rdisk6
113+1 records in
113+1 records out
950009856 bytes transferred in 264.481086 secs (3591977 bytes/sec)
iMac27:CentOS yasuaki$

シリアルコンソール経由のCentOS 7インストール作業


PC側のターミナルアプリケーションとしては、WindowsではTeraTerm、Mac OS X では標準の "Terminal" アプリケーションなどで構わないだろう.APU2のシリアルポートは 115200bps 8bit parity none (115200 8N1)で設定されている.


Mac OS X の"Terminal" 上で screenコマンドを入力した時の様子を示す.まず最初にUSBシリアルアダプタのデバイス名を確認しておく.一連のコマンドは次の様になる.


iMac27:~ yasuaki$ ls -la /dev/tty.usb*    <=== デバイス名の確認
crw-rw-rw-  1 root  wheel   21,   4 Jun 17 22:50 /dev/tty.usbserial-00104414
iMac27:~ yasuaki$ 
iMac27:~ yasuaki$ screen /dev/tty.usbserial-00104414 115200  <=== screenコマンド

screenコマンド実行後にAPU2C4の電源を入れるとコンソール画面に次の様なメッセージが表示され、"Press F10 key now for boot menu" という行が表示されたらF10キーを入力し、ブートデバイスセレクトモードに入る.



PCEngines apu3
coreboot build 20170302
4080 MB ECC DRAM

SeaBIOS (version rel-1.10.0.1)

Press F10 key now for boot menu

Select boot device:

1. USB MSC Drive Generic Flash Disk 8.07
2. ata0-0: SAMSUNG MZMTE512HMHP-00000 ATA-9 Hard-Disk (476 GiB
3. Payload [memtest]
4. Payload [setup]

ここでは、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" という文字列を追加する.これを行わないと、インストール画面が表示されない.



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

Add Console Options
"quiet" を消して " console=ttyS0,115200n8" を追加する



        +--------------------------------------------------------------+
        |                           CentOS 7                           |
        |--------------------------------------------------------------|
        |                                                              |
        |                                                              |
        | Install CentOS 7                                             |
        | Test this media & install CentOS 7                           |
        |                                                              |
        | Troubleshooting                                            > |
        |                                                              |
        |                                                              |
        |                                                              |
        |   Press Tab for full configuration options on menu items.    |
        |                                                              |
        |                                                              |
> vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 console=t
tyS0,115200n8

Starting installer, one moment...
anaconda 21.48.22.134-1 for CentOS 7 started.
 * installation log files are stored in /tmp during the installation
 * shell is available on TTY2
 * when reporting a bug add logs from /tmp as separate text/plain attachments
11:29:21 Not asking for VNC because we don't have a network
================================================================================
================================================================================
Installation

 1) [x] Language settings                 2) [!] Time settings
        (English (United States))                (Timezone is not set.)
 3) [!] Installation source               4) [!] Software selection
        (Processing...)                          (Processing...)
 5) [!] Installation Destination          6) [x] Kdump
        (No disks selected)                      (Kdump is enabled)
 7) [ ] Network configuration             8) [!] Root password
        (Not connected)                          (Password is not set.)
 9) [!] User creation
        (No user will be created)
  Please make your choice from above ['q' to quit | 'b' to begin installation |
  'r' to refresh]: 

テキストベースのインストール画面が表示され、1~9までの項目について対話形式で項目を指定して行くことになるが、このテキストベースのインストーラが非常に曲者で、入力した項目が反映されなかったり、前の状態に戻ったりするなど、思った通りに項目を設定させてくれない.最初は訳が分からず戸惑ったが、項目を設定したら、少し時間を置いてから"Reflesh(r)" を行って入力内容を確認するというのがミソで、この挙動を理解するまでは中々先へ進めなかった.



Creating xfs on /dev/sda1
.
Creating lvmpv on /dev/sda2
.
Creating swap on /dev/mapper/centos-swap
.
Creating xfs on /dev/mapper/centos-home
.
Creating xfs on /dev/mapper/centos-root
.
Running pre-installation scripts
.
Starting package installation process
Preparing transaction from installation source
Installing libgcc (1/300)
Installing grub2-common (2/300)
Installing grub2-pc-modules (3/300)
Installing ncurses-base (4/300)
Installing firewalld-filesystem (5/300)
Installing bind-license (6/300)
Installing kbd-misc (7/300)
  
...

Installing iwl4965-firmware (298/300)
Installing iwl6000g2b-firmware (299/300)
Installing iwl5150-firmware (300/300)
Performing post-installation setup tasks
Installing boot loader
.
Performing post-installation setup tasks
.

Configuring installed system
.
Writing network configuration
.
Creating users
.
Configuring addons
.
Generating initramfs
.
Running post-installation scripts
.
        Use of this product is subject to the license agreement found at /usr/share/centos-release/EULA

        Installation complete.  Press return to quit

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アカウントで作業を行っている.



CentOS Linux 7 (Core)
Kernel 3.10.0-862.el7.x86_64 on an x86_64

server2 login: root
Password:
[root@server2 ~]# getenforce
Enforcing
[root@server2 ~]# setenforce 0        <===  SE Linux機能の一時的な無効化
[root@server2 ~]# getenforce
Permissive
[root@server2 ~]# cat /etc/selinux/config   <===  SE Linux機能の設定ファイル内容確認

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

【SE Linux機能を恒久的に無効化する方法】
 ・ sed コマンドで設定ファイルを書き換えるかまたはテキストエディタで該当行を直接書き換える
 
   "SELINUX=enforcing"  ⇒ "SELINUX=disabled"
 
・sed コマンド実行例
[root@server2 ~]# sed -i s/^SELINUX=.*$/SELINUX=disabled/ /etc/selinux/config
 
[root@server2 ~]# cat /etc/selinux/config  <===  SE Linux機能が無効化されたことを確認

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

[root@server2 ~]# yum update   <===  CentOS パッケージのアップデート
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/4): base/7/x86_64/group_gz                              | 166 kB   00:00
(2/4): extras/7/x86_64/primary_db                          | 149 kB   00:00
(3/4): updates/7/x86_64/primary_db                         | 2.7 MB   00:00
(4/4): base/7/x86_64/primary_db                            | 5.9 MB   00:02

  ... 【途中省略】

  selinux-policy-targeted.noarch 0:3.13.1-192.el7_5.3
  tzdata.noarch 0:2018e-3.el7

Complete!
[root@server2 ~]# yum groupinstall "Development Tools"  <=== 開発ツールのインストール (※ソースコードからの構築作業を行わないのであれば必要ない)
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package autoconf.noarch 0:2.69-11.el7 will be installed
--> Processing Dependency: perl >= 5.006 for package: autoconf-2.69-11.el7.noarch 
 
  ... 【途中省略】
 
  trousers.x86_64 0:0.3.14-2.el7
  unzip.x86_64 0:6.0-19.el7
  zip.x86_64 0:3.0-11.el7

Complete!

[root@server2 ~]# systemctl status firewalld   <=== firewall機能の状態確認
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-06-19 23:01:51 JST; 25s ago
     Docs: man:firewalld(1)
 Main PID: 13005 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─13005 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Jun 19 23:01:49 server2 systemd[1]: Starting firewalld - dynamic firewall d.....
Jun 19 23:01:51 server2 systemd[1]: Started firewalld - dynamic firewall daemon.
Hint: Some lines were ellipsized, use -l to show in full.
[root@server2 ~]# systemctl stop firewalld     <=== firewall機能の停止
[ 1649.175154] Ebtables v2.0 unregistered
[root@server2 ~]# systemctl disable firewalld <=== firewall機能の無効化
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@server2 ~]#

[root@server2 ~]# ip addr <=== ネットワークポートの設定状況確認
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp1s0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:47:1c:18 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.12/24 brd 192.168.100.255 scope global noprefixroute enp1s0
       valid_lft forever preferred_lft forever
    inet6 2409:10:ad40:306a:712d:dc3c:e3cb:a931/64 scope global noprefixroute dynamic 
       valid_lft 13915sec preferred_lft 12115sec
    inet6 fe80::df15:3ce4:15fe:cee2/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: enp2s0:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0d:b9:47:1c:19 brd ff:ff:ff:ff:ff:ff
    inet 192.168.103.254/24 brd 192.168.103.255 scope global noprefixroute enp2s0
       valid_lft forever preferred_lft forever
4: enp3s0:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:0d:b9:47:1c:1a brd ff:ff:ff:ff:ff:ff

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で公開するための設定を行う.



[root@server2 ~]# yum  install nfs-utils
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * epel: ftp.kddilabs.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Resolving Dependencies
--> Running transaction check
---> Package nfs-utils.x86_64 1:1.3.0-0.54.el7 will be installed
--> Processing Dependency: libtirpc >= 0.2.4-0.7 for package: 1:nfs-utils-1.3.0-0.54.el7.x86_64
--> Processing Dependency: gssproxy >= 0.7.0-3 for package: 1:nfs-utils-1.3.0-0.54.el7.x86_64
--> Processing Dependency: rpcbind for package: 1:nfs-utils-1.3.0-0.54.el7.x86_64
 
  ... 【途中省略】
 
  Verifying  : 1:quota-4.01-17.el7.x86_64                                 14/16
  Verifying  : libpath_utils-0.2.1-29.el7.x86_64                          15/16
  Verifying  : libbasicobjects-0.1.1-29.el7.x86_64                        16/16

Installed:
  nfs-utils.x86_64 1:1.3.0-0.54.el7

Dependency Installed:
  gssproxy.x86_64 0:0.7.0-17.el7           keyutils.x86_64 0:1.5.8-3.el7
  libbasicobjects.x86_64 0:0.1.1-29.el7    libcollection.x86_64 0:0.7.0-29.el7
  libevent.x86_64 0:2.0.21-4.el7           libini_config.x86_64 0:1.3.1-29.el7
  libnfsidmap.x86_64 0:0.25-19.el7         libpath_utils.x86_64 0:0.2.1-29.el7
  libref_array.x86_64 0:0.1.5-29.el7       libtirpc.x86_64 0:0.2.4-0.10.el7
  libverto-libevent.x86_64 0:0.2.5-4.el7   quota.x86_64 1:4.01-17.el7
  quota-nls.noarch 1:4.01-17.el7           rpcbind.x86_64 0:0.2.0-44.el7
  tcp_wrappers.x86_64 0:7.6-77.el7

Complete!

NFS公開ディレクトリの設定は、"/etc/exports" ファイルに、下記の様な内容で設定を行う.左からサーバ上の公開ディレクトリ、公開するネットワークの範囲、括弧内にNFSの公開オプションを指定する.



 /home/music  192.168.100.0/24(rw,sync,insecure,no_root_squash)

上記の例では、"/home/music" ディレクトリ配下を、家庭内LANのネットワーク範囲 192.168.100.0/24 に公開(このネットワーク配下のサーバやPCのみからアクセス可能)している.括弧内のオプションについては、環境や利用状況に応じて細かく設定しておく方が望ましいが、良く解らない場合はとりあえずこのオプションで設定しておいて、後で自分で設定変更しておいて欲しい.


NFSのバージョンはV3/V4のどちらでも構わないが、V4はセキュリティー機能が豊富な分設定が難しいので、簡単に運用したければV3に合わせておいた方が無難だろう.



[root@server2 ~]# vi /etc/exports  <=== NFS公開ディレクトリの設定ファイル作成
  ...

[root@server2 ~]# cat /etc/exports <=== NFS公開ディレクトリの設定内容確認
/home/music	192.168.100.0/22(rw,sync,insecure,no_root_squash)


[root@server2 ~]# systemctl status rpcbind  <=== NFSで必要な関連サービスの確認
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2018-06-23 18:37:26 JST; 36min ago
  Process: 691 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 708 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─708 /sbin/rpcbind -w

Jun 23 18:37:26 server2 systemd[1]: Starting RPC bind service...
Jun 23 18:37:26 server2 systemd[1]: Started RPC bind service.
[root@server2 ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@server2 ~]# systemctl enable nfs-server <=== NFSサービスの自動起動化
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@server2 ~]# systemctl start nfs-server <=== NFSサービスの起動
[root@server2 ~]# systemctl status nfs-server
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Sat 2018-06-23 19:14:49 JST; 3s ago
  Process: 17994 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 17989 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
  Process: 17986 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 17994 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Jun 23 19:14:48 server2 systemd[1]: Starting NFS server and services...
Jun 23 19:14:49 server2 systemd[1]: Started NFS server and services.
[root@server2 ~]# 

NFS関連の一連の設定が終わったら、実際にクライアント環境からNFSサーバの公開ディレクトリにアクセス可能であることを確認しておく.ここでは手元のMac(High Sierra)からコマンドラインとFinder上でNFSマウントを行ってみる.



iMac27:~ yasuaki$ sudo mkdir /tmp/mnt
Password:
iMac27:~ yasuaki$ sudo mkdir /tmp/mnt/music
iMac27:~ yasuaki$ sudo mount -t nfs 192.168.100.12:/home/music  /tmp/mnt/music
iMac27:~ yasuaki$ ls -la /tmp/mnt/music
total 1
drwxr-xr-x  2 yasuaki  macports   6 Jun 23 18:12 .
drwxr-xr-x  3 root     wheel     96 Jun 23 19:53 ..
iMac27:~ yasuaki$ df -m
Filesystem                 1M-blocks   Used Available Capacity iused               ifree %iused  Mounted on
/dev/disk2s1                  114540  82736     31169    73% 1415813 9223372036853359994    0%   /
devfs                              0      0         0   100%     762                   0  100%   /dev
/dev/disk2s4                  114540      0     31169     1%       2 9223372036854775805    0%   /private/var/vm
/dev/disk0s2                  122070  67448     54621    56% 1319014          4293648265    0%   /Volumes/Maverics
/dev/disk1s4                  121898  55425     66472    46% 1087032          4293880247    0%   /Volumes/SierraBackup
/dev/disk0s4                   60906  57165      3741    94%  180662             3839046    4%   /Volumes/Win7Pro
/dev/disk1s6                  244719  22251    222467    10%       0                   0  100%   /Volumes/SHARED
map -hosts                         0      0         0   100%       0                   0  100%   /net
map auto_home                      0      0         0   100%       0                   0  100%   /home
/dev/disk1s9                  953674 791568    162106    84%  131690          4294835589    0%   /Volumes/Data
/dev/disk1s10                 461709 129543    332166    29%  129114          4294838165    0%   /Volumes/Tmp
/dev/disk4                   1079636 587111    492524    55%  825317          4294141962    0%   /Volumes/Home
/dev/disk3                    122069    212    121856     1%     136          4294967143    0%   /Volumes/MavericsHDD
192.168.100.12:/home/music    431976     32    431944     1%       8           221280248    0%   /private/tmp/mnt/music

iMac27:~ yasuaki$ echo "DUMMY TEXT" >/private/tmp/mnt/music/test.txt  
iMac27:~ yasuaki$ ls -la /tmp/mnt/music
total 2
drwxr-xr-x  2 yasuaki  macports  22 Jun 23 19:55 .
drwxr-xr-x  3 root     wheel     96 Jun 23 19:53 ..
-rw-r--r--  1 yasuaki  staff     11 Jun 23 19:55 test.txt
iMac27:~ yasuaki$ cat /tmp/mnt/music/test.txt
DUMMY TEXT
iMac27:~ yasuaki$ 

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

NFS Volume Mount Test
"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 配下に張っておく.



[root@server2 ~]# mkdir JavaSE8
[root@server2 ~]# cd JavaSE8
[root@server2 JavaSE8]# wget http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/server-jre-8u172-linux-x64.tar.gz
-bash: wget: command not found
[root@server2 JavaSE8]# yum install wget  <=== wget を入れておく
Loaded plugins: fastestmirror

 ...【途中省略】

Complete!
[root@server2 JavaSE8]# wget http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/server-jre-8u172-linux-x64.tar.gz
--2018-06-24 11:06:59--  http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/server-jre-8u172-linux-x64.tar.gz
Resolving download.oracle.com (download.oracle.com)... 23.217.126.192

 ...【途中省略】

HTTP request sent, awaiting response... 200 OK
Length: 5307 (5.2K) [text/html]
Saving to: ‘server-jre-8u172-linux-x64.tar.gz’

100%[=========================================================================>] 5,307       --.-K/s   in 0s      

2018-06-24 11:07:00 (219 MB/s) - ‘server-jre-8u172-linux-x64.tar.gz’ saved [5307/5307] <== 一見ダウンロードできているように見えるけど...

[root@server2 JavaSE8]# tar xvzf server-jre-8u172-linux-x64.tar.gz

gzip: stdin: not in gzip format <=== ???
tar: Child returned status 1
tar: Error is not recoverable: exiting now
[root@server2 JavaSE8]#

---
 Mac上でダウンロード・解凍した物を NFS公開ディレクトリ( /home/music/ )経由で手元のCentOS7サーバ上に持ってきた.
 WEBブラウザ経由でダウンロードしたファイルサイズが全く違っていたので、wgetで直接取ってくることはできないような
仕組みになっているようだ.WEBブラウザで一旦ダウンロードする必要がある.
---

[root@server2 JavaSE8]# cp /home/music/*.tar .
[root@server2 JavaSE8]# ls -la
total 315692
drwxr-xr-x  2 root root        86 Jun 24 11:20 .
dr-xr-x---. 4 root root       162 Jun 24 11:06 ..
-rw-r--r--  1 root root 171284480 Jun 24 11:20 serverjre-10.0.1_linux-x64_bin.tar <== 
-rw-r--r--  1 root root 151982080 Jun 24 11:20 server-jre-8u172-linux-x64.tar
[root@server2 JavaSE8]# tar xvf server-jre-8u172-linux-x64.tar
jdk1.8.0_172/
jdk1.8.0_172/bin/
jdk1.8.0_172/bin/rmiregistry
jdk1.8.0_172/bin/unpack200
jdk1.8.0_172/bin/jar

 ...【途中省略】

jdk1.8.0_172/jre/README
jdk1.8.0_172/README.html
[root@server2 JavaSE8]# ls -la
total 315692
drwxr-xr-x  3 root root       106 Jun 24 11:21 .
dr-xr-x---. 4 root root       162 Jun 24 11:06 ..
drwxr-xr-x  7   10  143       166 Mar 29 13:57 jdk1.8.0_172
-rw-r--r--  1 root root 171284480 Jun 24 11:20 serverjre-10.0.1_linux-x64_bin.tar
-rw-r--r--  1 root root 151982080 Jun 24 11:20 server-jre-8u172-linux-x64.tar
[root@server2 JavaSE8]# cp -r ./jdk1.8.0_172 /usr/local/.
[root@server2 JavaSE8]# ls -la /usr/local/jdk1.8.0_172
total 164
drwxr-xr-x   7 root root    166 Jun 24 11:31 .
drwxr-xr-x. 13 root root    151 Jun 24 11:31 ..
drwxr-xr-x   2 root root   4096 Jun 24 11:31 bin
-r--r--r--   1 root root   3244 Jun 24 11:31 COPYRIGHT
drwxr-xr-x   3 root root    132 Jun 24 11:31 include
drwxr-xr-x   4 root root    129 Jun 24 11:31 jre
drwxr-xr-x   3 root root    144 Jun 24 11:31 lib
-r--r--r--   1 root root     40 Jun 24 11:31 LICENSE
drwxr-xr-x   4 root root     47 Jun 24 11:31 man
-r--r--r--   1 root root    159 Jun 24 11:31 README.html
-rw-r--r--   1 root root    424 Jun 24 11:31 release
-r--r--r--   1 root root 145180 Jun 24 11:31 THIRDPARTYLICENSEREADME.txt
[root@server2 JavaSE8]# ln -s /usr/local/jdk1.8.0_172/bin/java /usr/local/bin
[root@server2 JavaSE8]# java -version  <=== Java実行環境が正常に起動できることを確認
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)
[root@server2 JavaSE8]# 

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を探しだしておけば良い.



var windows_x86_server = 'MinimServer';
windows_server = 'MinimServer-0.8.5.2-install.exe';
macosx_server = 'MinimServer-0.8.5.2-macos.dmg';
linux_intel_server = 'MinimServer-0.8.5.2-linux-intel.tar.gz';
linux_x86_server = 'MinimServer-0.8.5.2-linux-intel.tar.gz';
linux_x64_server = 'MinimServer-0.8.5.2-linux-intel.tar.gz';
linux_arm_server = 'MinimServer-0.8.5.2-linux-arm.tar.gz';
linux_armhf_server = 'MinimServer-0.8.5.2-linux-armhf.tar.gz';
linux_arm64_server = 'MinimServer-0.8.5.2-linux-arm64.tar.gz';
linux_ppc_server = 'MinimServer-0.8.5.2-linux-ppc.tar.gz';
qnap_intel_server = 'MinimServer-0.8.5.2-intel.qpkg';
qnap_arm_server = 'MinimServer-0.8.5.2-armv5.qpkg';
qnap_armv7_server = 'MinimServer-0.8.5.2-armv7.qpkg';
qnap_arm64_server = 'MinimServer-0.8.5.2-arm64.qpkg';
synology_intel_server = 'MinimServer-0.8.5.3-intel.spk';
synology_armv7_server = 'MinimServer-0.8.5.3-armv7.spk';
synology_armv8_server = 'MinimServer-0.8.5.3-armv8.spk';
synology_armv5_server = 'MinimServer-0.8.5.3-armv5.spk';
synology_ppc_server = 'MinimServer-0.8.5.3-ppc.spk';
asustor_x86_server = 'MinimServer-0.8.5.2-x86.apk';
asustor_x64_server = 'MinimServer-0.8.5.2-x64.apk';
asustor_arm_server = 'MinimServer-0.8.5.2-arm.apk';
melco_server_windows = 'MinimServer-0.8.5.2-melco.zip';
melco_server_mac = 'MinimServer-0.8.5.2-melco.dmg';
readynas_x86_server = 'MinimServer-0.8.5.3-readynas-x86.bin';
readynas_arm_server = 'MinimServer-0.8.5.3-readynas-arm.bin';
windows_watch = 'MinimWatch-0.8.5.3-install.exe';
macosx_watch = 'MinimWatch-0.8.5.2-macos.dmg';
linux_intel_watch = 'MinimWatch-0.8.5.2-linux-intel.tar.gz';
linux_x86_watch = 'MinimWatch-0.8.5.2-linux-intel.tar.gz';
linux_x64_watch = 'MinimWatch-0.8.5.2-linux-intel.tar.gz';
linux_arm_watch = 'MinimWatch-0.8.5.2-linux-arm.tar.gz';
linux_armhf_watch = 'MinimWatch-0.8.5.2-linux-armhf.tar.gz';
linux_arm64_watch = 'MinimWatch-0.8.5.2-linux-armhf.tar.gz';
linux_ppc_watch = 'MinimWatch-0.8.5.2-linux-ppc.tar.gz';

if (window.opener.location.hostname === 'minimserver.com' && location.search.substring(0, 4) === '?fn=') {
    var locationHref1a = 'http://jminim.com/abra';
    var locationHref1b = 'http://jminim.com/brac';
    var locationHref1c = 'http://jminim.com/cada';
    var locationHref2 = '/' + location.search.substring(4);
    var downloadName = location.search.substring(4);
} else {
    var locationHref1a = window.opener.location.pathname + location.search;
    var locationHref1b = window.opener.location.pathname + location.search;
    var locationHref1c = window.opener.location.pathname + location.search;
    var locationHref2 = '';
    var downloadName = windows_x86_server;
}

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権限のあるユーザのプロセスとして実行されるので、セキュリティー面でもその方が好ましいだろう.



[yasuaki@server2 ~]$ ls -la
total 16
drwxr-xr-x. 4 yasuaki yasuaki 127 Jun 24 12:21 .
drwxr-xr-x. 4 root    root     34 Jun 23 18:12 ..
-rw-------  1 yasuaki yasuaki 875 Jun 24 13:08 .bash_history
-rw-r--r--. 1 yasuaki yasuaki  18 Apr 11 09:53 .bash_logout
-rw-r--r--. 1 yasuaki yasuaki 193 Apr 11 09:53 .bash_profile
-rw-r--r--. 1 yasuaki yasuaki 231 Apr 11 09:53 .bashrc
drwxrwxr-x  3 yasuaki yasuaki  71 Jun 24 12:16 MinimServer
drwxrwxr-x  2 yasuaki yasuaki  40 Jun 24 12:21 .oracle_jre_usage
[yasuaki@server2 ~]$ cd Mi*
[yasuaki@server2 MinimServer]$ ls -la
total 2888
drwxrwxr-x  3 yasuaki yasuaki      71 Jun 24 12:16 .
drwxr-xr-x. 4 yasuaki yasuaki     127 Jun 24 12:21 ..
-rw-rw-r--  1 yasuaki yasuaki 2953961 Dec 22  2017 MinimServer-0.8.5.2-linux-intel.tar.gz
[yasuaki@server2 MinimServer]$ tar xvzf MinimServer-0.8.5.2-linux-intel.tar.gz
minimserver/
minimserver/minimserver-0.8.5.2/
minimserver/minimserver-0.8.5.2/LICENSE.txt
minimserver/minimserver-0.8.5.2/lib/
minimserver/minimserver-0.8.5.2/lib/cacerts-17.9.zip
minimserver/minimserver-0.8.5.2/lib/minimserver-0.8.300.jar
minimserver/minimserver-0.8.5.2/lib/minim.jar
minimserver/minimserver-0.8.5.2/lib/mserver.jar
minimserver/minimserver-0.8.5.2/lib/minimscript$-0.8.300.jar
minimserver/minimserver-0.8.5.2/lib/ohnet(linux-intel)-1.17.2776.1.zip
minimserver/minimserver-0.8.5.2/lib/minimreader-0.8.200.jar
minimserver/minimserver-0.8.5.2/lib/minimlaunch$-0.7.200.jar
minimserver/minimserver-0.8.5.2/lib/jminim-0.7.202.jar
minimserver/minimserver-0.8.5.2/lib/minimui-0.8.300.jar
minimserver/minimserver-0.8.5.2/lib/minimserver-0.8.5.2.jmpkg
minimserver/minimserver-0.8.5.2/lib/mscript.jar
minimserver/minimserver-0.8.5.2/bin/
minimserver/minimserver-0.8.5.2/bin/scriptdemo.sh
minimserver/minimserver-0.8.5.2/bin/uninstall
minimserver/minimserver-0.8.5.2/bin/mscript
minimserver/minimserver-0.8.5.2/bin/startd
minimserver/minimserver-0.8.5.2/bin/stopall
minimserver/minimserver-0.8.5.2/bin/starti
minimserver/minimserver-0.8.5.2/bin/startc
minimserver/minimserver-0.8.5.2/bin/setup
minimserver/minimserver-0.8.5.2/bin/update
minimserver/minimserver-0.8.5.2/icons/
minimserver/minimserver-0.8.5.2/icons/server48.png
minimserver/data/
minimserver/libsys/
minimserver/opt/
minimserver/opt/bin/
minimserver/etc/
minimserver/lib
minimserver/libext/
minimserver/bin
minimserver/icons
[yasuaki@server2 MinimServer]$ ls -la
total 2888
drwxrwxr-x  3 yasuaki yasuaki      71 Jun 24 13:10 .
drwxr-xr-x. 4 yasuaki yasuaki     127 Jun 24 12:21 ..
drwxr-xr-x  8 yasuaki yasuaki     130 Dec 22  2017 minimserver
-rw-rw-r--  1 yasuaki yasuaki 2953961 Dec 22  2017 MinimServer-0.8.5.2-linux-intel.tar.gz
[yasuaki@server2 MinimServer]$ cd minimserver
[yasuaki@server2 minimserver]$ ls -la
total 0
drwxr-xr-x 8 yasuaki yasuaki 130 Dec 22  2017 .
drwxrwxr-x 3 yasuaki yasuaki  71 Jun 24 13:10 ..
lrwxrwxrwx 1 yasuaki yasuaki  23 Dec 22  2017 bin -> minimserver-0.8.5.2/bin
drwxr-xr-x 2 yasuaki yasuaki   6 Dec 22  2017 data
drwxr-xr-x 2 yasuaki yasuaki   6 Dec 22  2017 etc
lrwxrwxrwx 1 yasuaki yasuaki  25 Dec 22  2017 icons -> minimserver-0.8.5.2/icons
lrwxrwxrwx 1 yasuaki yasuaki  23 Dec 22  2017 lib -> minimserver-0.8.5.2/lib
drwxr-xr-x 2 yasuaki yasuaki   6 Dec 22  2017 libext
drwxr-xr-x 2 yasuaki yasuaki   6 Dec 22  2017 libsys
drwxr-xr-x 5 yasuaki yasuaki  60 Dec 22  2017 minimserver-0.8.5.2
drwxr-xr-x 3 yasuaki yasuaki  17 Dec 22  2017 opt
[yasuaki@server2 minimserver]$ ./minimserver-0.8.5.2/bin/setup <=== MinimServerの初期環境設定

MinimServer desktop integration is not available
MinimServer automatic startup is disabled

Do you want to change these settings (y/n)?
y
Enable automatic startup for MinimServer (y/n)?
y
Acquiring root privilege for system configuration update...
[sudo] password for yasuaki: 
Created symlink from /etc/systemd/system/multi-user.target.wants/minimserver.service to /usr/lib/systemd/system/minimserver.service.
MinimServer automatic startup has been enabled

[yasuaki@server2 minimserver]$ cat /usr/lib/systemd/system/minimserver.service  <=== 自動起動の設定内容を確認
[Unit]
Description=MinimServer
After=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/su "yasuaki" -c "/home/yasuaki/MinimServer/minimserver/bin/startd init"
ExecStop=/home/yasuaki/MinimServer/minimserver/bin/stopall

[Install]
WantedBy=multi-user.target
[yasuaki@server2 minimserver]$ 

[yasuaki@server2 minimserver]$ sudo systemctl status minimserver
● minimserver.service - MinimServer
   Loaded: loaded (/usr/lib/systemd/system/minimserver.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
[yasuaki@server2 minimserver]$ sudo systemctl enable minimserver <=== OS起動時に自動起動するように設定
[yasuaki@server2 minimserver]$ sudo systemctl status minimserver
● minimserver.service - MinimServer
   Loaded: loaded (/usr/lib/systemd/system/minimserver.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
[yasuaki@server2 minimserver]$
 
  再起動時にMinimServerが自動で起動されることを確認しておく
 
[yasuaki@server2 minimserver]$ sudo reboot
Connection to 192.168.100.12 closed by remote host.
Connection to 192.168.100.12 closed.
iMac27:CentOS yasuaki$ ssh 192.168.100.12
yasuaki@192.168.100.12's password: 
Last login: Sun Jun 24 13:15:10 2018
[yasuaki@server2 ~]$ ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1 19.1  0.1  43576  3904 ?        Ss   13:14   0:04 /usr/lib/systemd/systemd --switched-root --system 
root         2  0.0  0.0      0     0 ?        S    13:14   0:00 [kthreadd]
root         3  0.1  0.0      0     0 ?        S    13:14   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    13:14   0:00 [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S<   13:14   0:00 [kworker/0:0H]
 
...【途中省略】
 
root       663  0.0  0.0  45924   544 ?        Ss   13:14   0:00 /usr/sbin/rpc.idmapd
dbus       684  2.1  0.0  58196  2304 ?        Ss   13:14   0:00 /usr/bin/dbus-daemon --system --address=systemd: -
rpc        685  0.8  0.0  69220  1440 ?        Ss   13:14   0:00 /sbin/rpcbind -w
root       689  4.4  0.2 478724 11476 ?        Ssl  13:14   0:00 /usr/sbin/NetworkManager --no-daemon
root       690  0.1  0.0  21656  1232 ?        Ss   13:14   0:00 /usr/sbin/irqbalance --foreground
root       691  0.0  0.1 195084  5940 ?        Ssl  13:14   0:00 /usr/sbin/gssproxy -D
polkitd    692  0.6  0.2 538432 10060 ?        Ssl  13:14   0:00 /usr/lib/polkit-1/polkitd --no-debug
root       696  0.3  0.0  26376  1736 ?        Ss   13:14   0:00 /usr/lib/systemd/systemd-logind
chrony     704  0.3  0.0 120348  2080 ?        S    13:14   0:00 /usr/sbin/chronyd
root       720  0.0  0.0 126284  1572 ?        Ss   13:14   0:00 /usr/sbin/crond -n
root       727  0.0  0.0 110088   860 ttyS0    Ss+  13:14   0:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 v
root       728  0.0  0.0 110088   848 tty1     Ss+  13:14   0:00 /sbin/agetty --noclear tty1 linux
root       732  0.1  0.0  21920  1268 ?        Ss   13:14   0:00 /usr/lib/systemd/systemd-hostnamed
root       733  0.5  0.1 227200  4312 ?        Ssl  13:14   0:00 /usr/libexec/nm-dispatcher
root       765  0.0  0.0      0     0 ?        S<   13:15   0:00 [kworker/1:1H]
root       971  0.6  0.1 112812  4284 ?        Ss   13:15   0:00 /usr/sbin/sshd -D
root       978 13.1  0.4 573848 17048 ?        Ssl  13:15   0:01 /usr/bin/python -Es /usr/sbin/tuned -l -P
root       979  4.6  0.1 222716  5668 ?        Ssl  13:15   0:00 /usr/sbin/rsyslogd -n
rpcuser    980  1.1  0.0  42420  1756 ?        Ss   13:15   0:00 /usr/sbin/rpc.statd
root      1023  0.1  0.0  43708  2384 ?        Ss   13:15   0:00 /usr/sbin/rpc.mountd
root      1066  0.0  0.0      0     0 ?        S<   13:15   0:00 [nfsd4_callbacks]
root      1067  0.0  0.0      0     0 ?        S    13:15   0:00 [lockd]
root      1075  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1076  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1081  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1082  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1084  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1085  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1086  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1088  0.0  0.0      0     0 ?        S    13:15   0:00 [nfsd]
root      1105  3.4  0.1 161416  6092 ?        Ss   13:15   0:00 sshd: yasuaki [priv]
dhcpd     1150  1.0  0.2 112588  8384 ?        Ss   13:15   0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user 
root      1436  1.6  0.0  89632  2084 ?        Ss   13:15   0:00 /usr/libexec/postfix/master -w
postfix   1437  0.6  0.1  89736  4056 ?        S    13:15   0:00 pickup -l -t unix -u
postfix   1438  0.6  0.1  89804  4076 ?        S    13:15   0:00 qmgr -l -t unix -u
yasuaki   1472  0.0  0.0 113176   872 ?        S    13:15   0:00 /bin/sh /home/yasuaki/MinimServer/minimserver/bin/
yasuaki   1476  100  1.5 3686468 58204 ?       Sl   13:15   0:05 java -jar /home/yasuaki/MinimServer/minimserver/li
yasuaki   1547  1.0  0.0 161416  2332 ?        S    13:15   0:00 sshd: yasuaki@pts/0
yasuaki   1548  1.3  0.0 115436  1996 pts/0    Ss   13:15   0:00 -bash
yasuaki   1578  0.0  0.0 155324  1864 pts/0    R+   13:15   0:00 ps -aux
[yasuaki@server2 ~]$ 

プロセスリストの下から4行目が "MinimServer" の実行プロセスで、ユーザ権限で実行されていることが確認できる.MinimServerが無事起動できたら、WEBブラウザで MinimServerの管理画面にアクセスし、初期環境設定を済ませておく.


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

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

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

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

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

Linn Kinsky Player
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サーバに精通していなければ無理なので、一般的なオーディオマニアには敷居が高いが頑張って挑戦して見て欲しい.



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