第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 systemd-container 
p7zip-full用于解压7z文件,systemd-container提供了更现代的容器化管理工具(但我们仍会使用传统chroot)
第2步:准备HQPlayer OS的chroot环境 1.创建工作目录:
1 sudo mkdir -p /opt/hqplayer-chroot 
2.解压HQPlayer Embedded:
1 sudo 7z x hqplayer-embedded-5.8 .1 -x64sse42.7z -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” (这是我们要的根文件系统分区)
1 2 3 4 5 # 计算分区2 的偏移量 (59392  sectors * 512  bytes/sector) OFFSET =$((59392  * 512 ))# 挂载分区2 到挂载点 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/ # 复制所有文件到chroot目录(保留权限和属性) sudo cp -a /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 sudo nano /usr/local/bin/start-hqplayer-chroot.sh  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/bin/ bash 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"  # 确保USB 设备可访问(重要!) mount --bind /dev/bus/usb "$HQPLAYER_ROOT/dev/bus/usb"  2 >/dev/ null  || true  # 确保使用最新的DNS 配置 cp /etc/resolv.conf  "$HQPLAYER_ROOT/etc/resolv.conf"  # 运行HQPlayer  exec chroot "$HQPLAYER_ROOT"  /usr/bin/hqplayerd 
停止脚本 1 sudo nano /usr/local/bin/stop-hqplayer-chroot.sh  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/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 # 重新加载systemd配置 sudo systemctl daemon-reload # 手动测试启动脚本 sudo /usr/local/bin/start-hqplayer-chroot.sh  # 检查hqplayerd是否运行 ps aux | grep hqplayerd # 检查端口监听 sudo ss -tlnp | grep :8088  # 如果运行正常,停止它 sudo /usr/local/bin/stop-hqplayer-chroot.sh  
系统使用的是 cgroup2(统一层次结构),而不是传统的cgroup1。这可能是导致服务启动失败的原因,因为一些旧的应用或脚本可能不完全兼容cgroup2。
1 2 3 4 5 # 检查是否启用了cgroup1兼容性 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  Chroot After =network.target Requires =network.target [Service ] Type =simpleExecStart =/usr/ local/bin/start-hqplayer-chroot.sh ExecStop =/usr/ local/bin/stop-hqplayer-chroot.sh Restart =on-failureRestartSec =5 TimeoutStartSec =300 TimeoutStopSec =30 # 关键配置:禁用所有cgroup相关功能 Delegate =noCPUAccounting =noMemoryAccounting =noIOAccounting =noTasksAccounting =noIPAccounting =noBlockIOAccounting =no# 避免cgroup2相关问题 #Slice = #ControlGroup = [Install ] WantedBy =multi-user.target 
启动服务并检查 1 2 sudo systemctl start hqplayer-chroot.service  systemctl status hqplayer-chroot.service  
dns或者删除符号链接并创建实际文件
1 2 3 4 5 6 7 8 # 删除符号链接 sudo rm /opt/hqplayer-chroot/etc/resolv.conf  # 创建实际的 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.img  sudo rm /opt/hqplayer-chroot/hqplayer-embedded-5.8 .1 -x64sse42.7z # 删除备份文件(如果有) sudo rm -rf /opt/hqplayer-chroot-backup 2 >/dev/ null  || true  
删除firmware文件
1 2 # 删除firmware(通常不需要) 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 
验证功能正常
1 2 3 4 5 6 7 8 9 10 11 # 重启HQPlayer 服务测试 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"