I. Документы для alt linux Team



Скачать 363.41 Kb.
Pdf просмотр
страница1/3
Дата04.11.2016
Размер363.41 Kb.
Просмотров539
Скачиваний0
  1   2   3

Часть I. Документы для
ALT Linux Team

2
Глава 1. ALT Packaging
ALT specfile conventions
Дмитрий Левин
Преобразование оригинального текста в DocBook : Юрий Зотов

Обоснование
При разработке этих правил решались следующие задачи:
Обеспечить желаемую функциональность:
наши пакеты должны отвечать определённым правилам, о которых пойдёт речь несколько позже. Для этого надо, чтобы spec-файлы обеспечивали выполнение этих правил.
Помочь разработчику: так как spec-файлы все ещё пишут люди,
то их работу нужно свести к тому минимуму, который, собственно, и требует участия человека. Разработчик не должен копировать блоки кода из файла в файл, ибо эта неинтеллектуальная работа отнимает массу сил и чревата ошибками. Для этого есть макросы. Если какой- то код появляется в разных spec-файлах более одного раза, то надо написать макрос(ы).
Spec-файлы
Устаревшие конструкции
Не следует использовать устаревшие конструкции
— они лишь загромождают spec-файл, снижая тем самым его читабельность. К
устаревшим конструкциям, в частности, относятся:
• тэг BuildRoot;
• строки вида rm -rf $RPM_BUILD_ROOT
;
• %_defattr со стандартными аргументами в начале файлов и секций
%files
;
• секция
%clean
, пустая либо без разумного содержания.

Глава 1. ALT Packaging
3
Фигурные скобки
Нет смысла засорять текст spec-файла ненужными фигурными скоб- ками. Избавиться от них можно с помощью команды cleanup_spec spec-файл
Выравнивание
Используйте табуляции для выравнивания. Избегайте пробельных символов в конце строк.
Порядок тэгов
Рекомендуемый порядок заголовочных тэгов:
Name,
Version,
Release,
Serial,
далее Summary,
License,
Group,
Url,
Packager,
BuildArch, потом Source*, Patch*, далее PreReqs, Requires, Provides,
Conflicts, и, наконец, Prefix, BuildPreReqs, BuildRequires.
Разуме- ется, не все из вышеперечисленных тэгов используются, равно как встречаются и другие редко используемые тэги. В связи с тем, что
BuildRequires зарезервирован для автоматически вычисляемых зави- симостей, для указания особых зависимостей следует использовать
BuildPreReq.
Значения тэгов
Значение тэга от его имени следует разделять одним пробелом. Эле- менты списка значений следует разделять запятой с последующим пробелом. Значение тэга Summary следует начинать с прописной бук- вы. Значение тэга Summary не следует завершать точкой. Значения тэгов Summary и %description могут содержать названия команд толь- ко в не изменённом виде.
Группы
Значение тэга Group должно соответствовать действительности и при этом принадлежать фиксированному множеству, перечисленному в файле
/usr/lib/rpm/GROUPS
ChangeLog
При формировании первой строки changelog-записи используйте утилиту add_changelog spec-файл.
Описание изменений должно быть информативным; недостаточно объявить о наличии изменений,
необходимо их все явно перечислить.

