如何使rpm自动安装依赖项


138

我已经建立了两个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)

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

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

我确实按照此处所述尝试了该--aid选项,但对我而言不起作用。rpm -i

还有其他办法吗?

谢谢你的帮助。

Answers:


102

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

CentOS Wiki有一个漂亮的页面,提供有关此操作方法的信息。CentOS Wiki HowTos / CreateLocalRepos


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

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

    # chown -R root.root /home/user/repo
    
  4. 安装createrepo软件包(如果尚未安装)并运行

    # createrepo /home/user/repo
    # chmod -R o-w+r /home/user/repo
    
  5. 创建一个存储库配置文件,例如/etc/yum.repos.d/myrepo.repo包含

    [local]
    name=My Awesome Repo
    baseurl=file:///home/user/repo
    enabled=1
    gpgcheck=0
    
  6. 使用以下方法安装软件包

    # yum install packagename
    

46
您提供的链接仅用这一行就解决了我的情况:yum --nogpgcheck localinstall packagename.arch.rpm
马修(Matthew)

@Matthew Cool,这将消除整个本地存储库步骤。将其发布为我要说的答案。
gertvdijk

如果您尝试编写RPM脚本来像我一样在AIX上自动安装YUM,这将不能很好地工作;-)
Tricky

1
@ Max13,yum localinstall和它已经在此处发布的答案相同,对于依赖项不在 yum仓库中的情况,已经讨论了不利之处(请参阅此方法,除非有一部分)。
gertvdijk

如果没有互联网连接,sudo yum --disablerepo=* --enablerepo=local install packagename.arch.rpm也要弄清楚yum这一点,以确保不会查看其他存储库。
Anshuman Goel,

194

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

$ yum --nogpgcheck localinstall packagename.arch.rpm

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

编辑只是澄清一下,这将自动安装可通过系统YUM存储库获得的所有依赖项。

如果您对系统存储库中没有的其他RPM感到满意,那么除非packagename.arch.rpm在命令行中同时指定了每个RPM,否则该方法将不起作用。


7
不可以,除非libtest1-1.0-1.x86_64.rpm在其他地方的存储库中,或者在命令行中都指定了两个软件包(如“ rpm -i”),否则这将无法工作。我刚刚在yum3.4.3(Fedora 18)上对此进行了验证。此处的成绩单显示updates,即使文件在此处,它也会进入依赖项的存储库。
亚伦·马拉斯科

3
@ AaronD.Marasco也许您对问题中描述的具体情况是正确的,但是对于像我一样在这里清盘的人来说,这种一线式要容易得多,并且对于标题为“如何使rpm自动安装依赖项”。
马修(Matthew)

3
不,这不是“自动安装”依赖项-您在命令行上指定依赖项的方式与使用“ rpm -i”相同,因此使用yum不会给您带来额外的好处。
亚伦·马拉斯科

2
请重新阅读我写的内容。任何依赖项都是从存储库下载的,即使它们在您安装的RPM的目录中本地可用。
亚伦·马拉斯科

