Add install rules and CPack settings so cpack produces an installable .deb. Dependencies are derived with dpkg-shlibdeps, so they follow the binaries. The sherpa-onnx runtime the streaming backend needs is bundled because no distro package provides it. The fetch-models script now also locates its registry when installed system-wide. 增加 CPack 配置,可直接用 cpack 打出 deb:安装规则含桌面入口、应用图标、 模型注册表与下载脚本、用户文档;依赖由 dpkg-shlibdeps 自动推导;流式后端 需要的 sherpa-onnx 运行时(发行版无对应包)随包携带;fetch-models 脚本 装到系统后也能找到注册表。
6.2 KiB
打包(CPack → .deb)
用 CMake 的 CPack 生成 .deb,配置在 cmake/Packaging.cmake。
三条命令
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
(cd build && cpack) # 默认生成器就是 DEB,等价于 cpack -G DEB
产物:build/live-caption_<版本>-<修订>_<架构>.deb,例如 live-caption_0.1.0-1_amd64.deb(约 11MB)。
dpkg -c build/live-caption_0.1.0-1_amd64.deb # 看文件清单
dpkg -I build/live-caption_0.1.0-1_amd64.deb # 看控制信息与依赖
sudo apt install ./build/live-caption_0.1.0-1_amd64.deb
sudo apt remove live-caption # 卸载(模型文件与用户设置不会被删)
用
apt install ./xxx.deb而不是dpkg -i:apt 会把上面自动推导出来的依赖一起装好。
包内容
| 路径 | 说明 |
|---|---|
/usr/bin/live-caption |
图形界面(悬浮窗 + 托盘 + 设置) |
/usr/bin/live-caption-cli |
命令行版(单文件/流式文件/无窗口实时) |
/usr/bin/live-caption-fetch-models |
命令行下载模型(scripts/fetch-models.sh 装的) |
/usr/lib/live-caption/ |
包私有共享库:libsherpa-onnx-c-api.so、libonnxruntime.so |
/usr/share/applications/live-caption.desktop |
应用菜单入口 |
/usr/share/icons/hicolor/scalable/apps/live-caption.svg |
图标 |
/usr/share/live-caption/models.json |
模型注册表(给上面的下载脚本用;程序自己也内嵌了一份) |
/usr/share/doc/live-caption/ |
README 与用户文档 |
模型不随包分发(注册表里有 4 个、合计约 2.4GB)。首次启动时在设置界面里按需下载, 也可以装完之后跑:
live-caption-fetch-models # 列出模型与安装状态
live-caption-fetch-models --all # 全部下载
依赖是怎么确定的
CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON —— 用 dpkg-shlibdeps 直接扫二进制,推导出:
Depends: libc6 (>= 2.34), libgcc-s1 (>= 4.0), libllama0 (>= 9951+dfsg), libpulse0 (>= 0.99.1),
libqt6core6 (>= 6.8.0), libqt6gui6 (>= 6.1.2), libqt6network6 (>= 6.1.2),
libqt6widgets6 (>= 6.3.0), libsamplerate0 (>= 0.1.7), libstdc++6 (>= 11)
这比手写列表可靠(跟着二进制走,不会漏)。libllama0 同时提供 libllama、libmtmd
和 libllama-common,所以一个依赖就够。
包内自带的 sherpa 库是私有库:dpkg-shlibdeps 通过二进制的 RPATH 找到它们、
识别为同包文件,因此不会产生外部依赖。
需要手动补依赖时:
cmake -S . -B build -DLC_DEB_EXTRA_DEPENDS="foo (>= 1.2), bar"
为什么打包带上 sherpa-onnx
流式 ONNX 后端(zipformer / X-ASR / Nemotron)依赖 libsherpa-onnx-c-api.so 与
libonnxruntime.so。官方只发预编译 tar 包,发行版里没有对应包可依赖,所以默认随包携带
(约 32MB 未压缩,deb 里压到约 10MB)。
关掉它(包变小,但安装后的机器上流式后端起不来):
cmake -S . -B build -DLC_BUNDLE_SHERPA=OFF # 包约 0.5MB,只剩 llama 后端可用
许可:sherpa-onnx 是 Apache-2.0,ONNX Runtime 是 MIT,都可以再分发;官方 tar 包里没带 LICENSE 文件,自己分发时建议一并附上。
RPATH:两个必须写进二进制的路径
安装后的二进制带这样的 RUNPATH:
$ORIGIN/../lib/live-caption:/usr/lib/x86_64-linux-gnu/llama
两条都有原因:
$ORIGIN/../lib/live-caption—— 找包内自带的 sherpa 库。用$ORIGIN相对路径, 包装到哪个前缀都能用,也不需要ldconfig。/usr/lib/x86_64-linux-gnu/llama——libllama.so.0/libmtmd.so.0在发行版里放在 子目录llama/里,而该目录不在 ld 的默认搜索路径(ldconfig -p里看不到它们), 也没有/etc/ld.so.conf.d条目。所以只能靠 RPATH,否则装完直接起不来。
可调选项
| 选项 | 默认 | 说明 |
|---|---|---|
LC_INSTALL |
ON |
生成安装与打包规则 |
LC_BUNDLE_SHERPA |
ON |
把 sherpa-onnx 运行时打进包 |
LC_PACKAGE_STRIP |
OFF |
打包时 strip 二进制。发布建议打开;要用 coredump 调符号就保持关闭 |
LC_DEB_MAINTAINER |
占位值 | Debian Maintainer 字段,发布前改成真人 |
LC_DEB_HOMEPAGE |
空 | Debian Homepage 字段;留空则不写这一行 |
LC_DEB_EXTRA_DEPENDS |
空 | 覆盖/追加 Depends |
LC_BUILD_TESTS |
ON |
打包时用 -DLC_BUILD_TESTS=OFF 可以少编测试 |
例:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
-DLC_BUILD_TESTS=OFF -DLC_PACKAGE_STRIP=ON \
-DLC_DEB_MAINTAINER="你的名字 <you@example.com>" \
-DLC_DEB_HOMEPAGE="https://example.com/live-caption"
(cd build && cpack)
版本号与修订号
版本来自顶层 CMakeLists.txt 的 project(live-caption VERSION x.y.z),
Debian 修订号是 LC_.../CPACK_DEBIAN_PACKAGE_RELEASE(当前 1),
所以包名形如 live-caption_0.1.0-1_amd64.deb。升级时改 project(... VERSION)。
排错
找不到 libmtmd:需要libllama0(提供libmtmd.so.0),与开发时同一个包。- 装完之后
live-caption报找不到libllama.so.0:说明 RPATH 丢了。用readelf -d /usr/bin/live-caption | grep RUNPATH确认里面有/usr/lib/x86_64-linux-gnu/llama。 - 流式模型报加载失败:确认
/usr/lib/live-caption/下有那两个.so(即打包时LC_BUNDLE_SHERPA没关掉)。 - 菜单里没有图标/条目:
sudo update-desktop-database /usr/share/applications、sudo gtk-update-icon-cache -f /usr/share/icons/hicolor(postinst里已经会自动做, 但某些桌面环境需要重新登录)。
与 Debian 原生打包的关系
这是 CPack 生成的二进制包,不是用 debian/ + dh 源码构建的 Debian 官方包。
差异:没有源码包(.dsc/.orig.tar.gz)、没有 debian/changelog、没有 split 调试包
(-dbg)、也没走 dh_* 的一整套规范化。
要往发行版仓库里送包的话,需要另配 debian/ 目录;本地分发和内部部署用现在这套就够。