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

use*_*ser 42 debian apt

我想从 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
Run Code Online (Sandbox Code Playgroud)

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

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

Package: kpcli
Pin: release a=jessie
Pin-Priority: 450
Run Code Online (Sandbox Code Playgroud)

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

什么,确切地说,是需要安装的杰西版本仅这一个单一封装,同时使我喘息系统的其余部分不变?

请注意,在这种特殊情况下,该软件实际上是用 Perl 编写的,因此没有编译为二进制文件或涉及的任何类似内容;但是,有一些 Perl 模块依赖项。因此,一种可能的替代方法是使用仅 (1) 允许指定要安装的单个本地 .deb 存档的内容来安装 .deb(手动下载),例如dpkg -i,以及 (2) 以智能方式处理依赖项,哪个平原dpkg -i没有。但是,对于我多次进行的所有搜索并且未能提出如何执行此操作的简单遵循指南,通用解决方案(也适用于二进制编译包)会很棒.

Flo*_*cob 30

实际上有一种方法可以在不使用固定/优先级的情况下做到这一点。相反,您可以指定您将安装软件包的默认版本,然后除非使用目标版本参数另行指定,否则将使用该版本。如果您只想从例如 backports 安装选定的软件包,这将采用相同的方式。

我将展示从 Stretch 安装包到 Jessie 的过程,因为这些是当前的稳定版/测试版,但它的工作方式与在 Wheezy 中安装 Jessie 包的方式相同,就像最初要求的那样。

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

deb http://ftp.debian.org/debian stretch main
Run Code Online (Sandbox Code Playgroud)

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

APT::Default-Release "jessie";
Run Code Online (Sandbox Code Playgroud)

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

然后,从测试中安装软件包就像aptitude -t stretch install kpcli您无需担心固定优先级一样简单。

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

  • 对于默认版本以及使用 apt 时,您需要使用“stable”/“testing”/等,而不是“jessie”/“stretch” (3认同)

Mik*_*kov 16

对于每个条目(稳定、测试、不稳定),您的 pin 优先级为 500。您不应该使用 pin > 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
Run Code Online (Sandbox Code Playgroud)

值 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
Run Code Online (Sandbox Code Playgroud)

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

尝试将优先级更改为:

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

Package: kpcli
Pin: release a=jessie
Pin-Priority: 910
Run Code Online (Sandbox Code Playgroud)


小智 6

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

手册页

以下记录为属于代号为“jessie”的任何发行版的所有包版本分配高优先级。

           Package: *
           Pin: release n=jessie
           Pin-Priority: 900
Run Code Online (Sandbox Code Playgroud)

所以这是正确的!

  • 这不会从 jessy 安装 **ALL** 包吗? (3认同)