Spécification RPM Comment spécifier dans le package afin que le RPM précédent soit supprimé

9

Question:

Que dois-je mettre dans le fichier foo.spec pour que les RPM suppriment le RPM précédent avant l'installation?

La description:

J'ai créé un fichier de spécifications qui crée des rpm pour quelques packages qui utilisent la même source et fournissent le même service, chacun avec une configuration légèrement différente. Par exemple, ils fournissent chacun la même "capacité"

Voici un exemple des éléments essentiels auxquels ressemble mon fichier .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}

Lorsque j'installe le premier, il s'installe correctement. J'enlève ensuite le premier, puis j'installe le second, qui fonctionne bien aussi.

J'installe ensuite le premier, suivi immédiatement par l'installation du second, et ils s'installent tous les deux l'un sur l'autre, mais je m'attendais à ce que le second soit supprimé avant d'installer le second.

Exemple de session:

# 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

Que dois-je mettre dans le fichier foo.spec pour que les RPM suppriment le RPM précédent avant l'installation?

Merci,

.dave.

fatehks
la source
1
Tourné dans le noir: n'est-ce pas à cela que servent les obsolètes?
Charles
Qu'est-ce qui diffère entre les packages et par conséquent leurs déploiements - binaires, configuration ou les deux?
nearora
Qu'est-ce qui diffère? Puisque je compresse une application PHP, la configuration et le code php.
fatehks

Réponses:

10

Vous voulez que ces packages entrent en conflit les uns avec les autres, afin que yum sache qu'ils ne peuvent pas être installés simultanément.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
mgorven
la source
J'ai ajouté "Conflicts:" et cela a au moins interdit l'installation si la version était la même, c'est donc ce que j'utilise. Merci.
fatehks