4
Файлы локализации
Если в состав пакета входят файлы локализации либо дру- гие файлы на разных языках,
следует использовать макрос
%find_lang. Подробную информацию можно получить, выполнив ко- манду /usr/lib/rpm/find-lang -h.
Внутрипакетные зависимости
При работе с мультипакетными spec-файлами соблюдайте правило внутрипакетных зависимостей: Если один пакет в какой-либо мере зависит от другого подпакета, то эта зависимость должна быть ука- зана полностью, включая не только имя, но также версию, релиз и serial (если есть). Например, «
Requires:
%name = %version-%release
»
или «
Requires:
%name = %serial:%version-%release
». Обратите внима- ние на синтаксис: знак равенства, в отличие от дефиса, окружён про- белами.
Разделяемые библиотеки
Пакеты, содержащие как разделяемые библиотеки, так и использу- ющие их программы, должны быть разделены на подпакеты таким образом, чтобы в подпакет, содержащий разделяемые библиотеки, не входили использующие их программы. Это, в частности, позволяет уменьшить количество циклических зависимостей. По традиции, име- на пакетов, состоящих только из разделяемых библиотек, должны на- чинаться с префикса lib либо содержать его внутри слова. При раз- делении подпакетов следует помнить о внутрипакетных зависимостях.
Каждый пакет, содержащий разделяемые библиотеки в каталоге
/lib
,
/usr/lib или
/usr/X11R6/lib
, должен их регистрировать при уста- новке/обновлениях и удалении с помощью макросов %post_ldconfig и
%postun_ldconfig соответственно.
Статические библиотеки
Статические библиотеки должны паковаться в отдельные подпаке- ты, что связано со спецификой их использования. Если имя devel- подпакета заканчивается суффиксом
-devel
, то имя нового devel- static-подпакета будет заканчиваться суффиксом
-devel-static
. При разделении подпакетов следует помнить о внутрипакетных зависимо- стях: в списке зависимостей devel-static-подпакета должна присут- ствовать зависимость от
-devel
= %version-%release.

Глава 1. ALT Packaging
5
Переименование пакетов
Иногда пакеты переименовывают. Например, это случается при упа- ковке разделяемых библиотек. В таких случаях следует указывать правильную информацию о зависимостях, необходимую для коррект- ного обновления. В частности, должен присутствовать:
• тэг
Provides:
старое_имя = %version
;
• тэг
Obsoletes:
старое_имя
Патчи
Наименование патчей
При создании новых патчей, а также при импортировании патчей из других источников необходимо придерживаться единых правил наименования имён патч-файлов:
NAME-VERSION-ORIGIN-WHAT.patch
, где

NAME
и
VERSION
— имя и версия пакета, для которого сделан патч;

ORIGIN
— аббревиатуры источников патча (обычно дистрибутивов);

WHAT
— краткое описание патча.
В случае, когда патч образован из нескольких частей, полученных из разных источников, компонента имени
ORIGIN
должна содержать аб- бревиатуры всех источников. Если патч был создан или адаптирован для ALT Linux, то в
ORIGIN
, соответственно, должно присутствовать
-alt-
. Для патчей, созданных на базе CVS, компонента имени
ORIGIN
должна начинаться с cvs-YYYYMMDD
При составлении описания патча следует иметь в виду следующие общепринятые сокращения:

6
makefile патчи, затрагивающие исключительно makefile*
;
bound проверки на границы (буфера, целых чисел, и т.п.);
config патчи, затрагивающие исключительно конфигурационные файлы;
configure патчи, затрагивающие исключительно configure*
;
doc патчи, затрагивающие исключительно документацию;
fixes кумулятивные патчи и/или исправления по надёжности и/или без- опасности;
format патчи на использование форматирования строк (
printf
);
install патчи, направленные на возможность выполнения make install непривилегированным пользователем;
linux патчи, предназначенные для портирования ПО на Linux;
man патчи, затрагивающие исключительно man-страницы;
texinfo патчи, затрагивающие исключительно документацию в формате texinfo;
tmp патчи, предназначенные для решения различных вопросов, связан- ных с временными файлами;

Глава 1. ALT Packaging
7
vitmp патчи, направленные на поддержку vitmp(1);
warnings патчи, исправляющие ошибки, найденные компилятором.
Исходный код
Формат хранения
Исходный код большого объёма (как архивы, так и патчи, по статусу приравненные к ним) следует хранить в упакованном виде. Метод сжатия,
gzip или bzip2
, следует выбирать таким образом, чтобы размер архива был минимальным, например, с помощью утилиты zme. Исключение составляют nosource-пакеты: в них отсутствующие файлы следует указывать в виде корректных URL.
ALT Linux RPM: особенности версии rpm-4.0.4-alt5
Дмитрий Левин
Преобразование оригинального текста в DocBook : Юрий Зотов

