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

无独立主机,无安装依赖,无虚拟机Docker——玩转嵌入式HQPlayer

[复制链接]
跳转到指定楼层
1
发表于 2022-11-5 15:51 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式 来自 北京
Linux嵌入式版的HQPlayer是最极致的PC升频方式之一,有着更少的干扰,更高的效率,无需显示器键盘鼠标。本帖介绍了一种无需独立主机,无需自行处理安装依赖,不需忍受虚拟机和Docker带来的性能损失的Linux嵌入式版HQPlayer安装方法。普通玩家可以方便的体验HQ升频,高端玩家可在此基础上定制自己的系统和内核。如果对你有所帮助,希望能回帖表示支持。有所疑问也请在本帖下回帖,尽量不要站内信或者在qq咨询,这样可以让有相同问题的同学看到。


来自 2楼
 楼主| 发表于 2022-11-5 15:51 | 只看该作者 来自 北京
1. 背景

很多朋友知道,Linux嵌入式版的HQPlayer【1】才是正宗——更少的干扰,更高的效率,无需显示器键盘鼠标带来更纯粹的使用体验。

官方的Linux嵌入式版HQPlayer主要有两种安装方法,安装包HQPlayer Embedded【2】,和HQPlayer OS【3】。前者,安装包的方式,HQPlayer Embedded(以下简称HQPE)适合有一定Linux基础的Ubuntu/AudioLinux/GentooPlayer用户使用,不但有一些技术或经济上的门槛,而且为了处理依赖关系,需要引入大量软件包,搞不好还会让纯CLI的操作界面安装好多图形界面的东西,洁癖患者很难接受,同时也可能因臃肿的依赖关系引入不必要的进程。后者,HQPlayer OS(以下简称HQOS)相对而言方便得多,只需烧制一张启动u盘即可,但却也伴随一些问题,大到常见的网卡无法驱动,小到内核臃肿且严重缺乏优化,因为HQOS盲目采用实时内核还会导致性能较差的机器在高负载情况下出现卡顿,最让只想临时体验的烧友头疼的莫过于这需要完全占用一台独立的电脑。当然,一些软路由爱好者希望可以使用虚拟机,docker等方法在windows或NAS上使用HQOS。作为纯粹的体验派而言这是可行的方案,但虚拟机意味着系统资源的损耗,对HQPlayer这种对算力和流畅性要求极高的软件来说,不仅是性能是否够用的问题,更会直接导致卡顿等不好的体验,对追求极致的音乐发烧友而言实在不是一个好的选择,还不如直接用桌面版体验一下算了。可以说,很多同学不使用HQ的原因并非付费困难、对音质的质疑等正面问题,而只是因为没有一台独立的电脑方便的安装Linux嵌入式版HQ而已。

在另外一个帖子中【4】我提过之后会发帖介绍如何更高效便捷地安装Linux版嵌入式HQPlayer,甚至还讨论过如何给HQOS增加airplay功能【5】。正好这几天有烧友提到,我就整理出来,并听从建议起了这个标题希望能吸引眼球。目标受众主要有两类,一类是体验派,希望在无独立主机、不使用虚拟机、docker等低效方案的情况下,不自己处理依赖的玩转HQPlayer;另外一类是极致玩家,他们不满足于当前的HQOS的内核性能,不想使用第三方提供的AudioLinux/GentooPlayer等臃肿的收费发行版,希望自己完全掌控嵌入式版HQPlayer。本帖主要受众是后者,但也推荐给第一类体验派玩家。和我之前发的一些纯技术贴不同,考虑到本帖的目标读者广泛,我尽量使用精确易用的描述方式,面向有些动手能力的烧友,只需要你大约知道什么是登录,什么是挂载即可,并不要求过高的Linux基础。

如果对你有所帮助,希望能回帖表示支持。有所疑问也请在本帖下回帖,尽量不要站内信或者在qq咨询,这样可以让有相同问题的同学看到。

