ccache, distcc и NetBSD
Автор: 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.
- Страница для печати
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
- 4335 просмотра
Молодец,
Молодец, отличная статья.
Давно и успешно использую все это на linux.