1
@ AaronD.Marasco我不是在争论其他发布的解决方案对于OP所询问的特定示例更好。但是,我的答案正确地回答了标题中的问题,并且比配置本地存储库快得多,并且将帮助其他像我一样想要快速获取yum来自动安装依赖项的依赖关系的人。 rpm要求。这是堆栈溢出的目的,不仅可以帮助社区寻找答案,还可以帮助OP。
马修(

28

对于dnf用户dnf install *.rpmlocalinstall不再需要使用。


1
来这里是要说这
句话

1
谢谢,我奋力安装mysql-workbenchrpm -ivh。最终以这篇文章告终。DNF成功了。
BlueBird

21

对我来说

# yum install ffmpeg-2.6.4-1.fc22.x86_64.rpm

并自动要求授权下载证书。在示例下方,我使用的是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

我认为最简单的方式
Shams

这不是直接的rpm解决方案,但是我最喜欢这个。
TFuto

不是RPM解决方案,而是仅一个命令即可安装依赖项的最简单方法。这对我来说是完美的
Enrique Benitez

9

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

$ sudo rpm -i *.rpm

rpm 似乎找出正确的顺序来安装它们并安装RPM。


5
如果依赖项不在当前目录中,那仍然无法解决。
陈鼎一

4

Matthew的回答引起了很多情绪,因为它仍然缺少一些细节。通用命令为:

# yum --nogpgcheck localinstall <package1_file_name> ... <packageN_file_name>

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

会做,就像rpm

# cd <path with pkg files>; rpm -i proj1-1.0-1.x86_64.rpm libtest1-1.0-1.x86_64.rpm

它们之间的differencve yumrpm调用只会是可见的,如果上市要安装的程序包的一个已经在命令行中未列出的软件包的依赖进一步。

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

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


0

我遇到了这个,对我有用的是跑步 yum localinstall enterPkgNameHere.rpm有用的是从.rpm文件所在的目录中。

注意:将。替换enterPkgNameHere.rpm为您的.rpm文件的名称。


0

对于openSUSE Leap 15,我收到类似的错误:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm 
[sudo] password for root: 
warning: opera-stable_53.0.2907.68_amd64.rpm: Header V4 RSA/SHA512 Signature, key ID a5c7ff72: NOKEY
error: Failed dependencies:
    at is needed by opera-stable-53.0.2907.68-0.x86_64

我运行以下命令来找出依赖项:

> sudo zypper install opera-stable_53.0.2907.68_amd64.rpm 
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 4 NEW packages are going to be installed:
  at libfl2 libHX28 opera-stable

4 new packages to install.
Overall download size: 50.3 MiB. Already cached: 0 B. After the operation, additional 176.9 MiB will be used.
Continue? [y/n/...? shows all options] (y): n

然后我运行以下命令来安装依赖项:

> sudo zypper in at
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  at libfl2 libHX28

3 new packages to install.
Overall download size: 208.6 KiB. Already cached: 0 B. After the operation, additional 600.4 KiB will be used.
Continue? [y/n/...? shows all options] (y): y

然后运行此rpm文件以安装文件:

> sudo rpm -i opera-stable_53.0.2907.68_amd64.rpm

知道这是否是最好的做法,但它解决了我的问题。


0

步骤1:在指定位置复制所有rpm pkg

步骤2:如果尚未安装createrepo,因为默认情况下不会安装,请安装它。

[root@pavangildamysql1 8.0.11_rhel7]# yum install createrepo

第三步:创建存储库metedata并授予以下权限

[root@pavangildamysql1 8.0.11_rhel7]# chown -R root.root /scratch/PVN/8.0.11_rhel7
[root@pavangildamysql1 8.0.11_rhel7]# createrepo /scratch/PVN/8.0.11_rhel7
Spawning worker 0 with 3 pkgs
Spawning worker 1 with 3 pkgs
Spawning worker 2 with 3 pkgs
Spawning worker 3 with 2 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@pavangildamysql1 8.0.11_rhel7]# chmod -R o-w+r /scratch/PVN/8.0.11_rhel7

步骤4:在/etc/yum.repos.d/mysql.repo中创建具有以下内容的存储库文件

[local]
name=My Awesome Repo
baseurl=file:///scratch/PVN/8.0.11_rhel7
enabled=1
gpgcheck=0

步骤5运行此命令进行安装

[root@pavangildamysql1 local]# yum --nogpgcheck localinstall mysql-commercial-server-8.0.11-1.1.el7.x86_64.rpm


-5

从源文件生成RPM的过程:1)以.gz扩展名下载源文件。2)从yum install安装rpm-build和rpmdevtools。(将生成rpmbuild文件夹...应该在rpmbuild文件夹内生成SPECS,SOURCES,RPMS ..文件夹)。3)将源代码.gz复制到SOURCES文件夹。(rpmbuild / SOURCES)4)使用以下命令解开tar球。转到存在tar文件的SOURCES文件夹:rpmbuild / SOURCES。命令:例如tar -xvzf httpd-2.22.tar.gz httpd-2.22文件夹将在同一路径中生成。检查httpd-2.22 / srclib文件夹中是否有apr和apr-util。如果不存在apr和apr-util,请从apache网站下载最新版本,请取消将其放在httpd-2.22 / srclib文件夹中。还要确保在系统中安装了pcre。

5)转到解压缩的文件夹,然后键入以下命令:./configure --prefix = / usr / local / apache2 --with-included-apr --enable-proxy --enable-proxy-balancer --with-mpm = worker --enable-mods-static = all 6)配置成功后运行以下命令:make 7)成功执行od make命令后运行:在同一文件夹中检查安装。(如果您没有checkinstall软件,请从站点下载最新版本。)checkinstall软件也存在可以通过以下方式解决的错误:::::找到checkinstallrc,然后使用vim命令将TRANSLATE = 1替换为TRANSLATE = 0。还要检查排除包:EXCLUDE =“ / selinux” 8)checkinstall将询问选项(如果要为源文件使用tp build rpm输入R,则输入9)9).rpm文件将在rpmbuild / RPMS文件内的RPMS文件夹中构建。 .. 祝一切顺利 ....

此致,Prera​​na


有人问过要建什么东西?这是关于解决已经建立的RPM的依赖关系。
克雷格·杰克逊
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.