Prog/分散ビルド/distcc
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#topicpath
* 目次 [#p89c0df5]
#contents();
/////////////////////////////////////////////////////////...
* distcc [#distcc]
- distcc は、C/C++/Objective-C/Objective-C++ のビルドをネ...
/////////////////////////////////////////////////////////...
* setup [#setup]
//=======================================================...
** 前提 [#rf3261d3]
- distcc によるクラスタを構成する各 host は、同じバージョ...
- -march=native オプションは使えない
-- CGG 4.3.0 からサポートされたもので、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 t...
# You can list multiple hosts/networks separated by spac...
# Networks have to be in CIDR notation, e.g. 192.168.1.0...
# 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...
#
# LISTENER="127.0.0.1"
# distcc の命令を listen するインターフェース(=自機の I...
LISTENER="192.168.100.12"
#
# You can specify a (positive) nice level for the distcc...
#
# 引き受ける Job の優先度(高:-20〜19:低)
NICE="10"
#
# You can specify a maximum number of jobs, the server w...
#
# 引き受ける job の上限数(マシンの性能・運用方針によっ...
JOBS="4"
#
# Enable Zeroconf support?
# If enabled, distccd will register via mDNS/DNS-SD.
# It can then automatically be found by zeroconf enabled...
# without the need of a manually configured host list.
#
# zeloconf 環境を構築している場合は true にする。
ZEROCONF="false"
//=======================================================...
** setup (master) [#setup-master]
*** 環境変数 DISTCC_HOSTS の設定 [#kcb503c7]
- distcc の命令を受けるホストの "IP address/多重度" を指...
- 以下のいずれかの方法で設定する。
-- 環境変数を直接設定する
$ export DISTCC_HOSTS="192.168.0.0/8 192.169.1.0/4 local...
--- 複数エントリを指定する場合は、エントリ間を半角スペー...
-- ${HOME}/.distcc/hosts に記載する
192.168.0.0/8,lzo 192.169.1.0/4,cpp,lzo localhost
--- 複数エントリを指定する場合は、エントリ間を半角スペー...
--- --randomize を指定したい場合も、 ${HOME}/.distcc/host...
--- , の後に、各ホストに対するオプションを指定出来る
|~option |~description |~remark |
|lzo |TCP 又は SSH で転送するこのホストで LZO 圧縮を...
|cpp |distcc-pump mode をこのホストに対して有効にする...
|auth |GSSAPI-based mutual authentication をこのホスト...
-- 注意
--- DISTCC_HOSTS の設定に於いて、環境変数(方法1)と ${H...
|~option |~description |~remark |
|--randomize |job を投げる対象ホストのオーダーをランダム...
|+zeroconf | |distcc のビルド時に avahi support が有効...
- gcc の置き換え
-- 何らかの方法で、"gcc" を "distcc gcc" に置き換える。
-- 方法1:Makefile の記載を変える
(変更前) CC := gcc
(変更後) CC := distcc gcc
-- &aname(compiler-wrapper){方法2:コマンドを置き換える}...
--- 環境変数で、${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]] で...
#!/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]
終了行:
#topicpath
* 目次 [#p89c0df5]
#contents();
/////////////////////////////////////////////////////////...
* distcc [#distcc]
- distcc は、C/C++/Objective-C/Objective-C++ のビルドをネ...
/////////////////////////////////////////////////////////...
* setup [#setup]
//=======================================================...
** 前提 [#rf3261d3]
- distcc によるクラスタを構成する各 host は、同じバージョ...
- -march=native オプションは使えない
-- CGG 4.3.0 からサポートされたもので、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 t...
# You can list multiple hosts/networks separated by spac...
# Networks have to be in CIDR notation, e.g. 192.168.1.0...
# 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...
#
# LISTENER="127.0.0.1"
# distcc の命令を listen するインターフェース(=自機の I...
LISTENER="192.168.100.12"
#
# You can specify a (positive) nice level for the distcc...
#
# 引き受ける Job の優先度(高:-20〜19:低)
NICE="10"
#
# You can specify a maximum number of jobs, the server w...
#
# 引き受ける job の上限数(マシンの性能・運用方針によっ...
JOBS="4"
#
# Enable Zeroconf support?
# If enabled, distccd will register via mDNS/DNS-SD.
# It can then automatically be found by zeroconf enabled...
# without the need of a manually configured host list.
#
# zeloconf 環境を構築している場合は true にする。
ZEROCONF="false"
//=======================================================...
** setup (master) [#setup-master]
*** 環境変数 DISTCC_HOSTS の設定 [#kcb503c7]
- distcc の命令を受けるホストの "IP address/多重度" を指...
- 以下のいずれかの方法で設定する。
-- 環境変数を直接設定する
$ export DISTCC_HOSTS="192.168.0.0/8 192.169.1.0/4 local...
--- 複数エントリを指定する場合は、エントリ間を半角スペー...
-- ${HOME}/.distcc/hosts に記載する
192.168.0.0/8,lzo 192.169.1.0/4,cpp,lzo localhost
--- 複数エントリを指定する場合は、エントリ間を半角スペー...
--- --randomize を指定したい場合も、 ${HOME}/.distcc/host...
--- , の後に、各ホストに対するオプションを指定出来る
|~option |~description |~remark |
|lzo |TCP 又は SSH で転送するこのホストで LZO 圧縮を...
|cpp |distcc-pump mode をこのホストに対して有効にする...
|auth |GSSAPI-based mutual authentication をこのホスト...
-- 注意
--- DISTCC_HOSTS の設定に於いて、環境変数(方法1)と ${H...
|~option |~description |~remark |
|--randomize |job を投げる対象ホストのオーダーをランダム...
|+zeroconf | |distcc のビルド時に avahi support が有効...
- gcc の置き換え
-- 何らかの方法で、"gcc" を "distcc gcc" に置き換える。
-- 方法1:Makefile の記載を変える
(変更前) CC := gcc
(変更後) CC := distcc gcc
-- &aname(compiler-wrapper){方法2:コマンドを置き換える}...
--- 環境変数で、${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]] で...
#!/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]
ページ名: