Узнайте, какие возможности имеет Portage, такие как поддержка распределенной компиляции, ccache, и многое другое. 2 2012-07-24
Возможности Portage

В Portage есть несколько дополнительных возможностей (features), которые значительно улучшат ваше впечатление от Gentoo. Многие из этих возможностей полагаются на определенные программы, повышающие производительность, надежность, безопасность и т.п.

Для включения и выключения определенных возможностей Portage нужно редактировать в файле /etc/portage/make.conf переменную FEATURES, в которой перечислены ключевые слова, разделенные пробелами, обозначающие различные возможности. Иногда для использования соответствующих возможностей потребуется установка дополнительных утилит.

Здесь перечислены не все возможности, поддерживаемые Portage. Полный перечень представлен на странице справки make.conf:

$ man make.conf

Чтобы узнать, какие возможности включены по умолчанию, запустите emerge --info и найдите переменную FEATURES (или отфильтруйте ее с помощью grep):

$ emerge --info | grep FEATURES
Распределенная компиляция Использование distcc

distcc — программа, распределяющая компиляцию по нескольким, не обязательно одинаковым, машинам в сети. Клиент distcc посылает всю необходимую информацию на доступные серверы distcc (на которых выполняется distccd), чтобы они могли компилировать для клиента части исходного кода. Чистый выигрыш — более быстрая компиляция.

Подробная информация о distcc (и как заставить его заработать в Gentoo) находится в нашем описании distcc в Gentoo.

Установка distcc

Distcc поставляется с графическим монитором (средством контроля), позволяющим отслеживать задачи, которые ваш компьютер отсылает на компиляцию. Если вы используете Gnome, тогда добавьте «gnome» к переменной USE. А если вы не пользуетесь Gnome, но при этом хотите пользоваться монитором, добавьте «gtk» к переменной USE.

# emerge distcc
Подключение поддержки Portage

Добавьте distcc к переменной FEATURES в файле /etc/portage/make.conf. Затем отредактируйте переменную MAKEOPTS, как вам нравится. Известная рекомендация — указывать директиву «-jX», где X — число центральных процессоров, на которых работает distccd (включая текущий компьютер) плюс один; у вас могут получиться лучшие результаты и с другими значениями.

Теперь запустите distcc-config и введите список доступных серверов distcc. Для простоты примера, предположим, что доступные серверы DistCC — 192.168.1.102 (текущий компьютер), 192.168.1.103 и 192.168.1.104 (два «удаленных» компьютера):

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

Не забудьте также запустить демон distccd:

# rc-update add distccd default
# /etc/init.d/distccd start
Кэширование компиляции О средстве ccache

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

Если вы интересуетесь подробностями ccache, пожалуйста, посетите домашнюю страницу ccache.

Известно, что ccache вызывает некоторые ошибки компиляции. Иногда она оставляет ненужные, или испорченные файлы, что может привести к пакетам, которые не могут быть установлены. Если это случится (если вы получите ошибки типа "File not recognized. File truncated"), попробуйте перекомпилировать приложение с отключенным ccache (FEATURES="-ccache" в /etc/portage/make.conf) прежде чем писать о баге. Если вы не делаете какую-то разработку, не включайте ccache.
Установка ccache

Для установки ccache, выполните emerge ccache:

# emerge ccache
Подключение поддержки Portage

Откройте /etc/portage/make.conf и добавьте ccache к переменной FEATURES. Затем добавьте новую переменную по имени CCACHE_SIZE (размер кэша), и установите её равной «2G»:

CCACHE_SIZE="2G"

Для проверки работоспособности ccache, запросите статистику ccache. Из-за того, что Portage использует другой домашний каталог ccache, вам также потребуется установить переменную CCACHE_DIR:

# CCACHE_DIR="/var/tmp/ccache" ccache -s

Домашний каталог ccache по умолчанию — /var/tmp/ccache; изменить это назначение можно, определив переменную CCACHE_DIR в /etc/portage/make.conf.

Однако, при запуске ccache используется каталог по умолчанию, ${HOME}/.ccache, вот почему при запросе статистики (Portage) ccache требуется определять переменную CCACHE_DIR.

Использование ccache для компиляции Си не в Portage

Если вы хотите использовать ccache для компиляций не в Portage, добавьте /usr/lib/ccache/bin в начало вашей переменной PATH (перед /usr/bin). Это можно сделать, отредактировав .bash_profile в домашнем каталоге вашего пользователя. Использование .bash_profile это один из способов определения переменных PATH.