【1】https://www.signalyst.com/custom.html
【2】https://www.signalyst.eu/bins/hqplayerd/bullseye
【3】https://www.signalyst.eu/bins/hqplayerd/images
【4】http://erji.net/forum.php?mod=vi ... =2283776&extra=
【5】http://erji.net/forum.php?mod=vi ... =2272408&extra=


回复

使用道具 举报

来自 3楼
 楼主| 发表于 2022-11-5 15:51 | 只看该作者 来自 北京
2. 所需材料

2.1 一台电脑,安装balenaEtcher/dd或任意可以烧录HQOS镜像的软件。我用的是macOS+balenaEtcher。

2.2 一张u盘,用于解压缩HQOS镜像。当然,熟悉Linux的玩家也可以用其他方法,例如zfs/虚拟机/mount -o loop等方法解压缩,只要能拿到镜像里的文件即可,本帖就不介绍了。

2.3 HQOS镜像文件。最简单且合法的办法就是从官网【3】下载。

2.4 一台有root权限的Linux电脑,可以是软路由,NAS,下载机,树莓派,也可以是一台独立的HQPlayer升频主机。只要安装有chroot/systemd之一即可。这里再次强调一下,如果只是体验一下嵌入式版HQPlayer,上述选择都是可行的,如果打算以此为主力,还是建议使用高性能被动散热的独立HQ主机,使用本帖方案可获得极高的上限。


回复

使用道具 举报

来自 4楼
 楼主| 发表于 2022-11-5 15:53 | 只看该作者 来自 北京
3. 准备工作

3.1 获取HQOS镜像文件

打开链接【3】可以看到眼花缭乱的镜像文件。这是HQOS针对不同CPU制作的优化版本。简单介绍一下,早期的嵌入式HQ分为树莓派、x64gen、x64amd三种镜像,分别针对树莓派/cm4开发板、早期intel/amd cpu或奔腾赛扬等低端cpu,x86amd针对的是支持avx的cpu。后两个标题很有迷惑性,现在有已经不再使用了。现在的命名改成了没有歧义的sse42、avx2,依然针对早期cpu和较新的cpu。如果不知道该如何选择,那么选择sse42总是没错的,现在很少能找到不支持这个指令集的电脑了。

3.2 烧录u盘

这个就不详细介绍了,注意把下载到的文件7z文件解压缩成img文件再用balenaEtcher等软件烧录至u盘即可。高端玩家可使用其他方式,这一步的目标只是获得镜像内的文件而已,用u盘容易解释清楚而已。

3.3 复制u盘文件到Linux主机

看起来不会很难是不是,这是本帖最复杂的一步,搞定这个你就成功一大半了!这一步最难的其实只是要找到u盘的盘符。先获取root权限,再执行fdisk -l,就会看到好多磁盘,识别刚才烧录的HQOS u盘很容易,一看品牌,确实是DataTraveler,二看容量,是32G的,三看是否恰好两个分区一个小的是Microsoft basid data,一个大的是Linux filesystem。

当然,要执行上述操作先要登录这台Linux机器,可以选择连接键盘和显示器直接登录,也可以ssh登录,这里就不介绍了。如果不是用root登录,而是其他用户,需要获得root权限,输入:
  1. sudo -i 或者 su -
复制代码


我也做了一回root党,主要是为了说话方便。如果你很注意账号安全,可以一直带着sudo执行后面的命令。接下来找到烧录的HQOS u盘,

  1. fdisk -l

  2. Disk /dev/sdd: 28.82 GiB, 30943995904 bytes, 60437492 sectors
  3. Disk model: DataTraveler 3.0
  4. Units: sectors of 1 * 512 = 512 bytes
  5. Sector size (logical/physical): 512 bytes / 512 bytes
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes
  7. Disklabel type: gpt
  8. Disk identifier: 0E0121B2-F340-4E3C-B0C6-DE9FD467B895

  9. Device     Start     End Sectors  Size Type
  10. /dev/sdd1   2048   54047   52000 25.4M Microsoft basic data
  11. /dev/sdd2  55296 4646957 4591662  2.2G Linux filesystem
