Open Build Service:Debian构建时如何引入vendored依赖作为额外源
OBS Rust项目Debian包配置:实现Cargo Vendor依赖打包
问题背景
已完成RPM包配置,通过OBS的cargo_vendor服务生成vendor.tar.zst作为额外源,在.spec文件中引入并构建时解压。但不清楚Debian环境下如何实现相同的依赖离线构建。
当前现有配置
_service 文件
<services> <service name="tar_scm" mode="manual"> <param name="revision">main</param> <param name="url">https://github.com/TheAlexDev23/power-options.git</param> <param name="scm">git</param> <param name="extract">dist/obs/power-options-daemon.dsc</param> <param name="extract">dist/obs/power-options-daemon.spec</param> <param name="extract">dist/obs/debian.changelog</param> <param name="extract">dist/obs/debian.compat</param> <param name="extract">dist/obs/debian.control</param> <param name="extract">dist/obs/debian.postinst</param> <param name="extract">dist/obs/debian.postrm</param> <param name="extract">dist/obs/debian.rules</param> </service> <service name="recompress" mode="manual"> <param name="compression">gz</param> <param name="file">*.tar</param> </service> <service name="cargo_vendor" mode="manual"> <!-- <param name="src">power-options-1.1.0.tar.zst</param> --> <param name="src">power-options</param> <param name="update">true</param> </service> <service name="set_version" mode="manual"/> </services>
RPM .spec 文件源引用
Source0: power-options-%{version}.tar.gz Source1: vendor.tar.zst
RPM构建解压命令
tar -xf %{_sourcedir}/vendor.tar.zst --directory .
Debian .dsc 文件
Format: 1.0 Source: power-options-daemon Version: 1728215162.64c0a52 Binary: build Maintainer: Alexander Karpukhin <thealexdev23@gmail.com> Architecture: all Standards-Version: 3.7.2 Build-Depends: debhelper (>= 4), cargo
debian.control 文件
Source: power-options-daemon Section: admin Priority: optional Maintainer: Alexander Karpukhin <thealexdev23@gmail.com> Build-Depends: debhelper (>= 5), cargo Standards-Version: 3.7.2 Homepage: https://github.com/thealexdev23/power-options Package: power-options-daemon Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends}, acpid, pciutils, usbutils, yad Recommends: brightnessctl, net-tools, xorg-xrandr, xorg-xset, xautolock Description: The core daemon for Power Options, a blazingly fast power management solution.
Debian环境实现步骤
1. 修改.dsc文件,添加vendor源
在现有.dsc文件中补充Files和Checksums-Sha256段,将vendor.tar.zst声明为额外源:
Format: 1.0 Source: power-options-daemon Version: 1728215162.64c0a52 Binary: build Maintainer: Alexander Karpukhin <thealexdev23@gmail.com> Architecture: all Standards-Version: 3.7.2 Build-Depends: debhelper (>= 5), cargo, zstd Files: 00000000000000000000000000000000 0 power-options-daemon_1728215162.64c0a52.dsc [替换为实际sha256值] [文件大小] power-options-[version].tar.gz [替换为实际sha256值] [文件大小] vendor.tar.zst Checksums-Sha256: [替换为实际sha256值] power-options-[version].tar.gz [替换为实际sha256值] vendor.tar.zst
注:OBS运行服务后会自动更新校验值和文件大小,也可手动计算后填入。
2. 修改debian/rules,添加解压和Cargo配置
在debian/rules中添加构建前步骤,解压vendor包并配置Cargo使用本地依赖:
#!/usr/bin/make -f %: dh $@ override_dh_auto_build: # 解压vendor包到当前目录 tar -xf ../vendor.tar.zst --directory . # 生成Cargo配置,指定vendor源 echo '[source.crates-io]' > .cargo/config.toml echo 'replace-with = "vendored-sources"' >> .cargo/config.toml echo '[source.vendored-sources]' >> .cargo/config.toml echo 'directory = "vendor"' >> .cargo/config.toml # 执行Cargo构建 cargo build --release --locked
3. 补充构建依赖zstd
在debian.control和.dsc的Build-Depends中添加zstd,确保能解压zst格式的包:
debian.control修改后:Build-Depends: debhelper (>= 5), cargo, zstd.dsc修改后:Build-Depends: debhelper (>= 5), cargo, zstd
4. 验证OBS服务配置
现有_service文件中的cargo_vendor服务已能生成vendor.tar.zst,无需修改。确保tar_scm服务正确提取Debian相关配置文件即可。
构建流程说明
- OBS运行
tar_scm拉取代码并提取Debian配置文件 - 运行
cargo_vendor生成vendor.tar.zst - 构建Debian包时,先解压
vendor.tar.zst到源码目录 - 通过
.cargo/config.toml指定Cargo使用本地vendor依赖,避免联网拉取 - 执行
cargo build完成离线构建
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

