RPM Spec Как указать в пакете, чтобы предыдущие RPM были удалены

9

Вопрос:

Что я помещаю в файл foo.spec, чтобы RPM удаляли предыдущие RPM перед установкой?

Описание:

Я создал файл спецификации, который создает rpm для нескольких пакетов, которые используют один и тот же источник и предоставляют один и тот же сервис, каждый с немного отличающейся конфигурацией. Например, каждый из них предоставляет одинаковые «возможности»

Вот пример того, как мой файл .spec выглядит так:

%define version     1234
%define name        foo
%define release     1
%define pkgname     %{name}-%{version}-%{release}

Name:               %{name}
Version:            %{version}
Release:            %{release}
Provides:           %{name}

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}

%description one
Blah blah blah

%package two
Summary:            Summary for foo-two
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}

%description two
Blah blah blah

# %prep, %install, %build and %clean are pretty simple 
# and omitted here for brevity sake

%files one
%defattr(-,root,root,-)
%{_prefix}/%{pkgname}

%files two
%defattr(-,root,root,-)
%{_prefix}/%{pkgname}

Когда я устанавливаю первый, он устанавливает нормально. Затем я удаляю первый, а затем устанавливаю второй, который тоже отлично работает.

Затем я устанавливаю первый, а затем немедленно устанавливаю второй, и они оба устанавливаются, один поверх другого, но я ожидал, что второй будет удален перед установкой второго.

Пример сеанса:

# rpmbuild foo and copy rpms to yum repo

$ yum install foo-one
...
$ yum list installed|grep foo
foo-one.noarch           1234-1                @myrepo

$ yum install foo-two
...[Should say that it is removing foo-one, but does not]...

$ yum list installed|grep foo
foo-one.noarch           1234-1                @myrepo
foo-two.noarch           1234-1                @myrepo

$ rpm -q --provides foo-one
foo = 1234
foo-one = 1234-1

$ rpm -q --provides foo-two
foo = 1234
foo-two = 1234-1

Что я помещаю в файл foo.spec, чтобы RPM удаляли предыдущие RPM перед установкой?

Спасибо,

.dave.

fatehks
источник
1
Снято в темноте: разве не для этого нужны устаревшие?
Чарльз
Что отличается между пакетами и, следовательно, их развертыванием - двоичные файлы, конфигурация или оба?
Nearora
Чем отличается? Так как я упаковываю приложение PHP, конфигурацию и код php.
судьба

Ответы:

10

Вы хотите, чтобы эти пакеты конфликтовали друг с другом, чтобы yum знал, что их нельзя установить одновременно.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
mgorven
источник
Я добавил «Conflicts:» и, по крайней мере, запретил установку, если версия была той же самой, так что это то, что я использую. Спасибо.
судьба