rpm的几个烦人问题

rpm@Linux

rpm是Linux世界里最常用的软件发布格式。但是目前的版本存在几个烦人的问题:
1、SuSE 8.x版本里的rpm不允许递归读取rpm的系统文件,这就意味着在安装rpm包时,这个包的spec文件里的脚本不能使用rpm --query查询功能,这样在解决某些依赖关系时非常麻烦。幸好rpm4.2以上已经解决了这个问题,只是会报出warning,RedHat9.0 and ES3.0都使用了新版本的rpm。
2、rpm spec中允许执行一些pre-install/post-install/pre-uninstall/post-uninstall时刻的shell脚本,但是由于rpm fork子进程来执行这些脚本,并且使用pipe来与之通信,这就导致这些脚本不能接收终端的输入---其实这也是它实现时的缺陷,父进程没有把终端输入转发给子进程。
3、如果一个大的软件包有几个模块,每个模块都可以独立被用户选择安装,但是模块之间又有某些耦合,而且安装过程中的临时文件是不希望安装完成后依然保存在硬盘上的。这个时候rpm就做不到了。因为rpm在打包的时候会记录下所有的文件,然后安装时这些文件都会被安装到对应的路径。并且在卸载时会检查这些文件是否还在,如果不在就会报warning。烦人啊。
4、如果从rpm spec的脚本中启动一些后台进程,如果后台进程不能真正的daemon进程,它就会继承了执行rpm安装的进程的打开文件表,其中fd 3是打开对应rpm文件的,如果这个rpm文件存在于一个mount的目录中,安装结束时去umount这个目录,就会报告device busy了。这个问题的一个规避方法是在启动后台进程时加上 3>/dev/null,把fd 3重定向到其他目录。

哪位兄台做过Linux下的打包程序?希望能够看到类似于Installshield的软件出现。当然,最好是基于rpm的,尽管它很烦人。

 

posted on 2004-06-17 14:39  BZhou  阅读(526)  评论(1)    收藏  举报

导航