RPM-Spezifikation Wie im Paket angegeben, damit die vorherige RPM entfernt wird

9

Frage:

Was füge ich in die Datei foo.spec ein , damit die RPMs die vorherigen RPMs vor der Installation entfernen?

Beschreibung:

Ich habe eine Spezifikationsdatei erstellt, die Drehzahlen für einige Pakete erstellt, die dieselbe Quelle verwenden und denselben Dienst mit jeweils leicht unterschiedlicher Konfiguration bereitstellen. ZB bieten sie jeweils die gleiche "Fähigkeit"

Hier ist ein Beispiel für das Wesentliche, wie meine .spec- Datei aussieht:

%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}

Wenn ich das erste installiere, wird es in Ordnung installiert. Ich entferne dann den ersten und installiere dann den zweiten, der auch gut funktioniert.

Ich installiere dann die erste, gefolgt von der Installation der zweiten, und beide installieren übereinander, aber ich hatte erwartet, dass die zweite entfernt wird, bevor die zweite installiert wird.

Beispielsitzung:

# 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

Was füge ich in die Datei foo.spec ein , damit die RPMs die vorherigen RPMs vor der Installation entfernen?

Danke,

.dave.

Fatehks
quelle
1
Im Dunkeln gedreht: Ist das nicht das, wofür Veraltete gedacht sind?
Charles
Was unterscheidet die Pakete und folglich ihre Bereitstellungen - Binärdateien, Konfiguration oder beides?
Nearora
Was ist anders? Da ich eine PHP-App verpacke, die Konfiguration und den PHP-Code.
Fatehks

Antworten:

10

Sie möchten, dass diese Pakete miteinander in Konflikt stehen, damit Sie wissen, dass sie nicht gleichzeitig installiert werden können.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
mgorven
quelle
Ich habe "Conflicts:" hinzugefügt und das hat zumindest die Installation deaktiviert, wenn die Version dieselbe war, also verwende ich das. Vielen Dank.
Fatehks