找回密码
 -注册-
查看: 33012|回复: 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
复制代码







回复

使用道具 举报

7
 楼主| 发表于 2022-11-5 15:55 | 只看该作者 来自 北京
6. 小结

Linux嵌入式版的HQPlayer是最极致的PC升频方式之一,有着更少的干扰,更高的效率,无需显示器键盘鼠标而带来更纯粹的使用体验。本帖则介绍了一种无需独立主机,无需自行处理安装依赖,不需忍受虚拟机和Docker带来的性能损失的Linux嵌入式版HQPlayer安装方法。普通玩家可以方便的体验HQ升频,高端玩家可在此基础上定制自己的系统和内核。如果对你有所帮助,希望能回帖表示支持。有所疑问也请在本帖下回帖,尽量不要站内信或者在qq咨询,这样可以让有相同问题的同学看到。

回复

使用道具 举报

8
 楼主| 发表于 2022-11-5 15:56 | 只看该作者 来自 北京
有三个帖子还在审核
回复

使用道具 举报

9
 楼主| 发表于 2022-11-5 16:41 | 只看该作者 来自 北京
打完收工
回复

使用道具 举报

10
发表于 2022-11-5 21:13 来自手机 | 只看该作者 来自 安徽
大佬高产
回复

使用道具 举报

11
发表于 2022-11-5 21:47 | 只看该作者 来自 湖南长沙
学习了,回去试试,谢谢。
回复

使用道具 举报

12
 楼主| 发表于 2022-11-5 23:07 | 只看该作者 来自 北京
回复

使用道具 举报

13
 楼主| 发表于 2022-11-5 23:08 | 只看该作者 来自 北京
happylo 发表于 2022-11-5 21:47
学习了,回去试试,谢谢。

能用上最好
回复

使用道具 举报

14
发表于 2022-11-6 05:16 来自手机 | 只看该作者 来自 福建漳州
我找了个固态硬盘,装入移动硬盘盒,接到win10下直接烧录hqos,然后拆出来,装回到电脑里,启动时,启动时用快捷键选择从哪个硬盘启动就好了
回复

使用道具 举报

15
发表于 2022-11-6 06:38 来自手机 | 只看该作者 来自 山东烟台
请问按此方式安装hq之后,如何实现开机软件自动运行
回复

使用道具 举报

16
发表于 2022-11-6 07:29 来自手机 | 只看该作者 来自 黑龙江牡丹江
删路径那个步骤,如果担心出问题的话,可以对路径的最后一层改名,出现错误之后改回。
回复

使用道具 举报

17
发表于 2022-11-6 08:43 | 只看该作者 来自 浙江宁波
大佬,你的基础linux用的是什么版本?对于我这种不懂linux下精细分配CPU资源负载的用户来说,Ubuntu、Debian或者极度精简的dietpi哪个更合适这么玩?
回复

使用道具 举报

18
 楼主| 发表于 2022-11-6 10:44 来自手机 | 只看该作者 来自 北京
Devastat0r 发表于 2022-11-6 08:43
大佬,你的基础linux用的是什么版本?对于我这种不懂linux下精细分配CPU资源负载的用户来说,Ubuntu、Debia ...

Arch或者dietpi
回复

使用道具 举报

19
 楼主| 发表于 2022-11-6 10:45 来自手机 | 只看该作者 来自 北京
zdlkxlzy 发表于 2022-11-6 06:38
请问按此方式安装hq之后,如何实现开机软件自动运行

文中列了参考链接
回复

使用道具 举报

20
 楼主| 发表于 2022-11-6 10:45 来自手机 | 只看该作者 来自 北京
ppmm308 发表于 2022-11-6 05:16
我找了个固态硬盘,装入移动硬盘盒,接到win10下直接烧录hqos,然后拆出来,装回到电脑里,启动时,启动时 ...

您这……也忒麻烦了
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 08:17

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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