car*_*ist 37
您可以使用-t选项指定版本。例如,我添加了以下存储库/etc/apt/sources.list来安装 Iceweasel 最新版本:
deb http://mozilla.debian.net/ squeeze-backports iceweasel-release
Run Code Online (Sandbox Code Playgroud)
如您所知iceweasel,官方 Debian 存储库中有相同的软件包。如果我想从这个特定版本安装 Iceweasel,我运行:
apt-get install -t squeeze-backports iceweasel
Run Code Online (Sandbox Code Playgroud)
来自 apt-get 手册页:
-t, --target-release, --default-release
This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
apt_preferences(5) manual page.
Run Code Online (Sandbox Code Playgroud)
我认为这是一个更好的解决方案。
更新:正如评论中提到的@SuB,“指定版本而不是存储库名称。Ubuntu 中没有存储库名称(不同于基于 RedHat 的 linux,如 RHEL、Fedora、CentOS 等)”。-t
kyn*_*nan 31
固定是一个过程,它允许您在从更新版本获取软件包的同时保持稳定版本的 Ubuntu(或任何其他 debian 系统)。— help.ubuntu.com
您可以禁用某些存储库的自动更新,而无需通过apt策略完全删除它们:
要禁用来自 repository 的自动更新repo,请添加/etc/apt/preferences.d/repo包含以下内容的文件:
Package: *
Pin: release n=repo
Pin-Priority: 50
Run Code Online (Sandbox Code Playgroud)
这将使此存储库中的所有包的优先级低于已安装的包(有 100 个)。
有关更多信息man apt_preferences或查看Ubuntu 社区 Wiki。
Anw*_*war 12
您需要以小于 100 的优先级固定不想安装的存储库。这意味着(来自apt_preference手册页)
100 <= P < 500
导致安装一个版本,除非有属于其他发行版的可用版本或安装的版本更新
并且要选择用于固定的存储库,您将使用存储库Release文件中的字段。如archive,label,release,version等。通过将这些字段的值,可以精确地选择一个存储库并分配优先的优先权给它。查看apt_preference页面了解更多详情。
在继续之前,我们需要了解一些关于固定的重要事情。这些包括
Release文件字段和它映射到apt-cache policy输出
apt 首选项文件的格式
使用Release文件字段设置优先级
Release文件和apt-cache policy输出字段来自Debian Wiki文章
你会看到输出apt-cache policy像这样的
500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64
Run Code Online (Sandbox Code Playgroud)
这些行中的值来自Release文件。
描述设置存储库的描述。这未显示在apt-cache policy输出中
标签它是存储库的标签。许多存储库都有空标签。它显示在l=<label>输出中。
Origin这说明了存储库的来源。官方 Ubuntu 存储库具有Ubuntu作为值。如o=输出所示
版本是发行版的版本。Xenial 是 16.04。如v=输出所示
Suite与Archive相同。来自 debian wiki 它是这个目录中的软件包所属(或设计用于)的 Debian 发行版的名称,即稳定版、测试版或不稳定版。. 为Ubuntu,这些是release-updates,release-security等等。例如,xenial-updates,xenial-security。它在输出中显示为a=xenial, a=xenial-security。PPA 仅为此使用发布名称,这就是为什么它在 Pinning 中没有太大帮助的原因。
组件讲述了许可的事情。它是main, multiverse, restricted,universe在 Ubuntu 中。在输出中它显示为c=main或c=restricted等。大多数 PPAmain用于此字段,因此它也无助于固定。
架构是关于操作系统架构的。显示为b=i386或b=amd64在输出中
代号是发行版的发行版名称。对于 16.04,它是xenial。对于 14.04,它是trusty。在apt-cache policy输出中显示为n=xenial或n=trusty。通常对于单个发行版的所有存储库都是相同的。这就是为什么它对固定没有帮助的原因。
apt-cache policy输出中以开头的另一行origin告诉存储库的 Internet 来源。它也可以用于钉扎。但不应与Release文件Origin字段混合。那些是不同的。
我们将使用这些值来固定存储库。
那么,我们如何使用 pinning 1来限制存储库?
有几种方法可以控制固定,只有一个小子集对 Ubuntu 有效。详细说明超出了答案的范围。请参阅apt_preference手册页了解此内容。
Pin 或 apt 首选项文件驻留在/etc/apt/preferences.d文件夹中。每个固定包含三行。
第一行以Package:逗号分隔的包名开头。允许使用正则表达式和 glob
第二行以 开头,Pin:用于定位一组包。
如果我们想从引脚封装xenial高于xenial-updates中,我们将使用release a=xenial。
如果我们想固定 5.0 版,我们将version 5.0在这里使用。允许使用全局模式。
或者,如果我们想从 origin 固定包http://archive.ubuntu.com,我们将使用origin "archive.ubuntu.com". 请注意,我们不在http://那里编写协议。
第三行以 开头,Pin-Priority:它的值是一个数字。这表示上述目标项目的优先级。
Release文件字段设置优先级这是一个例子
Package: *
Pin: release a=xenial
Pin-Priority: 1001
Run Code Online (Sandbox Code Playgroud)
在此示例中,xenial归档中的包的优先级高于xenial-updates和xenial-security。
固定后,运行 anapt-cache policy nautilus表明它确实给予了xenial归档中较低版本的优先级高于归档中较高版本的优先级xenial-updates。注意Candidate:线路。
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 100
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)
但是,如果我们也想优先考虑 PPA 提供的包,这将行不通。因为xenial默认情况下PPA 使用相同的存档名称。因此,分配优先级a=xenial也适用于这些包。例如(启用 PPA 后),
13:31 $ apt-cache policy nautilus
nautilus:
Installed: 1:3.18.5-0ubuntu1~xenial1
Candidate: 1:3.18.5-0ubuntu1~xenial1
Version table:
*** 1:3.18.5-0ubuntu1~xenial1 1001
500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
1:3.18.4.is.3.14.3-0ubuntu5 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
1:3.18.4.is.3.14.3-0ubuntu4 1001
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)
现在候选版本来自 PPA。来自xenial官方 Ubuntu repo 和 PPA 存档的两个包具有相同的优先级1001,因为它们Archive在 Release 文件中使用相同的值。要成功固定,我们需要在 Pin 文件中组合更多字段。
要从存储库中固定包,我们需要使用从apt-cache policy命令中找到的信息来定位它。我们刚刚看到这a=xenial无助于确定存储库。我们需要在首选项文件中使用逗号将多个字段一起使用,以精确定位存储库。
例如,为了防止所有包来自http://ppa.launchpad.net/oibaf/graphics-drivers/ppa,我们可以使用
Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10
Run Code Online (Sandbox Code Playgroud)
这里我们使用代号值以及OriginPPA 的值。(虽然这里实际上不需要代号值)。有时存储库可能会错过这些值。在这些情况下,应该使用其他一些技术。的输出apt-cache policy libgl1-mesa-glx说它有效。它降低了这个 PPA 的所有包的优先级。
libgl1-mesa-glx:
Installed: 12.1~git1608200730.16ef7a~gd~x
Candidate: 12.1~git1608200730.16ef7a~gd~x
Version table:
*** 12.1~git1608200730.16ef7a~gd~x 100
-10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
11.2.0-1ubuntu2.1 500
500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
11.2.0-1ubuntu2 500
500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
Run Code Online (Sandbox Code Playgroud)
忽略它是 Candidate 的事实。这发生了,因为它已经安装在我的系统中。检查右侧的优先级
如果我们想固定一个缺少发布信息的存储库,比如这个http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04,我们必须使用其他方法。由于没有其他存储库在使用该源,我们可以安全地使用origin来固定此存储库。
Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10
Run Code Online (Sandbox Code Playgroud)
注 1:此来源是 Internet 来源,而不是在发布文件中指定供应商的来源。
注2: Pin-Priority数字有特殊含义。查看apt_preference手册页了解详细信息。
明显的选择是修改/etc/apt/sources.list并注释掉所有其他存储库,然后运行
apt-get update && apt-get upgrade && apt-get autoclean
Run Code Online (Sandbox Code Playgroud)
然后从sources.list. 也许不是最好的方法,但至少apt-get手册页没有指定任何方法来做到这一点。
在相关说明中,例如 Ubuntu 发行版升级过程会在升级期间禁用所有 3rd 方存储库(并且不要只是运行一些选项来暂时排除这些存储库)。
| 归档时间: |
|
| 查看次数: |
122718 次 |
| 最近记录: |