我正在使用 Ubuntu 14.04.5,很长一段时间以来,emacs 和 dictionaries-common 一直存在一个小问题。简而言之,Ubuntu 14.04.5 附带的 dictionaries-common 版本是 dictionaries-common 1.20.5,当 Ubuntu 14.04.5 附带的 emacs 版本启动时,emacs 消息文件中会生成一个错误:
Error while loading 50dictionaries-common: Symbol's value as variable is void: debian-aspell-only-dictionary-alist
这是一个已知的错误在 dictionaries-common 1.20.5 中。但是,这个错误不久前就被修复了,例如在 dictionaries-common 1.22.6 中。
我(也许天真地)怀疑将 dictionary-common 升级到较新的稳定版本会是一个相对简单的解决问题的方法。但是,如果我理解正确的话,反向移植中的 dictionary-common 版本仍然是 1.20.5:
$ sudo apt-get install -t trusty-backports dictionaries-common
报告
dictionaries-common is already the newest version.
如果我想修复此问题,而不升级我的 Ubuntu 版本,我有什么选择?我觉得我应该以某种方式向 Ubuntu 开发人员报告此问题,因为这是 Ubuntu 稳定 LTS 版本中的一个(极低优先级)错误,据我所知,它没有在待处理 SRU因此,在理想情况下,我会以某种方式报告该问题,然后它就会得到修复。另一方面,我认为词典包不太可能破坏其他包(著名的遗言),也许我应该勇敢面对困难,自己将词典通用版本更新到 1.22.6 或更高版本。但是我不知道如何做到这一点,而且我不知道这是否是明智的行为。我从发射台我可以继续尝试编译和安装,但我担心这样实际上会完全破坏包管理器系统。这不明智吗?在这种情况下应该怎么做?
答案1
非常感谢 muru 鼓励我不仅编译源代码,而且真正制作了一个包裹我对这种情况的理解是,从源代码创建包解决了我担心的问题(破坏包系统),因为(我认为)这个想法是我需要的所有依赖项都由系统处理。
这正是我所做的。除了dictionaries-common_1.22.6.tar.gz
从 launchpad 下载外,我还按照 muru 的建议下载了 dsc 文件dictionaries-common_1.22.6.dsc
。然后我按照以下说明操作:
http://blog.riamaria.com/99/what-to-do-with-a-dsc-file-dpkg/
更准确地说,该计划是制作一个 Debian 软件包
dictionaries-common_1.22.6_all.deb
然后将其安装在我的系统上。
在我开始之前我必须进行安装dpkg-dev
以便能够制作软件包。
然后我跑了
dpkg-source -x dictionaries-common_1.22.6.dsc
这创建了一个新目录dictionaries-common-1.22.6
,我将其放入其中。在这个目录中,我尝试
dpkg-buildpackage -rfakeroot -b
但我第一次运行此命令时失败并出现错误
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 7) quilt (>= 0.40) docbook-dsssl jade w3m slice recode
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
这里发生的事情是,我需要在系统上安装更多软件包才能构建 dictionaries-common。因此,我安装了这些软件包apt-get
,然后重试。当然,这不能保证一定有效 —— 也许 14.04 中这些软件包的默认版本不够用。但我很幸运 —— 它们足够了。第二次尝试该dpkg-buildpackage
命令时成功了。不出所料,我无法以软件包维护者的身份对软件包进行签名,因为我不是软件包维护者,也不知道软件包维护者的密钥。但我认为这不会困扰我。
结果是,现在回到我执行所有这些操作的目录中,我有了一个新文件
dictionaries-common_1.22.6_all.deb
我成功安装了
$ sudo dpkg -i dictionaries-common_1.22.6_all.deb
我的 emacs 中的错误消失了!