Валидатор RPM-пакетов

Валидатор проверяет установочные RPM-пакеты для ОС Аврора на соответствие требованиям.

Валидатор RPM-пакетов можно запустить в:

Валидатор также всегда вызывается во время установки пакетов на сертифицированные версии ОС Аврора.

Запуск валидатора в среде сборки

rpmvalidation -t <целевая_платформа> [Ключи] <путь_к_RPM-пакету>

Для получения списка доступных целевых платформ используется команда:

rpmvalidation -l

Ключи

-d <опции_отладки>
Задать опции отладки (по умолчанию — 2):
  • 0 — выключить отладочный лог;
  • 1 — включить отладочный лог;
  • 2 — подробный отладочный лог;
  • 3 — подробный отладочный лог c сохранением результата в директории проверяемого пакета.
-c | --no-color
Выключить подсветку синтаксиса в выводе валидатора.
-g | --config-dir <директория>
Задать директорию с конфигурацией для валидатора.
-s | --sort
Отсортировать передаваемые команды.
-v | --version
Показать версию валидатора.
-h | --help
Показать подсказку (команда запуска валидатора и ключи).

Пример

[mersdk@SailfishSDK ~]$ rpmvalidation -t AuroraOS-3.2.2.21-cert-armv7hl ./app-0.1-1.armv7hl.rpm
Validating for target AuroraOS-3.2.2.21-cert-armv7hl
Using validation suites: harbour
RPM Validation script v1.51+cert26-1.4.2.omp
Created temporary directory /tmp/RPM-CHECK-PRVE6776
Reading config scripts from /usr/share/sdk-harbour-rpmvalidator
Prepare for RPM validation of file ./app-0.1-1.armv7hl.rpm
...

Результат валидации

  • 0 или Validation was successful — валидация завершена успешно;
  • 1 или Validation failed — пакет не прошел валидацию;
  • 2 или Validation succeded with warnings — валидация завершена успешно, имеются замечания.

О значении ошибок и замечаний валидации см. Отладочный лог.

Валидатор в Aurora IDE

Валидатор RPM-пакетов также можно запускать после сборки и подписи пакета в Aurora IDE для сертифицированной версии ОС:

  1. Переключиться в режим «Проекты» и открыть настройки запуска необходимого комплекта для сборки.
  2. Выбрать метод запуска.
  3. Удостовериться, что в этапах запуска есть «RPM Validation: Проверки RPM пакета». В противном случае добавить добавить этап в выпадающем меню «Установка, добавить этап» ниже.

  4. В случае необходимости добавить ключи в поле «Аргументы».

  5. Запустить сборку и установку приложения. В консоли сборки будет отображён отладочный лог валидатора и результат.

Отладочный лог

В отладочном логе валидатора отображаются проверяемые блоки согласно требованиям к RPM-пакетам. Для блоков проверки предусмотрены следующие типы сообщений:

  • PASSED — проверка пройдена;
  • FAILED — проверка не пройдена;
  • INFO — информационное сообщение;
  • ERROR — указание на ошибку, пакет не будет валидирован (причины ошибки см. ниже);
  • WARNING — предупреждаюшее сообщение, проверка пройдена, но следует обратить внимание на сообщение, устанавливаемое приложение может испытывать проблемы (причины предупреждения см. ниже).

Пример блока проверки QML-файлов в установочном пакете:

QML files
=========
INFO [/usr/share/app/qml/pages/MainPage.qml] Uses Sailfish Silica Components (only reported once)
ERROR [/usr/share/app/qml/pages/MainPage.qml] Import 'QtPositioning 5.0' is not allowed
INFO [app] Please see our FAQ here: https://community.omprussia.ru/doc/software_development/guidelines/rpm_requirements
FAILED

Пакет не пройдёт валидацию, так как импортируемый QML-модуль не разрёшен для использования в ОС Аврора.

Ниже представлена расшифровка сообщений для следующих блоков:

QML files

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING [<Файл пакета>] Import <Название и версия QML модуля> is deprecated Поддержка указанного QML-модуля прекращена и модуль будет запрещен для будущего использования Исключить из зависимостей данный модуль
WARNING [<Файл пакета>] Import <Название и версия QML модуля> is unstable Указанный QML-модуль имеет нестабильный API Исключить из зависимостей данный модуль
ERROR [<Файл пакета>] Import <Название и версия QML модуля> is not valid - absolute path imports are forbidden, please use relative paths Для импорта указанного QML-модуля используется абсолютный путь Требуется указать относительный путь
ERROR [<Файл пакета>] Import <Название и версия QML модуля> is not valid - the relative path points outside of <Директория пакета> this is not allowed Указанный QML-модуль импортируется из-за пределов установочного пакета Требуется поместить модуль внутри пакета
ERROR [<Файл пакета>] Import <Название и версия QML модуля> is not valid - the path points to an unsupported external path Указанный QML-модуль импортируется по неразрешенному пути Не использовать указанный модуль или обеспечить его доступность по локальному пути
ERROR [<Файл пакета>] Import <Название и версия QML модуля> is not allowed Импортируется запрещенный QML-модуль Исключить указанный модуль из зависимостей

