Zainstalowane oprogramowanie ze źródła, jak powiedzieć, żeby nie instalować go z pakietu?

14

Na CentOS 7 zainstalowałem foobar w wersji 2, skompilowany ze źródeł.

Jak mogę poinformować yum o tej instalacji, aby nie instalowała foobar w wersji 1 dla zależności?


Instalacja foobar

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

Instalacja pakietu wymagającego 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

Chciałbym wiedzieć yum foobar 2 jest zainstalowany i od baz wymaga foobar >= 1albo po prostu foobar, foobar-1.0.0-0.el7.x86_64.rpm nie powinny być instalowane.

YSC
źródło

Odpowiedzi:

27

„Zainstalowałem foobar w wersji 2, skompilowany ze źródeł”

Dodatkowy wysiłek dodajesz niestandardowe oprogramowanie do swojego systemu i pakujesz swoje dodatki w RPM . Zobacz Martin Streicher, 2010-01-12, tworzenia i dystrybuowania pakietów , IBM , w jaki sposób to zrobić.

Następnie zainstaluj wynikowy RPM, aby mógł i będzie dobrze grał z obsługą konfliktu i zależności menedżera pakietów, procedurami aktualizacji, obniżania i usuwania oraz raportowaniem bezpieczeństwa.

HBruijn
źródło
10

Inna opcja (choć zdecydowanie nie najlepsza odpowiedź): stwórz fikcyjny plik RPM o podanej nazwie.

Będziesz musiał rpmbuildzainstalować i atrapę tarball.

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

Napisz plik specyfikacji manekina. Ten działa dla mnie na Fedorze 29. Powinien być także dobry na 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

W razie potrzeby popraw nazwę pakietu i numer wersji, a następnie skompiluj pakiet.

rpmbuild -ba example.spec

Wyjściowym „binarnym” plikiem rpm będzie ~/rpmbuild/RPMS/noarch/example-0.0.0-1.fc29.x86_64.rpm

bgStack15
źródło
6

To nie tak rpmdziała.

rpmużywa db, gdzie przechowuje, które rpms są zainstalowane w systemie. Jeśli instalujesz niektóre pliki ręcznie, rpmnie wie o tym.

Najlepszym sposobem na rozwiązanie tego jest zainstalowanie foobar 2 z prędkością obrotową na minutę. Inne rozwiązania byłyby tylko obejściem i nie działałyby na dłuższą metę.

Chris Maes
źródło
5
Nie możesz ręcznie zastąpić kontroli zależności? Ponieważ brzmi tak, jakby sprowadzało się do tego, czego chce OP.
Mast
Tak, możesz, ale wtedy zastąpisz wszystkie kontrole zależności ... I będziesz miał później problemy z aktualizacją
Chris Maes
3

Może rpm --nodepsto odpowiedź, której szukasz? Zostało to omówione w starszym wątku tutaj na Serverfault.

( powiedz yum, aby zignorowało jedną zależność )

Mikael H.
źródło
5
Może to prowadzić do problemów na drodze i po prostu opóźnia problem. Podczas aktualizacji systemu lub instalowania innego pakietu później może się zdarzyć, że jakiś pakiet będzie chciał pobrać foobar 1 jako zależność, być może nadpisując ręcznie zbudowany i zainstalowany foobar 2 i powodując problemy ze zgodnością.
Jiri Valenta