如何使rpm自动安装依赖项

HAL*_*HAL 130 linux installation rpm yum package

我已经构建了两个RPM包

  • proj1-1.0-1.x86_64.rpm
  • libtest1-1.0-1.x86_64.rpm

proj1取决于libtest1.so存在的文件,它在RPM包中正确反映,如下所示:

user@my-pc:~$ rpm -qp --requires proj1-1.0-1.x86_64.rpm
libtest1.so()(64bit)

user@my-pc:~$ rpm -qp --provides libtest1-1.0-1.x86_64.rpm
libtest1.so()(64bit)
Run Code Online (Sandbox Code Playgroud)

proj1由于缺少依赖性,安装失败.

user@my-pc:~$ rpm -ivh proj1-1.0-1.x86_64.rpm
error: Failed dependencies:
libtest1.so()(64bit) is needed by proj1-1.0-1.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

如何确保libtest1-1.0-1.x86_64.rpm在安装过程中自动安装proj1-1.0-1.x86_64.rpm

我确实尝试了这里描述的--aid选项,但它对我不起作用.rpm -i

还有其他方法吗?

谢谢你的帮助.

Mat*_*hew 188

提供的@gertvdijk链接显示了一种快速方法,无需配置本地存储库即可实现所需的结果:

$ yum --nogpgcheck localinstall packagename.arch.rpm
Run Code Online (Sandbox Code Playgroud)

只需更改packagename.arch.rpm为要安装的RPM文件名即可.

编辑只需澄清一下,这将自动安装已通过系统YUM存储库提供的所有依赖项.

