Создание RPM-пакетов из простых файлов на примерах

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Знак "$" обозначает, что команду до́лжно будет запускать от имени непривилегированного пользователя, т.е. не от root-a.
Знак "#" говорит о том, что команду необходимо выполнять от пользователя root.

Источники: 1, 2


Делать готовые установочные сборки пакетов очень опасно от пользователя root. Если мы допустим ошибку с путями, файлы могут перетереть или удалить важные для работы директории. Стоит создать отдельного пользователя и работать под ним.

Что должно быть в системе для сборки rpm-пакета:

# dnf install gcc gcc-c++ rpmrebuild rpm-build rpmdevtools rpmlint dnf-utils git libtool

Создадим структуру каталогов для сборки (создаётся в домашней папке):

$ rpmdev-setuptree

Файлы кладём в каталог rpmbuild/SOURCES. Скачиваем архив и распаковываем. Ссылка на файлы:

https://psv4.userapi.com/s/v1/d/91WhTCA2ST-466FOe1XvbleoOZO6VmAwcZSa6yw5mOyN-TMsI6G9eYQ08f8KNMpx_Lt6VHZfwx4jEpIF2TkVGGrSFZ87I7WDjlHh-V9lGWCg062Vy9R2XA/naval-battle.zip?dl=1

Создаём файл naval-battle.spec и кладём в каталог rpmbuild/SPECS:

Name: naval-battle
Version: 1
Release: 1
Summary: Морской бой (игра)
License: -

Source0: naval-battle.desktop
Source1: naval-battle.png
Source2: naval-battle.sh

BuildArch: noarch

%description
Игра для двух участников, в которой игроки по очереди называют, сообщают иным способом, координаты на карте соперника. Если у врага с этими координатами имеется "корабль", то корабль или его палуба (дека) убивается, попавший делает еще один ход. Цель игрока: первым убить все игровые "корабли" врага Партии.

%install
install -D -pm 644 %{SOURCE0} %{buildroot}/usr/share/applications/naval-battle.desktop
install -D -pm 644 %{SOURCE1} %{buildroot}/opt/game/naval-battle.png
install -D -pm 755 %{SOURCE2} %{buildroot}/opt/game/naval-battle.sh

%files
/

Рассмотрим секцию %install. Здесь, при необходимости, мы устанавливаем права доступа к файлам. Затем мы копируем файлы из папки rpmbuild/SOURCES в папку rpmbuild/BUILDROOT. Поскольку BUILDROOT эмулирует корень файловой системы, мы указываем точный путь для копирования.

И собираем rpm (Двоичный пакет):

$ rpmbuild -bb rpmbuild/SPECS/naval-battle.spec

или src.rpm (Исходный пакет):

$ rpmbuild -ba rpmbuild/SPECS/naval-battle.spec

Готово! Теперь у нас есть простой шаблон файла spec для создания RPM из простых файлов. Вот ещё несколько лёгких spec: http://wiki.rosalab.ru/ru/images/7/72/Шаблоны_SPEC.zip