Shared Libs Policy Versioning Example
Цель: обновить libpaper 1.1.28 до 2.1.1 без пересборки множества зависящих от libpaper.so.1 пакетов (рассматривается только принцип разделения)
Действия с версией 1.1.28:
переименовываем старый пакет в libpaper1:
%define soname 1
оставляем бинарник со старым названием libpaper:
%def_disable devel
Name: libpaper%soname
Version: 1.1.28
Release: alt4
%package -n libpaper
Summary: Library for handling papersize
Group: System/Legacy libraries
Provides: libpaper1 = %EVR
Obsoletes: libpaper1 < %EVR
отключаем пакет devel (что бы все пакеты собирались уже с новой версией):
%if_enabled devel
удаляем незапакованные файлы devel пакета в разделе %install:
%package devel
Summary: Header files for %name
Group: Development/Other
Requires: libpaper = %EVR
%description devel
Header files for %name library.
%endif
%if_disabled devel
исключаем раздел %files для devel пакета:
rm -rv %buildroot%_libdir/libpaper.so
rm -rv %buildroot%_includedir/paper.h
rm -rv %buildroot%_man3dir/
%endif
%if_enabled devel
%files devel
%_libdir/libpaper.so
%_includedir/paper.h
%_man3dir/*
%endif
Действия с версией 2.2.1:
берем еще один старый пакет libpaper и переименовываем ТОЛЬКО БИНАРНИК в libpaper2 с обновление исходников до нужной версии и правкой спека, при необходимости):
%define soname 2
Name: libpaper
Version: 2.1.1
Release: alt2
Epoch: 2
%package -n %name%soname
Summary: Library and tools for handling papersize
Group: System/Libraries
Conflicts: libpaper < 1.1.28-alt3
добавляем новый предоставляемый пакет paper в libpaper2:
%package -n paper
Summary: Query paper size database and retrieve the preferred size
Group: Text tools
Requires: %name%soname = %EVR
создаем libpaper-devel что бы все пакеты, зависящие от него, собирались с новой версией:
%package -n libpaper-devel
Summary: Header files for %name
Group: Development/Other
Requires: %name%soname = %EVR