Cnangel: June 2010的归档

distcc 介绍

| 暂无评论

Distcc 介绍

  • distcc是一个非常快且免费的分布式C/C++编译工具,distcc分为两个部分:
    1. distcc:distcc是一个类似客户端的程序,不过它的角色是个编译器,可以让C/C++代码在很多网络服务器上进行分布式的编译,就像本地编译一 样,当然比本地编译快很多。
    2. distccd:distccd是一个守护进程,每个网络服务器上都需要安装这个守护进程,用来处理distcc发送过来的各种计算资源。
    3. distccmon-text:distccmon-text是一个监控程序,用来监控编译的分布情况以及网络服务器编译使用情况。
  • 安装了distcc后,所有的网络服务器不需要挂载同样一份文件系统,不需要服务器时间同步,也不要求同样的库文件或者头文件,甚至服务器之间可以允许不 同的处理器和操作系统。

Distcc 简单架构

distcc.png

Distcc 安装

  • 在每台空闲的网络服务器上,下载distcc(目前到写完这篇文章为止,distcc最新版本为2.18.3),解压,编译安装如下:
  ~$ wget http://distcc.samba.org/ftp/distcc/distcc-2.18.3.tar.bz2
~$ tar -jxf distcc-2.18.3.tar.bz2
~$ cd distcc-2.18.3
~$ ./configure && make && sudo make install
  • 在上面安装的distcc服务器上,启动distcc的daemon进程,还可以通过--allow选项指定网关的访问权限。
  ~$ sudo /usr/bin/distccd --daemon --allow 10.0.0.0/8 --user cnangel
  • 环境变量设置,在所有的安装distcc的服务器上,执行:
  ~$ export DISTCC_HOSTS='10.20.137.1 10.20.137.2 10.20.137.3'

当然,为了保持变量值,可以将上述语句放入到$HOME/.bash_profile当中,另外,可以根据自己爱好不同,指定如下变量:

  ~$ export CC=distcc
~$ export CXX="distcc g++"
~$ alias make="make -j 4" (一般最好为服务器数的1.5倍最佳)
  • 最后,可以尝试编译自己的工程了。
  ~$ cd ~/works/myproject; ./configure ; make

是不是比平常快了很多呢! :)

小结

  • 具官方统计,在内核Linux2.4.19,单台CPU 1700MHz Pentium IV的机器使用distcc(v0.15)花费了6分45秒,而使用distcc在三台机器上(100Mbps)交叉编译,时间花费2分钟30秒,大概快 2.6倍左右 :)。
  • 一般来说,使用distcc节省了很多的编译时间,对于编译时间长的大工程来说,是一个不错的选择。

一致性哈希简单介绍

  •  Consistent Hashing 算法早在 1997 年就在论文《Consistent hashing and random trees》中被提出,提出了在动态变化的Cache环境中,哈希算法应该满足的4个适应条件:
  1. 平衡性(Balance)
  2. 单调性(Monotonicity)
  3. 分散性(Spread)
  4. 负载(Load)

如何去除rpm的公钥

| 暂无评论
一不小心导入了同名称但是不同内容的公钥,然后在再次导入正确的公钥的时候,发现已经导入不了,提示内容如下:
[cnangel@localhost cnangel]$sudo rpm --import RPM-GPG-KEY-cnangel
error: RPM-GPG-KEY-cnangel: import failed.
而查看rpm的选项没有delete相关操作;重新import并使用--force选项,则提示:
rpm: only installation, upgrading, rmsource and rmspec may be forced
查看路径/etc/pki/rpm-gpg/下面也没有刚才错误的导入公钥文件,该如何删除错误的公钥而导入正确的公钥呢?
经过查看rpm和gpg相关文档,可以用如下方案解决:
[cnangel@localhost ~]$rpm -q gpg-pubkey
gpg-pubkey-57bbccba-4a6f97af
gpg-pubkey-16ca1a56-4a100959
gpg-pubkey-a3a882c1-4a1009ef
原来,经过查询获得gpg-pubkey的公钥就是这些结果,不过无法显示是哪个文件导入的,不过还是有版本,这个查询接口的排序是时间先后顺序,所以可以推算刚才导入错误的文件是第几个,然后删除即可:
[cnangel@localhost ~]$sudo rpm -e --allmatches gpg-pubkey-16ca1a56-4a100959
接着,可以导入正确的公钥了 :)

关于此归档

这里是CnangelJune 2010发表的所有日记。

上一篇日记Cnangel: May 2010

下一篇日记Cnangel: July 2010

主索引归档页可以看到最新的日记和所有日记。

August 2012

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Powered by Movable Type 5.14-en