Типичные замечания и исправления
Наиболее частые проблемы, которые находят при ревью пакетов.
На этой странице
Вот самые распространённые замечания при ревью пакетов для community. Изучите их заранее — и ваш пакет пройдёт ревью с первого раза.
Метаданные
Неправильная лицензия
Замечание: «License в SPEC не соответствует исходникам»
# В SPEC
License: MIT
# В исходниках LICENSE — текст GPL-3.0
Исправление: прочитайте LICENSE/COPYING и укажите правильный SPDX-идентификатор.
Summary на русском
Замечание: «Summary должен быть на английском»
# Неправильно
Summary: Текстовый редактор для программистов
# Правильно
Summary: Text editor for programmers
Summary используется в международных базах метаданных.
Устаревший URL
Замечание: «URL возвращает 404»
Исправление: найдите актуальный URL проекта (может переехать с GitHub на GitLab или свой домен).
Зависимости
Неявные BuildRequires
Замечание: «Пакет собирается локально, но упадёт на ABF — не указан BuildRequires: pkgconfig(libfoo)»
Как обнаружить: сборка в mock.
Исправление:
BuildRequires: pkgconfig(libfoo)
Лишние явные Requires
Замечание: «Requires: libfoo — определяется автоматически, удалите»
RPM автоматически находит зависимости от .so. Явно указывать нужно только:
- Программы, вызываемые из скриптов (
Requires: curl) - Виртуальные provides
- Зависимости, не определяемые автоматически
Отсутствует %{?_isa} в -devel
Замечание: «-devel должен зависеть от основного пакета с %{?_isa}»
# Неправильно
Requires: %{name} = %{version}-%{release}
# Правильно
Requires: %{name}%{?_isa} = %{version}-%{release}
Секция %files
Жёсткие пути вместо макросов
Замечание: «Используйте %{_bindir} вместо /usr/bin»
# Неправильно
/usr/bin/myapp
/usr/lib64/libfoo.so.*
# Правильно
%{_bindir}/myapp
%{_libdir}/libfoo.so.*
Конфиги без %config(noreplace)
Замечание: «Конфигурационный файл затрётся при обновлении»
# Неправильно
%{_sysconfdir}/myapp.conf
# Правильно
%config(noreplace) %{_sysconfdir}/myapp.conf
Оставлены .la файлы
Замечание: «Удалите .la файлы — они не нужны»
%install
%make_install
find %{buildroot} -name '*.la' -delete
Devel-файлы в основном пакете
Замечание: «Заголовки и .so без версии должны быть в -devel»
Создайте подпакет -devel.
Сборка
Отключены тесты без объяснения
Замечание: «Почему %check закомментирован?»
Если тесты отключены — добавьте комментарий в SPEC:
%check
# Tests disabled: require network access (not available on ABF)
# %%pytest
Нестандартные флаги сборки
Замечание: «Используйте %configure вместо ./configure»
# Неправильно
%build
./configure --prefix=/usr
make -j4
# Правильно
%build
%configure
%make_build
Отключён hardening
Замечание: «CFLAGS переопределены — hardening-флаги потеряны»
Если проект затирает CFLAGS — передавайте явно:
%build
%cmake -DCMAKE_C_FLAGS_RELEASE="%{optflags}"
Безопасность
Исходники по HTTP
Замечание: «Source0 использует HTTP — используйте HTTPS»
# Неправильно
Source0: http://example.com/myapp-%{version}.tar.gz
# Правильно
Source0: https://example.com/myapp-%{version}.tar.gz
Подозрительный скриптлет
Замечание: «Скриптлет скачивает файлы из интернета»
Скриптлеты не должны выполнять сетевые операции.
Changelog
Неправильный формат даты
Замечание: «Дата в changelog не соответствует формату»
# Неправильно
* 2025-02-03 Your Name <email> - 1.0-1
# Правильно
* Mon Feb 03 2025 Your Name <your@email.com> - 1.0-1
Пустой changelog
Замечание: «Changelog должен содержать хотя бы одну запись»
%changelog
* Mon Feb 03 2025 Your Name <your@email.com> - 1.0-1
- Initial package for ROSA community
Как реагировать на замечания
- Не воспринимайте как критику. Ревьюер помогает улучшить пакет
- Исправьте все MUST-замечания
- Обсудите SHOULD-замечания, если не согласны
- Обновите пакет и сообщите ревьюеру
Проверьте понимание
- Какие три самые частые ошибки в SPEC-файлах?
- Почему %config(noreplace) важен для конфигов?
- Как правильно указать зависимость -devel от основного пакета?
- Что делать, если ревьюер нашёл проблему?
Конец теоретической части. Переходите к Практикумам для закрепления знаний.