Обоснование
При разработке изменений и дополнений к RPM решались следую- щие задачи:
Обеспечить желаемую функциональность:
наши пакеты должны отвечать определенным правилам, о которых пойдёт речь несколько позже. Для этого надо, чтобы spec-файлы обеспечивали выполнение этих правил.
Помочь разработчику: так как spec-файлы все ещё пишут люди,
то их работу нужно свести к тому минимуму, который, собственно, и требует участия человека. Разработчик не должен копировать блоки кода из файла в файл, ибо эта неинтеллектуальная работа отнимает массу сил и чревата ошибками. Для этого есть макросы. Если какой- то код появляется в разных spec-файлах более одного раза, то надо написать макрос(ы).

8
Новые тэги
BuildHost
С помощью этого тэга можно переопределить значение hostname,
которое RPM помещает в заголовок каждого пакета. По умолчанию,
как и ранее, используется значение, возвращаемое uname(2).
Устаревшие тэги
BuildRoot
Времена, когда тэг BuildRoot в spec-файле определял, какой ка- талогRPM будет использовать в качестве BuildRoot, прошли безвоз- вратно. Теперь этот тэг не несёт никакой информации и может (и должен) быть опущен. Вместо этого используется значение макроса
%buildroot, который определён как «
%{_tmppath}/%{name}-buildroot
»
в файле
/usr/lib/rpm/macros и может быть переопределён в любом месте, где допускается определять макросы. В случае, если макрос
%buildroot не определён либо его значение представляет собой недо- пустимое значение «
/
», сборка пакета не будет выполнена.
Новые макросы
Встроенные макросы
%homedir домашний каталог пользователя, вызывающего этот макрос;
%homedir{user}
домашний каталог пользователя user
;
Макросы для часто используемых каталогов manpages:
%_man1dir, %_man2dir, %_man3dir, %_man4dir,
%_man5dir, %_man6dir, %_man7dir, %_man8dir, %_man9dir;
X11R6:
%_x11dir, %_x11bindir, %_x11libdir, %_x11includedir,
%_x11mandir, %_x11datadir, %_x11fontsdir;
лицензии:
%_licensedir;
меню:
%_menudir, %_iconsdir, %_miconsdir, %_liconsdir;
emacs:
%_emacslispdir;
tcl:
%_tcllibdir, %_tcldatadir;
другие системные:
%_initdir, %_lockdir, %_logdir, %_cachedir,
%_spooldir.

Глава 1. ALT Packaging
9
Управление опциями компилятора gcc
%add_optflags
добавить указанные параметры в стандартный набор %optflags;
%remove_optflags
убрать указанные параметры из стандартного набора %optflags;
%optflags_core базовые параметры;
%_optlevel уровень оптимизации;
%optflags_optimization параметры, отвечающие за оптимизацию, кроме архитектурно- зависимых;
%optflags_warnings warning options;
%optflags_debug debugging options;
%optflags_shared параметры, применяемые для создания relocatable файлов;
%optflags_nocpp параметры, отключающие поддержку C++ exceptions и C++ RTTI;
%optflags_notraceback
-fomit-frame-pointer
;
%optflags_fastmath
-ffast-math
;
%optflags_strict
-fstrict-aliasing
;

