当前位置: 首页>>技术教程>>正文


我如何从PPA中挑选包裹?

, ,

问题描述

有没有办法从您添加的ppa存储库中挑选包?也就是说,在包含其他内容时排除某些更新?

例如,我只想要来自this repository的chromium-browser包而不是其他包。所以我不希望我的sudo apt-get upgrade让那个ppa的其他(除了chromium-browser)软件包安装在我现有的软件包上,只有那个。

我意识到,如果我误读了依赖关系并排除了我所包含的依赖关系,那么这是一个射击自己的许可证,但我知道在这种情况下其他包不是那个依赖关系的事实。

这是可能吗?也许有一些白名单/黑名单文件或什么?

最佳解决方案

找到了一种方法。

诀窍是使用两个钉扎条款。第一个禁止PPA中的所有包,第二个选择你想要的包。

所以对于上面的例子,我首先像往常一样添加ppa:

$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...

现在,如果我运行apt-cache政策,它将告诉我有更新版本的chromium-browser可用,并且它将安装升级,因为它与我当前的chromium-browser具有相同的优先级(500)。

$ sudo apt-cache policy chromium-browser
chromium-browser:
  Installed: 18.0.1025.168~r134367-0ubuntu0.12.04.1
  Candidate: 20.0.1132.47~r144678-0precise1+webapps3
  Version table:
     20.0.1132.47~r144678-0precise1+webapps3 0
        500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main amd64 Packages
 *** 18.0.1025.168~r134367-0ubuntu0.12.04.1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ precise-security/universe amd64 Packages
        500 http://ppa.launchpad.net/chromium-daily/beta/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.1025.151~r130497-0ubuntu1 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
E: Unable to parse package file /etc/apt/preferences.d/webapps-preview-pin-400 (1)
$ 

这个包很棒,但我不希望安装这个ppa中的其他人(也有500个优先级)。现在,如果我尝试升级,我将从该存储库获得的不仅仅是我想要的 chrome 包:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  bamfdaemon gwibber gwibber-service gwibber-service-facebook gwibber-service-twitter indicator-appmenu libbamf0 libbamf3-0 shotwell
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg gwibber-service-identica indicator-messages indicator-status-provider-mc5
  indicator-status-provider-pidgin libindicator-messages-status-provider1
8 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
Need to get 25.3 MB of archives.
After this operation, 5,034 kB of additional disk space will be used.
Do you want to continue [Y/n]? 

所以我能做的就是告诉我,我希望那个ppa中的所有软件包,在这种情况下,webapps-preview的优先级低于名称中包含”chromium”的软件包。其机制是pinning a package

我在/etc/apt/preferences.d/中创建了一个带有两个子句的文件。第一个表示给webapps-preview ppa中的所有包提供的优先级低于常规包(因此即使它们具有更高的版本号,它们也不是首选。第二个句子部分优先于第一个通过说给ppa中的包”chromium”在其名称中与其他软件包具有相同的优先级,以便安装它(具有更高的版本号)。

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  *chromium*
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

要为“Pin:release”选项标识正确的字符串,我们可以再次使用apt-cache策略。

$ apt-cache policy
...
500 http://ppa.launchpad.net/webapps/preview/ubuntu/ precise/main i386 Packages
    release v=12.04,o=LP-PPA-webapps-preview,a=precise,n=precise,l=preview,c=main
    origin ppa.launchpad.net
...

对于apt版本<必须明确指定0.8.14固定包,因为通配符不起作用:

$ cat /etc/apt/preferences.d/webapps-preview-pin-400
Package:  *
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 400


Package:  chromium-browser chromium-codecs-ffmpeg chromium-browser-l10n chromium-codecs-ffmpeg-extra
Pin: release o=LP-PPA-webapps-preview
Pin-Priority: 500

而现在,当我尝试升级时,我只得到了我想要的那个包,而不是其他的包。所有精美的樱桃都为我挑选:

$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.1 MB of archives.
After this operation, 5,026 kB of additional disk space will be used.
Do you want to continue [Y/n]?

次佳解决方案

你可以通过Synaptic实际上”cherry pick”某些包,这很容易。它的工作原理如下:

  • 如果您只想为某些PPA执行此操作,请在Synaptic-window中选择”Origin”(左下角),然后选择要更改的PPA

  • 选择您不想再自动升级的所有软件包。

  • 选择菜单“包装/锁定版本”。您选择的所有软件包将不再自动升级,直到您再次解锁它们为止。

第三种解决方案

您还可以使用?origin选择器选择要安装的版本:

Matches package versions whose origin matches the regular expression origin. For instance, “!?origin(debian)” will find any unofficial packages on your system (packages not from the Debian archive).

因此,在您的具体情况下,您可以使用:

sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium

或者您可以使用<packagename>=<version>指定版本:

sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1968.html,未经允许,请勿转载。