我需要构建一个依赖于第三方库的特定版本的项目:
➜ cat debian/control
Source: libhole-cpp
Priority: optional
Maintainer: Vitaly Isaev <[email protected]>
Build-Depends: debhelper (>= 9), cmake,
flatbuffers (= 1.2.0-1),
libboost-dev,
libboost-system-dev,
catch
Standards-Version: 3.9.5
但是,我们的存储库中有几个flatbuffers
软件包,包括较新的软件包:
➜ apt-cache policy flatbuffers
flatbuffers:
Installed: (none)
Candidate: 1.4.0-17
Version table:
1.4.0-17 500
500 http://repo12.mailbuild-2.embarce.ro xenial/local amd64 Packages
1.2.0-1 500
500 http://repo12.mailbuild-2.embarce.ro xenial/local amd64 Packages
在这种情况下mk-build-deps
拒绝安装所需版本的软件包:
➜ sudo mk-build-deps --install debian/control
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dh_md5sums
dh_builddeb
dpkg-deb: building package 'libhole-cpp-build-deps' in '../libhole-cpp-build-deps_1.0.1ubuntu1_all.deb'.
The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!
Selecting previously unselected package libhole-cpp-build-deps.
(Reading database ... 68846 files and directories currently installed.)
Preparing to unpack libhole-cpp-build-deps_1.0.1ubuntu1_all.deb ...
Unpacking libhole-cpp-build-deps (1.0.1ubuntu1) ...
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies...Starting pkgProblemResolver with broken count: 1
Starting 2 pkgProblemResolver with broken count: 1
Investigating (0) libhole-cpp-build-deps [ amd64 ] < 1.0.1ubuntu1 > ( devel )
Broken libhole-cpp-build-deps:amd64 Depends on flatbuffers [ amd64 ] < none -> 1.4.0-17 > ( devel ) (= 1.2.0-1)
Considering flatbuffers:amd64 0 as a solution to libhole-cpp-build-deps:amd64 -2
Removing libhole-cpp-build-deps:amd64 rather than change flatbuffers:amd64
Done
Done
Starting pkgProblemResolver with broken count: 0
Starting 2 pkgProblemResolver with broken count: 0
Done
The following packages will be REMOVED:
libhole-cpp-build-deps
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 9216 B disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 68850 files and directories currently installed.)
Removing libhole-cpp-build-deps (1.0.1ubuntu1) ...
mk-build-deps: Unable to install libhole-cpp-build-deps at /usr/bin/mk-build-deps line 402.
mk-build-deps: Unable to install all build-dep packages
➜ libhole-cpp git:(v12) ✗ sudo apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
谁能澄清我的构建工具链有什么问题吗?操作系统是Ubuntu 16.04。
答案1
太长不看;
aspcud
通过以下方式委托给求解器apt-cudf-get
:
mk-build-deps \
--install \
--remove \
--tool \
'apt-cudf-get --solver aspcud -o APT::Get::Assume-Yes=1 -o Debug::pkgProblemResolver=0 -o APT::Install-Recommends=0' \
debian/control
解释
该解决方案不同于约翰内斯·绍尔的在那里面...
- 它使用
apt-cudf-get
而不是apt-get
- 它省略了以下选项(在我的测试中不起作用):
-o APT::Solver::Strict-Pinning=false
-o APT::Solver::aspcud::Preferences="-new,-removed,-changed"
- 它添加了以下选项:
-o APT::Get::Assume-Yes=1
(以非交互方式安装软件包)-o Debug::pkgProblemResolver=1
(mk-build-deps --tool
默认)-o APT::Install-Recommends=0
(mk-build-deps --tool
默认)
参考:
debian-devel 邮件列表线程索引“mk-build-deps 无法安装特定版本的 Build-Depends 软件包”:https://lists.debian.org/debian-devel/2016/08/threads.html#00442
- 维塔利·伊萨耶夫 (Vitaly Isaev) 开始线程:https://lists.debian.org/debian-devel/2016/08/msg00442.html
- Johannes Schauer,提出 aspcud:https://lists.debian.org/debian-devel/2016/08/msg00446.html
阿斯普库德
apt-cudf
Debian 软件包:https://packages.debian.org/stable/apt-cudfapt-cudf
Debian 手册页:https://manpages.debian.org/stable/apt-cudf/apt-cudf-get.8.htmlapt-cudf-get
Debian 手册页:https://manpages.debian.org/stable/apt-cudf/apt-cudf.1.htmlmk-build-deps
Debian 手册页:https://manpages.debian.org/stable/devscripts/mk-build-deps.1.html