复制代码


下面就要复制u盘文件到Linux主机了。首先挂在u盘到临时文件夹,之后复制,注意下面的sd*2要改成你的u盘对应的Linux filesystem分区

  1. mkdir -p /tmp/hqplayer
  2. mount /dev/sdd2 /tmp/hqplayer
  3. cp -av /tmp/hqplayer /mnt/hqplayer
复制代码


至此我们就把HQOS的文件复制到/mnt/hqplayer这个目录下了,u盘可以扔掉了。好吧,既然你都操作到这了我就告诉你吧,其实这步也不是必要的,直接挂载u盘就可以继续下一步,我只是太强迫症不能接受运行hqplayer时候机器上还插着一个u盘。



回复

使用道具 举报

来自 5楼
 楼主| 发表于 2022-11-5 15:55 | 只看该作者 来自 北京
4. systemd-nspawn方式

4.1 启动之前最后的工作

到此为止基本上就完工了,我们还需要简单处理一下阻止hqplayer正常启动的一些没用的链接。熟悉Linux的朋友可以删掉更多没用的东西
  1. rm /mnt/hqplayer/etc/resolv.conf
  2. rm /mnt/hqplayer/var/lock
  3. rm /mnt/hqplayer/var/log
  4. rm /mnt/hqplayer/var/tmp
  5. rm /mnt/hqplayer/etc/systemd/system/sockets.target.wants/sshd.socket
复制代码


其中前四个是死链接,影响启动,最后一个会和Linux主机的ssh冲突。

4.2 启动了!

执行

  1. systemd-nspawn -b -D /mnt/hqplayer
复制代码


你会看到

  1. Welcome to HQPlayer OS 4.x 3.4.1 (honister)!

  2. Queued start job for default target Multi-User System.

  3. ……

  4. [  OK  ] Reached target Network.
  5. [  OK  ] Reached target Host and Network Name Lookups.

  6. HQPlayer OS 4.x 3.4.1 hqplayer console

  7. hqplayer login:
复制代码


这时候输入root回车即可,和使用HQOS烧制的u盘启动效果完全相同。却避免了网卡不能启动等兼容问题。是不是很酷。用浏览器打开HQ的web操作界面,需要知道你的ip,我的是:


  1. http://192.168.1.9:8088/config
复制代码


4.3 自动启动

编写一个systemd文件即可让上述HQOS自动启动,编写方式详见我的另外一个帖子【5】。记得把执行命令改为

  1. systemd-nspawn -b -D /mnt/hqplayer
复制代码


4.4 其他可选操作

至此,本文的主要目的已经达成。但追求极致的用户还可以有些可做的事情,比如关闭这台HQOS上的naa,关闭时间同步服务等等,都可以在4.2节登录之后像本机一样操作。比如还可以关闭rngd,resolved等服务。



回复

使用道具 举报

来自 6楼
 楼主| 发表于 2022-11-5 15:55 | 只看该作者 来自 北京
5. chroot方式(可选)

既然都看到这了,相比您一定是高端用户了,我就不详细介绍了。chroot方式更加灵活,也更“干净”。执行如下脚本即可,想了解含义的可以自行搜索,或者回帖讨论。
  1. rm /mnt/hqplayer/etc/resolv.conf
  2. cp --dereference /etc/resolv.conf /mnt/hqplayer/etc/

  3. # mount --bind /home/zhjie/classic /mnt/hqplayer/music

  4. mount --types proc /proc /mnt/hqplayer/proc
  5. mount --rbind /sys /mnt/hqplayer/sys
  6. mount --make-rslave /mnt/hqplayer/sys
  7. mount --rbind /dev /mnt/hqplayer/dev
  8. mount --make-rslave /mnt/hqplayer/dev
  9. mount --bind /run /mnt/hqplayer/run
  10. mount --make-slave /mnt/hqplayer/run

  11. chroot /mnt/hqplayer /bin/bash --login
  12. # chroot /mnt/hqplayer /bin/bash -c "hqplayerd > /tmp/nohup.out 2>&1 &"
