2013-03-01 86 views
0

我有一个RPM I版本,它解开了我在三种不同类型的系统中使用的一堆脚本。我正在尝试添加第四个系统类型,它只需要rpm中打包的文件的子集。有没有办法让%安装部分只安装一些基于简单检查的有效负载。像rpm规范只根据系统标准安装某些文件

(须藤代码)

if systemtype eq "type4"; then 
    install %file4 
else 
    install %file 
fi 

这四个系统上运行相同的操作系统和一个RPM使得它更容易让我给RPM给其他人使用他们,所以我爱用一个包装完成这件事。

我知道我可以在%post部分做到这一点,但是我需要删除的文件列表非常长,所以如果可以的话,我想避免这种情况。

+1

是不是rpm安装脚本几乎只是shell脚本?你可以简单地列出所有需要安装的文件,然后'安装''cat filelist'''或任何相当于rpm脚本的文件。 – 2013-03-01 21:09:05

回答

1

以单个RPM完成此任务并不是一个很好的计划。正如Marc所说,你可以像在其他任何地方一样编写shell脚本,但根据你的问题,这似乎不合理。在你的问题中,你解释过这个RPM会放到一台机器上,为什么不为这个特定的系统打包RPM?这可以在其他用户需要维护RPM时降低RPM的复杂性,并且还可以减少RPM的膨胀。在短期内,单个RPM可能会更容易,但从长远来看,多个RPM将是更好的解决方案。

+0

我同意一个RPM不是一个好的解决方案,但是不是对第四个系统使用不同的RPM,这会导致代码重复,您可以使用所有文件共同的文件创建“基础”RPM,并使用额外文件创建另一个软件包这取决于基础包。 – 2013-03-03 11:24:22

+0

@Eran,这是另一种可能性,但是存在的问题是与两个RPM相反,存在三个RPM(基础,类型1机器的包和类型2机器的包)。当解释说他们必须安装这个基础包,然后根据机器类型选择两个包之一时,这可能也会让其他人感到困惑。 – Forrest 2013-03-03 16:51:34

+0

幸运的是,我们有YUM。构建YUM DB,并使用YUM进行所有安装。这很容易部署,并解决所有这些问题。 – 2013-03-04 06:44:05

0

您可以让您的spec文件一次发出多个RPM文件。这被称为"subpackaging"

如果您调整它们以使它们与各种机器上的相关性相匹配,您可能会得到一定数量的软件包,因为它们可以安装。