Программа ebuild(1) воспринимает в качестве аргумента единственный
сценарий ebuild. Этот сценарий содержит переменные и команды, указывающие, как
загружать, распаковывать, вносить исправления, компилировать, устанавливать и
включать в дерево пакет из его оригинальных исходных текстов. Кроме всего этого,
сценарий ebuild может также содержать команды, которые необходимо выполнять
до/после установки/удаления пакета.
Содержит все исходные файлы, необходимые для пакета. Эта переменная не должна определяться.
Она генерируется автоматически на основе переменных SRC_URI.
Содержит полное имя временного каталога для процесса построения (temporary build directory). Эта переменная
используется функциями src_compile и src_install. Обе они выполняются в каталоге S. Эта переменная может меняться в соответствии с каталогом,
в который распаковывается архив (tarball) пакета.
Содержит полное имя временного каталога для установки. Каждая операция записи, выполняемая
не через вспомогательные средства и функции (представленные далее), должна выполняться в
каталоге ${D}. Не изменяйте значение этой переменной.
Содержит список адресов URI для соответствующих исходных файлов. Она может содержать несколько
адресов URI для одного исходного файла. Если файла нет на GENTOO_MIRROR, выбирается
самый быстрый из перечисленных сайтов.
Должна содержать соответствующий список архитектур, на которых пакет ebuild определенно работает/не работает.
По умолчанию, если неизвестно, работает ли пакет ebuild на определенной архитектуре, соответствующее
ключевое слово (KEYWORD) просто не указывается. Если пакет ebuild не будет работать на определенной
архитектуре, укажите ее с минусом, например, -ppc. Если пакет ebuild посылается для
включения, у него должны быть установлены ключевые слова ~arch для архитектур, на которых он
ПРЕДПОЛОЖИТЕЛЬНО РАБОТАЕТ (PROVEN TO WORK). Пакеты с соответствующими ключевыми словами можно
будет демаскировать для тестирования путем установки ACCEPT_KEYWORDS="~arch" в командной строке
или в файле make.conf(5). Полный список имен архитектур см. в файле
/usr/portage/profiles/arch.list.
Устанавливает слот (SLOT) для пакетов, которым необходимо сосуществовать. По умолчанию, необходимо
устанавливать SLOT="0", если только вы не уверены, что явно нужно другое значение. Эта переменная
НИКОГДА не должна оставаться неопределенной.
Значение должно представлять собой список (через пробел) имен лицензий, по которым распространяется
пакет. Это должны быть лицензии, представленные в каталоге /usr/portage/licenses/.
Если соответствующей лицензии в системе портежей нет, ее необходимо явно добавить.
Значением должен быть список всех необходимых флагов USE, использующихся в сценарии построения
пакета. В этой переменной не должны указываться только флаги USE, задающие архитектуру
(см. KEYWORDS).
Атом зависимости - это просто зависимость, используемая системой портежей при определении взаимосвязей между
пакетами. Учтите, пожелуйста, что если атом еще не был включен в дерево пакетов, включаться будет
самая последняя доступная версия.
Базовые атомы
Базовый атом - это просто полное имя категории/имя пакета. Вот примеры базовых атомов:
sys-apps/sed
sys-libs/zlib
net-misc/dhcp
Версии атомов
Иногда необходимо дополнительное уточнение, что подойдут только определенные версии атомов. Учтите, что версии
необходимо указывать для префикса - базового атома. Таким образом, номер версии просто добавляется
как суффикс к базовому атому:
Номера версий обычно состоят из двух или трех чисел, разделенных точками, например, 1.2
или 4.5.2. После этой строки может идти буква, например, 1.2a или 4.5.2z.
Учтите, что эта буква не должна обозначать статус alpha, beta и т.д. Для этого
используется необязательный суффикс: _alpha, _beta, _pre (пре-релиз),
_rc (релиз-кандидат) или _p (patch). Это означает, что для третьего пре-релиза пакета
надо будет использовать версию типа 1.2_pre3.
Префиксные операторы атома [> >= = >= >]
Иногда необходимо указывать зависимость от группы версий, не задавая постоянно каждую из них явно.
Для этого предоставляются стандартные булевы операторы:
Дополнительные префиксы [!~] и суффиксы [*] атомов
Чтобы стало еще интереснее, обеспечивается возможность указывать блокирующие пакеты и соответствующие
диапазоны версий. Учтите также, что эти дополнительные префиксы/суффиксы можно сочетать любым способом
с представленными выше классами атомов. Вот ряд типичных примеров, которые можно найти в дереве портежей:
означает блокировку одновременной
установки пакетов.
*
означает соответствие любой версии пакета с указанной
базой. Поэтому версия '2*' будет соответствовать '2.1', '2.2' и т.д.
~
означает соответствие любой редакции указанной базовой
версии. Поэтому в представленноми выше примере будут соответствовать версии '1.0.2a',
'1.0.2a-r1', '1.0.2a-r2' и т.д.
Динамические зависимости
Иногда программы могут зависеть от разных пакетов и версий, в зависимости от значения переменной
USE. Система портежей предлагает несколько опций для учета этого. Учтите,
что при использовании следующих синтаксических конструкций, каждая конструкция рассматривается
как 1 атом в соответствующем контексте. Это означает, что каждый атом може включать за счет задания условий
несколько атомов, и вложенность эта может быть любой глубины.
<переменная USE>? ( <атом зависимости> )
Для включения библиотеки jpeg при указании пользователем jpeg в переменной USE, используйте
следуюущую конструкцию:
jpeg? ( media-libs/jpeg )
<переменная USE>? ( <атом если истина> ) : ( <атом если ложь> )
Работает аналогично терциарному оператору : языка C. Если пакет использует GTK2 или GTK1,
но не оба вместе, это можно выразить так:
Здесь мы видим, что пакет unreal-tournament бывает в обычной версии и в версии goty.
Поскольку обе они предоставляют один и тот же базовый набор файлов, другой пакет может использовать
любой из них. Добавление категории virtual не подходит, поскольку она не охватывает
соответствующие файлы.
Еще один хороший пример - это когда пакет может строиться с несколькими видеоинтерфейсами, но
для каждого конкретного построения дорлжен использоваться какой-то один из них.
В данном случае, будет выбран только один из пакетов, а поряждок предпочтения определяется
порядком их перечисления. Поэтому библиотека sdl является наиболее вероятным кандидатом, далее
идет svga, затем - opengl, ggi и по умолчанию, если пользователь не задаст явно одну из
предыдущих библиотек, будет использоваться X.
Эта переменная должна содержать список всех пакетов, необходимых для работы данной программы (другими
словами, это зависимости времени выполнения). Если она не установлена, по умолчанию используется
значение переменной DEPEND.
Для задания динамических зависимостей можно использовать такие же конструкции, как и для переменной DEPEND.
Эта переменная должна содержать список всех пакетов, которые необходимо установить после включения
в дерево данной программы.
Для задания динамических зависимостей можно использовать такие же конструкции, как и для переменной DEPEND.
Эта переменная должна использоваться только если пакет предоставляет виртуальную цель
(из категории virtual). Например, blackdown-jdk и sun-jdk предоставляют
virtual/jdk. Это позволяет пакетам задавать зависимости от virtual/jdk,
а не явно от реализации blackdown или sun.
Если fetch указано в переменной RESTRICT, эта функция будет
вызываться, когда не удастся найти файлы в SRC_URI. Пригодится для
выдачи информации пользователю о том, как получить соответствующие файлы. Достаточно выдать
сообщение и нормально завершить работу функции. Не завершайте функцию вызовом die.
Эта функция используется для распаковки всех исходных текстов, указанных в A в
каталог WORKDIR. Если эта функция в сценарии ebuild не определена,
вызывается unpack ${A}. В этой функции необходимо устанавливать патчи
и выполнять все остальные изменения перед конфигурированием/компиляцией.
Исходным рабочим каталогом для этой функции будет $WORKDIR.
В этих функциях должны выполняться все модификации в "живой" файловой системы, необходимые до и после
включения пакета в дерево. В pkg_postinst также необходимо указывать комментарий для пользователя,
поскольку он будет выводиться напоследок.
Исходным рабочим каталогом для этой функции будет $PWD.
Если элемент USE указан в переменной USE, элемент USE будет выведен, и функция
вернет 0. Если же элемент USE в переменной USE не указан, функция вернет 1.
Пример:
if [ `use gnome` ] ; then
guiconf="--enable-gui=gnome --with-x"
elif [ `use gtk` ] ; then
guiconf="--enable-gui=gtk --with-x"
elif [ `use X` ] ; then
guiconf="--enable-gui=athena --with-x"
else
# Версия с графическим интерфейсом строиться не будет
guiconf=""
fi
Пригодится для создания специфических опций, передаваемых сценарию configure. Если элемент USE
указан в переменной USE, будет выведена строка --with-[<опция configure>].
Если же элемент USE не указан в переменной USE, будет выведена строка
--without-[<опция configure>]. Если опция configure не указана, вместо нее
будет использован элемент USE.
Пример:
USE="jpeg"
myconf="`use_with jpeg libjpeg`"
(myconf теперь имеет значение "--with-libjpeg")
USE=""
myconf="`use_with jpeg libjpeg`"
(myconf теперь имеет значение "--without-libjpeg")
Пригодится для создания специфических опций, передаваемых сценарию configure. Если элемент USE
указан в переменной USE, будет выводиться строка --enable-[<опция configure>].
Если же элемент USE в переменной USE не указан, будет выводиться строка
--disable-[<опция configure>]. Если опция configure не указана, вместо нее
будет использоваться сам элемент USE.
Проверяет, установлена ли категория/пакет-версия в системе. Параметр может иметь любые
значения, допустимые для переменной DEPEND. Эта функция возвращает
0, если категория/пакет-версия установлена и 1 в противном случае.
Эта функция будет искать имя пакета в базе данных установленных в настоящее время программ и
выводить "лучшую версию" уже установленного пакета. Функция возвращает 0, если в системе есть пакет с
соответствующим именем. В противном случае она возвращает 1.
Пример:
VERINS=`best_version net-ftp/glftpd`
Переменная VERINS теперь имеет значение "net-ftp/glftpd-1.27", если в системе
установлен glftpd-1.27.
Если необходимо вывести сообщение пользователю для прочтения, используйте функцию einfo. Она
работает аналогично echo(1), но добавляет дополнительную информацию,
привлекающую внимание пользователя.
Эта функция распаковывает (uncompresses) и/или разархивирует (untars) список исходников в текущий
каталог. Она добавляет исходник к значению переменной DISTDIR.
Поэтому можно передавать опции econf либо в командной строке, либо через переменную EXTRA_ECONF.
При явном вызове функции econf имеет смысл передавать дополнительные аргументы econf, а не
использовать переменную EXTRA_ECONF.
Эта функция используется вместо make. Добавляет стандартную опцию MAKEOPTS="-j2".
ПРЕДУПРЕЖДЕНИЕ
Если вы собираетесь использовать emake, убедитесь что построение возможно при
распараллеливании (make -j2). Это необходимо тщательно протестировать, поскольку распараллеливание
построения иногда, хотя и не всегда, приводит к ошибкам.
Пожалуйста, не используйте эту функцию вместо 'make install DESTDIR=${D}'.
Это - предпочтительный способ установки пакетов, собираемых с помощью make (make-based packages).
Эти функции пригодятся, когда пакет устанавливается в каталог ${D} с помощью сценариев,
например, make-файлов. Если необходимо гарантировать, что библиотеки являются выполняемыми, файлы
aclocal установлены в нужное место, все файлы doc/info/man упакованы, а из
выполняемых файлов удалена отладочная информация, используйте этот набор функций.
prepall:
Выполняет prepallman, prepallinfo, prepallstrip, устанавливает для библиотек +x, а
затем проверяет каталоги aclocal. Обратите внимание, что функция prepalldocs при этом
не вызывается.
prepalldocs:
Упаковывает все doc-файлы в каталоге ${D}/usr/share/doc.
prepallinfo:
Упаковывает все info-файлы в каталоге ${D}/usr/share/info.
prepallman:
Упаковывает все man-файлы в каталоге ${D}/usr/share/man.
prepallstrip:
Удаляет отладочную инфомацию из всех выполняемых файлов, в том числе, из библиотек.
Аналогичны функциям prepall, но немного отличаются.
prepinfo:
Если каталог не указан, функция prepinfo предполагает использование каталога usr.
Функция prepinfo будет упаковывать все файлы в каталоге ${D}/dir/info.
preplib:
Если каталог не указан, функция preplib предполагает использование каталога usr.
Функция preplib будет выполнять 'ldconfig -n -N' в каталоге ${D}/dir/lib.
preplib.so:
Функция находит все файлы со строкой '.so' в имени в каталоге ${D}/dir и удаляет
из них отладочную информацию. Можно указывать несколько каталогов.
prepman:
Если каталог не указан, функция prepman предполагает использование каталога usr.
Функция prepman будет упаковывать все файлы в каталоге ${D}/dir/man/*/.
prepstrip:
Из всех файлов ${D}/dir удаляется отладочная информация. Можно указывать несколько каталогов.
Устанавливает страницы справочного руководства в каталоги DESTDIR/man/man[1-8n] в зависимости от
последних символов в имени файла. Файлы упаковываются с помощью gzip, если они
еще не упакованы. Функция создает все необходимые каталоги.
Устанавливает указанные в списке через пробел файлы в каталог /usr/share/doc/${PF}/html,
если имена этих файлов заканчиваются на .html, .png, .js. Опция -a добавляет
новые завершения к этому стандартному списку, а опция -x позволяет указать каталоги, которые при этом
необходимо пропустить (каталог CVS исключается по умолчанию). Опция -r требует
обрабатывать подкаталоги рекурсивно.
Устанавливает info-страницы в каталог DESTDIR/info. Файлы при этом автоматически упаковываются с помощью
gzip. Функция создает все необходимые каталоги.
Устанавливает файлы локали в каталог DESTDIR/usr/share/locale/[LANG], в зависимости от
завершения имени файла локали. Функция создает все необходимые каталоги.
Устанавливает один или несколько указанных документов в каталог
/usr/share/doc/${PF}/DOCDESTTREE. Файлы автоматически упаковываются
утилитой gzip. Функция создает все необходимые каталоги.