![从源代码安装的软件,如何让 yum 不从包中安装?](https://linux22.com/image/739621/%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E5%AE%89%E8%A3%85%E7%9A%84%E8%BD%AF%E4%BB%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E8%AE%A9%20yum%20%E4%B8%8D%E4%BB%8E%E5%8C%85%E4%B8%AD%E5%AE%89%E8%A3%85%EF%BC%9F.png)
在 CentOS 7 上,我安装了福巴版本 2,从源代码编译而成。
我怎样才能让 yum 知道该安装,这样它就不会安装福巴版本 1 的依赖关系?
安装福巴
$ git clone https://example.com/foobar.git
[...]
$ cd foobar
$ make && sudo make install
[...]
$ foobar --version
foobar v2
安装需要的软件包福巴
$ 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
我想让 yum 知道福巴2 已安装,并且巴兹需要foobar >= 1
或者简单地foobar
,foobar-1.0.0-0.el7.x86_64.rpm
不应该被安装。
答案1
“我已经安装了 foobar 版本 2,从源代码编译而成”
在向系统添加自定义软件时要付出额外的努力,将添加的内容打包成 RPM。 看Martin Streicher,2010-01-12,构建和分发包, IBM如何做到这一点。
然后安装生成的 RPM,以便能够并且将会与您的包管理器的冲突和依赖处理、升级、降级和删除程序以及安全报告配合良好。
答案2
另一个选择(尽管绝对不是最好的答案):制作一个具有所需名称的虚拟 rpm 文件。
您将需要rpmbuild
安装一个虚拟 tarball。
mkdir ~/rpmbuild/{RPMS,SOURCES}
touch empty.txt
tar -zcf ~/rpmbuild/SOURCES/example.tar.gz empty.txt
编写虚拟 spec 文件。这个在 Fedora 29 上对我有用。在 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
根据需要调整包名称和版本号,然后构建包。
rpmbuild -ba example.spec
输出的“二进制” rpm 文件将是~/rpmbuild/RPMS/noarch/example-0.0.0-1.fc29.x86_64.rpm
答案3
这不是rpm
工作的原理。
rpm
使用数据库来存储系统中安装了哪些 rpm。如果您手动安装某些文件,rpm
则不会知道。
解决这个问题的最佳方法是使用 rpm 安装 foobar 2。其他解决方案只是权宜之计,从长远来看不起作用。
答案4
这可能rpm --nodeps
是您要找的答案?Serverfault 上的一个较早的帖子中已经讨论过这个问题。