Handbook:Alpha/Working/Features
Возможности Portage
В Portage есть несколько дополнительных возможностей (features), которые улучшат опыт работы с Gentoo. Многие из этих возможностей полагаются на определённые программы, которые улучшают производительность, надёжность, безопасность и так далее.
Чтобы включить или отключить определённые возможности Portage, отредактируйте /etc/portage/make.conf и измените или установите переменную FEATURES, которая содержит ключевые слова возможностей, разделённые пробелом. В некоторых случаях необходимо установить дополнительные утилиты, на которые опирается эта возможность.
Не все возможности, которые поддерживает Portage, перечислены здесь. Для полного обзора, пожалуйста, обратитесь к man-странице make.conf:
user $
man make.conf
Чтобы найти, что на данный момент установлено в FEATURES, запустите emerge --info и поищите переменную FEATURES или отфильтруйте её с помощью grep:
user $
emerge --info | grep ^FEATURES=
Распределённая сборка
Использование distcc
distcc — это программа для распределённой сборки по нескольким, не обязательно идентичным, машинам в сети. Клиент distcc посылает всю необходимую информацию на доступные сервера distcc (на которых работает distccd), чтобы те скомпилировали части исходного кода для клиента. В результате получается более быстрая сборка.
Больше информации о distcc (и как он работает с Gentoo) можно найти в статье Distcc.
Установка distcc
Distcc поставляется с графическим монитором для отслеживания заданий, отправляемых компьютером на компиляцию. Данный монитор устанавливается при установленном USE="gtk"
.
root #
emerge --ask sys-devel/distcc
Включение поддержки distcc в Portage
Добавьте distcc
в переменную FEATURES в файле /etc/portage/make.conf. Далее, отредактируйте переменную MAKEOPTS и увеличьте число параллельных задач компиляции настолько, насколько это позволяет система. Рекомендуется использовать -jN
, где N
это число CPU, на которых будет запускаться distccd (включая локальный компьютер), плюс один. Не забывайте, что это просто рекомендация.
Теперь запустите distcc-config и введите список доступных серверов distcc. В качестве простого примера предположим, что среди доступных серверов distcc 192.168.102 (локальный компьютер), а 192.168.1.103 и 192.168.1.104 (два «удалённых» узла):
root #
distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
Не забудьте также запустить демон distccd:
root #
rc-update add distccd default
root #
/etc/init.d/distccd start
Кэширование собранных объектов
О ccache
ccache — это быстрый кэш компилятора. Когда программа компилируется, он будет кэшировать промежуточные результаты так, что в случае компиляции той же программы той же версии, время компиляции значительно уменьшится. В случае компиляции с ccache в первый раз, компиляция может продолжаться значительно больше по сравнению с обычной компиляцией. Однако, последующие пересборки должны быть значительно быстрее. ccache полезен только в тех случаях, когда одна и та же версия программы будет пересобираться много раз; поэтому она полезна, в основном, только для разработчиков программного обеспечения.
Для более подробной информации о ccache, пожалуйста, посетите их домашнюю страницу.
Известно, что ccache порой вызывает ошибки компиляции. Иногда ccache сохраняет устаревшие объекты кода или поврежденные файлы, что приводит к тому, что некоторые пакеты невозможно установить после этого. Если такое происходит (ошибки вроде «File not recognized: File truncated» появляются в журнале сборки), попробуйте пересобрать приложение с отключённым ccache (
FEATURES="-ccache"
в /etc/portage/make.conf или единоразово, используя командную строку, как показано ниже) перед тем, как сообщить об ошибке:
root #
FEATURES="-ccache" emerge --oneshot <категория/пакет>
Установка ccache
Для установки ccache запустите следующую команду:
root #
emerge --ask dev-util/ccache
Включение поддержки ccache в Portage
Откройте /etc/portage/make.conf и добавьте ccache
к значению, которое определено в переменной FEATURES. Создайте переменную FEATURES, если она не существует. Далее добавьте новую переменную, которая называется CCACHE_SIZE, и установите ее в 2G
:
FEATURES="ccache"
CCACHE_SIZE="2G"
Чтобы проверить функциональность ccache, запросите его статистику. Поскольку Portage использует другой домашний каталог для ccache, необходимо временно установить переменную CCACHE_DIR:
root #
CCACHE_DIR="/var/tmp/ccache" ccache -s
В Portage домашний каталог по умолчанию для ccache — /var/tmp/ccache/; но это можно изменить, настроив переменную CCACHE_DIR в файле /etc/portage/make.conf.
Если ccache запущен автономно (без Portage), он будет использовать каталог по умолчанию ${HOME}/.ccache/, именно поэтому необходимо указать переменную CCACHE_DIR при запросе (Portage) статистики ccache.
Использование ccache отдельно от Portage
Чтобы использовать ccache для компиляции без Portage, добавьте /usr/lib/ccache/bin/ в начало переменной PATH (до /usr/bin). Это можно сделать, отредактировав ~/.bash_profile в домашнем каталоге пользователя. Использование ~/.bash_profile — это только один из способов определения переменных PATH.
PATH="/usr/lib/ccache/bin:${PATH}"
Поддержка двоичных пакетов
Создание прекомпилированных пакетов
Portage поддерживает установку двоичных пакетов.
Чтобы создать бинарный пакет, воспользуйтесь командой quickpkg, если пакет уже установлен в системе, или скомпилируйте его с параметром --buildpkg
или --buildpkgonly
.
Чтобы Portage создавал двоичные пакеты для каждого устанавливаемого пакета, добавьте buildpkg
в переменную FEATURES.
Более расширенные возможности при создании набора двоичных пакетов можно получить, используя catalyst. Более подробную информацию о catalyst можно прочитать в Catalyst FAQ.
Установка прекомпилированных пакетов
Хотя Gentoo не предоставляет таковые, можно создать централизованный репозиторий двоичных пакетов. Для того, чтобы использовать такой репозиторий, нужно сообщить Portage об этом с помощью переменной PORTAGE_BINHOST, которая указывает на такое хранилище. Например, если бинарные пакеты находятся по адресу ftp://buildhost/gentoo:
PORTAGE_BINHOST="ftp://buildhost/gentoo"
Чтобы установить двоичный пакет, добавьте параметры --getbinpkg
и --usepkg
в команду emerge. Первая сообщает emerge, что нужно загрузить двоичный пакет из уже определённого ранее сервера, а вторая просит emerge попытаться установить двоичный пакет до загрузки исходного кода и его компиляции.
Например, чтобы установить gnumeric из прекомпилированного пакета:
root #
emerge --usepkg --getbinpkg gnumeric
Больше информации о двоичных пакетах в emerge можно найти в man-странице emerge:
user $
man emerge
Распространение двоичных пакетов для других
Если планируется предоставлять прекомпилированные пакеты для других, убедитесь, что это разрешено. Для этого проверьте условия распространения у разработчиков. Например, если пакет выпущен под лицензией GNU GPL, то исходный код должен быть доступен наряду с двоичными файлами.
В ebuild может быть определено ограничение bindist
в переменной RESTRICT, если собранные двоичные файлы не подлежат распространению. Иногда такое ограничение обусловлено одним или несколькими USE-флагами.
По умолчанию Portage не маскирует пакеты из-за таких ограничений. Это можно изменить, глобально настроив переменную ACCEPT_RESTRICT в файле /etc/portage/make.conf. Например, чтобы замаскировать пакеты, у которых есть ограничение bindist
, добавьте следующую строку в файл make.conf:
ACCEPT_RESTRICT="* -bindist"
Также можно переопределить переменную ACCEPT_RESTRICT, добавив параметр --accept-restrict
в команду emerge. Например, --accept-restrict=-bindist
временно замаскирует пакеты с ограничением bindist
.
Также, в случае распространения пакетов, рекомендуется настроить переменную ACCEPT_LICENSE. Смотрите раздел Лицензии.
Ответственность за соответствие условиям лицензии и соответствие законодательству страны, где предполагается распространять пакет, полностью лежит на пользователе. Переменные метаданных, определённые в ebuild (RESTRICT или LICENSE), сообщат о том, что распространение двоичных пакетов не разрешено, однако, вывод команд Portage или вопросы, на которые отвечали разработчики Gentoo не являются юридическими заявлениями; не стоит полагаться на них. Будьте внимательны при соблюдении законов своей страны.
Загрузка файлов
Проверка архивов исходных файлов
Чтобы перепроверить целостность и (возможно) повторно скачать ранее удаленные/поврежденные архивы исходных файлов (distfiles) для всех установленных пакетов, выполните:
root #
emerge --ask --fetchonly --emptytree @world