This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Handbook:AMD64/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=gnome
или 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) перед тем как сообщите об ошибке.Установка 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 поддерживает установку бинарных пакетов. Несмотря на то, что Gentoo не предоставляет бинарные пакеты, 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 из бинарного пакета (prebuilt):
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 не являются юридическими заявлениями; не стоит полагаться на них. Соблюдайте закон в вашей стране.
Загрузка файлов
Загрузка пользователем (userfetch)
Portage обычно запускается от пользователя root. Настройка FEATURES="userfetch"
позволит Portage бросить привилегии root при загрузке исходного кода и выполнит эту операцию с правами пользователя/группы portage:portage. Это небольшое усиление безопасности.
Если userfetch
установлена в FEATURES, убедитесь, что изменили владельца у всех файлов в /usr/portage с помощью команды chown, запущенную с привилегиями root:
root #
chown --recursive --verbose portage:portage /usr/portage
Проверенные снимки Gentoo репозитория
Администраторы могут выбрать обновление локального репозитория ebuild-файлов с криптографически проверенного снимка, который выпускаются инфраструктурой Gentoo. Это гарантирует, что ни одно недобросовестное зеркало rsync не добавляет нежелательный код или дополнительные пакеты в репозитории.
Ниже приводится обновленный метод для создания и использования метода синхронизации emerge-webrsync используя repos.conf.
Ключи OpenPGP для выпускаемых образов Gentoo (Gentoo release media) теперь доступны в виде бинарного брелка. Он может быть установлен пакетом app-crypt/gentoo-keys:
root #
emerge --ask app-crypt/gentoo-keys
Это установит связку ключей в каталог /var/lib/gentoo/gkeys/keyrings/gentoo/release.
FEATURES="webrsync-gpg" PORTAGE_GPG_DIR="/var/lib/gentoo/gkeys/keyrings/gentoo/release"
[DEFAULT] main-repo = gentoo [gentoo] # Отключите синхронизацию настроив auto-sync = no или удалив значение # В этом конфигурационном файле не устанавливайте значения для переменных с использованием кавычек ('' или "")! # Для portage-2.2.18 используйте 'websync' # Для portage-2.2.19 и выше используйте 'webrsync' (websync был переименован в webrsync) sync-type = webrsync sync-uri = auto-sync = yes
Убедитесь, что пакет app-crypt/gnupg установлен:
root #
emerge --ask app-crypt/gnupg
Используйте gpg, чтобы проверить ключи в брелке на корректность:
root #
gpg --homedir /var/lib/gentoo/gkeys/keyrings/gentoo/release --with-fingerprint --list-keys
Сверьте отпечатки ключей с теми, которые перечислены на официальной странице проекта Gentoo release engineering.
Если один из ключей установленных пакетом app-crypt/gentoo-keys скоро истечет, запустите gkeys из пакета app-crypt/gkeys для обновления ключа с сервера ключей:
root #
emerge --ask app-crypt/gkeys
root #
gkeys refresh-key -C gentoo
Повторите следующую команду для каждого ключа, которому вы хотите доверять. (Подставьте идентификатор ключа '0x ...' для ключа, которому вы хотите доверять.)
root #
gpg --homedir /var/lib/gentoo/gkeys/keyrings/gentoo/release --edit-key 0xDB6B8C1F96D8BF6D trust
Должно появится меню GPG, чтобы полностью доверять ключу и выйти из программы, введите следующее:
gpg>
4
gpg>
quit
Теперь система настроена для синхронизации, используя только проверенные OpenPGP/gpg снимки.
Есть несколько команд, чтобы выполнить синхронизации.
Одной из следующих команд достаточно для синхронизации. Для более подробной информации смотрите статью Portage sync.
root #
emerge --sync
root #
emaint sync -a
root #
emaint sync --repo gentoo
root #
emerge-webrsync
Verify distfiles
To re-verify the integrity and (potentially) re-download previously removed/corrupted distfiles for all currently installed packages, run:
root #
emerge --ask --fetchonly --emptytree @world