复制代码


第三行注释的一句话,是允许hqplayer读取主机音乐。最后两行,分别是登录到hqos,和直接执行hqplayer,请高端读者按需修改。



回复

使用道具 举报

来自 39楼
 楼主| 发表于 2022-11-6 17:31 | 只看该作者 来自 北京
Devastat0r 发表于 2022-11-6 17:27
针对本贴的玩法,麻烦楼主有空的时候弄个关于HQ OS优盘版更新后用新版文件覆盖旧版的教程,应该也就是几行 ...

把新版烧到u盘上,再执行一遍cp -av 即可。或者可以用rsync -av --delete /tmp/hqplayer/ /mnt/hqplayer

回复

使用道具 举报

来自 50楼
 楼主| 发表于 2022-11-6 23:32 | 只看该作者 来自 荷兰
中关村东路 发表于 2022-11-6 16:10
写一个类似的东西,存成/etc/systemd/system/hqplayerd.service

ExecStart那写填sh /opt/hqplayerd. ...

让hqplayer随系统自动启动。
编写如下文件 nano /etc/systemd/system/hqplayerd.service
  1. [Unit]
  2. Description=HQPlayer Embedded daemon
  3. Requires=systemd-networkd.service

  4. [Service]
  5. Type=simple
  6. ExecStart=systemd-nspawn -b -D /mnt/hqplayer
  7. Nice=-10
  8. IOSchedulingClass=realtime
  9. LimitMEMLOCK=1G
  10. LimitNICE=-10
  11. LimitRTPRIO=98

  12. [Install]
  13. WantedBy=multi-user.target
复制代码


修改hqos中hqplayerd的依赖关系
nano /mnt/hqplayer/lib/systemd/system/hqplayerd.service

在Requires和After前面加上#号,
  1. [Unit]
  2. Description=HQPlayer Embedded daemon
  3. #Requires=systemd-networkd.service systemd-networkd-wait-online.service network-online.target sound.target systemd-udev-settle.service
  4. #After=systemd-networkd-wait-online.service network-online.target sound.target systemd-udev-settle.service local-fs.target remote-fs.target

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

  17. [Install]
  18. WantedBy=multi-user.target
复制代码


现在执行 systemctl enable --now hqplayerd 就可以自动启动了。

如果觉得hqos过于臃肿,还可以适当删除hqos里的服务。这些东西都放在 /mnt/hqplayer/etc/systemd/system/ 。我把除了hqplayerd.service之外的全都删掉了,可以正常支持roon
  1. find /mnt/hqplayer/etc/systemd/system
  2. /mnt/hqplayer/etc/systemd/system
  3. /mnt/hqplayer/etc/systemd/system/multi-user.target.wants
  4. /mnt/hqplayer/etc/systemd/system/multi-user.target.wants/hqplayerd.service
复制代码







回复

使用道具 举报

173
 楼主| 发表于 2024-9-16 20:36 | 只看该作者 来自 北京
dianreshi 发表于 2024-9-16 20:13
@中关村东路 群主有自己的qq群吗?

没有
回复

使用道具 举报

172
发表于 2024-9-16 20:13 | 只看该作者 来自 江苏苏州
中关村东路 发表于 2022-11-5 15:51
1. 背景

很多朋友知道,Linux嵌入式版的HQPlayer【1】才是正宗——更少的干扰,更高的效率,无需显示器 ...

@中关村东路 群主有自己的qq群吗?
回复

使用道具 举报

171
发表于 2024-8-23 08:34 | 只看该作者 来自 北京

确实好使,感谢帮助!清空boot、firmware、modules、locale目录,不影响hq启动。

回复

使用道具 举报

170
 楼主| 发表于 2024-8-22 17:24 | 只看该作者 来自 北京
