![使用自己的存储库和 apt-get 固定包](https://linux22.com/image/972585/%E4%BD%BF%E7%94%A8%E8%87%AA%E5%B7%B1%E7%9A%84%E5%AD%98%E5%82%A8%E5%BA%93%E5%92%8C%20apt-get%20%E5%9B%BA%E5%AE%9A%E5%8C%85.png)
我创建了自己的存储库,以便提供比 Ubuntu 存储库当前拥有的软件包更新的版本。一切正常,除了我必须在安装时指定版本:
sudo apt-get install package=1.2.1
如果我不指定版本,那么它将从 Ubuntu 的存储库中安装。
我尝试将我的存储库放在顶部,sources.list
但没有任何区别。
所以我想知道在构建包时是否有一个标志.deb
可以始终优先考虑我的存储库?还是实际存储库中的标志?我不希望用户更改他们的/etc/apt/preferences
优先级设置,也不希望使用apt-get -t repo
。
我尝试安装Tor
给定的浏览器本说明并且它确实从他们的自定义存储库安装了最新版本。我不知道他们在做什么,但它确实只按照他们列出的步骤工作。
答案1
解决方案 1:(使用 Debian 纪元)
1:
在您的软件包版本前加上前缀1:1.2.1
,这样它就会始终被视为更高版本。如果您构建了自己修改的软件包并且不希望它们被 Ubuntu 升级替换,那么这非常方便。
当比较两个版本号时,首先比较各自的 epoch,如果 epoch 相等则比较 upper_version,如果 upper_version 也相等则比较 debian_revision。epoch 通过数值进行比较。
来源:https://www.debian.org/doc/debian-policy/ch-controlfields.html#sf-Version
解决方案 2(使用 Pinning)
要为给定的包设置 AptPreferences,请在中添加一个新文件/etc/apt/preferences.d/
。
sudo gedit /etc/apt/preferences.d/my-package-pin
在该文件中添加以下行:
Package: my_package
Pin: release o=Ubuntu
Pin-Priority: -10
我将阻止 Ubuntu 存储库版本替换您本地存储库提供的版本。
要检查软件包 pin 版本是否运行:
sudo apt-cache policy my_package