当前位置: 首页 > 工具软件 > distcc > 使用案例 >

ubuntu16.04编译&安装distcc3.3.3

屠盛
2023-12-01

1.什么是distcc

distcc是一个开源的分布式C/C++、Object C/C++编译器前端,用于将(Object)C/C++的编译任务分发到其它安装有distcc的主机上进行编译,进而实现提高编译速度的效果,根据官网描述,在三台主机组成的分布式编译环境下,编译速度可提高2.6倍。更多信息可参考distcc官网:https://distcc.github.io

2.编译和安装distcc

以ubuntu16.04为例,在每一台需要参与分布式编译的ubuntu服务器上执行步骤23

  • 下载和解压distcc源码(3.3.3版本)
    wget https://github.com/distcc/distcc/releases/download/v3.3.3/distcc-3.3.3.tar.gz
    tar -zxvf distcc-3.3.3.tar.gz
  • 解决依赖
    首先检查有没有安装以下依赖项
    gcc make python3 python3-dev libiberty-dev
    如果没有安装,则需要安装对应的依赖项,以python3-dev为例:
    更新软件源&sudo apt-get update
    sudo apt-get install python3-dev
    这里需要稍微注意一下,python3的版本不能过高,因为time.clock在python3.8版本中被移除了,而distcc源码中会使用到time.clock,这里有两种办法,一是替换time.clocktime.perf_counter(),二是通过sudo apt-get install python3=[version]在安装python3时指定python3版本,具体版本号可以到https://packages.ubuntu.com/sv/中查询。
  • 编译
  1. cd distcc-3.3.3
  2. ./configure
  3. make
  4. sudo make install
    至此,distcc就安装好了,但是还需要进行一些配置才能使用

3.配置distccd守护进程

distcc只是一个前端,负责将任务分发给其它主机,那么提供编译服务的主机上就需要开启一个守护进程监听并处理收到的编译任务,这就是distccd守护进程。

  • 配置distcc主机列表
    /etc/profile中追加
    export DISTCC_HOSTS="localhost host1 host2 hostn"
    export PATH="/usr/lib/distcc:$PATH"
    这样可以让服务器上每个用户都能使用distcc进行编译,如果只希望某个用户可以使用distcc,则将上述内容追加到指定用户的~/.bashrc中而不是/etc/profile
    其中localhost直接就写localhost,如不写localhost会导致本机不参与编译,所有编译任务都由其它主机完成;
    host1 - hostn写可以分配编译任务的主机的IP即可,有多少写多少,以空格分隔。
    注意:此配置并不会立即生效,如果在配置未生效的情况下直接启动distcc守护进程会导致任务不会分发到其它主机,如果期望配置立即生效,可以通过关闭ssh再重新连接的方式使配置生效,也可以直接使用shell export一下。
  • 配置distcc守护进程开机自启
    /etc/rc.local中追加
    distccd --daemon --user nobody -a [network]/[mask]
    其中network即所有distcc主机所在的网络,mask及对应的子网掩码,如果想让任意主机都可以使用当前主机的distcc服务,那么可以配置成0.0.0.0/0,但是这么做会存在一定的安全隐患,一般而言都是配置成特定子网及其掩码,例如:192.168.0.0/24,这样只允许子网中的主机使用当前主机的distcc服务进行分布式编译。
    此外,这个配置是在ubuntu开机的时候才会生效,即开机的时候启动distcc守护进程,如需立即启动,可执行以下命令:
    sudo distcc --daemon --user nobody -a [network]/[mask]
    或者
    distcc --daemon -a [network]/[mask]

4.使用distcc进行编译

到需要编译的项目中,将make命令改为make -j32 CC=distcc进行编译。

 类似资料: