从源代码安装的软件,如何让 yum 不从包中安装?

从源代码安装的软件,如何让 yum 不从包中安装?

在 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或者简单地foobarfoobar-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 上的一个较早的帖子中已经讨论过这个问题。

告诉 yum 忽略单个依赖项

相关内容