lalekuku 发表于 2024-8-22 16:25
我没说清楚,我是说用chroot跑hq的话,不知道行不行。刚才看hqos目录,在/usr/lib/locale/目录下有个loca ...

试试吧应该行
回复

使用道具 举报

169
发表于 2024-8-22 16:25 | 只看该作者 来自 北京
中关村东路 发表于 2024-8-22 16:20
hqos肯定跑不起来啊...

我没说清楚,我是说用chroot跑hq的话,不知道行不行。刚才看hqos目录,在/usr/lib/locale/目录下有个locale-archive文件,有220多兆,在使用chroot运行hq时这个文件可以干掉吗?
回复

使用道具 举报

168
 楼主| 发表于 2024-8-22 16:20 | 只看该作者 来自 北京
lalekuku 发表于 2024-8-22 16:12
回去试试把hqos精简到只剩这3个,看看能不能起来

其实还有很多没用的库文件也可以干掉,就是 ...

hqos肯定跑不起来啊...
回复

使用道具 举报

167
发表于 2024-8-22 16:12 | 只看该作者 来自 北京
中关村东路 发表于 2024-8-22 16:09
这就要看发行版了,我自己电脑上只有/usr /etc /var这三个目录

回去试试把hqos精简到只剩这3个,看看能不能起来

其实还有很多没用的库文件也可以干掉,就是不知道是哪些
回复

使用道具 举报

166
 楼主| 发表于 2024-8-22 16:09 | 只看该作者 来自 北京
lalekuku 发表于 2024-8-22 15:56
那就妥了,回去搞一搞,又是个新思路。
还有哪些目录或文件是使用chroot时可以干掉的?
...

这就要看发行版了,我自己电脑上只有/usr /etc /var这三个目录
回复

使用道具 举报

165
发表于 2024-8-22 15:56 | 只看该作者 来自 北京
中关村东路 发表于 2024-8-22 15:10
你说的三个目录都不起作用。chroot适用于几乎所有系统,只要是指令集兼容的就可以


那就妥了,回去搞一搞,又是个新思路。
还有哪些目录或文件是使用chroot时可以干掉的?
回复

使用道具 举报

164
 楼主| 发表于 2024-8-22 15:10 | 只看该作者 来自 北京
lalekuku 发表于 2024-8-22 08:38
大佬上午好,我又来请教了。
(1)上面提到还需要简单处理一下阻止hqplayer正常启动的一些没用的链接,甚 ...

你说的三个目录都不起作用。chroot适用于几乎所有系统,只要是指令集兼容的就可以
回复

使用道具 举报

163
发表于 2024-8-22 08:38 | 只看该作者 来自 北京
本帖最后由 lalekuku 于 2024-8-22 09:16 编辑

大佬上午好,我又来请教了。
(1)上面提到还需要简单处理一下阻止hqplayer正常启动的一些没用的链接,甚至还可以删掉更多没用的东西。
我想知道的是,如果用chroot方式启动hqos的话,hqos里自带的boot、firmware、modules目录是否还起作用?或者说,还可以删掉哪些目录或文件而不影响hqos用chroot启动?
(2)下面两条语句:
  • chroot /mnt/hqplayer /bin/bash --login
  • # chroot /mnt/hqplayer /bin/bash -c "hqplayerd > /tmp/nohup.out 2>&1 &"
如果不想登录,只想直接执行hqplayer,第一条登录语句就可以不要了吧?只需执行第二条即可?那么此时hqos里自带的boot、firmware、modules目录应该都没啥用了吧?
(3)用主贴同样的思路,是不是也可以在正常运行的hqos里用chroot加载其它音频系统呢?




回复

使用道具 举报

162
 楼主| 发表于 2024-4-22 00:29 | 只看该作者 来自 北京
ppaladin 发表于 2024-4-21 20:31
利用周末时间折腾了许久,终于搞定了,感谢大佬的回复和指点。

基本实现以前的想法,img写入U盘,插电 ...

