QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2707|回复: 11

为何 rpm 升级后总出现一些脑残的依赖

[复制链接]
发表于 2013-5-17 02:00:30 | 显示全部楼层 |阅读模式
我已经不得已给不下六个包下达 Autoreqprov: 0 了
那些个 lib 都在路径下面,安装时就死不认。
发表于 2013-5-17 12:27:44 | 显示全部楼层
试试ldconfig更新一下,有些源码包的依赖不是必须的,要开启某些特定功能时才有特殊依赖。gvfs就有好几项特殊的依赖,比如开启SMB的支持就需要smaba的支持,还有一些支持FTP、HTTP的其他依赖。
如果从XORG开始全面支持的话会造成依赖循环,在blfs的生成脚本就有个XML解释的BUG,必须的依赖在解释XML是出错,运行BLFS生成脚本就会死循环。
回复

使用道具 举报

发表于 2013-5-17 15:19:52 | 显示全部楼层
rpm 的依赖不是运行一下 ldconfig 能解决的。
应该是系统基本设置有问题,导致 rpm 检索 so 文件错了地方。
检索错地方后,导致存入 rpm 中设置的依赖 so 位置和系统中保存的 so 位置不一样。

话说,你遇到问题贴出错误信息到底是会shi还是会怀孕啊?
回复

使用道具 举报

发表于 2013-5-17 15:46:51 | 显示全部楼层
对magic 3.0来说,有可能有这个问题,因为3.0的/lib是到/usr/lib的链接,所以rpm数据库里可能路径是不对的。这个本来应该通过修改spec来解决,不过需要修改的有很多了。
回复

使用道具 举报

发表于 2013-5-17 16:57:54 | 显示全部楼层
sejishikong ,你是不是修改一下 ldconfig 和 PATH 的设置,删掉 /bin /lib 这种目录,只保留 /usr 的就行了?gcc 好像也有相关的设置,binutils 有没有不清楚,ldconfig 在 glibc 里面,那么 glibc 也要改吧?
这样应该就能解决这种问题了。

spec 里面没写,rpm 会自动进行 so 检索,现在的设置是 /usr 在后面,导致检索时全都检索到 /lib 里面的 so ,一些命令,现在也都是检索到 /bin 而不是 /usr/bin 。
我觉得这种设置导致的楼主出现的问题。
回复

使用道具 举报

发表于 2013-5-17 17:06:36 | 显示全部楼层
原帖由 jiangtao9999 于 2013-5-17 16:57 发表
sejishikong ,你是不是修改一下 ldconfig 和 PATH 的设置,删掉 /bin /lib 这种目录,只保留 /usr 的就行了?gcc 好像也有相关的设置,binutils 有没有不清楚,ldconfig 在 glibc 里面,那么 glibc 也要改吧?
这样应该就能解决这种 ...

不是,这和ldconfig或PATH的设置没有关系。rpm打包的时候,rpm包的内容就已经决定了数据库的内容了。比如现在bash里是/usr/bin/bash,那么数据库就只有/usr/bin/bash,虽然/bin/bash完全可以用,但是rpm的数据库不认的,这样就导致一些依赖写/bin/bash的rpm会找不到依赖。虽然/bin/bash的确存在。要解决,一是在bash包中Provides: /bin/bash,或者修改那个rpm的spec,把/bin/bash的依赖改成/usr/bin/bash
回复

使用道具 举报

发表于 2013-5-17 18:06:24 | 显示全部楼层
原帖由 sejishikong 于 2013-5-17 05:06 PM 发表

不是,这和ldconfig或PATH的设置没有关系。rpm打包的时候,rpm包的内容就已经决定了数据库的内容了。比如现在bash里是/usr/bin/bash,那么数据库就只有/usr/bin/bash,虽然/bin/bash完全可以用,但是rpm的数据库不认的,这样就 ...

楼主说的是自动依赖……

自动依赖都是要靠扫描实现的,扫描到这个文件依赖什么程序,什么 so 去写入 rpm 的数据库。
但扫描就牵扯到如何识别文件位置。你的 ldconfig 设置是 /lib 优先,那么 rpm 就认为他依赖于 /lib 里面的某个文件,这个软件包就添加了 /lib/ 下面的 so 文件依赖。如果扫描到是 /usr/lib ,那么就正好是正确情况。
我所说的修改,就是让扫描程序,优先扫到 /usr 里面的东西,这样自动依赖就是正确的文件,而不是 /lib 这个链接里面的文件了。

手动依赖 /lib 、/bin 是编写错误,这个必须修改 spec 的。
回复

使用道具 举报

 楼主| 发表于 2013-5-17 21:17:52 | 显示全部楼层
唉,我错了,最不能升级一个是 rpm 一个是 db4
回复

使用道具 举报

发表于 2013-5-17 21:39:30 | 显示全部楼层
原帖由 haulm 于 2013-5-17 21:17 发表
唉,我错了,最不能升级一个是 rpm 一个是 db4

这两个是一套的。
总之,要是从2.5的架构往上升级,很麻烦的。
回复

使用道具 举报

发表于 2013-5-17 22:10:29 | 显示全部楼层
原帖由 haulm 于 2013-5-17 09:17 PM 发表
唉,我错了,最不能升级一个是 rpm 一个是 db4

先升级 libdb 。之后卸载 db4 ,之后 rpm 会工作不正常,解压缩 db4 的包找到对应的 so 文件拷贝到系统里面。之后 rpm 能用了就赶紧升级 rpm ,之后 rpm 数据库会挂掉,rpmdb --rebuilddb 就行了。解压缩复制到系统目录里面的 db4 的 so 不要删,很多基础软件都还依赖呢。之后重新编译依赖这个文件的所有包,等所有包都重新编译不再依赖他了再删。留到所有包都编译过一遍后格盘进行二次编译都行。
回复

使用道具 举报

 楼主| 发表于 2013-5-17 22:52:24 | 显示全部楼层
安装了 libdb,其实就是 db5,删除 db4 的其它副本动态库,留个 db4 这个包。
重新编译 rpm 包,现在基于的是 db5 了。
回复

使用道具 举报

发表于 2013-5-26 21:40:39 | 显示全部楼层
你们幸苦了!向你们致敬!虽然是菜鸟,也不太懂这些技术问题,可是看到你们为了出一个优秀好用的发行版费劲心思,真的很佩服!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 00:33 , Processed in 0.049835 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表