是否可能只允许从PPA更新特定的软件包


19

假设我添加了一个PPA,该PPA具有我想要的X包,但也具有我不想使用或从中接收更新的Y包。我如何从同一PPA接收特定程序包的更新,但如何拒绝来自同一PPA的其他程序包的更新。

一个循序渐进的示例将是一个好例子,因为在一些具有我想要的特定程序包的PPA中,这已经发生在我身上,但是又添加了许多我不想更新的其他程序包。

Answers:


16

您将使用所谓的“固定”

假设您正在从PPA安装软件包foo,几乎可以肯定也需要从ppa安装任何依赖项。

但是,如果还有其他程序,则可以指定用于固定的存储库。

查看Ubuntu Wiki固定

在该页面上有一个固定PPA的示例

https://help.ubuntu.com/community/PinningHowto#Pinning_the_ubuntu-mozilla-daily_PPA

从维基页面:

为了尽可能轻松地进行apt-get升级,请在PPA上设置较低的Pin-Priority,这将阻止安装不需要的软件包版本。一旦设置,来自ubuntu-mozilla-daily PPA的软件包将在与其他存储库中的软件包的任何竞争中始终会丢失,即使它们具有更高版本。

创建文件 /etc/apt/preferences.d/ubuntu-mozilla-daily-pin-400

将以下内容添加到文件中:

Package: *
Pin: release o=LP-PPA-ubuntu-mozilla-daily
Pin-Priority: 400

在使用此命令之前和之后,请使用以下命令检查Pin-Priority是否已更新。

apt-cache policy

apt-cache policy firefox-3.5

7

首先,如果您已经错误地从PPA升级了软件包,请参见以下答案:https//askubuntu.com/a/142808/103117,尤其是有关使用ppa-purge的部分。因为我已经升级了软件包,而apt-get却不考虑优先级而降级,所以最简单的方法是先清除所有已升级的软件包,然后确定优先级,然后重新添加PPA并仅升级所需的软件包。

有关优先级/固定系统的完整说明,请参见man apt_preferences

如果可以从多个来源获得一个软件包,则将为每个软件包分配一个优先级,您可以使用查看优先级apt-cache policy <package name>。例如,我使用一个名为nathan-renniewaldock / ppa / ubuntu的PPA,但我不想从那里安装mysql-server-5.5(我的“包Y”)。因此,我可以使用以下方法检查当前状况:

rob@frodo:~$ apt-cache policy mysql-server-5.5
mysql-server-5.5:
  Installed: 5.5.27-1~ppa1~precise
  Candidate: 5.5.27-1~ppa1~precise
  Version table:
 *** 5.5.27-1~ppa1~precise 0
        500 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

因此,由于所有内容的优先级均为500,因此根据手册页选择了版本号最高的版本。

例如,如果您只想安装ddclient(“程序包X”),而不要安装其他任何程序包,则要降低PPA中除ddclient之外的所有程序包的优先级。创建一个名为的文件/etc/apt/preferences.d/nathan-preferences。请注意,该目录中的所有文件都会被读取,并且文件名有一些规则(文件名只能包含字母数字字符,连字符,破折号,并且没有扩展名或以.pref结尾)。

首先,我们需要知道如何识别我们的PPA。该apt-cache policy命令本身将消除有关所有来源的信息。我知道我的PPA名称中有“ nathan”,所以我这样做:

$ apt-cache policy | grep nathan
400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main i386 Packages
     release v=12.04,o=LP-PPA-nathan-renniewaldock,a=precise,n=precise,l=PPA,c=main

有趣的部分是“ o = LP-PPA-nathan-renniewaldock”,我们在/etc/apt/preferences.d/nathan-prefs文件中使用它,如下所示:

Package: *
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 400

Package: ddclient
Pin: release o=LP-PPA-nathan-renniewaldock
Pin-Priority: 500

这会将PPA中的所有内容都设置为优先级400,然后将ddclient恢复为默认值500。现在,我可以检查它是否起作用:

$ apt-cache policy ddclient
ddclient:
  Installed: 3.8.0-11.4ubuntu1
  Candidate: 3.8.1-0~ppa1~precise
  Package pin: 3.8.1-0~ppa1~precise
  Version table:
     3.8.1-0~ppa1~precise 500
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 3.8.0-11.4ubuntu1 500
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
        100 /var/lib/dpkg/status

因此ddclient的优先级为500,与原始Ubuntu软件包的优先级相同,但是它将从nathan PPA安装,因为该版本是更高版本。现在,确保不会安装其他软件包:

$ apt-cache policy mysql-server
mysql-server:
  Installed: 5.5.24-0ubuntu0.12.04.1
  Candidate: 5.5.24-0ubuntu0.12.04.1
  Version table:
     5.5.27-1~ppa1~precise 0
        400 http://ppa.launchpad.net/nathan-renniewaldock/ppa/ubuntu/ precise/main amd64 Packages
 *** 5.5.24-0ubuntu0.12.04.1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/main amd64 Packages
        100 /var/lib/dpkg/status
     5.5.22-0ubuntu1 0
        500 http://gb.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

在这种情况下,来自nathan PPA的软件包的优先级为400,低于Ubuntu的优先级,因此,即使它的版本更高,也不会升级。我们可以检查:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  ddclient
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 77.7 kB of archives.
After this operation, 11.3 kB of additional disk space will be used.
Do you want to continue [Y/n]?

由于仅升级我想要的软件包,因此我很乐意接受。

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.