PATH="/usr/lib/ccache/bin:/opt/bin:${PATH}"
Поддержка двоичных пакетов Создание готовых (заранее собранных) пакетов

Portage поддерживает установку заранее собранных готовых пакетов. Несмотря на то, что в саму Gentoo не входят заранее собранные пакеты (за исключением снимков GRP), Portage можно настроить на полноценное управление готовыми пакетами.

Чтобы создать двоичный пакет, можно использовать quickpkg, если пакет уже установлен в вашей системе, или emerge с параметрами --buildpkg или --buildpkgonly.

Если вы хотите, чтобы Portage создавал двоичные пакеты из каждого пакета, который вы будете устанавливать, добавьте buildpkg к переменной FEATURES.

Расширенная поддержка создания наборов готовых пакетов имеются в catalyst. Для получения подробной информации о catalyst, пожалуйста, прочитайте распространенные вопросы о catalyst (англ.).

Установка двоичных пакетов

Хотя в Gentoo такого хранилища нет, вы можете создать централизованное хранилище для заранее скомпилированных двоичных пакетов. Чтобы использовать такое хранилище, потребуется указать Portage путь к нему с помощью переменной PORTAGE_BINHOST. Например, если двоичные пакеты находятся на ftp://buildhost/gentoo:

PORTAGE_BINHOST="ftp://buildhost/gentoo"

При установке двоичных пакетов, указывайте в команде emerge параметр --getbinpkg вместе с параметром --usepkg. Первый указывает emerge загрузить двоичный пакет c сервера, определенного раньше, а второй сообщает emerge, что до загрузки исходных кодов и их компиляции сначала нужно попытаться установить этот двоичный пакет.

Например, чтобы установить gnumeric из двоичных пакетов:

# emerge --usepkg --getbinpkg gnumeric

Подробную информацию о параметрах установки двоичных пакетов можно найти на странице справки emerge:

$ man emerge
Скачивание файлов Параллельная загрузка

Когда вы устанавливаете набор пакетов, Portage может скачивать исходные файлы для следующего пакета в списке даже пока компилируется другой пакет. Это приводит к сокращению времени компиляции. Чтобы использовать эту возможность, добавьте "parallel-fetch" к переменной FEATURES. Заметьте, что она включена по умолчанию, так что вам не нужно делать что-либо специальное, чтобы ее включить.

Userfetch

Когда Portage запущен как root, FEATURES="userfetch" позволит Portage отказаться от привилегий root при скачивании исходников пакетов. Это приводит к небольшому увеличению безопасности.

Загрузка проверенных образов дерева Portage

Как администратор, вы можете захотеть обновлять ваше локальное дерево Portage только с использованием криптографически проверенного образа дерева Portage, которое выпускается инфраструктурой Gentoo. Это удостоверяет, что никакое небезопасное зеркало rsync не добавит нежелательный код или пакеты в дерево, которое вы скачиваете.

Чтобы сконфигурировать Portage, сначала создайте каталог с доверенными ключами, в который вы скачаете и примете ключи Инфраструктуры Gentoo, ответственной за подпись образов дерева Portage. Конечно, если вы хотите, вы можете проверить этот GPG-ключ, как описано в соответствующем документе. (например, проверить отпечатки пальцев ключа). Вы можете найти список ключей GPG, используемых командой разработчиков на их странице проекта.

# mkdir -p /etc/portage/gpg
# chmod 0700 /etc/portage/gpg
(... Замените ключи теми, которые вы найдете на сайте, указанном выше ...)
# gpg --homedir /etc/portage/gpg --keyserver subkeys.pgp.net --recv-keys 0x239C75C4 0x96D8BF6D
# gpg --homedir /etc/portage/gpg --edit-key 0x239C75C4 trust
# gpg --homedir /etc/portage/gpg --edit-key 0x96D8BF6D trust

Далее отредактируйте /etc/portage/make.conf и включите поддержку для проверки подписанных образов дерева Portage (используйте FEATURES="webrsync-gpg"), и отключите обновление дерева Portage, используя обычный метод emerge --sync.

FEATURES="webrsync-gpg"
PORTAGE_GPG_DIR="/etc/portage/gpg"
SYNC=""

Вот и все. Теперь когда вы запустите emerge-webrsync, только образы с правильной сигнатурой будут установлены в вашу файловую систему.