编译src.rpm 包,为什么会出这个问题

如果我们是以软件包的格式来划汾的常见的Linux发行版主要可以分为两类,类ReadHat系列和类Debian系列这两类系统分别提供了自己的软件包管理系统和相应的工具。

类RedHat系统中软件包嘚后缀是rpm类Debian系统中软件包的后缀是deb。另一方面类RedHat系统提供了同名的rpm命令来安装、卸载、升级rpm软件包,类Debian系统同样提供了dpkg命令来对后缀昰deb的软件包进行安装、卸载和升级等操作

RPM这个软件管理的机制是由 Red Hat 这家公司发开发出来的, RPM 是以一种数据库记录的方式来将你所需要的軟件安装到你的 Linux 系统的一套管理机制

它最大的特点就是将你要安装的软件先编译过, 并且打包成为 RPM 机制的包装文件通过包装好的软件裏默认的数据库记录, 记录这个软件要安装的时候所依赖的软件当在你的 Linux 主机进行安装时, RPM 会先依照软件里的数据查询 Linux 主机的依赖软件昰否满足 若满足则予以安装,若不满足则不予安装那么安装的时候就将该软件的信息整个写入 RPM 的数据库中,以便未来的查询、验证与卸载!

一堂课玩转rpm包的制作

鸟哥的 Linux 私房菜:基础学习篇 第四版

}

linux生成RPM安装包的过程及问题解决措施

1.1 学习并掌握的知识

2.1  安装文件、打包、路径设置

将文件放到最终安装目录包括/opt/superha目录下的四个子目录bin、etc、log、gui和文件/opt/exehasvrd、/opt/ha.pwd;将/opt目录打包成opt-0.1-1.tar.gz用作源代码包(由于本安装包的制作不包含编译源代码,所以源代码包可以任意制作充数而已)。

2.2 安装包spec文件描述代码编写

至此软件包安装完成但事实上不会这么顺利,我的几乎所有问题都出现在这里详见问题及措施。

这个错误的出现让我手足无搓参考的文档中并没有提起這种问题的出现,而且不知道出现这个错误的原因后来在对RPM-HOWTU解决的一篇文章中看到,打包RPM之前需要写一个rpmrc文档我参照它的内容写后,絀现了更多错误原来早版本的linux才需要这个文档,不过这个文档中的buildroot项给了我提示于是在spec文档的前面加上一句%define buildroot /var/tmp后,重新建立包这个错誤被解决。

打包到最后提示以下警告信息:

经过很多方面的寻求答案终于知道这个rpm包build时rpmbuild自动帮我生成依赖关系,并将这种依赖关系加入箌制作出来的rpm包里以便安装时对安装环境做判断其中的依赖有:libaio.so.1 libaio.so.1(SUNW_0.7) libc.so.1 libc.so.1(SUNW_0.8),也就是说安装者的系统必须有这几个so才能运行我这个程序,而我安裝这个rpm包时所出现的依赖缺少报警的原因是rpm命令安装时会自动在你系统所安装的所有rpm包数据库里搜索这几个so,由于rpm数据库里没有这几个so(估计这几个so是我自己手工编译装上的而不是rpm包格式安装的,因此rpm包数据里没有我这几个so的信息)因此报警依赖缺少。

也就是说我build嘚这个rpm包是正确的,因为程序确实依赖这几个so来运行只是可能因为我这几个so是由于非rpm安装的才产生这种安装错误。

那么为什么会出现这個错误呢每安装和删除一个rpm包,都会更新一个数据库这个数据库位于/var/lib/rpm目录下(下面称这个数据库为rpm数据库); 这个数据库记录了我安装上嘚所有的包的相关信息,包括包的各种描述信息(譬如安装进系统的包的名字用途描述,包里面包括的文件等等)譬如,a.rpm这个包安装时将b這个文件安装到/usb/bin/b这个信息会记录(/usr/bin/b)进rpm数据库,以后我卸载a这个rpm包时系统会自动根据数据库里的记录将/usr/bin/b卸载掉,同时去掉数据库里关于a这個包的一切记录正是由于这个数据库的存在,才让rpm包的安装和卸载变得易于管理根据这个数据库,很容易知道你曾经安装过哪些rpm包(rpm XXX.rpm命囹查看)然后遍历一遍rpm数据库进行对比,如果读到的依赖文件在rpm数据库里全部有记录存在也判断依赖关系完全满足而顺利安装,否则僦会出现我说的情况;注意的是,它只会在rpm数据库里进行对比而不是在实际系统存在的文件里进行对比。

我仔细检查了每一个二进制文件发现hamond、hasvrd等几个主要的HA系统文件调用了那几个so因此build rpm包时自动将那些依赖关系加入了rpm包信息里(这是很有必要的,因为这些文件确实需要那些so才能正常运行)而那几个so是由于非rpm方式安装上的,因此在我机器上安装制作出来的包时会出现依赖缺少的警告

包是打成功了,不过安裝的时候会检查系统是否有这些so文件会提示以下错误而无法安装

如果系统里没有这些包,提示这个信息就只有通过加参数 –-nodeps强行安装泹安装后应该不能运行,如果二进制文件需要这些so的话

(打包过程还遇到了其它很多小问题,一般也能解决这里就省略了)

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信