有没有办法从您添加的 ppa 存储库中挑选软件包?也就是说,在包括其他人的同时排除一些更新?
例如,我只想要这个存储库中的chromium-browser 包,而不是其他的。所以我不希望我的sudo apt-get upgrade
ppa 的其他(除了chromium-browser)包安装在我现有的包上,只是那个包。
我意识到这是一个许可证,如果我误读了依赖项并排除了我所包含的依赖项所需要的依赖项,那么这是一个向自己开枪的许可证,但我知道在这种情况下其他包不是那个依赖项的事实。
这是可能吗?也许有一些白名单/黑名单文件之类的?
yuv*_*lio 63
找到了一种方法。
诀窍是使用两个固定子句。第一个禁止来自 PPA 的所有包,第二个选择你想要的包。
所以对于上面的例子,我首先像往常一样添加 ppa:
$ sudo add-apt-repository ppa:webapps/preview
...
$ sudo apt-get update
...
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行 apt-cache 策略,它会告诉我有一个新版本的 Chromium 浏览器可用,并且它将安装升级,因为它与我当前的 Chromium 浏览器具有相同的优先级(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)
$
Run Code Online (Sandbox Code Playgroud)
就该软件包而言,这很棒,但我不希望安装此 ppa 中的其他软件包(也有 500 优先级)。现在,如果我尝试升级,我将从该存储库中获得的不仅仅是我想要的 Chromium 包:
$ 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]?
Run Code Online (Sandbox Code Playgroud)
所以我能做的就是告诉 apt 我希望 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
Run Code Online (Sandbox Code Playgroud)
为了识别“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
...
Run Code Online (Sandbox Code Playgroud)
对于 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
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试升级时,我只能从该 ppa 获得我想要的包,而不是其他包。为我挑选的所有樱桃都很好:
$ 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]?
Run Code Online (Sandbox Code Playgroud)
Bra*_*iam 10
您还可以使用选择?origin
器选择要安装的版本:
匹配源与正则表达式源匹配的包版本。例如,“!?origin(debian)”会在你的系统上找到任何非官方的包(不是来自 Debian 档案库的包)。
因此,在您的特定情况下,您可以使用:
sudo aptitude install !?origin(LP-PPA-webapps-preview) chromium
Run Code Online (Sandbox Code Playgroud)
或者您可以使用<packagename>=<version>
以下命令指定版本:
sudo apt-get install chromium=20.0.1132.47~r144678-0precise1+webapps3
Run Code Online (Sandbox Code Playgroud)
您实际上可以通过 Synaptic“挑选”某些软件包,这非常容易。它是这样工作的:
如果您只想对某些 PPA 执行此操作,请在 Synaptic 窗口中选择“Origin”(左下角),然后选择您要更改的 PPA
选择您不想再自动升级的所有软件包。
选择菜单“包/锁定版本”。您选择的所有软件包都不会再自动升级,直到您再次解锁它们。
归档时间: |
|
查看次数: |
25695 次 |
最近记录: |