找回密码
 -注册-
查看: 26844|回复: 146
打印 上一主题 下一主题

HQPlayer OS中安装Roon Server笔记

[复制链接]
跳转到指定楼层
1
发表于 2022-7-19 18:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式 来自 北京
本帖最后由 中关村东路 于 2022-7-19 19:31 编辑

HQPlayer OS中安装Roon Server笔记

  • 背景
  • 所需材料
  • 安装HQPlayer OS,并利用全部磁盘空间
  • 在HQPlayer OS中安装Roon Server
  • CPU资源分离

因为我每个服务都是单独的机器,这套方案只是为了网友方便实现编写,如果对你有用,还请回复一下,让更多人看到。


来自 84楼
 楼主| 发表于 2022-7-22 16:09 | 只看该作者 来自 北京
回复

使用道具 举报

2
 楼主| 发表于 2022-7-19 18:17 | 只看该作者 来自 北京
本帖最后由 中关村东路 于 2022-7-19 19:35 编辑

1. 背景

本文简要记录了在HQPlayer OS(下文缩写hqos)中安装Roon Server(即Roon Core,下文缩写roon)的过程,需要读者对Linux有初步的了解。

为了确保在读者的机器上同样可行,除了需要录入的命令,同时也记录了安装中可能遇到的问题和解决思路。

需要强调,我自己的主力系统(详见【1】)中并未将hqos和Roon Server放在同一台机器上,我也并不建议读者这么做,读者也请不要回帖讨论是否有必要把hqos和roon安装在一起。

本文起因是有网友noif96发帖【2】讨论hqos如何安装roon;以及网友Devastat0r提及【3】hqos的诸多优点;此外,考虑到roon所需cpu资源很小,而内存空间极大,hqos所需cpu资源极大,内存空间很小,两套系统放在一台机器上,通过本帖第5节的cpu分离设置,也可以在冲突较小的情况下提高利用率。话说回来,hqos内置实时内核,系统足够精简,启动后除udev和dbus之外也没什么没用的进程,确实非常优秀,当然在此基础上也有很大优化的余地,本文就不讨论了。

【1】http://erji.net/forum.php?mod=viewthread&tid=2253401&extra=

【2】http://erji.net/forum.php?mod=viewthread&tid=2272065&extra=

【3】http://erji.net/forum.php?mod=viewthread&tid=2271005&extra=


回复

使用道具 举报

3
 楼主| 发表于 2022-7-19 18:18 | 只看该作者 来自 北京
本帖最后由 中关村东路 于 2022-7-19 19:36 编辑

2. 所需材料

一个能正常运行的linux系统,因为我在放假手头只有个苹果笔记本,只好找了u盘刻录gparted live cd【4】。hqos的img【5】。roon core的linux安装文件【6】。

当然还要有一个功能完整的x86主机用于安装hqos/roon,可以把系统安装在内置硬盘/u盘等等,只要这台电脑支持启动即可,本例使用的是一张内置的500G的pcie-ssd,其他存储也类似。

【4】https://gparted.org

【5】https://www.signalyst.eu/bins/hqplayerd/images/

【6】https://download.roonlabs.net/builds/RoonServer_linuxx64.tar.bz2


回复

使用道具 举报

4
 楼主| 发表于 2022-7-19 18:18 | 只看该作者 来自 北京
本帖最后由 中关村东路 于 2022-7-19 19:48 编辑

3. 安装HQPlayer OS,并利用h86主机全部磁盘空间

3.1 制作gparted live cd启动盘

首先下载gparted live cd【4】,用dd/rufus/balenaEtcher/unetbootin等方法将其刻录至u盘。例如,我使用dd
  1. sudo /bin/dd if=~/Downloads/gparted-live-1.4.0-1-amd64.iso of=/dev/rdisk2s1
复制代码
之后就可以在你要安装hqos/roon的x86主机上,这个用gparted u盘启动了。这东西居然是有图形界面的,双击打开terminal即可进入正式安装了。