Desktop file

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR File is missing - cannot validate .desktop file В пакете отсутствует .desktop-файл См. требования путей к файлам
ERROR Missing valid Name declaration, must not be empty Не указана или неправильно указана строка Name в .desktop-файле См. требования к файлу .desktop
ERROR Missing valid Icon declaration, must be Icon= Не указана или неправильно указана строка Icon в .desktop-файле, требуется указать См. требования к файлу .desktop
ERROR Missing valid Exec declaration, must be Exec= Не указана или неправильно указана строка Exec в .desktop-файле См. требования к файлу .desktop
ERROR Missing valid Type declaration Не указана или неправильно указана строка Type в .desktop-файле Указать строку Type=Application
WARNING X-Nemo-Application-Type should be silica-qt5 for apps importing Sailfish.Silica in QML Не указана строка X-Nemo-Application-Type, рекомендуется указать в строке silica-qt5, так как в QML-файлах может использоваться библиотека Sailfish.Silica Указать в .desktop-файле X-Nemo-Application-Type=silica-qt5
ERROR X-Nemo-Application-Type must be silica-qt5 for sailfish-qml apps Требуется указать silica-qt5 в строке X-Nemo-Application-Type, в QML-файлах используется библиотека Sailfish.Silica Указать в .desktop-файле X-Nemo-Application-Type=silica-qt5
ERROR X-Nemo-Application-Type not declared (use silica-qt5 for QML apps) Не указана строка X-Nemo-Application-Type См. требования к файлу .desktop

Paths

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING Empty directory В директории установочного пакета нет файлов Наполнить пакет
ERROR Installation not allowed in this location В установочном пакете файлы расположены по запрещенному пути Перекомпоновать пакет в соответствии с требованиями
ERROR Source control directories must not be included Установочный пакет не должен содержать файлы систем контроля версий Убрать из пакета файлы форматов .git, .svn, .hg, .bzr и .cvs

Libraries

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING Shared library is deprecated: <Название библиотеки> Поддержка указанной библиотеки прекращена и библиотека будет запрещена для будущего использования Исключить из зависимостей указанную библиотеку
WARNING Shared library is unstable: <Название библиотеки> Указанная библиотека имеет нестабильный API Исключить из зависимостей указанную библиотеку
ERROR Cannot link to shared library: <Название библиотеки> Нет связки с указанной библиотекой Добавить указанную библиотеку как собственную и указать к ней rpath

Icon

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING Icon not found! В пакете не найден файл значка См. требования к значкам
ERROR Wrong size, must be <Размер значка> Неправильный размер изображения значка Заменить на изображение корректного указанного размера
ERROR Must be a PNG image Изображение значка должно быть в формате .png Использовать изображение в формате .png

Symbols

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR Binary does not link to Исполняемый файл не связан с символом целевой платформы Использовать Aurora IDE для сборки пакета или другую версию glibc
WARNING Binary does not export main() symbol - booster might fail В исполняемом файле функция main не экспортируется Экспортировать функцию main в header-файле, добавив бустер Q_DECL_EXPORT
ERROR Binary must export main() symbol for booster to work (Q_DECL_EXPORT) В исполняемом файле функция main() должна экспортироваться с помощью Q_DECL_EXPORT Добавить бустер Q_DECL_EXPORT для функции main в header-файл
ERROR Main binary must be an executable ELF file Исполняемый файл должен быть ELF-файлом (Executable and Linkable Format) Скомпилировать исполняемый файл, используя компоновщик

Permissions

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR <Путь к директории> Group-writable directory Указанная директория имеет права доступа для группы пользователей Сменить права доступа для директории. См. требования
ERROR <Путь к директории> World-writable directory Указанная директория доступна всем Сменить права доступа для директории. См. требования
ERROR <Путь к файлу> setuid, setgid or sticky bit set Указанный файл снабжен флагами suid/sgid или sticky bit set Убрать флаги. См. требования
ERROR <Путь к файлу> File must not be executable (current permissions: <текущие обладатели доступа к исполнению файла>) Указанный файл не должен иметь прав доступа к исполнению указанными пользователями и группами пользователей Изменить директиву назначения прав в .spec/.yaml-файлe
ERROR <Путь к файлу> Owner is <Имя пользователя>, should be 'root' Владельцем указанного файла должен root, а не указанный пользователь Назначить владельца с помощью директивы %defattr(644,root,root,-) в списке %files в .spec/.yaml-файлe
ERROR <Путь к файлу> Group is <Имя группы пользователей>, should be 'root' Владельцем указанного файла должен быть root, а не указанная группа пользователей Назначить владельца с помощью директивы %defattr(644,root,root,-) в списке %files в .spec/.yaml-файлe

