2013-02-05 80 views
0

我有一个用于32位和64位Linux平台的组合包。使用rpmbuild构建32位和64位组合包

在64位系统上,无论在spec文件的%files部分提到了什么,都会安装所有文件(包括32位和64位文件)。 在32位系统上,无论是在spec文件的%files部分中提到的所有文件都得到安装,但在postinstall(我写了一个代码删除)期间删除了64位文件。

问题是,在32位计算机上,包管理器在查询时显示所有文件以显示软件包安装的文件。因此,在32位机器上显示64位文件(如rpm -ql)

有没有什么好方法可以删除32位机器上的64位文件?

回答

0

不,没有简单的方法来做到这一点。 RPM被设计为将32位和64位计算机视为单独的体系结构,并有充分的理由。 您应该构建两个RPM。

通过自己删除刚刚安装在%post部分中的文件,您正在RPM数据库中创建错误。如您所述,rpm -ql列出文件在那里(根据数据库,他们在那里)。再举一个例子,现在任何rpm -V您的RPM的验证都将被破坏 - 您故意删除的文件被系统认为是丢失的。 rpm -Va(验证所有软件包)是许多人在尝试升级操作系统之前所做的事情,用户会认为他们需要重新安装RPM。

+0

有什么方法可以更新rpm数据包关于已删除的软件包的文件,以便我只能在使用rpm -ql进行查询时获取可用文件。 – gopu

+0

你能解释一下spec文件中“%ifarch”宏的价值吗?要构建一个包,我们必须将“--target ”(比如i386)传递给rpmbuild cas参数。如果是这样,%ifarch的值将变成i386。否则%ifarch是我们构建软件包的机器的体系结构还是我们正在安装软件包的机器的体系结构? – gopu

+0

如果您正在构建具有buildarch ='noarch'的RPM,那么该怎么办?对于像Perl这样的解释型语言的RPM来说呢?你还需要建立一个32位和64位版本吗?那么'noarch'是可以避免的吗? – padub