3.2 安装hqos

下面我们要把hqos的7z镜像解压缩之后复制到这台电脑上,最简单的办法是在电脑上解压缩了拿一个fat32格式的u盘拷贝过来,我手头没有第二个u盘了,就用内存虚拟了一块空间:

  1. mount none -t tmpfs /tmp
  2. cd /tmp
  3. scp username@laptop_ip:Downloads/hqos.img .
  4. dd if=hqos.img of=/dev/sdb
复制代码
这里假定你解压缩之后的文件是家目录的Downloads/hqos.img,我用的macbook pro,可以直接用scp/ssh传输,windows我没太用过不太了解,应该也有类似的传递文件的办法。


3.3 利用x86主机全部全部磁盘空间(可选)

这一步是为了让roon有放音乐/日志/图片/索引的空间,如果你是轻度用户,或者和我一样只是想确保我“可以”把roon安装在hqos里,那可以跳过这一步。如果你安装这台系统是为了实用,这步虽然是可选,但是还是很建议的,大家知道ssd速度是和ssd容量有关的,利用全部空间可以大幅提高磁盘速度。

打开gparted,点击一下刷新磁盘,就可以找到要安装hqos的目标磁盘了,很容易分辨,左边两个小块,右边一大块灰色的空白空间。右键root分区resize,拖动到最右边,也就是最大,apply之后重启即可。

至此,hqos就安装好了。拔掉所有无关u盘,直接启动这个x86主机,我们接下来安装roon。


回复

使用道具 举报

5
 楼主| 发表于 2022-7-19 18:18 | 只看该作者 来自 北京
本帖最后由 中关村东路 于 2022-7-19 18:28 编辑

4. 在HQPlayer OS中安装Roon Server

4.1 设置hqos的ssh登录

安装了hqos的x86主机启动之后应该有个登录提示符,输入root回车即可。差一下这台机器的ip,输入:
  1. ip address
复制代码
之后按提示修改一下root密码:

  1. passwd root
复制代码
我比较保守,另外新建了一个用户用来ssh,你可以修改下面的username为你自己的用户名:
  1. useradd username
  2. passwd username
复制代码
至此就可以拔掉键盘显示器从远程登录了,例如在笔记本上打开终端模拟器,我用的是iTerm2,用户名,密码,ip就是本小节录入的:
  1. ssh username@hqos_ip_address
复制代码



4.2 安装roon

远程ssh登录之后我们首先下载并解压缩roon:

  1. cd /opt
  2. wget https://download.roonlabs.net/builds/RoonServer_linuxx64.tar.bz2
  3. tar xvf *.bz2
  4. rm *.bz2
复制代码
看看能不能执行:
  1. cd /opt/RoonServer
  2. ./start.sh
复制代码
本以为这样应该安装成功的,结果这时候会提示:

  1. /opt/RoonServer/Server/RoonServer: line 71: /opt/RoonServer/RoonDotnet/RoonServer: No such file or directory
  2. ./start.sh: line 34: kill: (1602) - No such process
复制代码
看一下错误信息,定位到问题所在是“/opt/RoonServer/RoonDotnet/RoonServer”不存在,但是执行:
  1. ls /opt/RoonServer/RoonDotnet/RoonServer
复制代码
发现是有这个文件的。再看看这个文件:
  1. file /opt/RoonServer/RoonDotnet/RoonServer
复制代码
原来是链接到了dotnet的runtime:
  1. /opt/RoonServer/RoonDotnet/RoonServer: symbolic link to /opt/RoonServer/RoonDotnet/dotnet
复制代码
再看看被链接的原文件:
  1. file /opt/RoonServer/RoonDotnet/dotnet
复制代码
显示结果:
  1. /opt/RoonServer/RoonDotnet/dotnet: ELF 64-bit LSB pie executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ce34c3793740b6d65dd1c38dcee5f1941932139f, for GNU/Linux 2.6.32, stripped
