711 lines
24 KiB
Plaintext
711 lines
24 KiB
Plaintext
ALT Linux RPM:
|
||
особенности версии rpm-4.0.4-alt28
|
||
|
||
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_kernel:
|
||
параметры, используемые при компиляции ядра и его модулей.
|
||
|
||
По умолчанию, стандартный набор %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''.
|
||
|
||
Регистрация разделяемых библиотек.
|
||
|
||
%post_ldconfig, %post_ldconfig_lib:
|
||
регистрация новых/обновлённых библиотек;
|
||
|
||
%post_ldconfig_sys:
|
||
регистрация новых/обновлённых системных библиотек (которые
|
||
могут быть использованы в chroot'ах);
|
||
|
||
%postun_ldconfig:
|
||
отмена регистрации удалённых библиотек.
|
||
|
||
Регистрация документации в формате info.
|
||
|
||
%install_info:
|
||
регистрация новых/обновлённых info-страниц;
|
||
|
||
%uninstall_info:
|
||
отмена регистрации удалённых info-страниц.
|
||
|
||
Регистрация меню.
|
||
|
||
%update_menus:
|
||
регистрация новых/обновлённых меню;
|
||
|
||
%clean_menus:
|
||
отмена регистрации удалённых меню.
|
||
|
||
Регистрация оконных менеджеров.
|
||
|
||
%update_wms:
|
||
регистрация новых/обновлённых описаний оконных менеджеров;
|
||
|
||
%clean_wms:
|
||
отмена регистрации удалённых описаний оконных менеджеров.
|
||
|
||
Регистрация каталогов scrollkeeper.
|
||
|
||
%update_scrollkeeper:
|
||
регистрация новых/обновлённых каталогов;
|
||
|
||
%clean_scrollkeeper:
|
||
отмена регистрации удалённых каталогов.
|
||
|
||
Вспомогательные макросы %configure.
|
||
|
||
%__libtoolize:
|
||
путь к скрипту libtoolize;
|
||
|
||
%_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;
|
||
|
||
%_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,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-файлов на наличие
|
||
предоставляемых зависимостей.
|
||
|
||
Вызов вспомогательных программ.
|
||
|
||
%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. Вообще говоря, такой
|
||
техники стоит избегать во всех случаях, когда это возможно;
|
||
|
||
%_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:
|
||
версия указанного пакета;
|
||
|
||
%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;
|
||
* файлы, заканчивающиеся на , .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)
|
||
_________________________________________________________________
|