<< Back to man.ChinaUnix.net

Next Previous Contents

4. 预先做好的二进制安装包

4.1 关于 rpm 的哪些错误?

一些 Linux 用户很显然比较畏惧用源码来手动构建和安装包。不过值得高兴的是现在有流行的 rpm 和 deb 或新格式的 slp 包。 虽然当它可能的例子是,rpm 安装正常运行平稳又快作为一个软件安装在某几个有名的操作系统,但还是应该对自安装的预先包装的二进制缺点提出一些思考。

首先,一个正常的软件包发布为 "tarballs",并且这个二进制包发布的今天或几周,几个月后,一个 rpm 包作为为"tarball"的最后版本的镜象发布。所以,你可能要祈祷这个软件作为 rpm 或 deb 早点出现,一些受欢迎的软件可能从来就没有做成 rpm 形势发布。

第二,"tarball" 会更完善,它本身有更多的选项,从而能根据需求定制安装.二进制形势的 rpm 版本可能缺少完全功能的发布版本。rpm的来源发布者如果要制作包含等同于 "tarballs" 的功能,则需要用其中之一的参数选项安装 rpm --recompile packagename.rpm or rpm --rebuild packagename.rpm

第三,一些预先做好的二进制包并不能适当的安装,假如安装有可能导致失败并产生 core-dump 。它们有可能需要你系统里不同的依赖关系库,或者并没准备好或者正巧损坏了 。任何时候当安装 rpm 或 deb 你必须无条件的信任制作包的人。

最后,它交给手头的源码去帮助,能从中学习到认为需要的东西。更多易懂的内容需要去你的存档二进制中去了解,而不是来源于 rpm 。

安装一个 rpm 包很容易想到的问题就是,假如安装需要依赖关系则会导致失败。同样,当 rpm 请求你系统中不同版本的库,那么安装将不能继续,除非你为错误的库位置创建连接符号到正确的位置。尽管 rpm 安装很方便,但经常因为错误而导致失败更应该选择 "tarball" 方式来安装。

你必须以 root 安装 rpm 和 deb 。它需要必须的写权限,这会导致可能比较严重的安全漏洞。当你没注意的时候有可能会把系统二进制和库弄得乱七八糟,甚至安装特洛伊木马到系统里。因此获取 rpm和 deb 必须来自 "受信任的源",任何时候你都要运行 '签名检查' (依靠 MD5 来校验)这个安装包, 在安装之前运行 rpm -K --checksig packagename.rpm ,同样吐血推荐运行 rpm -K --nopgp packagename.rpm。ded 包同样的命令是 dpkg -I | --info packagename.debdpkg -e | --control packagename.deb

有些偏执狂会运行 (并且,在这个例子里有大量这样的偏执狂) unrpm 和 rpmunpack 解压 rpm 包,从这里Sunsite utils/package directory 检查包的可用性。

Klee Diene 有一个写好的实验 dpkgcert 包用来 校验安装的完整性。这些 .deb 依赖 MD5 检查。可到 Debian ftp archive 去下载。当前包名称和版本是 dpkgcert_0.2-4.1_all.debJim Pick Software 站点维护一个实验服务器数据库,用来提供给 dpkgcert 发证书给典型的 Debian 包安装。.

在它们最简单的形势中,用命令 rpm -i packagename.rpmdpkg --install packagename.deb 会自动解包和安装。练习的时候要小心,这些操作可能会导致系统损坏!

注意上述这些警告同样适用于尽管范围比较小的 Slackware's pkgtool 安装。所有的“自动”安装软件都要小心谨慎。

martianalien程序,允许转换 rpm, deb, Stampede slp, 和 tar.gz 包格式.这可确定能兼容大部分的的 Linux 发行版。

仔细阅读 rpm 和 dpkg 命令的 man pages 并参考 RPM HOWTO ,TFUG 的 Quick Guide to Red Hat's Package Manager ,和 The Debian Package Management Tools 得到更多可用的信息。

4.2 关于 rpm 的麻烦问题:一个例子

Jan Hubicka 写过一个非常棒的软件叫 xaos. 在他的 主页 可下载, 有 .tar.gz 和 rpm 两种形势安装。为了方便,我们现在用 rpm,而不是“tabll” 。

不幸的是,rpm 版本的 xaos 无法安装,两个版本的 rpm 包都不行。

rpm -i --test XaoS-3.0-1.i386.rpm

error: failed dependencies:
        libslang.so.0 is needed by XaoS-3.0-1
        libpng.so.0 is needed by XaoS-3.0-1
        libaa.so.1 is needed by XaoS-3.0-1

rpm -i --test xaos-3.0-8.i386.rpm

error: failed dependencies:
        libaa.so.1 is needed by xaos-3.0-8
这奇怪的现象是
libpng.so.0 和 libaa.so.1 在所有的系统测试都在 /usr/libxaos的rpm包构建必须要不同版本的库文件,版本号码必要要一样。

作为测试,我们尝试安装 xaos-3.0-8.i386.rpm 加个 --nodeps 选项强行安装。运行 xaos 出现了错误

xaos: error in loading shared libraries: xaos: undefined symbol: __fabsl
让我们来尝试底层查明真相。运行ldd 在 xaos 二进制上,来查找它依赖的所有必须的共享库。运行 nm 在 /usr/lib/libaa.so.1 库上,列出它的链接 __fabsl。当然,会出现的提示是来自其他库是损坏的……这将不能完成操作,只能替换其他的库。

够了! 下载一个 "tarball", XaoS-3.0.tar.gz ,可以从 ftp site 站点,或者它的主页下载到。尝试构建它(用 root 身份)运行 make install

这个是预先做好的二进制包安装很麻烦的例子之一。


Next Previous Contents