Especificación de RPM Cómo especificar en el paquete para que se eliminen las RPM anteriores

9

Pregunta:

¿Qué pongo en el archivo foo.spec para que los RPM eliminen los RPM anteriores antes de la instalación?

Descripción:

He creado un archivo de especificaciones que crea rpm para algunos paquetes que usan la misma fuente y proporcionan el mismo servicio, cada uno con una configuración ligeramente diferente. Por ejemplo, cada uno proporciona la misma "capacidad"

Aquí hay un ejemplo de lo esencial que se ve en mi archivo .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}

Cuando instalo el primero, se instala bien. Luego elimino el primero y luego instalo el segundo, que también funciona bien.

Luego instalo el primero, seguido inmediatamente por el segundo, y ambos se instalan, uno sobre el otro, pero esperaba que el segundo se eliminara antes de instalar el segundo.

Sesión de ejemplo:

# 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

¿Qué pongo en el archivo foo.spec para que los RPM eliminen los RPM anteriores antes de la instalación?

Gracias,

.dave.

fatehks
fuente
1
Rodada en la oscuridad: ¿no es para eso para los obsoletos?
Charles
¿Qué difiere entre los paquetes y, en consecuencia, sus implementaciones: binarios, configuración o ambos?
nearora
Que difiere Como estoy empaquetando una aplicación PHP, la configuración y el código php.
fatehks

Respuestas:

10

Desea hacer que esos paquetes entren en conflicto entre sí, de modo que yum sepa que no pueden instalarse simultáneamente.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
mgorven
fuente
Agregué "Conflictos:" y eso al menos deshabilitó la instalación si la versión era la misma, así que eso es lo que estoy usando. Gracias.
fatehks