Especificação do RPM Como especificar no pacote para que o RPM anterior seja removido

9

Questão:

O que coloco no arquivo foo.spec para que os RPMs removem o RPM anterior antes da instalação?

Descrição:

Criei um arquivo de especificação que cria rpm para alguns pacotes que usam a mesma fonte e fornecem o mesmo serviço, cada um com uma configuração ligeiramente diferente. Por exemplo, cada um deles fornece a mesma "capacidade"

Aqui está um exemplo do essencial do meu arquivo .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}

Quando instalo o primeiro, ele instala ok. Em seguida, removo o primeiro e instalo o segundo, que também funciona bem.

Em seguida, instalei o primeiro, seguido imediatamente pela instalação do segundo e os dois instalaram, um sobre o outro, mas esperava que o segundo fosse removido antes de instalar o segundo.

Sessão de exemplo:

# 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

O que coloco no arquivo foo.spec para que os RPMs removem o RPM anterior antes da instalação?

Obrigado,

.dave.

fatehks
fonte
1
Filmado no escuro: não é para isso que servem os obsoletos?
Charles
O que difere entre os pacotes e consequentemente suas implantações - binários, configuração ou ambos?
nearora
O que difere? Como estou empacotando um aplicativo PHP, a configuração e o código php.
Fatehks

Respostas:

10

Você deseja que esses pacotes entrem em conflito entre si, para que o yum saiba que eles não podem ser instalados simultaneamente.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
mgorven
fonte
Eu adicionei "Conflicts:" e que pelo menos desabilitou a instalação se a versão fosse a mesma, então é isso que estou usando. Obrigado.
Fatehks