Đã cài đặt phần mềm từ nguồn, làm thế nào để nói yum không cài đặt nó từ gói?


14

Trên CentOS 7, tôi đã cài đặt foobar phiên bản 2, được biên dịch từ các nguồn.

Làm cách nào tôi có thể làm cho bạn biết về cài đặt đó để nó không cài đặt foobar phiên bản 1 cho phụ thuộc?


Cài đặt foobar

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

Cài đặt gói yêu cầu 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

Tôi muốn bạn biết foobar 2 đã được cài đặt và vì baz yêu cầu foobar >= 1hoặc đơn giản foobar, foobar-1.0.0-0.el7.x86_64.rpm không nên cài đặt.


Câu trả lời:


27

"Tôi đã cài đặt foobar phiên bản 2, được tổng hợp từ các nguồn"

Hãy nỗ lực thêm khi thêm phần mềm tùy chỉnh vào hệ thống của bạn và đóng gói các bổ sung của bạn trong một RPM . Xem Martin Strerich, 2010-01-12, Xây dựng và phân phối các gói , IBM về cách thực hiện điều đó.

Sau đó cài đặt RPM kết quả đó để nó có thể và sẽ hoạt động tốt với xung đột và xử lý phụ thuộc của người quản lý gói, nâng cấp, hạ cấp và xóa quy trình và báo cáo bảo mật.


10

Một tùy chọn khác (mặc dù chắc chắn không phải là câu trả lời tốt nhất): tạo một tệp vòng / phút giả với tên trong câu hỏi.

Bạn sẽ cần rpmbuildcài đặt, và một tarball giả.

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

Viết tập tin spec giả. Cái này hoạt động với tôi trên Fedora 29. Nó cũng tốt trên 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

Tinh chỉnh tên gói và số phiên bản khi cần thiết, và sau đó xây dựng gói.

rpmbuild -ba example.spec

Tệp vòng / phút "nhị phân" đầu ra sẽ là ~/rpmbuild/RPMS/noarch/example-0.0.0-1.fc29.x86_64.rpm


6

Đây không phải là cách làm rpmviệc.

rpmsử dụng một db nơi nó lưu trữ rpms nào được cài đặt trên hệ thống. Nếu bạn cài đặt một số tệp theo cách thủ công, rpmkhông biết về nó.

Cách tốt nhất để giải quyết điều này là cài đặt foobar 2 với một vòng / phút. Các giải pháp khác sẽ chỉ có cách giải quyết và sẽ không hoạt động trong thời gian dài.


5
Bạn không thể ghi đè thủ công kiểm tra phụ thuộc? Bởi vì nó đọc giống như những gì nó nắm bắt được, những gì OP muốn.
Cột

Có, bạn có thể, nhưng sau đó bạn ghi đè tất cả các kiểm tra phụ thuộc ... Và bạn sẽ gặp khó khăn khi cập nhật sau đó
Chris Maes

3

rpm --nodepsthể là câu trả lời bạn đang tìm kiếm? Nó đã được thảo luận trong một chủ đề cũ hơn ở đây trên Serverfault.

( nói với yum bỏ qua một phụ thuộc duy nhất )


5
Điều này có thể dẫn đến các vấn đề xuống đường và về cơ bản chỉ là hoãn lại vấn đề. Khi cập nhật hệ thống hoặc cài đặt gói khác sau này, có thể xảy ra việc một số gói sẽ muốn lấy foobar 1 làm phụ thuộc, có thể ghi đè lên foobar 2 được cài đặt và cài đặt thủ công và gây ra sự cố tương thích.
Jiri Valenta
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.