Spec RPM Як вказати в пакеті, щоб попередній 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 перед встановленням?

Дякую,

.дав.


1
Постріл у темряві: не для чого це застарілі люди?
Чарльз

Що відрізняється між пакунками та, отже, їх розгортанням - бінарними файлами, конфігурацією чи обома?
nearora

Що відрізняється? Оскільки я пакую додаток PHP, конфігурація та php-код.
долякс

Відповіді:


10

Ви хочете, щоб ці пакунки конфліктували один з одним, щоб ви знали, що їх неможливо встановити одночасно.

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

Я додав "Конфлікти:" і щоб принаймні заборонив установку, якщо версія була однаковою, тож я це використовую. Дякую.
долякс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.