复制代码
这就找到问题了,根目录下没有这个动态链接“/lib64/ld-linux-x86-64.so.2”
  1. ln -s /lib /lib64
复制代码
再尝试一下,
  1. root@hqplayer:~#  /opt/RoonServer/RoonDotnet/dotnet --info

  2. Host (useful for support):
  3.   Version: 6.0.6
  4.   Commit:  7cca709db2

  5. .NET SDKs installed:
  6.   No SDKs were found.

  7. .NET runtimes installed:
  8.   Microsoft.NETCore.App 6.0.6 [/opt/r/RoonServer/RoonDotnet/shared/Microsoft.NETCore.App]

  9. To install additional .NET runtimes or SDKs:
  10.   https://aka.ms/dotnet-download
复制代码
现在基本上就搞定了。来试试
  1. root@hqplayer:/opt/RoonServer# ./check.sh

  2. Checking to see if RoonServer can run on this machine

  3.     Checking for Binary Compatibility                            [   OK   ]
  4.     Checking for ALSA Libraries                                  [   OK   ]
  5.     Checking for ffmpeg or avconv                                [ FAILED ]
  6.     Checking for the mount.cifs command                          [   OK   ]
  7.     Checking for libicu                                          [   OK   ]
  8.     Testing ulimit -n 8192                                       [   OK   ]

  9. STATUS: FAILED

  10. These issues must be addressed before RoonServer will run on this machine.

  11. For more information on how to address this, see:

  12.    http://kb.roonlabs.com/LinuxInstall
复制代码
说本机没安装ffmpeg/avconv,因为我们用hqplayer来做转码,不需要管。启动试试:
  1. root@hqplayer:/opt/RoonServer# ./start.sh
  2. 00:00:00.002 Warn:  get lock file path: /tmp/.rnsgem0-
  3. 00:00:00.130 Debug: PathForResource, filename: ../.update
  4. 00:00:00.140 Debug: PathForResource, candidate: /opt/RoonServer/Server/../.update
  5. 00:00:00.144 Debug: PathForResource, filename: ../Appliance/RoonAppliance
  6. 00:00:00.144 Debug: PathForResource, candidate: /opt/RoonServer/Server/../Appliance/RoonAppliance
  7. Initializing
  8. Started
复制代码
成功了!

4.3 更新dotnet(可选)

强迫症患者会发现,“/opt/RoonServer/RoonDotnet/dotnet”的版本是6.0.6版本,看看官网吧,稳定版已经更新到6.0.7了。想更新就顺手更新一下吧,


