Perangkat lunak yang diinstal dari sumber, bagaimana mengatakannya agar tidak menginstalnya dari paket?

14

Pada CentOS 7, saya telah menginstal foobar versi 2, dikompilasi dari sumber.

Bagaimana saya bisa membuat Anda sadar akan pemasangan itu sehingga tidak akan menginstal foobar versi 1 untuk ketergantungan?


Instalasi foobar

$ git clone https://example.com/foobar.git
[...]
$ cd foobar
$ make && sudo make install
[...]
$ foobar --version
foobar v2

Instalasi paket yang membutuhkan foobar

$ sudo yum install baz
[...]
---> Package baz.x86_64 0:3.14.15-9 will be installed
--> Processing Dependency: foobar >= 1 for package: baz-3.14.15-9.x86_64
[...]
Dependencies Resolved

==============================================================
 Package           Arch      Version      Repository   Size
==============================================================
Installing:                  
 baz               x86_64    3.14.15-9    example      1.1 M
Installing for dependencies: 
 foobar            x86_64    1.0.0-0.el7  example      4.5 M

Saya ingin yum tahu foobar 2 diinstal dan karena baz membutuhkan foobar >= 1atau sederhananya foobar, foobar-1.0.0-0.el7.x86_64.rpm tidak boleh diinstal.

YSC
sumber
1
Kemungkinan duplikat make rpm menemukan dependensi di lokasi tertentu
Chris Maes

Jawaban:

27

"Saya telah menginstal foobar versi 2, dikompilasi dari sumber"

Lakukan upaya ekstra saat menambahkan perangkat lunak khusus ke sistem Anda dan kemas tambahan Anda dalam RPM . Lihat Martin Streicher, 2010-01-12, Membangun dan mendistribusikan paket , IBM tentang cara melakukan itu.

Kemudian instal RPM yang dihasilkan sehingga dapat dan akan bermain bagus dengan konflik manajer paket Anda dan penanganan ketergantungan, peningkatan, penurunan versi dan prosedur penghapusan dan pelaporan keamanan.

HBruijn
sumber
10

Pilihan lain (walaupun jelas bukan jawaban terbaik): buat file dummy rpm dengan nama yang dimaksud.

Anda perlu rpmbuilddiinstal, dan tarball dummy.

mkdir ~/rpmbuild/{RPMS,SOURCES}
touch empty.txt
tar -zcf ~/rpmbuild/SOURCES/example.tar.gz empty.txt

Tulis file spec dummy. Yang ini berfungsi untuk saya di Fedora 29. Ini juga bagus di CentOS 7.

Name:           example
Version:        0.0.0
Release:        1%{?dist}
Summary:        Dummy package

Group:          Dummy
License:        CC-BY-SA 3.0
URL:            http://example.com
Source0:    example.tar.gz
BuildArch:  noarch

#BuildRequires:
#Requires:

%description
Dummy for example

%prep
:

%build
:

%install
:

%files
%doc

%changelog

Tweak nama paket dan nomor versi seperlunya, lalu buat paket.

rpmbuild -ba example.spec

File rpm "biner" akan muncul ~/rpmbuild/RPMS/noarch/example-0.0.0-1.fc29.x86_64.rpm

bgStack15
sumber
6

Ini bukan cara rpmkerjanya.

rpmmenggunakan db di mana ia menyimpan rpms mana yang diinstal pada sistem. Jika Anda menginstal beberapa file secara manual, rpmtidak tahu tentang itu.

Cara terbaik untuk mengatasi ini adalah menginstal foobar 2 dengan rpm. Solusi lain hanya akan diselesaikan dan tidak akan bekerja dalam jangka panjang.

Chris Maes
sumber
5
Anda tidak dapat secara manual mengesampingkan pemeriksaan ketergantungan? Karena berbunyi seperti itulah intinya, apa yang diinginkan OP.
Mast
Ya Anda bisa, tetapi kemudian Anda menimpa semua pemeriksaan dependensi ... Dan Anda akan mengalami kesulitan memperbarui sesudahnya
Chris Maes
3

Mungkin rpm --nodepsjawaban yang Anda cari? Itu dibahas di utas yang lebih lama di sini di Serverfault.

( beri tahu yum untuk mengabaikan ketergantungan tunggal )

Mikael H
sumber
5
Ini dapat menyebabkan masalah di jalan dan pada dasarnya hanya menunda masalah. Ketika memperbarui sistem atau menginstal paket lain di lain waktu, dapat terjadi bahwa beberapa paket ingin menarik foobar 1 sebagai ketergantungan, mungkin menimpa foobar 2 yang dibangun & dipasang secara manual dan menyebabkan masalah kompatibilitas.
Jiri Valenta