10
%optflags_kernel параметры, используемые при компиляции ядра и его модулей.
По умолчанию,
стандартный набор
%optflags состоит из
«
%optflags_core %optflags_warnings %optflags_optimization
».
Макросы-надстройки над утилитой make
%__nprocs число процессоров, доступных для сборки с помощью %make_build;
%make_build вызов make с параметром, обеспечивающим оптимальную парал- лельную сборку в данной среде;
%make_install вызов make c инициализацией переменной
INSTALL
, что в случае кор- ректной реализации
Makefile
-ов пакета позволяет сохранить дату по- следней модификации файлов, что особенно важно для документации;
%makeinstall
«
%make_install <инициализация других переменных, используемых многими Makefile-ами> install
»
Регистрация разделяемых библиотек
%post_ldconfig, %post_ldconfig_lib регистрация новых/обновлённых библиотек;
%post_ldconfig_sys регистрация новых/обновлённых системных библиотек (которые мо- гут быть использованы в chroot’ах);
%postun_ldconfig отмена регистрации удалённых библиотек.
Регистрация документации в формате info
%install_info регистрация новых/обновлённых info-страниц;

Глава 1. ALT Packaging
11
%uninstall_info отмена регистрации удалённых info-страниц.
Регистрация меню
%update_menus регистрация новых/обновлённых меню;
%clean_menus отмена регистрации удалённых меню.
Регистрация каталогов scrollkeeper
%update_scrollkeeper регистрация новых/обновлённых каталогов;
%clean_scrollkeeper отмена регистрации удалённых каталогов.
Вспомогательные макросы %configure
%__libtoolize путь к скрипту libtoolize;
%_configure_script путь к скрипту configure;
%_configure_target целевая платформа для configure;
%_configure_gettext
--without-included-gettext
Серверные макросы
%post_service регистрация нового сервиса при установке, перезапуск при обновле- нии;

12
%preun_service отмена регистрации сервиса и его выключение при удалении.
Макросы, определяющие некоторые аспекты packaging policy
%buildroot значение BuildRoot;
%_defattr атрибуты файлов и каталогов по умолчанию для каждой секции
%files и для каждого файла, включаемого в таких секциях;
%_cleanup_method метод, используемый при удалении ненужных файлов в секции
%install
;
%_compress_method метод, используемый при сжатии документации в секции
%install
;
%_findprov_default_method метод, используемый по умолчанию при поиске предоставляемых зависимостей;
%_findreq_default_method метод, используемый по умолчанию при поиске требуемых зависи- мостей;
%_fixup_method метод, используемый при исправлении файлов в секции
%install
;
%_verify_elf_method метод, используемый при проверке ELF-файлов в секции
%install
;
%_strip_method метод, используемый при обработке ELF-файлов в секции
%install
;

Глава 1. ALT Packaging
13
%_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_topdir точка начала поиска файлов, обрабатываемых соответствующим методом;
%_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_skiplist список шаблонов файлов, которые будут пропущены при обработке соответствующим методом;
%set_{cleanup,compress,fixup,strip,verify_elf}_method изменить значение соответствующего макроса;
%set_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_{topdir,skiplist}
изменить значение соответствующего макроса;
%add_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_skiplist добавить значение в соответствующий список.
Вызов вспомогательных программ
%find_lang вызов /usr/lib/rpm/find-lang
%strip_executable вызов /usr/lib/rpm/brp-strip для обработки ELF executables;
%strip_relocatable вызов /usr/lib/rpm/brp-strip для обработки ELF relocatables;
%strip_shared вызов /usr/lib/rpm/brp-strip для обработки ELF shared objects;
%strip_static вызов /usr/lib/rpm/brp-strip для обработки ELF ar archives;
%cleanup_build вызов /usr/lib/rpm/brp-cleanup;
%compress_docs вызов /usr/lib/rpm/brp-compress;