【7】https://dotnet.microsoft.com/en-us/download/dotnet
  1. wget https://download.visualstudio.microsoft.com/download/pr/bd828687-1706-4041-a804-5e93631fe256/d4ec75936459a7e8c772c929edcbfeda/dotnet-runtime-6.0.7-linux-x64.tar.gz
  2. rm /opt/RoonServer/RoonDotnet/* -rf
  3. tar xvf dotnet-runtime-6.0.7-linux-x64.tar.gz -C /opt/RoonServer/RoonDotnet/
复制代码
记得恢复roon的三个链接,他家代码写的挺糙的。

  1. ln -s /opt/RoonServer/RoonDotnet/dotnet RAATServer
  2. ln -s /opt/RoonServer/RoonDotnet/dotnet RoonAppliance
  3. ln -s /opt/RoonServer/RoonDotnet/dotnet RoonServer
复制代码

4.4 设置自动启动

可能这一步是最重要的一步之一吧,否则即便是命令行狂热者,每次开机都要ssh进去启动也实在太麻烦了。

  1. nano /lib/systemd/system/roonserver.service
复制代码
把下面内容粘贴进去,千万别粘错了:
  1. [Unit]
  2. Description=RoonServer
  3. After=network-online.target sound.target
  4. Wants=network-online.target

  5. [Service]
  6. Type=simple
  7. User=root
  8. Environment=ROON_DATAROOT=/var/roon
  9. Environment=ROON_ID_DIR=/var/roon
  10. ExecStart=/opt/RoonServer/start.sh
  11. Restart=on-abort

  12. [Install]
  13. WantedBy=multi-user.target
复制代码
还要创建roon数据目录,
  1. mkdir /var/roon
复制代码
好了,设置roonserver自动启动了:
  1. systemctl --enable now roonserver.service
复制代码
大功告成!
回复

使用道具 举报

6
 楼主| 发表于 2022-7-19 19:29 | 只看该作者 来自 北京
本帖最后由 中关村东路 于 2022-7-19 19:32 编辑

5. CPU资源分离

HQPlayer和Roon Core对CPU占用都有一定的要求,建议对CPU资源进行分离。虽然【1】中已经给出多种可行方案,我建议使用systemd内置功能实现,先限制hqplayer运行在2,3等cpu上。运行htop,即可看到你的cpu线程数,假定是n+1,那么在这里就写2-n即可。
  1. root@hqplayer:~# cat /etc/systemd/system/multi-user.target.wants/hqplayerd.service
  2. [Unit]
  3. Description=HQPlayer Embedded daemon
  4. Requires=systemd-networkd.service systemd-networkd-wait-online.service network-online.target sound.target systemd-udev-settle.service
  5. After=systemd-networkd-wait-online.service network-online.target sound.target systemd-udev-settle.service local-fs.target remote-fs.target

  6. [Service]
  7. Type=simple
  8. CPUAffinity=2,3
  9. ExecStart=/usr/bin/hqplayerd
  10. Restart=always
  11. RestartSec=2
  12. EnvironmentFile=-/etc/default/hqplayerd
  13. #User=hqplayer
  14. Nice=-10
  15. IOSchedulingClass=realtime
  16. LimitMEMLOCK=1G
  17. LimitNICE=-10
  18. LimitRTPRIO=98

  19. [Install]
  20. WantedBy=multi-user.target
复制代码
再限制roon在0,1两个CPU上:
  1. root@hqplayer:~# cat /etc/systemd/system/multi-user.target.wants/roonserver.service
  2. [Unit]
  3. Description=RoonServer
  4. After=network-online.target sound.target
  5. Wants=network-online.target

  6. [Service]
  7. Type=simple
  8. User=root
  9. CPUAffinity=0,1
  10. Environment=ROON_DATAROOT=/var/roon
  11. Environment=ROON_ID_DIR=/var/roon
  12. ExecStart=/opt/RoonServer/start.sh
  13. Restart=on-abort

  14. [Install]
  15. WantedBy=multi-user.target
复制代码
修改设置之后重启一下两个服务即可立即生效,下次重启也会保留这个设置:
  1. systemctl daemon-reload
  2. systemctl restart roonserver.service
  3. systemctl restart hqplayerd.service
复制代码


回复

使用道具 举报

7
发表于 2022-7-19 21:07 | 只看该作者 来自 浙江
收藏,慢慢学习,慢慢尝试!
回复

使用道具 举报

8
发表于 2022-7-19 21:38 来自手机 | 只看该作者 来自 中国
顶,万分感谢大佬
回复

使用道具 举报

9
发表于 2022-7-20 09:47 | 只看该作者 来自 中国
令人耳目一新的技术牛贴!!
回复

使用道具 举报

10
发表于 2022-7-20 10:35 | 只看该作者 来自 中国
大牛你好,问个白白的问题,HQOS有可能安装Ubuntu的deb文件包吗,里面很多命令都删除了,如何实现?
回复

使用道具 举报

11
 楼主| 发表于 2022-7-20 12:16 | 只看该作者 来自 北京
万远 发表于 2022-7-20 10:35
大牛你好,问个白白的问题,HQOS有可能安装Ubuntu的deb文件包吗,里面很多命令都删除了,如何实现?

一般来说,可以。只是可能比较麻烦
回复

使用道具 举报

12
发表于 2022-7-20 15:15 | 只看该作者 来自 中国
中关村东路 发表于 2022-7-20 12:16
一般来说,可以。只是可能比较麻烦

如何恢复它的apt install 命令?
回复

使用道具 举报

13
 楼主| 发表于 2022-7-20 15:24 | 只看该作者 来自 北京
万远 发表于 2022-7-20 15:15
如何恢复它的apt install 命令?

肯定也是可以,不过我没试过。把你要装的那个软件装上就行了。这种删减的系统,把各种东西都加上就没必要了
回复

使用道具 举报

14
发表于 2022-7-20 15:30 | 只看该作者 来自 中国
中关村东路 发表于 2022-7-20 15:24
肯定也是可以,不过我没试过。把你要装的那个软件装上就行了。这种删减的系统,把各种东西都加上就没必要 ...

十分感谢!按葫芦画瓢出现了这个错误,需要安装libicu,可是没有apt install 安装命令

1.png (20.21 KB, 下载次数: 203)

1.png
回复

使用道具 举报

15
发表于 2022-7-20 16:09 来自手机 | 只看该作者 来自 上海
中关村东路 发表于 2022-7-20 15:24
肯定也是可以,不过我没试过。把你要装的那个软件装上就行了。这种删减的系统,把各种东西都加上就没必要 ...

可以考虑freenode开个irc,答疑交流效率高多了,好多年没上去过了,记得很早就能挂bot、dlna之类的。。
回复

使用道具 举报

16
 楼主| 发表于 2022-7-20 16:13 | 只看该作者 来自 北京
本帖最后由 中关村东路 于 2022-7-20 16:23 编辑
万远 发表于 2022-7-20 15:30
十分感谢!按葫芦画瓢出现了这个错误,需要安装libicu,可是没有apt install 安装命令

看来是你的hqos版本比较早没带这个库。
我看了一下roon对icu的依赖是这个函数检查的:
  1. function check_libicu {
  2.     display_check "Checking for libicu"
  3.     which icuinfo >/dev/null; WHICH_ICUINFO=$?
  4.     ldconfig -p | grep libicu >/dev/null; LDCONFIG_LIBICU=$?
  5.     if [ $WHICH_ICUINFO = 0 -o $LDCONFIG_LIBICU = 0 ]; then
  6.         display_ok
  7.     else
  8.         display_failed
  9.     fi
  10. }
复制代码
也就是“ldconfig -p|grep libicu”。在我的hqos上显示的是:
  1. root@hqplayer:~# ldconfig -p | grep libicu
  2.         libicuuc.so.69 (libc6,x86-64) => /usr/lib/libicuuc.so.69
  3.         libicui18n.so.69 (libc6,x86-64) => /usr/lib/libicui18n.so.69
  4.         libicudata.so.69 (libc6,x86-64) => /usr/lib/libicudata.so.69
复制代码
这就是你需要的文件。找任意一个包含amd64版本libicu的linux发行版(除了Gentoo/LFS)下载这个包即可,例如Archlinux:
  1. https://archlinux.org/packages/core/x86_64/icu/download
复制代码
下载之后在电脑上打开terminal在下载文件所在目录解压缩:
  1. # tar xvf icu-71.1-1-x86_64.pkg.tar.zst
复制代码
可以看到:
  1. #ls usr/
  2. bin        include        lib        share
  3. # ls usr/lib
  4. icu                        libicudata.so.71.1        libicui18n.so.71.1        libicuio.so.71.1        libicutest.so.71.1        libicutu.so.71.1        libicuuc.so.71.1
  5. libicudata.so                libicui18n.so                libicuio.so                libicutest.so                libicutu.so                libicuuc.so                pkgconfig
  6. libicudata.so.71        libicui18n.so.71        libicuio.so.71                libicutest.so.71        libicutu.so.71                libicuuc.so.71
  7. # ls usr/lib/lib*
  8. usr/lib/libicudata.so                usr/lib/libicui18n.so.71        usr/lib/libicuio.so.71.1        usr/lib/libicutu.so                usr/lib/libicuuc.so.71
  9. usr/lib/libicudata.so.71        usr/lib/libicui18n.so.71.1        usr/lib/libicutest.so                usr/lib/libicutu.so.71                usr/lib/libicuuc.so.71.1
  10. usr/lib/libicudata.so.71.1        usr/lib/libicuio.so                usr/lib/libicutest.so.71        usr/lib/libicutu.so.71.1
  11. usr/lib/libicui18n.so                usr/lib/libicuio.so.71                usr/lib/libicutest.so.71.1        usr/lib/libicuuc.so
复制代码
传到hqos电脑上,下面这句是传到hoos_ip_address这个电脑,username这个用户的家目录下
  1. scp usr/lib/libicu* username@hqos_ip_address:
复制代码
登录hqos再剪切过去就可以了,注意这里假定登录过去立即执行后面的移动命令,因为这几个文件刚才拷贝到家目录下了。
  1. #ssh username@hqos_ip_address</span>
  2. #su -c "mv libicu* /usr/lib/"
复制代码
应该就可以了,检查一下:
  1. # ldconfig -p | grep libicu
  2.         libicuuc.so.71 (libc6,x86-64) => /usr/lib/libicuuc.so.71
  3.         libicutu.so.71 (libc6,x86-64) => /usr/lib/libicutu.so.71
  4.         libicutest.so.71 (libc6,x86-64) => /usr/lib/libicutest.so.71
  5.         libicui18n.so.71 (libc6,x86-64) => /usr/lib/libicui18n.so.71
  6.         libicuio.so.71 (libc6,x86-64) => /usr/lib/libicuio.so.71
  7.         libicudata.so.71 (libc6,x86-64) => /usr/lib/libicudata.so.71
复制代码


回复

使用道具 举报

17
 楼主| 发表于 2022-7-20 16:16 | 只看该作者 来自 北京
leonbernieni 发表于 2022-7-20 16:09
可以考虑freenode开个irc,答疑交流效率高多了,好多年没上去过了,记得很早就能挂bot、dlna之类的。。

说不上答疑,大家交流一下而已。我也不是程序员相关职业的,只不过平时的电脑都是Linux/macOS
回复

使用道具 举报

18
发表于 2022-7-20 16:32 | 只看该作者 来自 中国
中关村东路 发表于 2022-7-20 16:13
看来是你的hqos版本比较早没带这个库。
我看了一下roon对icu的依赖是这个函数检查的:
也就是“ldconfi ...

感谢大牛,成功了!!再问一个:如何把LMS安上去?
回复

使用道具 举报

19
 楼主| 发表于 2022-7-20 16:34 | 只看该作者 来自 北京
万远 发表于 2022-7-20 16:32
感谢大牛,成功了!!再问一个:如何把LMS安上去?

没用过LMS。。要不你自己折腾一下吧,不过你都有Roon了怎么还能忍其他软件。。
回复

使用道具 举报

20
发表于 2022-7-20 16:41 | 只看该作者 来自 中国
本帖最后由 万远 于 2022-7-20 16:43 编辑

大牛你请看看这贴:
http://erji.net/forum.php?mod=vi ... 1717&extra=page%3D1若你有能力,也想把LMS整合进去就完美了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | -注册-

本版积分规则

Archiver|手机版|粤icp备09046054号|耳机网-耳机大家坛

粤公网安备 44030602000598号 耳机大家坛、www.erji.net、网站LOGO图形均为注册商标

GMT+8, 2024-11-3 20:41

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表