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

8

Pergunta:

O que eu coloco no arquivo foo.spec para que os RPMs removam o RPM anterior antes de instalar?

Descrição:

Eu 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"

Veja um exemplo dos itens essenciais que meu arquivo .spec se parece:

%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 eu instalo o primeiro, ele instala ok. Eu então removo o primeiro e depois o segundo, que funciona bem também.

Eu então instalei o primeiro, seguido imediatamente pela instalação do segundo, e os dois foram instalados, um sobre o outro, mas eu esperava que o segundo fosse removido antes de instalar o segundo.

Exemplo de sessão:

# 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 eu coloco no arquivo foo.spec para que os RPMs removam o RPM anterior antes de instalar?

Obrigado,

.dave

    
por fatehks 06.06.2012 / 23:05

1 resposta

8

Você deseja criar esses pacotes conflito um com o outro, para que você 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
    
por 07.06.2012 / 05:59

Tags