我如何从PPA中挑选包裹?

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

例如,我想要来自此存储库的chrome-browser软件包,而不是其他软件包。 因此,我不希望我的sudo apt-get upgrade让ppa的其他(除了chrome-browser)软件包安装在我现有的软件包上,只有那个。

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

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

找到了一种方法。

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

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

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

现在,如果我运行apt-cache策略,它将告诉我有一个更新版本的chrome-browser可用,并且它将安装升级,因为它与我当前的chrome浏览器具有相同的优先级(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个优先级)。 现在,如果我尝试升级,我将从该存储库获得的不仅仅是我想要的铬包:

 $ 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”的软件包之外,其优先级较低 。 这种机制固定了一个包

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

 $ 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“挑选”某些软件包,这容易。 它的工作原理如下:

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

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

  • 选择菜单“包装/锁定版本”。 在您再次解锁之前,您选择的所有软件包都不会自动升级。

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

匹配源与正则表达式原点匹配的包版本。 例如,“!?origin(debian)”将在您的系统上找到任何非官方软件包(软件包不是来自Debian存档)。

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

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

或者您可以使用=指定=

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