Репозиторий пакетов: Сборка RPM

Материал из Записи-напоминании
Версия от 10:44, 9 июня 2026; Admin (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Сценарии

Шаблон SPEC

Основные директивы

Name - Название для пакета RPM (nginx)

Version - Версия собираемого пакета (1.20.2)

Release - Релиз или версия программы (1)

Summary - Краткое описание пакета (http server)

Group - Пакет принадлежит к группе (System Environment/Base)

License - Способ лицензирования (GPL)

URL - Адрес источника пакета (https://nginx.org)

BuildArch - Архитектура системы (noarch)

Provides - предоставляемые имена пакета/библиотек: usbip, libusbip.so()(64bit)

Requires - Зависимости (packagename >= 1.10-1)

Source0 - Источник данных, из которых должен собираться пакет (%{name}-%{version}.tar.gz)

Сценарии

%description
Описание пакета. Может состоять из нескольких строк, но каждая строка должна содержать до 73 символов

%files
Перечисление файлов, которые должны попасть в конечную систему при установке пакета
Макрос %defattr(<mode>,<user>,<group>) глобально задает Unix-права, чаще используется %defattr(-,root,root)
Макрос %attr(<mode>,<user>,<group>) задает права для конкретных файлов, например %attr(644,postgres,postgres) %{_libdir}/pgsql/redis.so
%config [/opt/progname/conf/file.conf] - помечает файл как конфигурационный, при удалении пакета файл будет переименован с окончанием .rpmsave
%dir [/opt/progname] - при удалении пакета будет удалена указанная папка

Тело скрипта, выполняющегося %pre (перед) / %post (после) установкой пакета в систему
Тело скрипта, выполняющегося %preun (перед) удалением / %postun (после) пакета из системы

%pre
if [ $1 == 1 ];then
  echo "-----------------------"
  echo "RPM is getting installed"
  echo "Put your script here"
  echo "-----------------------"
elif [ $1 == 2 ];then
  echo "-----------------------"
  echo "RPM is getting upgraded"
  echo "Put your script here"
  echo "-----------------------"
fi

%post
if [ $1 == 1 ];then
  echo "-----------------------"
  echo "RPM is getting installed"
  echo "Put your script here"
  echo "-----------------------"
elif [ $1 == 2 ];then
  echo "-----------------------"
  echo "RPM is getting upgraded"
  echo "Put your script here"
  echo "-----------------------"
fi

%preun
if [ $1 == 1 ];then
  echo "-----------------------"
  echo "RPM is getting upgraded"
  echo "Put your script here which will be called when this rpm is removed"
  echo "-----------------------"
elif [ $1 == 0 ];then
  echo "--------------------"
  echo "RPM is getting removed/uninstalled"
  echo "Put your script here which will be called before uninstallation of this rpm"
  echo "--------------------"
fi

%postun
if [ $1 == 1 ];then
  echo "-----------------------"
  echo "RPM is getting upgraded"
  echo "Put your script here which will be called when this rpm is removed"
  echo "-----------------------"
elif [ $1 == 0 ];then
  echo "--------------------"
  echo "RPM is getting removed/uninstalled"
  echo "Put your script here which will be called after uninstallation of this rpm"
  echo "--------------------"
fi

Макросы команд
%{__rm}
%{__mv}
%{__tar}
%{__sed}
%{__ln_s}
%{__mkdir}
%{__mkdir_p}

Макросы директорий
%{_prefix} : /usr
%{_usr} : /usr
%{_libdir} : %{_prefix}/lib64
%{_datarootdir} : %{_prefix}/share
%{_datadir} : %{_datarootdir}
%{_sysconfdir} : /etc
%{_var} : /var
%{_localstatedir} : /var
%{_sharedstatedir} : /var/lib
%{_docdir} : %{_datadir}/doc