ccache, distcc и NetBSD

rmx аватар

Автор: Karol "MaRCHeW" Marchewka
перевод: RMX

Введение.

Компиляция программ из исходных текстов часто занимает очень много времени, особенно на слабых машинах. Имея несколько компьютеров объединенных в сеть, вы можете этот процесс ускорить. В этой статье представлен способ значительного ускорения компиляции программ при помощи ccache и distcc.

Что такое ccache.

ccache - это быстрый кэш компилятора. Временные файлы, которые создаются во время компиляции программы, будут кэшированны, в результате чего, во время обновления установленного программного обеспечения, время затраченное на его компиляцию значительно сокращается. Дополнительную информацию по ccache Вы можете найти на домашней странице проекта.

Что такое distcc.

distcc - это быстрый компилятор С/C++. С его помощью, Вы можете перенести всю тяжесть компиляции программного обеспечения с одной машины на группу компьютеров в сети. Процесс компиляции при помощи distcc подобен обычной компиляции на одиночной машине, с одной лишь разницей. Он намного быстрее, чем компиляция стандартными средствами. Дополнительная информация по теме distcc находится на домашней странице проекта.

Инсталяция инструментария.

Инсталируем ccache.

# pkgfind ccache
devel/ccache: Cache for C/C++ compilers
# cd /usr/pkgsrc/devel/ccache
# make fetch-list | sh
# make
# make install
# make clean
# make clean-depends

Инсталируем distcc.

# pkgfind distcc
devel/distcc: Tool for distributed C/C++ compiling
# cd /usr/pkgsrc/devel/distcc
# make fetch-list | sh
# make
# make install
# make clean
# make clean-depends

Опционально можем еще инсталировать программу watch.

# pkgfind watch
misc/watch: Watch a program with update intervals
# cd /usr/pkgsrc/misc/watch
# make fetch-list | sh
# make
# make install
# make clean
# make clean-depends 

Конфигурация.

После инсталяции программ приступим к их конфигурации. Сначала необходимо инсталировать инструментарий, необходимый для корректной компиляции. Для этой цели нам необходимы исходники системы. Переходим в каталог /usr/src и компилируем необходимый нам инструментарий.

# cd /usr/src
# ./build.sh -O /usr/obj -T /usr/tools tools 

Когда наш инструментарий будет готов, в каталоге /usr/local/bin создаем скрипт distccd.sh, в
который дописываем следущие строки:

#!/bin/sh

export PATH=/usr/tools/i386--netbsdelf/bin/:$PATH
export DISTCC_VERBOSE=1
distccd --daemon --listen 192.168.1.1 --allow 192.168.1.0/24 

где:

192.168.1.1 - IP адрес, на котором запущен демон distccd.
192.168.1.0/24 - IP адреса машин в сети, котрым разрешенно работать с демоном distccd.

Сделаем скрипт исполняемым:

# chmod 755 distccd.sh 

После создания скрипта, к файлу /etc/profile добавляем переменную DISTCC_HOSTS:

DISTCC_HOSTS="localhost 192.168.1.2"
export DISTCC_HOSTS
где:

192.168.1.2 - это адрес другой машины в сети на которой также запущен демон distccd.

В случае, когда машин в сети больше и на них также запущены distccd, мы можем добавить их адреса к переменной DISTCC_HOSTS. Пришло время занятся переменной PKGSRC_COMPILER в файле /etc/mk.conf. Редактируем его и
добавляем к нему строчку:

PKGSRC_COMPILER=distcc ccache gcc

После установки значений переменных следует заново залогинится на консоли, что бы активировать
изменения переменной DISTCC_HOSTS.

Компиляция програм из pkgsrc.

Компиляция программ из pkgsrc протекает следущим образом (в качетсве примера возьмем mc).
Запустим скрипт distcc.sh на всех доступных машинах:

# /usr/local/bin/distcc.sh 

Перейдем в каталог с программой:

# cd /usr/pkgsrc/sysutils/mc 

Выполним команду компиляции:

# make -j2 CC=distcc update 

где:

-j2 - число доступных процессоров.

Внимание!!! Инсталяция программ, а также их обновление, может быть выполненно только командой make -j2 CC=distcc update

Компиляция исходников ядра и пользовательских программ.

В случае компиляции ядра NetBSD при помощи команды make -j2 CC=distcc update у Вас не должно возникнуть никаких проблем. Исходники же самой системы мне не удалось коректно скомпилировать. Сама компиляция пользовательского окружения при помощи команды make -j CC=distcc build прошла без проблем, однако попытка его инсталяции закончилась с ошибками. Такая же попытка компиляции при помощи скрипта
build.sh с опцией -j2 не принесла желаемого результата.

Тестируем ccache и distcc.

Проверяем, все ли коректно работает. Если Вы установили программу watch, то выполните следущую команду:

# watch ccache -s 

для того, что бы проверить работает ли distcc, а также для уверенности того, что компиляция прошла на машинах, на которую указывает переменная DISTCC_HOSTS, выполните следущую команду:

# watch distccmon-text 

Вы не обязаны инсталировать watch. В случае отсутствия программы watch в системе, используйте команды

# ccache -s

а также

# distccmon-text 1 

Если Вы хотите узнать, насколько использование ccache и distcc ускоряет процесс компиляции, выполните команду time, например:

# time make -j2 CC=distcc update 

И на последок.

В конце этого HowTo хотел бы предупредить читателя. Не все программы компилируемые из pkgsrc корректно собираются в системе. Если программа не собирается, попробуйте скомпилировать ее без использования флага -j2 и переменной CC=distcc.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
untitled аватар

Молодец,

Молодец, отличная статья.
Давно и успешно использую все это на linux.