为什么这个 Emacs 软件包的版本号是 46.1?26 是目前最高的主要版本

为什么这个 Emacs 软件包的版本号是 46.1?26 是目前最高的主要版本

我一直在构建自己的 emacs,因为我想修复其中的一些问题并将错误修复程序推送到上游。但是,Ubuntu 一直自动删除我自己构建的 emacs,我不得不不断重建并重新安装它。

apt-cache policy emacs这是我昨晚睡觉时的输出:

~/emacs$ sudo apt-cache policy emacs
emacs:
  Installed: 26.0.50.aaron-1
  Candidate: 46.1
  Version table:
     46.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://us.archive.ubuntu.com/ubuntu xenial/main i386 Packages
 *** 26.0.50.aaron-1 100
        100 /var/lib/dpkg/status

这是我醒来时的样子:

~/emacs$ sudo apt-cache policy emacs
[sudo] password for excelsiora:
emacs:
  Installed: 46.1
  Candidate: 46.1
  Version table:
 *** 46.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
        500 http://us.archive.ubuntu.com/ubuntu xenial/main i386 Packages
        100 /var/lib/dpkg/status

为什么这个软件包的版本是 46 而不是 24 或 25?26 是目前您可以获得的最高主要 emacs 版本。

我可以看到这是一个元包:https://packages.debian.org/source/jessie/emacs-defaults

为什么 Ubuntu 不经询问就更新软件?

主要问题:我应该怎么做 - 为我的软件包版本分配一个高于 46 的数字才能使其坚持下去?

这看起来像是一个糟糕的黑客行为,或者也许这就是它应该如何工作?

答案1

这里有很多问题和疑问,所以我会简短地讲一下,但尽量涵盖所有问题。

  • emacs只是一个指向emacs...Ubuntu 中最新版本的元包(目前为emacs24)。“46.1”只是一个包版本,故意设置得比较高,以取代较旧的 emacs 包。请参阅apt show emacs了解更多信息。

  • 您正在emacs用版本号较低的软件包覆盖该软件包。Ubuntu 按版本号优先安装软件包。版本号最高的软件包将被安装(安装或升级时),因此您的软件包会不断被抢购一空。

    您可以在apt-cache policy emacs输出中看到这一点。候选版本是较高版本。

  • 您可以通过固定优先级或伪造版本号(高于 46.1 的版本号)来解决此问题,但这样做会忽略问题(并且可能会保留一个emacs24包)。

  • 最好的选择是删除该emacs包,然后只构建和安装一个emacs25emacs26包。可以还可以构建一个依赖于版本名称包的 emacs 元包,但这只是虚荣心作祟。除非你打算分发,否则我不会这么做。

  • 关于 Ubuntu 不“询问”就执行某些操作,请检查是否已打开自动更新。获取最新可用更新是默认行为,因此我认为这更像是“不了解 Ubuntu 的功能”而不是机器中的幽灵,或者更糟的情况。

  • 至于“为什么是 24 版本,而不是 25 或 26 版本?”,Ubuntu 和其下的 Debian 都致力于提供稳定、经过测试的软件版本。26 版本仍在开发中,而 25 版本直到 2016 年 9 月才发布。

    此外,Ubuntu 不是滚动发布版本,因此 Ubuntu 24 版本将在 Ubuntu 发行版的整个生命周期内一直使用 24 版本(除非发生非常疯狂的情况)。如有必要,将移植并应用安全补丁,但版本仍为 24。

答案2

为什么 Ubuntu 不经询问就更新软件?

我认为这可能是由于更新管理器(编辑菜单)中的更新策略所致。我建议使用中间选项:优化稳定性和安全性。最后一个选项是“始终更新所有内容”——您不希望出现这种情况。

您还可以在编辑>首选项>黑名单包(又称为忽略包)中将包“emacs-defaults”列入黑名单。

答案3

根据@Oli 的回答,您可以这样做:

删除 emacs 包并仅构建和安装 emacs25 或 emacs26 包。

  1. 找到你的 emacs.deb 文件。对我来说,它在我的 emacs 源根文件夹中,名为emacs_25.1-1_amd64.deb
  2. 创建一个目录来保存您要创建的新 Debian 包:$ mkdir emacs-rename
  3. 将 debian 包解压到以下目录:$ ar -x emacs_25.1-1_amd64.deb emacs-rename/
  4. 进入 emacs-rename 目录:$ cd emacs-rename
  5. 进一步提取 control.tar.gz 和 data.tar.xz:$ tar -xzf control.tar.gz$ tar -xf data.tar.xz
  6. 使用 nano编辑control结果文件(因为您还没有 emacs ;) -$ nano control并将其更改Package: emacsPackage: emacs25(或 26、27 等)
  7. 在 emacs-rename: 内创建一个 DEBIAN 目录$ mkdir DEBIAN并将控制文件复制到那里:$ cp control DEBIAN/
  8. 进入上一级目录,返回 emacs 源根目录 ( $ cd ..) 并运行$ dpkg --build emacs-rename。这可能需要一些时间。
  9. 您现在应该有一个 emacs-rename.deb 包。不用担心它不符合正确的 debian 包命名结构,它只是供您使用。使用以下命令安装它$ sudo dpkg -i emacs-rename.pkg
  10. 如果一切正常你应该看到:

    准备解压 emacs-rename.deb ...
    正在解压 emacs25 (25.1-1) ...
    设置 emacs25 (25.1-1) ...

相关内容