Сборка пакетов RPM для ОС на основе Red Hat (Fedora, CentOS), в моём случае Fedora.

1. Создаём папку пакетов своих программ, например "/home/user/packages"
2. В ранее созданной папке "packages" создаём папку с именем программы, например "create-desktop-file"
3. В папке программы "create-desktop-file" создаём текстовый файл SPEC (или build.spec) и папку "usr" со структурой устанавливаемых файлов программы, то есть в ней будет следующая структура файлов:

Код:
/usr/bin/create-desktop-file
/usr/share/applications/create-desktop-file.desktop
/usr/share/pixmaps/create-desktop-file.png

Шаблон файла SPEC

Код:
Name: create-desktop-file-bin
Version: 0.1.2
Release: 1
Summary: Create desktop-file
Group: Applications/Productivity
License: custom
BuildArch: x86_64
Requires: gtk3
Requires: xdg-utils
URL: https://disk.yandex.ru/d/dlKMs3ABIKrW6w

%description
Create desktop-file.


%install
cp -r /home/user/packages/create-desktop-file/usr $RPM_BUILD_ROOT/

%files
%defattr(-,root,root)
/usr/bin/create-desktop-file
/usr/share/applications/create-desktop-file.desktop
/usr/share/pixmaps/create-desktop-file.png

%changelog

Здесь параметры означают следующее (по сути повторяется смысл, который я описал подробнее для Arch):
Name: имя пакета
Version: версия
Release: индекс пакета
Summary: Краткое описание пакета (не более 72 символа)
Group: Группа в менеджере пакетов (не группа в меню Пуск)
License: лицензия
BuildArch: архитектура
Requires: Зависимости, строка повторяется если зависимостей несколько
URL: ссылка на сайт автора, я указываю на архив программы.

Секция %description содержит описание примерно 4 строки по 72 символа заканчивающиеся точкой.

Секция %install, здесь команда копирования в папку сборки.

Секция %files здесь в первой строке заданы атрибуты файлов по умолчанию, с которыми файлы будут запакованы. Далее идёт перечисление файлов, которые будут установлены, в общем всё что в заготовленной папке usr.

4. Сборка командой

Код:
rpmbuild -bb  /home/user/packages/create-desktop-file/SPEC

здесь важна команда -dd, это сборка только бинарника, не сборка исходника.
5. После сборки в папке /home/user/rpmbuild/RPMS/x86_64 появится готовый пакет (взависимости от разрядности noarch, x86_64, x86). Папка rpmbuild рабочая папка для сборки, в ней BUILDROOT - временная папка сборки, SRPMS - пакет со сборкой из исходников, но эти папки нам не нужны.
6. Не совсем удобно, что в секции %install у нас прямой путь, возможно нужно создать папку "packages" где нибудь в "rpmbuild", которая имеет переменные %{name}, %{version}, %{buildroot}, $RPM_BUILD_DIR, может есть $RPM_RPMS_DIR и тогда можно пакеты положить в один из каталогов, а имя пакета %{name} использовать как объект для копирования и в именах путей секции %file.