当repo有较新版本时,要安装特定版本吗?


13

让我们有一个依赖于以下软件包的元软件包

Depends: A (=2),
 B (=2),
 C (=2)

注意'='-我要安装这些特定版本,而不是最新版本。

另外:

B取决于A(> = 1)

C取决于B(> = 1)和A(> = 1)

如果存储库中A,B,C的最新版本为2,则可以使用。

由于我已经将A版本3和B版本3放入repo sudo apt-get install my-meta-package中,因此拒绝使用以下信息:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed

如果我手动安装A和B的版本2,则该元软件包会正确安装,这强烈表明A3或B3没有隐藏的依赖关系。这不是解决问题的方法,因为元软件包已自动安装在许多计算机上。

问题:如何使sudo apt-get install my-meta-package安装版本2、2、2?

另外,有没有一种方法可以获取扩展信息,这实际上导致了对A版本3和B版本3的需求?


哦,在回答之前我还没有阅读完整的问题。您可以重新打包metapackage吗?
int_ua 2012年

2
@int_ua我不明白重新打包metapackage会做什么。
tymtam

@belacqua-我与您同在,但我们需要一个可靠的答案,该答案应涵盖当发生版本转换和依赖关系破裂等情况时会发生的情况
RobotHumans 2012年

您的元数据包的控制文件是否包含不依赖软件包的显式版本,例如(a=2), (b=2)
安华2012年

Answers:


11

您必须选择要安装的特定版本,并在安装元软件包的同时全部安装它们。

sudo apt-get install meta-package package1=2 package2=2 package3=2

就像int_ua的答案说的那样,您可以使用以下方法找出反向依赖关系:

apt-cache rdepends package

如果您想了解有关任何这些软件包的更多信息(可用版本,依赖项以及更多信息),请使用以下方法:

apt-cache show package

在完成安装并希望在进行系统升级时将其保持在这些版本之后,您将需要按照belacqua的建议使用apt-pinning

APT固定

APT固定功能使管理员可以强制APT选择特定版本的软件包,这些版本的软件包可能来自不同的存储库。这使管理员可以确保软件包没有升级到可能与系统上其他软件包冲突的版本,或者没有经过充分测试以进行不受欢迎的更改。为此,必须修改APT首选项文件(/ etc / apt / preferences)中的引脚。


我相信这是正确的答案,将=号和程序包名称一起放在版本中
LnxSlck 2012年

1
我是Tymek的同事,这实际上解决了这个问题。太糟糕了,我们必须对元软件包进行反向工程以使其实现。一些有创意的Python是有序的。感谢堆的答案。
伊戈尔·泽瓦卡

1
我想知道自从过去以来是否出现了更好的解决方案?
ygrek

1

您可以尝试先安装依赖

sudo apt-get install package=2 其中2是版本

您可以找出哪些软件包取决于软件包

apt-cache rdepends package


1
rdepends没有提供有关版本的详细信息,对吗?
tymtam

2
首先安装依赖项将无视metapackage。这是一种解决方案,但不是我要的解决方案。
tymtam

1
请注意,要使此工作正常,存储库需要具有您指定的那个版本的可用版本,否则,它们会出错。
托马斯·沃德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.