674 lines
35 KiB
Plaintext
674 lines
35 KiB
Plaintext
|
ALT Linux RPM:
|
|||
|
особенности версии rpm-4.0.4-alt32
|
|||
|
|
|||
|
Dmitry V. Levin <ldv@altlinux.org>
|
|||
|
|
|||
|
ALT Linux Team
|
|||
|
|
|||
|
Обоснование
|
|||
|
|
|||
|
При разработке изменений и дополнений к RPM решались следующие задачи:
|
|||
|
|
|||
|
Обеспечить желаемую функциональность:
|
|||
|
наши пакеты должны отвечать определённым правилам, о которых
|
|||
|
пойдёт речь несколько позже. Для этого надо, чтобы spec-файлы
|
|||
|
обеспечивали выполнение этих правил.
|
|||
|
|
|||
|
Помочь разработчику:
|
|||
|
так как spec-файлы все ещё пишут люди, то их работу нужно
|
|||
|
свести к тому минимуму, который, собственно, и требует участия
|
|||
|
человека. Разработчик не должен копировать блоки кода из файла
|
|||
|
в файл, ибо эта неинтеллектуальная работа отнимает массу сил и
|
|||
|
чревата ошибками. Для этого есть макросы. Если какой-то код
|
|||
|
появляется в разных spec-файлах более одного раза, то надо
|
|||
|
написать макрос(ы).
|
|||
|
|
|||
|
Новые тэги.
|
|||
|
|
|||
|
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;
|
|||
|
|
|||
|
альтернативы:
|
|||
|
%_altdir;
|
|||
|
|
|||
|
лицензии:
|
|||
|
%_licensedir;
|
|||
|
|
|||
|
меню:
|
|||
|
%_menudir, %_iconsdir, %_miconsdir, %_liconsdir;
|
|||
|
|
|||
|
service:
|
|||
|
%_initdir;
|
|||
|
|
|||
|
control:
|
|||
|
%_controldir;
|
|||
|
|
|||
|
emacs:
|
|||
|
%_emacslispdir;
|
|||
|
|
|||
|
pam:
|
|||
|
%_pam_modules_dir;
|
|||
|
|
|||
|
tcl:
|
|||
|
%_tcllibdir, %_tcldatadir;
|
|||
|
|
|||
|
kernel:
|
|||
|
%patches_dir, %kernel_srcdir;
|
|||
|
|
|||
|
ruby:
|
|||
|
%ruby_archdir, %ruby_libdir, %ruby_sitearchdir,
|
|||
|
%ruby_sitelibdir;
|
|||
|
|
|||
|
другие системные:
|
|||
|
%_cachedir, %_lockdir, %_logdir, %_spooldir.
|
|||
|
|
|||
|
Управление опциями компилятора gcc.
|
|||
|
|
|||
|
%add_optflags <options>:
|
|||
|
добавить указанные параметры в стандартный набор %optflags;
|
|||
|
|
|||
|
%remove_optflags <options>:
|
|||
|
убрать указанные параметры из стандартного набора %optflags;
|
|||
|
|
|||
|
%optflags_core:
|
|||
|
базовые параметры;
|
|||
|
|
|||
|
%_optlevel:
|
|||
|
уровень оптимизации;
|
|||
|
|
|||
|
%optflags_optimization:
|
|||
|
параметры, отвечающие за оптимизацию, кроме
|
|||
|
архитектурно-зависимых;
|
|||
|
|
|||
|
%optflags_warnings:
|
|||
|
warning options;
|
|||
|
|
|||
|
%optflags_debug:
|
|||
|
debugging options;
|
|||
|
|
|||
|
%optflags_shared:
|
|||
|
параметры, применяемые для порождения корректного кода для DSO;
|
|||
|
|
|||
|
%optflags_nocpp:
|
|||
|
параметры, отключающие поддержку C++ exceptions и C++ RTTI;
|
|||
|
|
|||
|
%optflags_notraceback:
|
|||
|
-fomit-frame-pointer;
|
|||
|
|
|||
|
%optflags_fastmath:
|
|||
|
-ffast-math;
|
|||
|
|
|||
|
%optflags_strict:
|
|||
|
-fstrict-aliasing.
|
|||
|
|
|||
|
По умолчанию, стандартный набор %optflags состоит из ``%optflags_core
|
|||
|
%optflags_warnings %optflags_optimization''.
|
|||
|
|
|||
|
Выбор версии используемых GCC.
|
|||
|
|
|||
|
%set_gcc_version:
|
|||
|
выбор версии GCC из множества установленных в системе.
|
|||
|
|
|||
|
По умолчанию используется /usr/bin/i586-alt-linux-gcc.
|
|||
|
|
|||
|
Выбор версии используемых GNU Autotools.
|
|||
|
|
|||
|
%set_autoconf_version:
|
|||
|
выбор версии autoconf из множества установленных в системе;
|
|||
|
|
|||
|
%set_automake_version:
|
|||
|
выбор версии automake из множества установленных в системе;
|
|||
|
|
|||
|
%set_libtool_version:
|
|||
|
выбор версии libtool из множества установленных в системе.
|
|||
|
|
|||
|
По умолчанию используется версия default.
|
|||
|
|
|||
|
Макросы-надстройки над утилитой make.
|
|||
|
|
|||
|
%__nprocs:
|
|||
|
число процессоров, доступных для сборки с помощью %make_build;
|
|||
|
|
|||
|
%make_build:
|
|||
|
вызов make с параметром, обеспечивающим оптимальную
|
|||
|
параллельную сборку в данной среде;
|
|||
|
|
|||
|
%make_install:
|
|||
|
вызов make c инициализацией переменной INSTALL, что в случае
|
|||
|
корректной реализации Makefileов пакета позволяет сохранить
|
|||
|
дату последней модификации файлов, что особенно важно для
|
|||
|
документации;
|
|||
|
|
|||
|
%makeinstall:
|
|||
|
``%make_install <инициализация других переменных, используемых
|
|||
|
многими Makefileами> install''.
|
|||
|
|
|||
|
Регистрация документации в формате info.
|
|||
|
|
|||
|
%install_info:
|
|||
|
регистрация новых/обновлённых info-страниц;
|
|||
|
|
|||
|
%uninstall_info:
|
|||
|
отмена регистрации удалённых info-страниц.
|
|||
|
|
|||
|
Вспомогательные макросы %configure.
|
|||
|
|
|||
|
%_configure_script:
|
|||
|
путь к скрипту configure;
|
|||
|
|
|||
|
%_configure_target:
|
|||
|
целевая платформа для configure;
|
|||
|
|
|||
|
%_configure_gettext:
|
|||
|
-without-included-gettext.
|
|||
|
|
|||
|
Серверные макросы.
|
|||
|
|
|||
|
%post_service:
|
|||
|
регистрация нового сервиса при установке, перезапуск при
|
|||
|
обновлении;
|
|||
|
|
|||
|
%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;
|
|||
|
|
|||
|
%_verify_info_method:
|
|||
|
метод, используемый при проверке info-файлов в секции %install;
|
|||
|
|
|||
|
%_strip_method:
|
|||
|
метод, используемый при обработке ELF-файлов в секции %install;
|
|||
|
|
|||
|
%_perl_req_method
|
|||
|
: метод, используемый при поиске зависимостей в perl-скриптах;
|
|||
|
|
|||
|
%_findprov_lib_path
|
|||
|
: список каталогов, в которых производится поиск ELF-файлов на
|
|||
|
наличие предоставляемых зависимостей;
|
|||
|
|
|||
|
%_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_topdir:
|
|||
|
точка начала поиска файлов, обрабатываемых соответствующим
|
|||
|
методом;
|
|||
|
|
|||
|
%_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_skiplist:
|
|||
|
список шаблонов файлов, которые будут пропущены при обработке
|
|||
|
соответствующим методом;
|
|||
|
|
|||
|
%_unpackaged_files_terminate_build:
|
|||
|
параметр, определяющий влияние неупакованных файлов на
|
|||
|
результат сборки;
|
|||
|
|
|||
|
%set_{cleanup,compress,fixup,strip,verify_{elf,info},perl_req}_method:
|
|||
|
изменить значение соответствующего макроса;
|
|||
|
|
|||
|
%set_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_{topdi
|
|||
|
r,skiplist}:
|
|||
|
изменить значение соответствующего макроса;
|
|||
|
|
|||
|
%add_{cleanup,compress,fixup,strip,verify_elf,findreq,findprov}_skipli
|
|||
|
st:
|
|||
|
добавить значение в соответствующий список;
|
|||
|
|
|||
|
%{add,set}_findprov_lib_path:
|
|||
|
добавить значение в список / изменить список каталогов, в
|
|||
|
которых производится поиск ELF-файлов на наличие
|
|||
|
предоставляемых зависимостей;
|
|||
|
|
|||
|
%_keep_libtool_files:
|
|||
|
определяет, подлежат ли автоматическому удалению ненужные
|
|||
|
вспомогательные файлы libtool'а.
|
|||
|
|
|||
|
Вызов вспомогательных программ.
|
|||
|
|
|||
|
%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;
|
|||
|
|
|||
|
%strip_binaries:
|
|||
|
вызов /usr/lib/rpm/brp-strip;
|
|||
|
|
|||
|
%clean_buildroot:
|
|||
|
выполнение rm -rf %buildroot, если %buildroot не указывает на
|
|||
|
настоящий /.
|
|||
|
|
|||
|
Управление процессом сборки.
|
|||
|
|
|||
|
%_rpmbuild_clean:
|
|||
|
управляет включённым по умолчанию для rpmbuild -rebuild и
|
|||
|
rpmbuild -recompile режимом удаления промежуточных файлов и
|
|||
|
каталогов.
|
|||
|
|
|||
|
%_rpmbuild_packagesource:
|
|||
|
управляет выключенным по умолчанию для rpmbuild -rebuild и
|
|||
|
rpmbuild -recompile режимом создания пакетов с исходным кодом.
|
|||
|
|
|||
|
%buildmulti:
|
|||
|
альтернативная директива %build для случая, когда в секции
|
|||
|
%build происходит заполнение %buildroot. Вообще говоря, такой
|
|||
|
техники стоит избегать во всех случаях, когда это возможно;
|
|||
|
|
|||
|
%_deps_optimization:
|
|||
|
управляет включённым по умолчанию режимом оптимизации
|
|||
|
зависимостей;
|
|||
|
|
|||
|
%_build_lang:
|
|||
|
значение переменных LANG, LANGUAGE и LC_ALL;
|
|||
|
|
|||
|
%_build_display:
|
|||
|
значение переменной DISPLAY;
|
|||
|
|
|||
|
%_build_xauthority:
|
|||
|
значение переменной XAUTHORITY;
|
|||
|
|
|||
|
Версии некоторых установленных в системе пакетов.
|
|||
|
|
|||
|
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:
|
|||
|
версия указанного пакета;
|
|||
|
|
|||
|
%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:
|
|||
|
проверка значения макросов условия;
|
|||
|
|
|||
|
%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, при котором происходит только
|
|||
|
подстановка макросов;
|
|||
|
|
|||
|
-bM:
|
|||
|
новый режим работы RPM, при котором происходит только вывод
|
|||
|
списка использованных макросов;
|
|||
|
|
|||
|
-nowait-lock:
|
|||
|
не блокировать процесс, если база данных RPM занята;
|
|||
|
|
|||
|
-fancypercent:
|
|||
|
отображать дополнительную информацию о процентах проделанной
|
|||
|
работы при установке/обновлении пакетов;
|
|||
|
|
|||
|
-nopatch:
|
|||
|
не включать указанные патчи в исходный пакет;
|
|||
|
|
|||
|
-nosource:
|
|||
|
не включать указанные исходники в исходный пакет;
|
|||
|
|
|||
|
-lastchange:
|
|||
|
вывести информацию о последнем изменении пакета;
|
|||
|
|
|||
|
-changes-since:
|
|||
|
вывести информацию обо всех изменениях пакета, начиная с
|
|||
|
указанной версии.
|
|||
|
|
|||
|
Новые возможности rpm по сборке пакетов.
|
|||
|
|
|||
|
По окончании выполнения секции %install RPM выполняет ряд действий:
|
|||
|
* удаление ненужных файлов и каталогов;
|
|||
|
* исправление прав доступа к файлам и каталогам;
|
|||
|
* упаковка документации;
|
|||
|
* удаление отладочной информации;
|
|||
|
* коррекция символических ссылок на разделяемые библиотеки;
|
|||
|
* перекомпиляция python-модулей.
|
|||
|
|
|||
|
Автоматическое удаление ненужных файлов.
|
|||
|
|
|||
|
Все файлы и каталоги, подпадающие под правило определения ненужных
|
|||
|
файлов и каталогов, удаляются. В частности, по умолчанию подлежат
|
|||
|
удалению
|
|||
|
* файлы с именами DEADJOE, .SUMS, TAGS, core, .cvsignore;
|
|||
|
* файлы, заканчивающиеся на , .orig, .rej, .bak;
|
|||
|
* каталоги с именем CVS;
|
|||
|
* ненужные вспомогательные файлы libtool'а, заканчивающиеся на .la.
|
|||
|
|
|||
|
Поддерживаются следующие методы определения файлов и каталогов,
|
|||
|
подлежащих удалению:
|
|||
|
* 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.
|
|||
|
|
|||
|
Автоматическое исправление прав доступа к файлам и каталогам.
|
|||
|
|
|||
|
Права доступа ко всем файловым объектам, находящимся в
|
|||
|
$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; значение по умолчанию для этого
|
|||
|
макроса - auto. По окончании процедуры сжатия производится
|
|||
|
выравнивание ссылок, которые, возможно, требуют коррекции в связи с
|
|||
|
изменениями имён файлов в процессе их сжатия.
|
|||
|
|
|||
|
Автоматическая проверка ELF-файлов с поддержкой различных стратегий.
|
|||
|
|
|||
|
Иногда в результате сборки пакета получаются ELF-файлы, содержащие
|
|||
|
неверную и/или недопустимую информацию в некоторых записях
|
|||
|
динамической секции, таких как RPATH и TEXTREL. Поэтому по окончании
|
|||
|
работы секции %install проверяются все собранные ELF-файлы. Выбор
|
|||
|
методов проверки определяется значением макроса %_verify_elf_method,
|
|||
|
которое есть набор из следующих возможных значений:
|
|||
|
* none, skip: поиска и проверки не производится;
|
|||
|
* rpath=relaxed: проверка RPATH только на наличие недопустимых
|
|||
|
элементов;
|
|||
|
* rpath=normal: relaxed + проверка на наличие более чем одного
|
|||
|
элемента в RPATH;
|
|||
|
* rpath=strict: проверка на наличие непустого RPATH.
|
|||
|
* textrel=relaxed: предупреждение о наличии записей типа TEXTREL;
|
|||
|
* textrel=normal, textrel=strict: проверка на наличие записей типа
|
|||
|
TEXTREL;
|
|||
|
|
|||
|
Значение по умолчанию для макроса %_verify_elf_method в данный момент
|
|||
|
равно normal, что эквивалентно rpath=normal,textrel=normal.
|
|||
|
|
|||
|
Автоматическое удаление отладочной информации из ELF-файлов с поддержкой
|
|||
|
различных стратегий выбора файлов, подлежащих обработке.
|
|||
|
|
|||
|
Зачастую возможно уменьшить размер получаемых в результате сборки
|
|||
|
пакета ELF-файлов без потери качества за счёт удаления из них
|
|||
|
отладочной информации. Поэтому по окончании работы секции %install все
|
|||
|
ELF-файлы выбранных типов обрабатываются программой strip. Выбор типов
|
|||
|
файлов определяется значением макроса %_strip_method, которое есть
|
|||
|
набор из следующих возможных значений:
|
|||
|
* executable: ELF executable;
|
|||
|
* relocatable: ELF relocatable;
|
|||
|
* shared: ELF shared object;
|
|||
|
* static: ar archive.
|
|||
|
|
|||
|
Кроме того, есть возможность вызывать strip вручную, для этой цели
|
|||
|
предназначены макросы %strip_executable, %strip_relocatable,
|
|||
|
%strip_shared, %strip_static. Синтаксис этих макросов подробно изложен
|
|||
|
в ``/usr/lib/rpm/brp-strip -help''.
|
|||
|
|
|||
|
Автоматическая перекомпиляция python-модулей.
|
|||
|
|
|||
|
Как известно, python-модули обычно компилируют в байтовую форму для
|
|||
|
увеличения быстродействия при последующей работе с ними. Каждый такой
|
|||
|
модуль, помимо всего прочего, хранит время своего создания и полное
|
|||
|
имя файла, в котором должен находиться. В связи с последним
|
|||
|
обстоятельством скомпилированные модули, созданные в результате работы
|
|||
|
секции %install, непригодны, ибо не могут быть использованы после
|
|||
|
установки пакета. По этой причине теперь по окончании работы секции
|
|||
|
%install производится перекомпиляция всех python-модулей таким
|
|||
|
образом, чтобы их можно было использовать после установки пакета. В
|
|||
|
качестве байт-компилятора будет использоваться программа, имя которой
|
|||
|
хранится в макросе %__python. Обычно это /usr/bin/python, однако в
|
|||
|
некоторых случаях может потребоваться изменить это значение на другое
|
|||
|
(например, в случае сборки пакета python или если по какой-то причине
|
|||
|
перекомпиляция не нужна).
|
|||
|
|
|||
|
Автоматический поиск требуемых и предоставляемых зависимостей.
|
|||
|
|
|||
|
В дополнение к стандартному поиску зависимостей от/для разделяемых
|
|||
|
библиотек, реализована поддержка поиска требуемых зависимостей для
|
|||
|
shell и perl-скриптов, поиска зависимостей, определяемых наличием
|
|||
|
специальных файлов в пакете, а также поддержка поиска предоставляемых
|
|||
|
зависимостей для perl-скриптов.
|
|||
|
|
|||
|
Изменение семантики тэгов, управляющих поиском зависимостей.
|
|||
|
|
|||
|
Новые возможности RPM по автоматическому поиску зависимостей при
|
|||
|
сборке пакетов управляются, как и прежде, значениями тэгов AutoReq,
|
|||
|
AutoProv и AutoReqProv. К стандартным значениям yes/no (true/false),
|
|||
|
таким образом, добавлены новые возможные значения, являющиеся именами
|
|||
|
методов поиска зависимостей:
|
|||
|
* lib/nolib: включение/выключение поиска зависимостей от/для
|
|||
|
разделяемых библиотек;
|
|||
|
* shell/noshell: включение/выключение поиска зависимостей в
|
|||
|
shell-скриптах;
|
|||
|
* perl/noperl: включение/выключение поиска зависимостей в
|
|||
|
perl-скриптах;
|
|||
|
* files/nofiles: включение/выключение поиска зависимостей,
|
|||
|
определяемых наличием специальных файлов в пакете;
|
|||
|
* default: то же, что и yes;
|
|||
|
* none,off: то же, что и no;
|
|||
|
* all: включение всех возможных методов поиска зависимостей.
|
|||
|
|
|||
|
Значением тэга может являться как один метод, так и перечисление
|
|||
|
методов. По умолчанию, для каждого под пакета собираемого пакета
|
|||
|
AutoReq = AutoProv = yes, что на практике означает использование
|
|||
|
макросов %_findreq_default_method и %_findprov_default_method для
|
|||
|
определения методов поиска зависимостей.
|
|||
|
|
|||
|
Автоматическая очистка BuildRoot.
|
|||
|
|
|||
|
Перед выполнением секции %install и по окончании выполнения секции
|
|||
|
%clean RPM автоматически очищает BuildRoot с помощью макроса
|
|||
|
%clean_buildroot. Это значит, что больше не нужно использовать эти
|
|||
|
ужасные ``rm -rf $RPM_BUILD_ROOT''. Секция %clean вообще может (и
|
|||
|
должна) быть опущена, если в ней не содержится ничего, кроме этого
|
|||
|
``rm''. В тех редких случаях, когда в spec-файле производится
|
|||
|
заполнение BuildRoot не в секции %install, как это должно быть, а в
|
|||
|
секции %build, что в принципе неправильно, можно перенести точку
|
|||
|
очистки BuildRoot из начала секции %install в начало секции %build,
|
|||
|
если заменить директиву %build на макрос %buildmulti.
|
|||
|
|
|||
|
Упрощение секции %files.
|
|||
|
|
|||
|
Ранее в начале каждой секции %files было необходимо указывать атрибуты
|
|||
|
файлов и каталогов создаваемых пакетов с помощью довольно однообразно
|
|||
|
используемой директивы %defattr. Теперь это происходит автоматически в
|
|||
|
начале каждой секции %files, а также в начале каждого файла,
|
|||
|
включаемого в секцию %files с помощью опции -f. Точнее говоря, в
|
|||
|
качестве этой директивы используется значение макроса %_defattr. Таким
|
|||
|
образом, прежнее использование директивы %defattr в начале секций и
|
|||
|
файлов следует считать упразднённым.
|
|||
|
|
|||
|
Сборка пакетов привилегированным пользователем.
|
|||
|
|
|||
|
То, что когда-то было необходимостью, со временем стало излишним, а
|
|||
|
порой и просто опасным. Теперь, когда все без исключения пакеты можно
|
|||
|
(и нужно) собирать непривилегированным пользователем во избежание
|
|||
|
риска разрушения системы и некорректной сборки, сборка пакетов
|
|||
|
привилегированным пользователем по умолчанию запрещена. Этот запрет
|
|||
|
можно снять путём изменения значения макроса %_allow_root_build.
|
|||
|
|
|||
|
Bibliography
|
|||
|
|
|||
|
1
|
|||
|
Официальный web-сайт rpm: http://www.rpm.org/
|
|||
|
2
|
|||
|
Список рассылки для разработчиков rpm: rpm-list@redhat.com
|
|||
|
3
|
|||
|
Edward C. Bailey ``Maximum RPM'' February 17, 1997. (доступна
|
|||
|
также online-версия по адресу http://www.rpm.org/max-rpm/ и в
|
|||
|
формате PostScript по адресу
|
|||
|
http://www.rpm.org/local/maximum-rpm.ps.gz)
|
|||
|
_________________________________________________________________
|