You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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相关配置文件即可。

构建流程说明

  1. OBS运行tar_scm拉取代码并提取Debian配置文件
  2. 运行cargo_vendor生成vendor.tar.zst
  3. 构建Debian包时,先解压vendor.tar.zst到源码目录
  4. 通过.cargo/config.toml指定Cargo使用本地vendor依赖,避免联网拉取
  5. 执行cargo build完成离线构建

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 13:37:03