RPM Spec Cara menentukan dalam paket sehingga RPM sebelumnya dihapus

9

Pertanyaan:

Apa yang harus saya letakkan di file foo.spec sehingga RPM akan menghapus RPM sebelumnya sebelum menginstal?

Deskripsi:

Saya telah membuat file spesifikasi yang membuat rpm untuk beberapa paket yang menggunakan sumber yang sama dan menyediakan layanan yang sama, masing-masing dengan konfigurasi yang sedikit berbeda. Misalnya mereka masing-masing memberikan "kemampuan" yang sama

Berikut ini contoh hal-hal penting yang terlihat seperti file .spec saya :

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

Ketika saya menginstal yang pertama, itu menginstal ok. Saya kemudian menghapus yang pertama, dan kemudian menginstal yang kedua, itu berfungsi dengan baik juga.

Saya kemudian menginstal yang pertama, segera diikuti dengan menginstal yang kedua, dan mereka berdua menginstal, satu di atas yang lain, tapi, saya berharap yang kedua akan dihapus sebelum menginstal yang kedua.

Sesi contoh:

# 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

Apa yang harus saya letakkan di file foo.spec sehingga RPM akan menghapus RPM sebelumnya sebelum menginstal?

Terima kasih,

.dave.

takdir
sumber
1
Ditembak dalam gelap: bukankah ini gunanya obsoletes?
Charles
Apa yang berbeda antara paket dan akibatnya penyebarannya - binari, konfigurasi atau keduanya?
nearora
Apa bedanya? Karena saya mengemas aplikasi PHP, konfigurasi dan kode php.
Nasibks

Jawaban:

10

Anda ingin membuat paket-paket itu saling bertentangan , sehingga Anda tahu bahwa mereka tidak dapat diinstal secara bersamaan.

%package one
Summary:            Summary for foo-one
Group:              %{group}
Obsoletes:          %{name} <= %{version}
Provides:           %{name} = %{version}
Conflicts:          %{name}-two
Mgorven
sumber
Saya menambahkan "Konflik:" dan itu setidaknya menonaktifkan instalasi jika versinya sama, jadi itulah yang saya gunakan. Terima kasih.
fatehks