上周,我在捣鼓 Funtoo 的时候,遇到了一个奇怪的问题,我估计是某一个包的一个 bug。
我想安装 GNOME,在 Funtoo 上通过 epro 命令调整 Profile,加上 gnome 的 mix-ins,之后 emerge 就可以了。在这一步的时候,我看到 subarch 还是 generic_64。过去我不打确定,不好乱动,因为第一次安装的时候,我把 broadwell 搞成了 haswell 了,导致硬件错误,所以后来就用了 generic。可现在我已经很确定自己的 CPU 是 broadwell 的,而且我的 /etc/make.conf
里也是写的 broadwell,因此这次我也把 subarch 改成了 intel64-broadwell。
之后就是编译,我闲着也是闲着,于是就 emerge -e @world
,把 800 多个包从头编译了一遍,当然 libreoffice、webkit-gtk 这样的大包跳过,结果也没有花太多时间,一个半天就搞定。之后其它没有遇到问题,就是 weechat 不能运行了。执行命令后,会显示出 ChanServ 登录的画面,接着就退出,说 invalid hardware set 之类的错误提示。查看 Log,能看到这样的信息:
Apr 20 11:03:30 localhost kernel: traps: weechat[6096] trap invalid opcode ip:7f29d9e66dc3 sp:7ffcfba73ec8 error:0
我上 IRC 上询问,得到的答复都是让我验证 MARCH 这样的参数,最终也没有解决问题。我看了 Funtoo Wiki 上说这样可以获取更快的执行速度,因此按理说从官方角度,应该也是支持这样操作的。
Weechat 上不去了,我临时搜索其它的 IRC 客户端,一开始用 Thunderbird 里的,后来我尝试了 HexChat,结果出乎意料的好,弄到最后我觉得我不再需要 weechat 了呢。
不过,GNOME 安装好了,我启动起来,发现无法进入终端。但之前安装的 rxvt-unicode 还可以进。我一开始也很奇怪,之前从来没有遇到 Gnome Terminal 这么基础的软件出问题。不过我在 rxvt 里属于命令启动,也看到了错误提示。而且在 log 里也有:
Apr 22 18:56:50 localhost kernel: traps: gnome-terminal-[24446] trap invalid opcode ip:7ffb6e4e4dc3 sp:7fff7e729488 error:0
之后我反应过来,问题其实不是 weechat 和 gnome-terminal 本身,二是它们依赖的其它的某个包,发生了这样的错误。我最终把 subarch 有改回了 generic_64,重新编译,问题就消失了。