您这够折腾的...别说出差,我年假都只用苹果蓝牙...总之恭喜
回复

使用道具 举报

161
发表于 2024-4-21 20:31 | 只看该作者 来自 中国
本帖最后由 ppaladin 于 2024-4-21 20:35 编辑
中关村东路 发表于 2024-4-17 15:01
windows做naa不需要再开桌面版hq了,这时候用的是嵌入式hq计算,桌面naa播放

利用周末时间折腾了许久,终于搞定了,感谢大佬的回复和指点。

基本实现以前的想法,img写入U盘,插电脑U盘启动后,播放U盘本地音乐。

遇到的几个问题:
1. win10下vm虚拟机里从U盘启动,可进入HQOS的web设置页面。
但是alsa下面无声卡选项,也就无法播放。这个应该是虚拟机的锅。
#解决办法:不用虚拟机,直接插电脑,U盘启动。

2. 直接从U盘物理启动HQOS,无法登录web设置页面。
(华为笔记本,没有网口,这个最头疼,这几天主要卡在这了)
#解决办法:usb连接手机,开启网络共享,从手机进入web设置页面。

3. OS的alsa声音输出格式最多48khz24bit。
#这个没办法了,应该是linux环境下笔记本的声卡不支持更高格式(win系统可以192-24)。
反倒是一台老掉牙的dell台式机,插U盘启动,可以输出192-24。

总之,之前的想法算是达成了,以后出差时多了一个听音乐的选择。




回复

使用道具 举报

160
发表于 2024-4-17 23:12 来自手机 | 只看该作者 来自 意大利
订一下
回复

使用道具 举报

159
 楼主| 发表于 2024-4-17 15:01 | 只看该作者 来自 北京
ppaladin 发表于 2024-4-17 13:58
我的理解是,既然都做成了os了,就应该写入U盘,变成微型随身系统。走到哪,插电脑,就可以调用当前系统 ...

windows做naa不需要再开桌面版hq了,这时候用的是嵌入式hq计算,桌面naa播放
回复

使用道具 举报

158
发表于 2024-4-17 13:58 | 只看该作者 来自 中国
中关村东路 发表于 2024-4-17 12:45
桥核分离才是原设计的方案啊,本地播放就是workaround而已

我的理解是,既然都做成了os了,就应该写入U盘,变成微型随身系统。走到哪,插电脑,就可以调用当前系统硬件和资源,实现即使播放。
可能是我想偏了。。。



话说,方案2也不行。
主机(win10)装naa,打开hq_desktop并设置input为naa。
虚拟机里U盘启动,从主机进入hq的web设置页面后,networkaudio一项是空白不可选(跟之前的alsa一样)。
直接选中曲目,点播放,就卡死。

技术门槛太高,不折腾了,放弃~
回复

使用道具 举报

157
 楼主| 发表于 2024-4-17 12:45 | 只看该作者 来自 北京
ppaladin 发表于 2024-4-17 08:41
收到,我再试试,多谢指点!
这样一来,os版只能桥连,不能实现本地播放,总感觉 ...

桥核分离才是原设计的方案啊,本地播放就是workaround而已
回复

使用道具 举报

156
发表于 2024-4-17 08:41 | 只看该作者 来自 中国
中关村东路 发表于 2024-4-17 02:52
用方案2吧,虚拟机里启动hqplayer之后不用本机alsa,在你要播放音乐的那台机器上装个naa

收到,我再试试,多谢指点!
这样一来,os版只能桥连,不能实现本地播放,总感觉在功能上差那么点意思。。。
回复

使用道具 举报

155
 楼主| 发表于 2024-4-17 02:52 | 只看该作者 来自 北京
ppaladin 发表于 2024-4-16 19:12
尝试了2种方法,结果都遇到麻烦了,求大神指点!

尝试1.

用方案2吧,虚拟机里启动hqplayer之后不用本机alsa,在你要播放音乐的那台机器上装个naa


回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-28 12:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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