Specyfikacja RPM Jak określić w pakiecie, aby usunąć poprzednie RPM

9

Pytanie:

Co mam umieścić w pliku foo.spec , aby RPM usunęły poprzednie RPM przed instalacją?

Opis:

Utworzyłem plik specyfikacji, który tworzy rpm dla kilku pakietów, które korzystają z tego samego źródła i zapewniają tę samą usługę, każdy z nieco inną konfiguracją. Np. Każdy z nich zapewnia tę samą „zdolność”

Oto przykład podstawowych elementów , jak wygląda mój plik .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}

Kiedy instaluję pierwszy, instaluje się dobrze. Następnie usuwam pierwszy, a następnie instaluję drugi, który również działa dobrze.

Następnie instaluję pierwszy, a następnie natychmiast instaluję drugi, a oba instalują się jeden na drugim, ale spodziewałem się, że drugi zostanie usunięty przed zainstalowaniem drugiego.

Przykładowa sesja:

# 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

Co mam umieścić w pliku foo.spec , aby RPM usunęły poprzednie RPM przed instalacją?

Dziękuję Ci,

.dave.

losy
źródło
1
Strzał w ciemność: czy nie po to jest przestarzały?
Charles,
Co różni się między pakietami, a co za tym idzie ich wdrażaniem - pliki binarne, konfiguracja lub oba?
nearora
Co się różni Ponieważ pakuję aplikację PHP, konfiguracja i kod php.
fatehks

Odpowiedzi:

10

Chcesz sprawić, że te pakiety będą ze sobą sprzeczne , abyś wiedział, że nie można ich zainstalować jednocześnie.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
mgorven
źródło
Dodałem „Konflikty:” i to przynajmniej uniemożliwiło instalację, jeśli wersja była taka sama, więc tego właśnie używam. Dzięki.
fatehks