LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1516|回复: 3

chroot后安装rpm出现依赖问题.内详

[复制链接]
发表于 2008-3-4 10:52:52 | 显示全部楼层 |阅读模式
首先:查看原目录RPM。
[root@localhost /]# whereis rpm
rpm: /bin/rpm /etc/rpm /usr/lib/rpm /usr/include/rpm /usr/share/man/man8/rpm.8.gz

然后把/bin/rpm copy the chroot directory.$chroot/bin

查看RPM依赖的库:
[root@localhost /]# ldd bin/rpm
        linux-gate.so.1 =>  (0x00cef000)
        librpm-4.4.so => /usr/lib/librpm-4.4.so (0x004d0000)
        librpmdb-4.4.so => /usr/lib/librpmdb-4.4.so (0x005d0000)
        libselinux.so.1 => /lib/libselinux.so.1 (0x005b8000)
        librpmio-4.4.so => /usr/lib/librpmio-4.4.so (0x00433000)
        libpopt.so.0 => /usr/lib/libpopt.so.0 (0x00429000)
        libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x00c56000)
        libelf.so.1 => /usr/lib/libelf.so.1 (0x00365000)
        libbeecrypt.so.6 => /usr/lib/libbeecrypt.so.6 (0x0099b000)
        libneon.so.25 => /usr/lib/libneon.so.25 (0x00c23000)
        libm.so.6 => /lib/libm.so.6 (0x00be1000)
        libdl.so.2 => /lib/libdl.so.2 (0x00c08000)
        libz.so.1 => /usr/lib/libz.so.1 (0x00c0e000)
        librt.so.1 => /lib/librt.so.1 (0x0035b000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00d41000)
        libbz2.so.1 => /usr/lib/libbz2.so.1 (0x008fa000)
        libc.so.6 => /lib/libc.so.6 (0x00aac000)
        libsepol.so.1 => /lib/libsepol.so.1 (0x00269000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00a14000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x07157000)
        libssl.so.6 => /lib/libssl.so.6 (0x003e2000)
        libcrypto.so.6 => /lib/libcrypto.so.6 (0x00118000)
        libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00333000)
        libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x002bc000)
        libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x003bb000)
        libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x002b6000)
        libcom_err.so.2 => /lib/libcom_err.so.2 (0x00264000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x0024f000)
        libexpat.so.0 => /lib/libexpat.so.0 (0x00dc7000)
        /lib/ld-linux.so.2 (0x00a8b000)

把它们copy to chroot directory.

chroot 到目录。
运行: rpm -qa 没有出错.
运行:rpm -i gettext-devel-0.14.5-3.i386.rpm
出错:
warning: ./tools/gettext-devel-0.14.5-3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
error: Failed dependencies:
        /bin/sh is needed by gettext-devel-0.14.5-3.i386
        /sbin/install-info is needed by gettext-devel-0.14.5-3.i386
        cvs is needed by gettext-devel-0.14.5-3.i386
        gettext = 0.14.5-3 is needed by gettext-devel-0.14.5-3.i386
        libc.so.6 is needed by gettext-devel-0.14.5-3.i386
        libc.so.6(GLIBC_2.0) is needed by gettext-devel-0.14.5-3.i386
        libc.so.6(GLIBC_2.1) is needed by gettext-devel-0.14.5-3.i386
        libc.so.6(GLIBC_2.1.3) is needed by gettext-devel-0.14.5-3.i386
        libdl.so.2 is needed by gettext-devel-0.14.5-3.i386
        libgcc_s.so.1 is needed by gettext-devel-0.14.5-3.i386
        libgcc_s.so.1(GCC_3.0) is needed by gettext-devel-0.14.5-3.i386
        libgcj.so.7 is needed by gettext-devel-0.14.5-3.i386
        libgettextlib-0.14.5.so is needed by gettext-devel-0.14.5-3.i386
        libgettextsrc-0.14.5.so is needed by gettext-devel-0.14.5-3.i386
        libm.so.6 is needed by gettext-devel-0.14.5-3.i386
        libpthread.so.0 is needed by gettext-devel-0.14.5-3.i386
        libstdc++.so.6 is needed by gettext-devel-0.14.5-3.i386
        libstdc++.so.6(CXXABI_1.3) is needed by gettext-devel-0.14.5-3.i386
        libstdc++.so.6(GLIBCXX_3.4) is needed by gettext-devel-0.14.5-3.i386
        libz.so.1 is needed by gettext-devel-0.14.5-3.i386
说明:上面所要的库都有。但它就是报错.

再次运行一个少依赖的包。其实只是解压。
一样报错.

希望大家能帮一下。

对了。这个环境下没有gcc。库都是从自己机子上copy过去的

出个主意也行。怎么让rpm在chroot下面跑起来
 楼主| 发表于 2008-3-5 12:56:29 | 显示全部楼层
在tar 包时出现:
cp: preserving times for `al1armmodules/zqte/lib/pkgconfig/qte-mt.pc': Function not implemented
错误,请问这个时候调用什么系统function.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-7 11:27:51 | 显示全部楼层
还是得自己来:
cp问题是这样解决:
mount -t proc none $chroot/proc
回复 支持 反对

使用道具 举报

发表于 2008-3-12 09:45:59 | 显示全部楼层
没完全搞明白你要干什么。首先你这样拷贝一下就想让 rpm 正常工作是不可能的,由于没有 gcc 你不能从源码编译 rpm,那只有这样:假如你确定在这台机器上 rpm 所依赖的库文件都存在,应该下载一个相应于该系统的 rpm 的 rpm 包,比如说 rpm-xxx.rpm,然后 rpm2cpio rpm-xxx.rpm | cpio -i --make-directories 解出来再拷贝到 / 下,这样你算是“正常”安装了 rpm。其次你必须知道 rpm 在安装新软件时检查依赖关系要查询一个数据库,这个数据库中存储的是你至今为止安装过的 rpm 包的信息(这些信息都在 /var/lib/rpm/Packages 中),现在不清楚你现在这个系统是不是 RedHat 系列的,若是的话,当初的安装当然都是通过 rpm 二进制包,只是后来出于安全或其它原因卸载了 gcc、rpm 等等,如果 rpmdb 数据库也都删除了的话(从你尝试安装 gettext-devel 看就是这种情况)那就相当麻烦,一个办法是你确定依赖的包都装了,那就 rpm -ivh --nodeps gettext-devel-0.14.5-3.i386.rpm 强制安装,不过这是治标不治本的办法,你不可能每次安装新软件都能确定没有依赖性问题,唯一有可能行得通的办法是:若你确定你原来的机器上的软件环境和你现在这台机器基本上相同的话,拷贝其 /var/lib/rpm 下的文件到新机的同样目录下,然后以 root 身份执行下列命令:

# cd /var/lib/rpm
# rm -f /var/lib/rpm/__db*
# db_verify Packages
# rpm --rebuilddb
回复 支持 反对

使用道具 举报

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

本版积分规则

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