FreeBSD安装后后记


在写下这篇文章之前,我告诉自己这应该是我最近打算写的最后一篇关于FreeBSD ports的文章了。
从这篇文章之后,我将基本用package的方式安装软件。

继上次安装完Xorg之后,我趁热打铁打算安装一个轻量级的桌面环境。毕竟我的X40的CPU主频才1GHz,内存也只有1G,KDE/Gnome之类的对它来说太沉重了。我没花多久时间就决定按照FreeBSD Handbook的建议安装Xfce4了。

一切根据以往的经验,进入/usr/ports/x11-wm/xfce4 输入:

make config-recursive

然后把所有的选项都设成默认值。
接着就开始了漫长的编译过程。

没过多久,第一个编译错误就出现了。
错误出现在编译/usr/ports/textproc/py-libxml2的地方。
错误信息:/usr/bin/ld: cannot find -lpth
看起来似乎是ld没有找到pth的库文件,而所谓的pth其实就是pthread。
上网搜索的结果,有人建议修改Makefile,让它链接libpthread。
但是当然grep这个包下所有的Makefile时,发现居然有不少的链接都指向了pth库,一个一个修改的话肯定会产生后患。
所以我打算直接从pthread的库生成一个链接,做一个pth库出来。

cd /usr/lib
ln -s libpthread.a libpth.a
ln -s libpthread.so libpth.so
ln -s libpthread_p.a libpth_p.a

再次编译,这个问题就被化解了。

继续编译,第二个错误紧接着来了。
错误在编译/usr/ports/devel/libIDL时出现。
错误信息:
bison -y -d -v 2>/dev/null ./parser.y
make: ***[stamp-parser] Broken pipe:13
寻找了很久都没有找到解决的方法,最后用package直接把libIDL这个包安装上去了。

pkg_add -r libIDL

安装的时候提示我,libIDL依赖的包中起码有4个包的版本过新。可能那就是编译错误的原因吧。
唉早知今日,就不那么急于更新ports了。

继续编译,第三个错误又来了。
在编译/usr/ports/devel/talloc时,
出现错误:
autom4te-2.62′ need GNU m4 1.4 or later: /usr/local/bin/gm4
autoheader-2.62: ‘/usr/local/bin/autom4te-2.62’ failed with exit status: 1
很明显,编译需要GNU版本的m4,而FreeBSD默认在/usr/bin下安装了BSD版本的m4。
可能port找到了这个m4,但是还不够智能到能够做出自动安装GNU m4的选择。
没办法,手动帮它安装一下吧:

cd /usr/ports/devel/m4 && make install clean

在解决了这三个编译错误之后,Xfce4终于在漫长的过程中安装完成了。
全部编译过程在我的ThinkPad X40上进行了超过8个小时。

用ports安装软件,毕竟是牵涉到众多的依赖包。很多时候并不是一帆风顺的。
遇到一两个编译错误可能非常普遍。
而这几天的安装过程让我学会了在遇到不熟悉的编译过程中如何解决问题的方法。
一般遇到问题,先记下错误提示,找出错误的包的名称。
如果是链接库找不到之类的错误,可以去/usr/lib下看看有没有对应的库。
如果是提示找不到必须的软件,可以在www.freshports.org上搜索软件的名称。
如果找到解决的办法,可以直接进入到出问题的包的目录单独完成它的编译。
如果实在找不到解决的办法,还有最后一招:直接用package安装出问题的包。

ports能做到的自动化处理其实已经让我很吃惊了。虽然大多数时候用ports算是有点吃力不讨好。
基本上只要不是太新或者太旧的硬件,用package安装软件已经足够了。
当然,涉及到对既存的软件的修改或者研究的话,就有意义了。

[stextbox id=”info”]今天(2010年4月3日凌晨)才看到这条新闻。我的运气太不好了,似乎在最不应该更新ports的时候更新了它。不过我还是挺过来了,编译错误不可怕,只要耐心对待它,嗯嗯。[/stextbox]

Tagged on: ,

2 thoughts on “FreeBSD安装后后记

  1. Pingback: FreeBSD安装记 ­ CodeCake

发表评论

电子邮件地址不会被公开。