从源码安装软件,yum 不从包安装怎么办?

YSC*_*YSC 14 package-management centos yum

在 CentOS 7 上,我安装了从源代码编译的foob​​ar版本 2。

我怎样才能让 yum 知道该安装,以便它不会安装foob​​ar版本 1 以进行依赖?


foob​​ar的安装

$ git clone https://example.com/foobar.git
[...]
$ cd foobar
$ make && sudo make install
[...]
$ foobar --version
foobar v2
Run Code Online (Sandbox Code Playgroud)

安装需要foob​​ar的包

$ 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
Run Code Online (Sandbox Code Playgroud)

我想让 yum 知道foob​​ar 2 已安装,并且由于baz需要foobar >= 1或只是foobarfoobar-1.0.0-0.el7.x86_64.rpm 不应安装。

HBr*_*ijn 27

“我已经安装了从源代码编译的 foobar 版本 2”

在将自定义软件添加到您的系统中并将您添加的内容打包到 RPM 中时,需要付出额外的努力。请参阅Martin Streicher,2010-01-12,构建和分发包,IBM了解如何执行此操作。

然后安装生成的 RPM,这样它就可以并且会很好地处理包管理器的冲突和依赖处理、升级、降级和删除过程以及安全报告。


bgS*_*k15 10

另一种选择(尽管绝对不是最佳答案):使用相关名称制作一个虚拟 rpm 文件。

您将需要rpmbuild安装和一个虚拟 tarball。

mkdir ~/rpmbuild/{RPMS,SOURCES}
touch empty.txt
tar -zcf ~/rpmbuild/SOURCES/example.tar.gz empty.txt
Run Code Online (Sandbox Code Playgroud)

编写虚拟规范文件。这个在 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
Run Code Online (Sandbox Code Playgroud)

根据需要调整包名称和版本号,然后构建包。

rpmbuild -ba example.spec
Run Code Online (Sandbox Code Playgroud)

输出的“二进制”rpm 文件将是 ~/rpmbuild/RPMS/noarch/example-0.0.0-1.fc29.x86_64.rpm


Chr*_*aes 6

这不是rpm工作方式。

rpm使用一个数据库来存储系统上安装了哪些 rpm。如果你手动安装了一些文件,rpm就不知道了。

解决此问题的最佳方法是使用 rpm 安装 foobar 2。其他解决方案只是解决方法,从长远来看是行不通的。

  • 您不能手动覆盖依赖项检查?因为它读起来就像它归结为 OP 想要的。 (5认同)