linux下使用分布式编译Electron

分布式编译介绍

分布式编译用于解决编译较大工程时速度慢的问题,充分利用网络上闲置的主机,加快编译时间。
比如Electron,动辄几十个G代码,在本机编译一次需要20几个小时。

一. distcc

distcc是一款符合GPL协议开源的分布式编译协同软件,它分为两个部分:distcc-client和distcc-server。distcc-client将代码的编译请求发送到distcc-server上,而distcc-server则会对代码按要求进行编译后回传至请求方,从而完成编译代码的动作。client可以和server装在同一台电脑上,也即是说一台电脑可以利用其他电脑进行分布编译,也可以在空闲的时候为其他电脑提供分布编译服务。
网上讲解比较多,这里不再做赘述。

二. ICECC

icecream也是一款分布式编译工具,其有至少一个调度服务器,多个客户端组成。

icecc调度

linux下使用分布式编译Electron_第1张图片如图所示,整个配置中host1做为调度器,同时也运行iceccd程序,在host3上编译代码。整个配置中所有运行iceccd的主机先和调度器host1的8765端口连接,图中蓝色箭头线代表,并打开自己的10245端口。
编译时,由调度器告诉host3哪些主机可以使用,host3和这些主机的10245端口建立tcp链接,图中红色双向箭头线代表,发送编译所需的最小环境。

icecc安装

1.直接下载安装

$ apt-get install icecc

2.源码编译安装

$ git clone https://github.com/icecc/icecream.git
$ apt-get install libarchive-dev libcap-ng-dev libarchive-dev liblzo2-2 liblzo2-dev  libzstd-dev\
docbook docbook-utils sciidoc-base docbook-xsl
$ cd icecream
$ ./autogen.sh && ./configure --prefix=/opt/icecream && make &&make install 

如果github上不去,可以直接使用下载好的软件包: 点此下载.

icecc配置

本次讲述安装采用apt-get install icecc方式进行安装。
icecc的配置文件在*/etc/icecc/icecc.conf*
调度服务器上不用更改此文件。

客户段上需要更改此文件的最后一行添加上调度服务器的地址ICECC_SCHEDULER_HOST=“your icecc-scheduler ip”(原理上是会自动搜索调度服务器的地址,但是我们使用在docker中,由于地址做了nat,搜索不到,所以需要配置)。

icecc的客户端启动脚本位于*/etc/init.d/iceccd*
icecc的调度服务器脚本位于*/etc/init.d/icecc-scheduler*

注意
可以不用更改便可以启动,但是为了打开icecc的信息log信息,更改两个配置文件中的logfile=" -l $ICECC_SCHEDULER_LOG_FILE" 为logfile="-vvv -l $ICECC_SCHEDULER_LOG_FILE"

icecc运行

调度服务器 systemct start icecc-scheduler
客户端 systemctl start iceccd

注意
调度服务器上也可以开启客户端

验证icecc

在任意一台开启了iceccd的电脑上进入开源代码目录中执行,上执行

$ export ICECC_DEBUG=info
$ make clean;make -j4 CC='icecc gcc'

编译的同时会输出icecc编译信息,详细的log可以使用如下命令查看:

$ tail -f /var/log/iceccd.log

Docker

在编译中为了快速部署,将icecc做成docker容器,需要注意的是,启动按如下方式:

$ docker run -tid  --name distribute --privileged=true -p 10245:10245/tcp -v /home/workspace/icecc/:/mnt -p 8765:8765/tcp -p 8766:8766/tcp -p 8765:8765/udp dist/debian:v1.0  /sbin/init

将docker中的10245,8765端口映射到本机。

三. 使用ICECC编译ELectron

使用icecc和ccache搭配,加速electron编译
1.安装ccache

$ apt-get install ccache

2.配置ccache

$ export set CCACHE_DIR=/mnt/ccache_lns_gcc_dir/ 
$ export set CCACHE_LOGFILE=/var/log/ccache.log  

ccache的默认缓存大小为5G,可以通过如下命令修改

$ ccache -M 16G

3.查看ccache信息

f5499a6697ab:electron-gn# ccache -s                            
cache directory                     /mnt/ccache_gcc_dir/              
primary config                      /mnt/ccache_gcc_dir//ccache.conf  
secondary config      (readonly)    /etc/ccache.conf                  
stats updated                       Wed Nov 18 03:48:20 2020          
cache hit (direct)                 15900                              
cache hit (preprocessed)              96                              
cache miss                         41581                              
cache hit rate                     27.78 %                            
compile failed                        92                              
couldn't find the compiler             4                              
unsupported code directive             1                              
no input file                          4                              
cleanups performed                     0                              
files in cache                    132820                              
cache size                          13.3 GB                           
max cache size                      16.0 GB                           

4.更改electron配置

$ cat build/toolchain/cc_wrapper.gni
#将其中的cc_wrapper改为如下
cc_wrapper = "ccache"

5.使用distcc编译
配置好后,在当前的终端中执行如下命令

$ export CCACHE_PREFIX=icecc
#使用gn,重新生成ninja所需配置文件
$ export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
$ gn gen out/Testing --args='import("//electron/build/args/testing.gn")';
#调用ninja编译
$ ninja -j 8 -C out/Testing electron

此时可以在其他运行iceccd的机器上使用tail -f /var/log/iceccd.log查看编译输出。

你可能感兴趣的:(linux,linux,分布式)