Scripts

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR <Скрипт> script not allowed Указанный скрипт запрещён к использованию в .spec/.yaml-файле Исключить указанный скрипт из проекта. См. требования к файлам .spec/.yaml

Provides

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR Provides: <Функциональность> must be specified in RPM Указанная функциональность (provide) должна быть добавлена в RPM-пакет Добавить указанную функциональность в .spec/.yaml-файл
ERROR Provides: <Функциональность> not allowed in RPM Указанная функциональность (provide) запрещена для использования Исключить указанную функциональность из .spec/.yaml-файла

Conflicts

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR Conflicts: <Конфликт> must be specified in RPM Указанный конфликт (conflict) должен быть добавлен в RPM-пакет Добавить указанный конфликт в .spec/.yaml-файл
ERROR Conflicts: <Конфликт> not allowed in RPM Указанный конфликт (conflict) запрещён для использования Исключить указанный конфликт из .spec/.yaml-файла

Obsoletes

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR Obsoletes: not allowed in RPM Указанное значение Obsoletes в .spec/.yaml-файле запрещено для использования Исключить Obsoletes из проекта. См. требования к файлам .spec/.yaml

Requires

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING <Зависимость> Dependency is deprecated Поддержка указанной зависимости прекращена и зависимость будет запрещена для будущего использования Исключить указанную зависимость из .spec/.yaml-файла
WARNING <Зависимость> Dependency is unstable Указанная зависимость имеет нестабильный API Исключить указанную зависимость из .spec/.yaml-файла
ERROR Cannot require shared library: <Зависимость> Зависимость не может быть разделяемой библиотекой Не указывать разделяемый библиотеки как зависимости
ERROR Invalid 'Requires: <Зависимость>' in library Требуется удалить указанную зависимость Исключить указанную зависимость из .spec/.yaml-файла
ERROR <Зависимость> Dependency not allowed Указанная зависимость запрещена для использования Исключить указанную зависимость из .spec/.yaml-файла
ERROR Add 'Requires: libsailfishapp-launcher' to the .spec file Требуется добавить зависимость libsailfishapp-launcher в .spec/.yaml-файл Добавить зависимость libsailfishapp-launcher в .spec/.yaml-файл
ERROR Use of 'XmlListModel' detected, but rpm does not require it! Add 'Requires: qt5-qtdeclarative-import-xmllistmodel' to the .spec file Требуется добавить зависимость qt5-qtdeclarative-import-xmllistmodel в .spec/.yaml-файл Добавить зависимость qt5-qtdeclarative-import-xmllistmodel в .spec/.yaml-файл

Sandboxing

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR <Путь к файлу> Hardcoded path: <Путь> Указанный путь к файлу не должен быть встроен в исходный код Использовать API для указания путей

Privileges

Тип сообщения Сообщение Причина Рекомендации по устранению
ERROR <Привилегия> Only privileges for <Имя исполняемого файла> are allowed Только указанная привилегия допустима для указанного бинарного файла Добавить привилегию директивой %{_datadir}/mapplauncherd/privileges.d/%{привилегия} в .spec/.yaml-файл
ERROR Empty privileges Empty privileges are not allowed Добавленный в пакет список привилегий не может быть пуст Добавить привилегии директивой %{_datadir}/mapplauncherd/privileges.d/%{привилегия} в .spec/.yaml-файл
ERROR <Привилегия> Only <Список разрешенных привилегий> privilege(s) might be used here Указанные привилегии запрещено использовать, разрешены только привилегии из списка Заменить запрещенные для использования привилегии на разрешенные

RPATH

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING rpath <Имя исполняемого файла> in binary does not point to an allowed location! Для указанного исполняемого файла неправильно указан rpath См. требования к разделяемым библиотекам
ERROR <Имя исполняемого файла> The rpath in binary is not allowed: В указанном исполняемом файле не разрешен rpath См. требования к разделяемым библиотекам
WARNING The RPM contains shared libraries, but it can't be determined for sure if they are needed by the binary, if so then the rpath must be set accordingly Пакет содержит разделяемые библиотеки, но неизвестно использует ли их исполняемый файл Указать для исполняемого файла rpath

Architecture

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING QML-only RPMs should be 'noarch', but it is <Целевая платформа> Пакет, который использует только QML, должен использовать целевую платформу noarch Добавить строку BuildArch: noarch в .spec/.yaml-файл

Vendor check

Тип сообщения Сообщение Причина Рекомендации по устранению
WARNING Vendor is set to 'meego'! This is not recommended, unless your previous submissions to Harbour have the vendor set to 'meego' also. Do this only if you know what you are doing! Значение строки Vendor: meego устарело Не использовать строку Vendor в .spec/.yaml-файле. См. требования к файлам .spec/.yaml
ERROR Vendor in RPM package is set to <Значение строки Vendor>. Setting a vendor in RPM package is not allowed! Запрещено задавать строку Vendor в .spec/.yaml-файле Не использовать строку Vendor в .spec/.yaml-файле. См. требования к файлам .spec/.yaml