14
%strip_binaries вызов /usr/lib/rpm/brp-strip;
%clean_buildroot выполнение rm -rf %buildroot
, если %buildroot не указывает на на- стоящий
/
Управление процессом сборки
%buildmulti альтернативная директива %build для случая, когда в секции
%build происходит заполнение %buildroot.
Вообще говоря, такой техники стоит избегать во всех случаях, когда это возможно;
%_build_lang значение переменных
LANG
,
LANGUAGE
и
LC_ALL
;
%_build_display значение переменной
DISPLAY
;
%_build_xauthority значение переменной
XAUTHORITY
;
%__ccache_cc значение переменной
CCACHE_CC
;
%__ccache_dir значение переменной
CCACHE_DIR
;
Версии некоторых установленных в системе пакетов glibc:
%__glibc_version,
%__glibc_version_major,
%__glibc_version_minor;
gcc:
%__gcc_version,
%__gcc_version_major,
%__gcc_version_minor, %__gcc_version_base python: %__python_version
%get_version версия указанного пакета;

Глава 1. ALT Packaging
15
%get_release релиз указанного пакета;
%get_serial serial указанного пакета;
%add_serial serial указанного пакета в виде, пригодном для включения в spec- файл;
%get_SVR
тройка значений serial:version-release указанного пакета;
%get_NSVR
четвёрка значений name-serial:version-release указанного пакета;
%get_dep строка вида name >= serial:version-release
, построенная по указан- ному пакету;
Эти макросы, как правило, используются в пакетах, сборка которых возможна с различными версиями этих программ, если эти версии правильно учитывать.
Управление процессом обработки spec-файлов
%def_with, %def_without, %def_enable, %def_disable установка значения макросов условия с указанием значения по умол- чанию;
%check_def проверка макросов условия на непротиворечивость;
%subst_with, %subst_enable подстановка значения макросов условия;
%defined, %undefined проверка на существование макроса;
%with, %without, %enabled, %disabled проверка значения макросов условия;

16
%ifdef, %ifndef ветвление по факту существования макроса;
%if_with, %if_without, %if_enabled, %if_disabled ветвление по значению макросов условия;
Прочие макросы
%intel список архитектур Intel
™, совместимых с i386
;
%amd список архитектур AMD
™, совместимых с i386
;
%ix86
список всех архитектур, совместимых с i386
;
компоненты макроса %packager
%packagerName, %packagerAddress
%_internal_gpg_path путь к связке ключей ALT Linux Team.
Новыe параметры rpm
-bE
новый режим работы RPM, при котором происходит только подста- новка макросов;
--nowait-lock не блокировать процесс, если база данных RPM занята;
--fancypercent отображать дополнительную информацию о процентах проделанной работы при установке/обновлении пакетов;
--nopatch не включать указанные патчи в исходный пакет;

Глава 1. ALT Packaging
17
--nosource не включать указанные исходники в исходный пакет;
--lastchange вывести информацию о последнем изменении пакета;
--changes-since вывести информацию обо всех изменениях пакета, начиная с указан- ной версии.
Новые возможности rpm по сборке пакетов
По окончании выполнения секции
%install
RPM выполняет ряд действий:
• удаление ненужных файлов и каталогов;
• исправление прав доступа к файлам и каталогам;
• упаковка документации;
• удаление отладочной информации;
• коррекция символических ссылок на разделяемые библиотеки;
• перекомпиляция python-модулей.
Автоматическое удаление ненужных файлов
Все файлы и каталоги, подпадающие под правило определения ненужных файлов и каталогов, удаляются.
В частности, по умол- чанию подлежат удалению
• файлы с именами
DEADJOE
,
.SUMS
,
TAGS
,
core
;
• файлы, заканчивающиеся на
,
.orig
,
.rej
,
.bak
;
• каталоги с именем
CVS
Поддерживаются следующие методы определения файлов и катало- гов, подлежащих удалению:

