如何安装Debian测试中的单个软件包或稳定版中不稳定的软件包?


41

我想将Debian Jessie的一个软件包(及其依赖关系,但仅限于那些无法满足Wheezy的程度)安装到我的Wheezy系统上,而无需将“所有东西和厨房水槽”升级到Jessie版本。具体来说,我想安装kpcli,该文件在Jessie中提供,但在Wheezy中不提供。

我发现的所有内容都表明我应该将Jessie存储库添加到我的源列表中,设置固定以使所有内容保持混乱,并且仅从jessie中获取单个软件包,并且几乎就位。但是,它对我来说并不适合。如果我使用以下内容创建/etc/apt.d/sources.list.d/jessie.list:

deb ftp://ftp.debian.org/debian/ jessie main
deb-src ftp://ftp.debian.org/debian/ jessie main

然后使用以下命令创建/etc/apt/preferences.d/jessie:

Package: *
Pin: release a=wheezy
Pin-Priority: 1001

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450

并运行apt-get -u update之后apt-get -u install kpcli/jessie,那么我期待apt-get的在kpcli拉动和也许从杰西其他包一小撮,并留下了我的不变安装的系统的其余部分。(我的系统是Wheezy的最新安装。)或者,如果我将引脚优先级设置得太低,我希望它什么也不做。相反,在我的系统上,apt-get想要升级数百个软件包。

到底只安装一个Jessie版本的软件包,同时又不影响我的Wheezy系统的其余部分,到底需要什么呢?

请注意,在这种特殊情况下,该软件实际上是用Perl编写的,因此无需编译为二进制文件或类似程序。但是,有一些Perl模块依赖项。因此,一种可能的替代方法是使用仅(1)允许指定要安装的单个本地.deb存档的东西来安装.deb(手动下载),例如dpkg -i和(2)以一种智能方式处理依赖项,而平原则dpkg -i没有。但是,对于我已经多次进行的所有搜索,都没有找到一个简单易懂的操作指南,一个通用的解决方案(也适用于二进制,编译包) 。


4
解决此问题的通常方法是通过反向移植-从Wheezy上的Debian源码重建软件包。您使用的软件包似乎是perl(或至少取决于它),因此可能不难反向移植。如果您需要更多详细信息,请这样说。如果您确实需要,我可能会提供一个演练。
Faheem Mitha 2014年

Answers:


15

对于每个条目(稳定,测试,不稳定),您都将引脚优先级设置为500。不应使用引脚优先级>1000。仅当我要降级某些内容时,才使用1001。我/etc/apt/sources.list在以下/etc/apt/preferences文件中指定了testing + sid + experimental条目:

Package: *
Pin: release o=Debian,a=testing
Pin-Priority: 900

Package: *
Pin: release o=Debian,a=experimental
Pin-Priority: 130

对于不稳定,默认值为500。因此,让我们尝试检查iceweasel:

# apt-cache policy iceweasel
iceweasel:
  Installed: (none)
  Candidate: 17.0.10esr-1~deb7u1
  Version table:
     26.0-1 0
        130 http://ftp.pl.debian.org/debian/ experimental/main amd64 Packages
     24.2.0esr-1 0
        500 http://ftp.pl.debian.org/debian/ sid/main amd64 Packages
     17.0.10esr-1~deb7u1 0
        900 http://ftp.pl.debian.org/debian/ testing/main amd64 Packages

因此,如果我尝试安装iceweasel,则会从测试分支下载它,因为它具有最高优先级。

尝试将优先级更改为:

Package: *
Pin: release a=wheezy
Pin-Priority: 900

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910

sudo apt-get -u install kpcli/jessie仍然给我316 upgraded, 137 newly installed, 251 to remove and 1688 not upgraded.您建议的优先事项。如果我这样做apt-cache policy perl(它要升级的软件包之一),则显示5.18.1-5作为优先级为500的候选者,并同时安装了优先级为500的5.14.2-21 + deb7u1。无论出于何种原因,它几乎都看起来像是, apt不会优先考虑……
CVn 2014年

好我知道了 看来,诀窍是先使用Package: kpcli*(而不是Package: kpcli),最后使用a Package: * Pin: release o=Debian Pin-Priority: -10。然后当然还有一些严格的依赖关系,导致Perl的版本仅在Jessie中可用,而这又需要更新的libc6!老实说,我不会走那条路,但这至少让我得到了我追求的结果。谢谢!
2014年

25

实际上,有一种方法可以完全不使用固定/优先级。相反,您可以指定安装软件包的默认发行版,然后使用该默认发行版,除非通过使用目标release参数另行指定。如果您只想从反向端口安装选定的软件包,则其工作方式相同。

我将向您展示如何将Stretch中的软件包安装到Jessie中,因为它们是当前的稳定版本/测试版本,但其工作方式与最初要求的在Wheezy中安装Jessie软件包的方式相同。

首先,将Stretch作为存储库添加,例如/etc/apt/sources.list.d/stretch.list

deb http://ftp.debian.org/debian stretch main

然后,要设置默认版本,请创建一个/etc/apt/apt.conf.d/default-release包含以下内容的文件:

APT::Default-Release "jessie";

(在Wheezy中,我认为apt.conf.d该代码不存在,因此您需要将该代码段放入/etc/apt/apt.conf)。

然后,从测试安装软件包就变得非常简单,aptitude -t stretch install kpcli而无需担心固定优先级。

注意: @amc在注释中指出,如果使用apt代替aptitude,则必须使用"stable"as Default-Release代替"jessie"。谢谢!(当然,您也可以使用aptitude该设置。)


……这似乎是一种非常巧妙的方法。为什么这没有被正式接受?
JamesTheAwesomeDude

1
我知道了The value 'stretch' is invalid for APT::Default-Release as such a release is not available in the sources
史蒂文·潘妮

1
您需要使用“稳定” /“测试” /等代替默认版本的“ jessie” /“ stretch”,以及使用apt时
amc

6

Pin: release a=wheezy应该是Pin: release n=wheezy,也许。

手册页

以下记录为所有代号为“ jessie”的发行版的所有软件包版本分配了高优先级。

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900

所以这是正确的!


3
这不会从jessy 安装所有软件包吗?
rubo77
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.