欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在 Unicorn 中确定软件包、PPA 和 Apt 仓库的优先级

最编程 2024-07-13 17:23:13
...
3月16日,北京源创会 —— “数据库,2024 开炫”

环境

操作系统:Ubuntu Kylin 优麒麟 22.04 LTS

适用架构:AMD64(海光、兆芯)、ARM64(鲲鹏 920 x8、飞腾 FT-2000/4)

 

这是一个简单的教程,展示了如何在 Ubuntu,Debian,Linux Mint 中设置某个软件包和 / 或 Apt 仓库的优先级。

在 Ubuntu 中,我们安装来自不同来源的软件包,包括 Ubuntu universe 仓库(使用 Ubuntu 软件)、Ubuntu PPAs(例如 LibreOffice、Kodi、GIMP 等)、应用程序自己的 Apt 仓库(例如 Chrome、VirtualBox、Opera 等)。

我们甚至可以安装其他 Linux 发行版的应用程序。例如,在 Ubuntu 中安装 Linux Mint 的 IPTV 播放器、Web 应用程序管理器和 Chromium 浏览器(deb 格式)是可能的。

为什么设置优先级:

但是,从 Repo 混合软件仓库安装可能会导致以下问题:

锁定指定版本的软件包。
多个存储库拥有相同的软件包,但是您希望从某个存储库安装或接收软件包更新。
仅从存储库中安装一个或两个包,但拒绝所有其他包。

创建和设置软件包优先级:

通过在 /etc/apt/preferences.d/ 目录下添加一个规则文件,并固定一个优先级,可以解决这些问题。

只需从系统应用程序启动器打开终端,并运行命令来创建和编辑配置文件(其他系统换为 gedit):

sudo gedit/etc/apt/preferences.d/ulyana

在本例中,我创建了一个 ulyana 文件,并添加了以下几行:

#仅允许从 Ulyssa 存储库中升级 webapp-manager
Package: webapp-manager
Pin: release n=ulyana
Pin-Priority: 500

#也允许升级 chromium(由另一个软件仓库添加)。
Package: chromium
Pin: release n=ulyana
Pin-Priority: 500

#永远不要选择 Ulyssa 存储库中的其他包
Package: *
Pin: release n=ulyana
Pin-Priority: 1

正如您所看到的,每个条目有 3 行(不包括开头以 # 开头的描述行),用一个空行分隔。

这三行代码以 Package 开始:在开头指定了包:“webapp-manager”、“chromium” 和 “*”(所有的东西)。

关于 “Pin” 行:

第二行指定 Pin 定义(固定、锁定)。它可以是 Pin: version 1.0.99*,其中 “*” 是一个 “通配符”,表示所有版本都以 1.0.99 开始的软件包。

您也可以使用 release 或 origin 来指定软件包来源。例如:

Pin: release o=LP-PPA-team-xbmc

Pin: release l=linuxmint

Pin: origin packages.linuxmint.com

发布的参数有:a(archive 存档),c(components 组件),v(version 版本),o(origin 起源)和 l(label 标签)。

您可以通过运行以下命令找到 release 和 origin 的值:

apt-cache policy |more

软件包文件:
 100 /var/lib/dpkg/status
     release a=now
 500 https://ppa.launchpadcontent.net/saiarcot895/chromium-beta/ubuntu jammy/main arm64 Packages
     release v=22.04,o=LP-PPA-saiarcot895-chromium-beta,a=jammy,n=jammy,l=Chromium Beta branch,c=main,b=arm64
     origin ppa.launchpadcontent.net
 500 https://ppa.launchpadcontent.net/mozillateam/ppa/ubuntu jammy/main arm64 Packages
     release v=22.04,o=LP-PPA-mozillateam,a=jammy,n=jammy,l=Firefox ESR and Thunderbird stable builds,c=main,b=arm64
     origin ppa.launchpadcontent.net
 500 http://mirrors.bfsu.edu.cn/ubuntu-ports jammy/main arm64 Packages
     release v=22.04,o=Ubuntu,a=jammy,n=jammy,l=Ubuntu,c=main,b=arm64
     origin mirrors.bfsu.edu.cn

关于 Pin 优先级的数字:

第三行的值可以设置为:

>1000

强制安装,即使 APT 会降级到较旧的版本。从目标发行版安装一个版本,即使它会用更高版本替换(降级)已安装的软件包。

990~1000

除非已安装较新版本,否则都会安装, 安装一个版本,即使它不是来自目标发行版,除非安装的版本是更新的。

500~899

只有在目标分发中没有较新或可用版本时才安装,安装一个版本,除非有属于目标发行版的可用版本或者安装的版本更新。

100~499

只有在没有安装其他较新版本或在其他发行版中可用的版本时才会安装,安装一个版本,除非有属于某个其他发行版的可用版本,或者安装的版本较新。

1~99

只会在没有安装其他版本时才安装,当没有软件包的已安装版本时,才安装版本。

<0(-1 或更低)

将永远不会被安装,阻止安装该版本。

设置配置文件后,通过 sudo apt update 命令刷新系统包缓存并完成。

参考文献

《aptitude、apt-get 和 apt 命令》https://www.debian.org/doc/manuals/debian-handbook/sect.apt-get.zh-cn.html

《How to Set Package, PPA, Apt Repository Priority in Ubuntu》https://ubuntuhandbook.org/index.php/2021/02/set-package-ppa-apt-repository-priority-ubuntu/