18
none, skip поиска и удаления не производится;
auto метод по умолчанию, определенный в файле /usr/lib/rpm/brp- cleanup;
*
специальный метод; переданное значение используется в качестве имени программы, которая будет вызвана для поиска и удаления ненужных файлов.
Какой метод будет использован в каждом конкретном случае, зави- сит от значения макроса %_cleanup_method; значение по умолчанию для этого макроса —
auto
Автоматический поиск и исправление конфигурационных файлов, используемых прежде всего при разработке ПО
Поддерживаются следующие типы файлов, подлежащих проверке и исправлению:
none, skip поиска и проверки не производится;
binconfig поиск и обработка shell-скриптов по шаблону
/usr/bin/*-config
;
pkgconfig поиск и обработка файлов по шаблону
/usr/lib/pkgconfig/*.pc
;
libtool поиск и обработка
.la
-файлов;
Какой метод будет использован в каждом конкретном случае, за- висит от значения макроса %_fixup_method; значение по умолчанию для этого макроса —
binconfig pkgconfig libtool

Глава 1. ALT Packaging
19
Автоматическое исправление прав доступа к файлам и каталогам
Права доступа ко всем файловым объектам,
находящимся в
$RPM_BUILD_ROOT
, проверяются и корректируются согласно следующим правилам:
• каталоги
/usr/share
,
/usr/include
,
/usr/X11R6/share
,
/usr/X11R6/include
,
/usr/X11R6/man со всем содержимым должны быть доступны по чтению всем пользователям;
• ничто из содержимого каталога
/usr
, за исключением
/usr/src
, не должно быть доступно по записи не-владельцу, за исключением владельца файлов.
• никакие suid и/или sgid-файлы не должны быть доступны по чтению (и тем более по записи), за исключением владельца файлов.
Автоматическое сжатие man- и info-документации с поддержкой различных методов сжатия
Вся документация пакета, распознаваемая как man- или info- документация, по окончании работы секции
%install
, сжимается со- гласно выбранному методу.
Поддерживаются следующие методы сжатия:
bzip2
сжатие с помощью bzip2 -9;
gzip сжатие с помощью gzip -9n;
auto сжатие с помощью gzip -9n либо bzip2 -9 в зависимости от того,
какой вариант окажется эффективнее;
none производится декомпрессия файлов вместо сжатия;
skip процедура сжатия пропускается полностью.
Какой метод будет использован в каждом конкретном случае, зави- сит от значения макроса %_compress_method; значение по умолчанию

20
для этого макроса —
auto
. По окончании процедуры сжатия произво- дится выравнивание ссылок, которые, возможно, требуют коррекции в связи с изменениями имён файлов в процессе их сжатия.
Автоматическая проверка ELF-файлов с поддержкой различных стратегий
Иногда в результате сборки пакета получаются ELF-файлы, содер- жащие неверную и/или недопустимую информацию в некоторых сек- циях, таких как
RPATH
. Поэтому по окончании работы секции
%install проверяются все собранные ELF-файлы. Выбор типов файлов опреде- ляется значением макроса %_verify_elf_method, которое есть набор из следующих возможных значений:
none, skip поиска и проверки не производится;
relaxed проверка только на наличие недопустимых элементов в
RPATH
;
normal relaxed
+ проверка на наличие более чем одного элемента в
RPATH
;
strict проверка на наличие непустого
RPATH
Значение по умолчанию для макроса %_verify_elf_method в данный момент равно normal
Автоматическое удаление отладочной информации из ELF-файлов с поддержкой различных стратегий выбора файлов, подлежащих обработке
Зачастую возможно уменьшить размер получаемых в результате сборки пакета ELF-файлов без потери качества за счёт удаления из них отладочной информации. Поэтому по окончании работы секции
%install все ELF-файлы выбранных типов обрабатываются програм- мой strip
Выбор типов файлов определяется значением макроса
%_strip_method, которое есть набор из следующих возможных значе- ний:
executable
ELF executable;

Глава 1. ALT Packaging
21
relocatable
ELF relocatable;
shared
ELF shared object;
static ar archive.
Кроме того, есть возможность вызывать strip вручную, для этой цели предназначены макросы %strip_executable, %strip_relocatable,



Поделитесь с Вашими друзьями:
  1   2   3


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал