为了安装 tmux 2.1,我需要安装libtinfo5
版本 6,我通过下载包含libtinfo5
并直接使用命令安装的 .deb 存档来做到这一点:
sudo dpkg -i libtinfo5_6.0+20160213-1ubuntu1_amd64.deb
这满足了 tmux 2.1 的依赖并且 tmux 安装正常。
现在我尝试使用安装 vnstat
sudo apt-get install vnstat
apt-get
错误退出了以下
$ sudo apt-get install vnstat
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
libncurses5 : Depends: libtinfo5 (= 5.9+20150516-2ubuntu1) but 6.0+20160213-1ubuntu1 is to be installed
libncursesw5 : Depends: libtinfo5 (= 5.9+20150516-2ubuntu1) but 6.0+20160213-1ubuntu1 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
我的理解一直是 Ubuntu 的包管理系统能够安装和管理同一个包的多个版本,就像这种情况一样。换句话说 apt/dpkg 识别
tmux
需要 libtinfo5 -version 6
工作vnstat
需要 libtinfo5 -version 5
工作
然后 apt/dpkg 说没关系,我会安装两个版本。
我可以看到某些程序如何像系统二进制文件一样,例如,bash
或者ls
只能安装一次,因为大多数调用只是说bash -c "<command>"
而不是bashv.3.2 -c "<command>"
。
所以我的问题是包管理器可以安装和管理多个依赖项吗?或者这是不可能的,因为就像上面的 bash 示例一样,大多数程序通过依赖项名称调用依赖项而不指定版本。在哪种情况下,问题超出了包管理器的控制(即,它更多的是编程编译/配置/组织问题)并且包管理器此时放弃了?
不,不可能有同一个包的两个版本,因为会有冲突的文件。如果一个库能够同时安装在两个不同的版本中是另一回事。如果你够勇敢,你可以得到一个版本的源代码,看看你是否可以将它安装到不同的目录。这很可能会以令人讨厌的方式破坏您的系统。它也可能根本不起作用。Dpkg 不会满足,因此您必须获取其中一个程序的源代码并对其进行编译。但是请记住,一旦您开始自己编译程序,您可能会给自己带来各种问题。
不,您不能同时安装同一软件包的不同版本。通常依赖关系至少表示为版本 X。然而,对于所有从相同源构建的包,依赖关系通常是准确的。这就是你遇到的。libncurses5 和 libtinfo5 都是从 ncurses 源包构建的。如果你想升级从这个源构建的包之一,你必须升级所有的包,所以你只需要获取并安装从这个源构建的其他包的相同版本,所以它们都在同一个版本上。