如何在不安装软件包的情况下安装deb依赖项?

时间:2017-12-20 19:12:58

标签: dependencies debian packaging dpkg

我有一个带有debian/control文件的Debianized项目。我知道如何使用mk-build-deps包中的devscripts脚本来安装此项目的构建依赖项;即紧随Build-Depends:之后的包裹。

我需要的是一种与运行时依赖关系类似的方法;即,紧跟Depends:键之后的包。基本上我除了mk-run-deps之外还需要mk-build-deps

这是我一起攻击的东西,可以正常工作:

export TMP_DEBIAN_CONTROL=$(mktemp)
dpkg-gencontrol \
    -O${TMP_DEBIAN_CONTROL} \
    -P$(mktemp -d) \
    -c"$(pwd)/debian/control" \
    -f$(mktemp) \
    -p'project-name'
sed -ri 's|^Package: |Source: |;s|^Depends: |Build-Depends: |' \
    ${TMP_DEBIAN_CONTROL}
mk-build-deps -irt'apt-get -y' ${TMP_DEBIAN_CONTROL}

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

简短的回答是,除了实际构建二进制包并从 .debs 中提取它们之外,没有适当和通用的方法来获取依赖项。

这是因为在构建时会通过辅助工具甚至 debian/rules 通过 substvars 生成依赖项,这可能取决于动态检查,例如操作系统供应商、架构等。

如果您控制源包并知道什么是假设,那么您提供的代码段可能会起作用,但如果您正在使用它,它可能仍会错过由 debhelper 注入的依赖项。

我想真正的问题是你为什么需要这个?出于测试目的,您最好使用 autopkgtests,它能够通过引用源包构建依赖项或正在测试的特定二进制包的运行时依赖项来声明依赖项。如果在构建过程中需要这样做,则应在源包 build-dependencies 中列出这些内容。

对于运行时依赖项,您可能还缺少 Pre-Depends,尽管这些并不常见。对于构建依赖项,您可以使用 apt build-dep .,但这会导致无法通过元包跟踪这些依赖项,然后可以删除该元包以删除所有不需要的依赖项。

答案 1 :(得分:1)

运行时依赖项:请使用可执行文件和库运行 $ dpkg-shlibdeps -t <executable> 以获取“Depends=”列表。

“dpkg-shlibdeps -t”所需的设置:

dpkg-shlibdeps-test/     ## random example folder
    ├── debian/
    │   ├── control         ## empty text file
    │   └── substvars       ## text file: created by $ command
    └── gcc-11              ## example executable

依赖项被写入文件 substvars。此示例 gcc 写道:shlibs:Depends=libc6 (>= 2.31)

您可以将其添加到 package.deb 的 control 中:Depends: libc6 (>= 2.31)


关于 debhelper:dh_makeshlibs 是一个 debhelper 程序,它会自动扫描共享库,并为找到的库生成 shlibs 文件。 man dh_makeshlibs https://manpages.debian.org/testing/debhelper/dh_makeshlibs.1.en.html 参考。谷歌,debhelper 如何做 shlibs