LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1093|回复: 7

用distcc来玩LFS,请大家不要回复,等我写完。

[复制链接]
发表于 2007-5-11 11:18:30 | 显示全部楼层 |阅读模式
最近换了家公司,还是家外资企业,设备都不错,不好好利用一下不是很可惜?来让我们一起用distcc来玩LFS。

One for all, all for one.

我的Workstation上运行的是Fedora Core 6,而服务器上运行的是RHEL5。而且我的Workstation才有2G的内存,还要运行Eclipse。所以不打算让本机参与编译,计划让几台服务器来编译。我将参考LFS Book 6.2但会使用目前最新的软件包。

由于工作也非常忙,而且服务器需要做nightly build。我只能利用下班后到8:00 PM的这段时间来编译LFS,所以进度会比较慢,希望大家有点耐心。
 楼主| 发表于 2007-5-11 11:40:12 | 显示全部楼层

配置远程管理

其实这和distcc和LFS都扯不上关系,不感兴趣完全可以跳过这一部份。

Linux下有ssh和vnc来进行远程管理,ssh是字符界面的,有时候会有点不方便;vnc实在是很难用。首先访问
http://www.nomachine.com/download.php
下载nxclient, nxnode, nxserver这3个RPM包。上传到服务器。
  1. sftp ary@192.168.0.6
  2. put nx*.rpm
  3. quit
复制代码
安装
  1. ssh ary@192.168.0.6
  2. su
  3. rpm -ivh nxclient*.rpm
  4. rpm -ivh nxnode*.rpm
  5. rpm -ivh nxserver*.rpm
复制代码
在我的Workstation上也安装nxclient。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-15 15:10:19 | 显示全部楼层
安装并配置distcc
首先下载distcc的源代码,
http://distcc.samba.org/
这里也就不再浪费口水讲怎么编译,安装distcc了。讲讲具体的配置吧。附件中的是RHEL的distccd服务脚本,下载后解压并移动到/etc/init.d目录下。在移动前先编辑下distccd这个文件看看。
  1. tar jxvf distccd.tar.bz2
  2. su
  3. mv distccd /etc/init.d/
  4. mkdir -p /var/log/distccd
  5. chown nobody.nobody /var/log/distccd
  6. cd /etc/rc0.d
  7. ln -s ../init.d/distccd K15distccd
  8. cd ../rc3.d
  9. ln -s ../init.d/distccd S85distccd
复制代码
由于是以nobody用户启动distccd守护进程,所以需要将log文件夹给nobody用户写的权限。
虽然可以用“/sbin/service distccd start”这样的方式启动、停止distccd服务,但chkconfig并不支持我写的这个脚本,所以手工链接在0级停止服务,在3级启动服务。每台参与分布编译的机器都需要这样配一下。例如我配了192.168.0.6, 192.168.0.7,  192.168.0.8三台服务器。
修改本机的环境,定义参加分布式编译的服务器。
  1. cd
  2. vi .bash_profile
复制代码
增加下面的2行
DISTCC_HOSTS='localhost 192.168.0.6 192.168.0.7 192.168.0.8'
export DISTCC_HOSTS
以超级用户修改cc的链接,
  1. su
  2. rm /usr/bin/cc
  3. ln -s /usr/local/bin/distcc /usr/bin/cc
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-16 09:14:19 | 显示全部楼层
编译binutils-2.17
由于修改了cc的链接,只需要在make时加入-j参数即可。一般用参与分布式编译的CPU总数的2倍。
  1. mkdir -v ../binutils-build
  2. cd ../binutils-build
  3. ../binutils-2.17/configure --prefix=/tools --disable-nls
  4. make -j28
  5. make install
  6. make -C ld clean
  7. make -C ld LIB_PATH=/tools/lib
复制代码
会报
/tools/bin/ld: unrecognized option '--hash-style=gnu'
的错误,这不是因为使用了distcc,而是因为make install已经将ld安装到了/tools/bin,新的ld不支持--hash-style=gnu参数。
  1. mv /tools/bin/ld /tools/
  2. make -C ld LIB_PATH=/tools/lib
  3. cp -v ld/ld-new /tools/bin
  4. mv /tools/ld /tools/bin/
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-16 09:25:51 | 显示全部楼层
binutils的下载地址是:
http://www.gnu.org/software/binutils/
另外我的workstation又装了RHEL5和openSUSE 10.2,现在有3个系统在上面了,所以前面distcc配置时把本机也加入了参与编译。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-16 09:27:16 | 显示全部楼层
编译并安装GCC 4.2, Glibc 2.5
按照LFS Book来编译安装,只是在configure时会说找不到编译器,我没有找到问题的原因,解决的办法是不使用distcc来编译gcc。

由于distcc要求分布式编译的gcc版本一样,因此在参与编译的服务器上也要编译并安装GCC 4.2,我把它安装到了/opt目录下,并用alternative来管理GCC的版本。
(顺便说一下,alternative确实是个管理不同版本的好东西,比如说不同版本的JDK。)

编译Glibc时会说找不到头文件,重新配置一下,去掉--with-header的参数;或者在参加分布式编译的每台机器上都建个/tools的目录,并将kernel的头文件拷到/tools/include下。

以后只在关键的地方说一下,如此好贴没人看,心寒啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-28 08:57:33 | 显示全部楼层
已经全部编完了,除了GCC用distcc编译用问题外,其它都没什么大问题,呵呵。
结贴了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-28 08:57:49 | 显示全部楼层
补充一下,在第6章编译Glibc作为默认库时,最好加上linux-thread。
还有编译过程中会报找不到libidn/idna.h的头文件,需要建个链接。在编译目录下
ln -s ../glibc-2.5/glibc-libidn-2.5/ ../libidn
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表