为什么这个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
包,只需构建和安装emacs25
或emacs26
包。 您还可以构建一个依赖于您的版本名称包的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包。
- 找到你的emacs.deb文件。 对我来说,它位于我的emacs源根文件夹中,名为
emacs_25.1-1_amd64.deb
- 创建一个目录来保存您要创建的新debian软件包:
$ mkdir emacs-rename
- 将debian软件包解压缩到目录:
$ ar -x emacs_25.1-1_amd64.deb emacs-rename/
- 进入emacs-rename目录:
$ cd emacs-rename
- 进一步提取control.tar.gz和data.tar.xz:
$ tar -xzf control.tar.gz
和$ tar -xf data.tar.xz
- 编辑用nano生成的
control
文件(因为你还没有emacs;) –$ nano control
和更改Package: emacs
到Package: emacs25
(或26,27等) - 在emacs-rename里面创建一个DEBIAN目录:
$ mkdir DEBIAN
并在那里复制控制文件:$ cp control DEBIAN/
- 上一个目录,返回到emacs源根目录(
$ cd ..
)并运行$ dpkg --build emacs-rename
。 这可能需要一些时间。 - 您现在应该有一个emacs-rename.deb包。 不要担心它不遵循正确的debian包命名结构,它只是供您使用。 使用
$ sudo dpkg -i emacs-rename.pkg
安装它 - 如果一切正常,您应该看到:
准备解压缩emacs-rename.deb …
解压缩emacs25(25.1-1)……
设置emacs25(25.1-1)……