问题描述
有没有办法从您添加的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