hqplayer和roon二合一 第1步:安装并配置宿主机(Debian) 1.安装Debian:从Debian官网下载网络安装镜像,进行最小化安装。在软件选择时,只勾选“SSH server”和“Standard system utilities”。
2.更新系统:
1 sudo apt update && sudo apt upgrade -y
3.安装必要工具:
1 sudo apt install -y p7zip-full squashfs-tools system d-container
p7zip-full用于解压7z文件,systemd-container提供了更现代的容器化管理工具(但我们仍会使用传统chroot)
第2步:准备HQPlayer OS的chroot环境 1.创建工作目录:
1 sudo mkdir -p /opt/ hqplayer-chroot
2.解压HQPlayer Embedded:
1 sudo 7 z x hqplayer-embedded-5 .8 .1 -x64sse42.7 z -o/opt/hqplayer-chroot
这会在/opt/hqplayer-chroot下得到hqplayer-embedded-5.8.1/文件夹,里面包含bin, lib, usr等目录。这就是我们chroot的基础。 我们需要把它挂载到一个临时目录,然后复制其中的所有文件。
1 2 sudo mkdir -p /mnt/ hqplayer-image
3.挂载镜像中的分区 您需要先找到镜像中的分区偏移量,然后挂载正确的分区。 第1步:查看镜像的分区信息
1 sudo fdisk -l hqplayer-embedded-5 .8 .1 -x64sse42.img
fdisk 输出显示镜像中有两个分区: 分区1:Start=2048, Size=27.8M, Type=”Microsoft basic data” (这很可能是EFI系统分区) 分区2:Start=59392, Size=3G, Type=”Linux filesystem” (这是我们要的根文件系统分区) 挂载分区(分区2)
1 2 3 4 5 OFFSET =$((59392 * 512 ))sudo mount -o loop,offset=$OFFSET hqplayer-embedded-5 .8 .1 -x64sse42.img /mnt/hqplayer-image
复制文件到chroot目录
1 2 3 4 5 6 7 8 ls -la /mnt/ hqplayer-image/ sudo cp -a /mnt/ hqplayer-image/* / opt/hqplayer-chroot/ sudo umount /mnt/ hqplayer-image
4.创建必要的系统目录:
1 2 sudo mkdir -p /opt/ hqplayer-chroot/{proc,sys,dev,run,var/ lib,etc,tmp} sudo chmod 1777 /opt/ hqplayer-chroot/tmp
5.复制DNS解析配置:
1 sudo cp /etc/ resolv.conf /opt/ hqplayer-chroot/etc/
6.让 chroot 环境访问主机音频设备 首先识别音频设备
1 2 3 4 5 6 7 8 aplay -l cat /proc /asound/cards # 查看 USB 音频设备详情 lsusb | grep -i audio
可以看到您的音频设备配置:
card 0: AB13X USB Audio (USB DAC) - 这是您的外部USB音频设备
card 1: Ensoniq AudioPCI - 这是主板内置声卡
现在让我们确保chroot环境中的HQPlayer能够访问这些设备。
配置chroot环境访问USB DAC, 修改启动脚本确保正确映射
第3步:配置chroot环境 我们需要一个脚本来自动挂载必要的文件系统并进入chroot。
创建挂载和进入chroot的脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 sudo nano /usr/local/bin/start-hqplayer-chroot.sh HQPLAYER_ROOT="/opt/hqplayer-chroot" mount --bind /proc "$HQPLAYER_ROOT /proc" mount --bind /sys "$HQPLAYER_ROOT /sys" mount --bind /dev "$HQPLAYER_ROOT /dev" mount --bind /dev/pts "$HQPLAYER_ROOT /dev/pts" mount --bind /dev/snd "$HQPLAYER_ROOT /dev/snd" mount --bind /run "$HQPLAYER_ROOT /run" mount --bind /dev/bus/usb "$HQPLAYER_ROOT /dev/bus/usb" 2>/dev/null || true cp /etc/resolv.conf "$HQPLAYER_ROOT /etc/resolv.conf" exec chroot "$HQPLAYER_ROOT " /usr/bin/hqplayerd
停止脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 sudo nano /usr/ local/bin/ stop-hqplayer-chroot.sh #!/bin/ bash HQPLAYER_ROOT="/opt/hqplayer-chroot" # 杀死所有hqplayerd进程 pkill -9 -f "hqplayerd" 2 >/dev/ null # 卸载文件系统(确保正确的顺序) umount -f "$HQPLAYER_ROOT/dev/bus/usb" 2 >/dev/ null umount -f "$HQPLAYER_ROOT/dev/snd" 2 >/dev/ null umount -f "$HQPLAYER_ROOT/dev/pts" 2 >/dev/ null umount -f "$HQPLAYER_ROOT/dev" 2 >/dev/ null umount -f "$HQPLAYER_ROOT/sys" 2 >/dev/ null umount -f "$HQPLAYER_ROOT/proc" 2 >/dev/ null umount -f "$HQPLAYER_ROOT/run" 2 >/dev/ null sleep 2
设置正确的权限
1 2 3 4 sudo chmod +x /usr/ local/bin/ start-hqplayer-chroot.sh sudo chmod +x /usr/ local/bin/ stop-hqplayer-chroot.sh sudo systemctl daemon-reload
重新加载并测试服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo systemctl daemon-reload sudo /usr/ local/bin/ start-hqplayer-chroot.sh ps aux | grep hqplayerd sudo ss -tlnp | grep :8088 sudo /usr/ local/bin/ stop-hqplayer-chroot.sh
系统使用的是 cgroup2(统一层次结构),而不是传统的cgroup1。这可能是导致服务启动失败的原因,因为一些旧的应用或脚本可能不完全兼容cgroup2。 第1步:检查系统是否支持cgroup1
1 2 3 4 5 cat /proc/ filesystems | grep cgroup cat /proc/ cmdline
修改systemd服务文件以兼容cgroup2 1 sudo nano /etc/ systemd/system/ hqplayer-chroot.service
使用以下配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [Unit] Description =HQPlayer Embedded Daemon in ChrootAfter =network.targetRequires =network.target[Service] Type =simpleExecStart =/usr/local/bin/start-hqplayer-chroot.shExecStop =/usr/local/bin/stop-hqplayer-chroot.shRestart =on -failureRestartSec =5 TimeoutStartSec =300 TimeoutStopSec =30 Delegate =no CPUAccounting =no MemoryAccounting =no IOAccounting =no TasksAccounting =no IPAccounting =no BlockIOAccounting =no [Install] WantedBy =multi-user.target
启动服务并检查 1 2 sudo system ctl start hqplayer-chroot.service system ctl status hqplayer-chroot.service
dns或者删除符号链接并创建实际文件
1 2 3 4 5 6 7 8 sudo rm /opt/ hqplayer-chroot/etc/ resolv.conf sudo cp /etc/ resolv.conf /opt/ hqplayer-chroot/etc/ resolv.conf ls -la /opt/ hqplayer-chroot/etc/ resolv.conf
第4步:执行精简 首先查看当前大小
1 sudo du -sh /opt/hqplayer-chroot/ --exclude =proc --exclude =sys --exclude =dev --exclude =run
删除最大的文件(镜像文件)
1 2 3 4 5 6 sudo rm /opt/hqplayer-chroot/hqplayer-embedded-5 .8 .1 -x64sse42.imgsudo rm /opt/hqplayer-chroot/hqplayer-embedded-5 .8 .1 -x64sse42.7 zsudo rm -rf /opt/hqplayer-chroot-backup 2 >/dev/null || true
删除firmware文件
1 2 sudo rm -rf /opt/ hqplayer-chroot/lib/ firmware
查看精简效果
1 2 3 4 5 6 7 8 sudo du -sh /opt/hqplayer-chroot/ --exclude=proc --exclude=sys --exclude=dev --exclude=run sudo du -sh /opt/hqplayer-chroot/ * --exclude=proc --exclude=sys --exclude=dev --exclude=run | sort -hr sudo du -sh /opt/hqplayer-chroot/usr/ *
验证功能正常
1 2 3 4 5 6 7 8 9 10 11 sudo systemctl restart hqplayer-chroot.service systemctl status hqplayer-chroot.service sudo chroot /opt/ hqplayer-chroot aplay -l sudo chroot /opt/ hqplayer-chroot /bin/ bash -c "ping -c 2 8.8.8.8"