05 марта 2026 № 1 (2026)

ROSARIUM

газета советского программиста

Типичные замечания и исправления

Наиболее частые проблемы, которые находят при ревью пакетов.

На этой странице

Вот самые распространённые замечания при ревью пакетов для 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

Как реагировать на замечания

  1. Не воспринимайте как критику. Ревьюер помогает улучшить пакет
  2. Исправьте все MUST-замечания
  3. Обсудите SHOULD-замечания, если не согласны
  4. Обновите пакет и сообщите ревьюеру

Проверьте понимание

  1. Какие три самые частые ошибки в SPEC-файлах?
  2. Почему %config(noreplace) важен для конфигов?
  3. Как правильно указать зависимость -devel от основного пакета?
  4. Что делать, если ревьюер нашёл проблему?

Конец теоретической части. Переходите к Практикумам для закрепления знаний.