如果您的其他RPM不满足系统的存储库中的依赖关系,则除非packagename.arch.rpm在命令行中同时指定每个RPM,否则此方法将不起作用.

  • 不,除非`libtest1-1.0-1.x86_64.rpm`在其他地方的存储库中,或者在命令行中指定了两个包,如"`rpm -i`"需要,否则这将不起作用.我刚刚在`yum` 3.4.3(Fedora 18)上验证了这一点.Transcript [here](http://pastebin.com/HpjRtqFh)显示它进入了`updates` repo for dependencies,即使文件就在那里. (7认同)
  • @ AaronD.Marasco也许你是对的问题描述的特定情况下是正确的,但是这一次,内衬是非常容易的,像我一样的人清盘这里,是在称谓问题的完全有效的答案,"如何使rpm自动安装依赖". (3认同)
  • 不,它不是"自动安装"依赖项 - 您在命令行中指定它们,就像使用"`rpm -i`"一样,因此使用`yum`不会给您带来额外的好处. (3认同)
  • 请重新阅读我写的内容.从存储库下载任何依赖项,即使它们在安装了RPM的目录中本地可用. (2认同)

ger*_*ijk 99

创建一个(本地)存储库并使用yum它来解决您的依赖关系.

CentOS wiki有一个很好的页面提供了一个方法.CentOS wiki HowTos/CreateLocalRepos.


总结并进一步最小化(不理想,但最快):

  1. 为您的本地存储库创建一个目录,例如/home/user/repo.
  2. 将RPM移动到该目录中.
  3. 修复一些所有权和文件系统权限:

    # chown -R root.root /home/user/repo
    
    Run Code Online (Sandbox Code Playgroud)
  4. createrepo如果尚未安装,请安装软件包,然后运行

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
    Run Code Online (Sandbox Code Playgroud)
  5. 创建存储库配置文件,例如/etc/yum.repos.d/myrepo.repo包含

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
    Run Code Online (Sandbox Code Playgroud)
  6. 使用安装包

    # yum install packagename
    
    Run Code Online (Sandbox Code Playgroud)

  • 你提供的链接解决了我的问题只有这一行:`yum --nogpgcheck localinstall packagename.arch.rpm`. (44认同)

mim*_*lea 26

对于dnf用户而言dnf install *.rpm,localinstall不再需要使用.

  • 谢谢,我正在努力使用“rpm -ivh”安装“mysql-workbench”。最终以这篇文章结束。DNF 成功了。 (3认同)

小智 19

对我来说,只是为了工作

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

并自动要求授权下载依赖项.在示例下面,我使用的是fedora 22

[root@localhost lukas]# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm
Yum command has been deprecated, redirecting to '/usr/bin/dnf install  ffmpeg-2.6.4-1.fc22.x86_64.rpm'.
See 'man dnf' and 'man yum2dnf' for more information.
To transfer transaction metadata from yum to DNF, run:
'dnf install python-dnf-plugins-extras-migrate && dnf-2 migrate'

Last metadata expiration check performed 0:28:24 ago on Fri Sep 25 12:43:44 2015.
Dependencies resolved.
====================================================================================================================
 Package               Arch           Version                                  Repository                      Size
====================================================================================================================
Installing:
 SDL                   x86_64         1.2.15-17.fc22                           fedora                         214 k
 ffmpeg                x86_64         2.6.4-1.fc22                             @commandline                   1.5 M
 ffmpeg-libs           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates         5.0 M
 fribidi               x86_64         0.19.6-3.fc22                            fedora                          69 k
 lame-libs             x86_64         3.99.5-5.fc22                            rpmfusion-free                 345 k
 libass                x86_64         0.12.1-1.fc22                            updates                         85 k
 libavdevice           x86_64         2.6.4-1.fc22                             rpmfusion-free-updates          75 k
 libdc1394             x86_64         2.2.2-3.fc22                             fedora                         124 k
 libva                 x86_64         1.5.1-1.fc22                             fedora                          79 k
 openal-soft           x86_64         1.16.0-5.fc22                            fedora                         292 k
 opencv-core           x86_64         2.4.11-5.fc22                            updates                        1.9 M
 openjpeg-libs         x86_64         1.5.1-14.fc22                            fedora                          89 k
 schroedinger          x86_64         1.0.11-7.fc22                            fedora                         315 k
 soxr                  x86_64         0.1.2-1.fc22                             updates                         83 k
 x264-libs             x86_64         0.142-12.20141221git6a301b6.fc22         rpmfusion-free                 587 k
 x265-libs             x86_64         1.6-1.fc22                               rpmfusion-free                 486 k
 xvidcore              x86_64         1.3.2-6.fc22                             rpmfusion-free                 264 k

Transaction Summary
====================================================================================================================
Install  17 Packages

Total size: 11 M
Total download size: 9.9 M
Installed size: 35 M
Is this ok [y/N]: y
Run Code Online (Sandbox Code Playgroud)


小智 9

我发现了一个更简单的解决方案 如果所有RPM都在同一目录中,那么您需要做的就是,

$ sudo rpm -i *.rpm
Run Code Online (Sandbox Code Playgroud)

rpm 似乎找出了安装这些并安装RPM的正确顺序.

  • 如果依赖项不在当前目录中,那仍然无法处理. (5认同)

Art*_*ski 5

马修的回答唤醒了很多情绪,因为它仍然缺乏一个小细节。一般命令是:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>
Run Code Online (Sandbox Code Playgroud)

package_file_name以上可包括本地绝对或相对路径,或者是一个URL(甚至可能的URI)。

Yum 将在命令行上给出的所有包文件中搜索依赖项,如果在那里找不到依赖项,它还将使用任何已配置和启用的 yum 存储库。

当前工作目录或任何目录的路径都package_file_name不会被搜索,除非这些目录中的任何一个先前已配置为启用的yum存储库。

所以在 OP 的情况下,yum命令:

# cd <path with pkg files>; yum --nogpgcheck localinstall ./proj1-1.0-1.x86_64.rpm ./libtest1-1.0-1.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

会做,也会做rpm

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

只有当列出的要安装的包之一对命令行中未列出的包有进一步的依赖时,这些yumrpm调用之间的差异才会可见。

在这种情况下rpm只会拒绝继续,而yum会使用任何已配置和启用的 yum 存储库来搜索依赖项,并且可能会成功。

在任何情况下都不会搜索当前工作目录,除非它之前已配置为启用的yum存储库。