我偶尔需要对标准 Ubuntu 软件包进行微小的源代码修改,以便在我管理的一组服务器上使用。我想在 PPA(例如 launchpad.net)上发布这些软件包,这样我就可以通过所有常用机制(例如无人值守升级)安装并保持最新状态。保证我的 PPA 上的给定软件包将取代任何官方版本的正确方法是什么?这似乎不是保留或固定的工作,因为我本质上想分支发布顺序,而不是包含或排除特定版本。凭借我有限的知识,我可以推测几个可能的方向。
最正确的选择是以某种方式指示 apt 忽略官方存储库中的特定软件包,就像它从未存在过一样。我还没有在 apt 中发现这种细粒度的控制。
第二种选择是操纵版本号,这样我的软件包就能保证比任何官方发行版都具有更高的版本。通过滥用版本号的纪元部分,这有可能实现吗?至少可能性很高。而我要承受多少个人耻辱?
最不吸引人的选择是使用私有后缀 (libfoo-mycompany) 重命名现有软件包,使它们完全独立。由于 Debian 软件包管理器使用的命名约定很严格,这对于非平凡的软件包来说可能是一项艰巨的任务。这就是我试图避免的。
选项四是一个显而易见的解决方案,尽管我花了几个小时搜索文档,但我还是完全忽略了它,而这里有人迫切地想指出这一点。
谢谢
答案1
Apt pinning 实际上应该是您想要的;您只需将优先级设置为超过一千,以便您的版本始终优先,甚至优先于主存储库中版本号更高的软件包。
把这个放进去/etc/apt/preferences
。如果你用类似的东西托管你自己的仓库reprepro
,那么你可以定位你的主机名:
Package: *
Pin: origin your.repo.hostname
Pin-Priority: 1001
或者使用 Launchpad PPA,你可以定位发布属性:
Package: *
Pin: release o=LP-PPA-your-ppa-name
Pin-Priority: 1001