- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2022-04-28T15:52:12+00:00","","")
#author("2022-05-03T15:19:12+00:00","","")
#topicpath
* 目次 [#p89c0df5]
#contents();
///////////////////////////////////////////////////////////////////////////////
* distcc [#distcc]
- distcc は、C/C++/Objective-C/Objective-C++ のビルドをネットワーク上の複数の host に分散して行う機能を実現する。
///////////////////////////////////////////////////////////////////////////////
* setup [#setup]
//=============================================================================
** [#w704e209]
** 前提 [#rf3261d3]
- distcc によるクラスタを構成する各 host は、同じバージョンのコンパイラがインストールされている必要がある。
- -march=native オプションは使えない
-- CGG 4.3.0 からサポートされたもので、CPU自動判別と最適化の機能を有効にするオプション。
-- このオプションを使用すると、それぞれのプロセッサでの最適化されたコードが生成され、それらが混在してしまうことになる。(クラスタを構成する host が全て同じ CPU を積んでいるなら問題なさそう)
//=============================================================================
** setup (master, slave 共通) [#setup-common]
- 全てのマシンに distcc パッケージをインストールする
- /etc/default/distcc
-- 記述例
# Defaults for distcc initscript
# sourced by /etc/init.d/distcc
#
# should distcc be started on boot?
#
# マシンの起動時に distccd を自動起動する場合は true にする。
STARTDISTCC="true"
#
# Which networks/hosts should be allowed to connect to the daemon?
# You can list multiple hosts/networks separated by spaces.
# Networks have to be in CIDR notation, e.g. 192.168.1.0/24
# Hosts are represented by a single IP address
#
# distcc の命令を受けるホストを IP address の範囲で指定
ALLOWEDNETS="192.168.0.0/24"
#
# Which interface should distccd listen on?
# You can specify a single interface, identified by it's IP address, here.
#
# LISTENER="127.0.0.1"
# distcc の命令を listen するインターフェース(=自機の IP address)
LISTENER="192.168.100.12"
#
# You can specify a (positive) nice level for the distcc process here
#
# 引き受ける Job の優先度(高:-20〜19:低)
NICE="10"
#
# You can specify a maximum number of jobs, the server will accept concurrently
#
# 引き受ける job の上限数(マシンの性能・運用方針によって設定する)
JOBS="4"
#
# Enable Zeroconf support?
# If enabled, distccd will register via mDNS/DNS-SD.
# It can then automatically be found by zeroconf enabled distcc clients
# without the need of a manually configured host list.
#
# zeloconf 環境を構築している場合は true にする。
ZEROCONF="false"
//=============================================================================
** setup (master) [#setup-master]
*** 環境変数 DISTCC_HOSTS の設定 [#kcb503c7]
- distcc の命令を受けるホストの "IP address/多重度" を指定する。多重度は省略すると 4 になる。
- 以下のいずれかの方法で設定する。
-- 環境変数を直接設定する
$ export DISTCC_HOSTS="192.168.0.0/8 192.169.1.0/4 localhost"
--- 複数エントリを指定する場合は、エントリ間を半角スペースで区切る
-- ${HOME}/.distcc/hosts に記載する
192.168.0.0/8,lzo 192.169.1.0/4,cpp,lzo localhost
--- 複数エントリを指定する場合は、エントリ間を半角スペースで区切る
--- --randomize を指定したい場合も、 ${HOME}/.distcc/hosts に記載すれば良い。
--- , の後に、各ホストに対するオプションを指定出来る
|~option |~description |~remark |
|lzo |TCP 又は SSH で転送するこのホストで LZO 圧縮を有効にする | |
|cpp |distcc-pump mode をこのホストに対して有効にする | |
|auth |GSSAPI-based mutual authentication をこのホストで有効にする | |
-- 注意
--- DISTCC_HOSTS の設定に於いて、環境変数(方法1)と ${HOME}/.distcc/hosts (方法2)の両方を設定した場合、distcc 起動直前に設定している方法1での設定が優先され、それ以外の設定は無視される。
|~option |~description |~remark |
|--randomize |job を投げる対象ホストのオーダーをランダムにする |指定しない場合、jpb を投げられるホストは環境変数 DISTCC_HOSTS で先に指定された順に偏重する |
|+zeroconf | |distcc のビルド時に avahi support が有効になっているときのみ使える |
- gcc の置き換え
-- 何らかの方法で、"gcc" を "distcc gcc" に置き換える。
-- 方法1:Makefile の記載を変える
(変更前) CC := gcc
(変更後) CC := distcc gcc
-- &aname(compiler-wrapper){方法2:コマンドを置き換える};(${HOME}/bin/gcc に wrapper を作る)
--- 環境変数で、${HOME}/bin 配下を優先的に見に行くようにする
$ export PATH=${HOME}/bin:${PATH}
--- ${HOME}/bin/gcc
#!/bin/bash
distcc gcc ${@}
-- 方法3:configure で設定する場合
CC="distcc gcc" CXX="distcc g++" ./configure
//=============================================================================
** setup (slave) [#setup-slave]
//=============================================================================
** monitor [#monitor]
- distccmon-gnome
-- GUI の distcc モニタ
-- distccmon-gnome パッケージでインストールする。
- distccmon-text
-- CUI の distcc モニタ
- distcc パッケージに含まれている。
///////////////////////////////////////////////////////////////////////////////
* ccache と併用する [#e1245eda]
+ ccache パッケージを master ホストにインストールする
+ コンパイラコマンドを置換する
-- 方法1:Makefile の記載を変える
(変更前) CC := gcc
(変更後) CC := ccache distcc gcc
-- [[方法2:コマンドを置き換える>#compiler-wrapper]] で設定する置き換えコマンドの中身を下記のようにする(ccache を追記):
#!/bin/bash
ccache distcc gcc ${@}
-- 方法3:configure で設定する場合
CC="ccache distcc gcc" CXX="ccache distcc g++" ./configure
///////////////////////////////////////////////////////////////////////////////
* gcc wrapper [#g5a218a3]
- ${HOME}/bin/gcc (or g++, clang, clang++, gobjc, gobjc++)
#!/bin/bash
IS_MONITOR_EXISTS=$(pgrep distccmon-gnome | wc -l);
if [ ${IS_MONITOR_EXISTS} -eq 0 ]; then
DISPLAY=${DISPLAY} distccmon-gnome &
fi
unset IS_MONITOR_EXISTS;
CMD_CCHACHE=
IS_CCACHE_EXISTS=$(which ccache | wc -l);
if [ ${IS_CCACHE_EXISTS} -ne 0 ]; then
CMD_CCHACHE=ccache
fi
${CMD_CCACHE} distcc gcc ${@}
///////////////////////////////////////////////////////////////////////////////
* 参考リンク [#c326f890]