为什么这个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的数字只是为了让它坚持下去?

这似乎是一个可怕的黑客,或者也许这是它应该如何工作?

这里有很多问题和问题,所以我会简短但是尽量覆盖它们。

  • 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不是一个滚动发行版,所以有24个版本的Ubuntu将在版本24上保留这些Ubuntu版本的生命周期(除非发生真正疯狂的事情)。 安全补丁将被移植并在必要时应用,但它仍然是24。

为什么Ubuntu在没有询问的情况下更新软件?

我认为这可能是由于Update Manager中的更新策略(“编辑”菜单)。 我推荐中间选项:优化稳定性和安全性。 最后一个选项将“始终更新所有内容” – 您不需要。

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

跟进@ 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)……