12.1.3 Отладка spec-файла с помощью rpmlint

После того, как spec-файл написан, на его основе может быть собран бинарный rpm-пакет, который в свою очередь может быть проверен на наличие наиболее общих ошибок. Эту проверку можно выполнить с помощью утилиты rpmlint. Имя rpmlint пришло из Unix, где популярна утилита lint. Она используется для "санитарной проверки" кода на C. Типичные ошибки разработчиков ищутся с помощью шаблонов этих ошибок. Идея rpmlint сходная - в процессе анализа бинарного rpm-пакета искать наиболее часто повторяющиеся ошибки пакетировщиков.

rpmlint имеет интерфейс подключения новых функций, однако и поставляется с довольно большим набором стандартных проверок. Стандартно проверяются следующие факты: .noarch.rpm не содержит бинарных файлов, никакие бинарные файлы не устанавливаются в каталог /etc, типы бинарных файлов соответствуют заявленной процессорной архитектуре, разделяемые библиотеки сконфигурированы корректно, все исполняемые файлы подверглись очистке от лишних символов (операция strip).

Кроме того, rpmlint выполняет ряд проверок на соответствие файлов пакета стандарту Filesystem Hierarchy Standard, стандарту Linux Standards Base и что все файлы и каталоги имеют правильные атрибуты доступа. Init-скрипты проверяются на соответствие базовой структуре init-скрипта и что %post и %preun правильно их конфигурируют. %post, %pre и %preun проверяются на указание на правильные интерпретаторы и на верность синтаксиса с точки зрения этих интерпретаторов. Также проверяется различными способами целостность пакета в целом.

Установленная утилита rpmlint может быть сконфигурирована путем редактирования файлов /etc/rpmlint/config или, в масштабе пользователя, $HOME/.rpmlintrc.

Пример запуска rpmlint для пакета с исходным кодом:

$ rpmlint tin-1.5.12-1.src.rpm

E: tin no-packager-tag

W: tin invalid-license distributable

W: tin no-url-tag

W: tin strange-permission tin-1.5.12.tar.bz2 0664

W: tin obsolete-tag Copyright

Как показывает вывод, в основном пакет выглядит как правильно сформированный. Права на файлы кода могут быть изменены на 0644 и поле Copyright заменено на License, после чего пакет станет полностью легитимным (с точки зрения rpmlint).

При запуске rpmlint для бинарного пакета увидим примерно следующее:

$ rpmlint tin-1.5.12-1.i386.rpm

W: tin invalid-vendor None

W: tin invalid-distribution None

E: tin no-packager-tag

W: tin invalid-license distributable

W: tin no-url-tag

Данный пакет выглядит правильным. Предупреждения об отсутствии необязательных полей можно игнорировать. Тип лицензии rpmlint неизвестен. Это можно изменить или также проигнорировать.

Многие вендоры Linux проверяют с помощью rpmlint дистрибутивы в целом. Подвергать такой проверке отдельные пакеты, особенно приходящие извне - это хороший подход.

Далее - Использование rpm2cpio для извлечения файлов из нагрузки пакетов
Назад - Добавление функций редактирования с помощью emacs-плагина rpm-spec-mode
Содержание