在网上看到用roon搭建音乐服务器,组建网络播放空间,虽然现在订购了apple music,但还是有不少自己心仪的高清音频在网上没有,在阅读了网上的经验知识,对设备进行选购,先试了从网上下载了roon 2.47的学习版本,在windows系统进行了安装,试听后,效果很好(windows上集成roon server和播放端,通过USB外接前端或支持USB的功放,可以通过安卓手机端控制播放),由于家里现有的设备并不直接支持roon ready,从网上发现fiio的一款SR11(主要是便宜)可以作为roon网桥(固件升级到B815版本),购入后,进行试听,不仅可以做为roon的终端,还可以作为apple pad的投射播放,效果比蓝牙连接好,然后就想入手一款nas作为roon 核心,网上有群晖可以直接安装学习版程序(.spk),但查了群晖的配置和价格及升级配件(主要是穷),有点不值,找到了一款极空间Z4pro,价值更低,intel i3-N305,8核8线程,16G内存,32G ECC,关键是这个版本还开放了ssh,那就可以自己安装docker实现roon core。在某鱼上看到有可以用于各种兼容x86版本NAS使用的docker文件,就想自己也可以做一个。首先在一款linux主机上试验,在主机的docker上安装roon的核心,再替换成学习版,如果可行,就下手NAS。
http://rutracker.net/forum/viewtopic.php?t=6207292
使用网上参考的镜像包elgeeko/roon-server(所以选择的是社区版本,是因为下载官方的镜像包roonlabs/roon-server一直不成功,经查看镜像包中的安装过程,是从官网下载新版程序包,参考:http://kb.roonlabs.com/LinuxInstall网站,下载安装包为:https://download.roonlabs.net/builds/RoonServer_linuxx64.tar.bz2。看了这个镜像的Dockerfile文件,FROM ubuntu:24.04,可以自己用ubuntu的基础版本来构建,既然有已经构建好的基础包,就不用自己折腾了),下载后启动运行:
docker run -it --name roonserver elgeeko/roon-server
发现报错,有两个需要的组件检查没有通过ffmpeg和mount.cifs,但通过exec进入docker后台(docker启动入口文件为/entrypoint.sh,可以把这个文件拷出来编辑后再拷回去,如在文件后增加top命令,保持实例处于运行状态),检查这两个组件包都是安装成功的,由于roon server是通过.net core运行的,从网上查这个报错是因为docker对某个组件有白名单检查,需要在运行进增加一个选项 --security-opt seccomp=unconfined ,再运行即成功。把这个基础包,增加了对系统环境的修改如 localTime,TZ=Asia/Shanghai等的修改(或在启动docker时增加环境变量),和学习版程序的替换,commit成一个新的镜像包,这样拷入到nas的docker环境中就可以正常行运了。(
--volume /etc/localtime:/etc/localtime:ro - map local system clock to container clock
--volume /etc/timezone:/etc/timezone:ro - map local system timezone to container timezone)
docker run \
--name roon-server \
--volume roon-server-data:/opt/RoonServer \
--volume roon-server-cache:/var/roon \
--volume ~/roon/music:/music:ro \
--network host \
--privileged \
elgeeko/roon-server
缺省安装的roon server在系统目录 /opt/RoonServer,这个可以映射到nas盘的指定目录下,便于以后替换网上升级的学习版。/var/roon目录下roon server运行后产生的临时文件,可以映射到nas盘上,便于日后的清理。/music是缺省的音乐文件,这个是需要眏射到具体nas上存放音乐文件的目录。
由于roon server 使用了较多的端口,最好是指定使用 --network host 网络模式,这样roon server直接使用nas服务器的端口,不需要再进行端口映射配置。
需要限制学习版进行后台自动升级,在/etc/hosts文件里增加域名限制,防止访问网络升级。
127.0.0.1 updates.roonlabs.com
127.0.0.1 accounts5.roonlabs.com
如果在镜像中增加安装roon bridge,则需要在运行时增加以下参数,将硬件带入容器中:
--volume /run/udev:/run/udev:ro - allow Roon to enumerate USB devices
--device /dev/bus/usb - allow Roon to access USB devices (/dev/usbmon0 for Fedora)
--device /dev/snd - allow Roon to access ALSA devices
--group-add $(getent group audio | cut -d: -f3) - add container user to host 'audio' group