Build 什么是好的RPM构建工具?

Build 什么是好的RPM构建工具?,build,makefile,rpm,scons,Build,Makefile,Rpm,Scons,我负责构建多个RPM。我有我需要制作的每个RPM包的原始规范文件,还有BASH脚本,它们可以设置必要的环境并构建RPM 我想使用一个实际的构建工具,比如make,来构建这些RPM。通过这样做,我希望消除对自定义、模糊的BASH脚本的需求,转而使用清晰、可维护的配置文件(类似于make的Makefile)。然而,使用并保持生成文件集最新可能与维护我当前用于构建RPM包的BASH脚本一样多。cmake和automake这样的程序包装make命令的功能是有原因的——这些工具更具表现力,允许更小、更干净

我负责构建多个RPM。我有我需要制作的每个RPM包的原始规范文件,还有BASH脚本,它们可以设置必要的环境并构建RPM

我想使用一个实际的构建工具,比如make,来构建这些RPM。通过这样做,我希望消除对自定义、模糊的BASH脚本的需求,转而使用清晰、可维护的配置文件(类似于make的Makefile)。然而,使用并保持生成文件集最新可能与维护我当前用于构建RPM包的BASH脚本一样多。cmake和automake这样的程序包装make命令的功能是有原因的——这些工具更具表现力,允许更小、更干净的配置文件

但是,使用/看起来也是一个糟糕的选择,因为它们似乎是专门为C和C++开发而构建的。也有人建议我使用,但尽管这似乎是最好的选择(因为它的配置文件是实际的python脚本),但它也适用于特定的语言

使用我的SPEC文件作为“源代码”,使用环境作为“依赖项”(例如设置制作RPM所需的rpmbuild目录树结构),是否有一个好的构建工具可以用来替换BASH脚本以获得更干净、更可维护的RPM构建解决方案


编辑:当我说“构建工具”时,我似乎不清楚我需要什么。我已经使用rpmbuild作为“编译器”,我使用规范文件(以及二进制文件的相关源代码)作为“源代码”来“编译”RPM。我需要一个能够协调这一过程的工具。

正如@Serge所提到的,rpmbuild是您想要使用的工具。它在所有基于rpm的发行版中都附带rpm包(或子包)。对于基于RPM的发行版,有很多辅助命令可用,例如对于fedora或基于RH的发行版,rpmdevtools包有很多有用的脚本/命令


如果您正在寻找建筑商,Fedora项目将使用建筑商曲。它位于fedorahosted.org。您可以设置koji服务器并使用koji的命令行工具来构建RPM。Builder可能无法完全解决您的问题,但如果您有空闲时间,请看一看。

根据您需要做的事情的复杂性,烤饼确实是一个不错的选择。我总是发现用Python编写脚本比用Bash编写脚本容易得多。但这也是个人的偏好

下面是在SCON中生成RPM的相关Python/SCons代码:

env = Environment(tools=['default', 'packaging'])

rpmSourceFiles = ['file1', 'file2'] # This is a Python list
rpmTargetFile = 'yourRpmFile'

env.Package( source         = rpmSourceFiles,
             target         = rpmTargetFile,
             NAME           = 'foo',
             VERSION        = '1.2.3',
             PACKAGEVERSION = 0,
             PACKAGETYPE    = 'rpm',
             LICENSE        = 'gpl',
             SUMMARY        = 'balalalalal',
             DESCRIPTION    = 'this should be really really long',
             X_RPM_GROUP    = 'Application/fu',
             SOURCE_URL     = 'http://foo.org/foo-1.2.3.tar.gz'
        )
您可以找到有文档记录的Package()生成器。关于
rpmSourceFiles
,它是一个Python列表,应该列出RPM输入文件。如果您使用SCON安装这些源文件,那么您可以只列出这些简单的名称,否则您将需要提供绝对路径


如果您只想使用Python,另一个选择是直接使用Python编程RPM,正如前面所解释的。

我使用了SCON来构建RPM和Debian包,所以集成工具作为包是最糟糕的,并且具有最少的功能,而不是很强大。基于我的Expirence,我建议您在bash或python或其他脚本语言上创建构建脚本,并使用自定义操作从SCON调用该脚本,以调用带有子流程的脚本,并将二进制文件/库/其他工件的依赖关系设置为包with Depends函数所需的此命令


当然,如果您使用scons作为构建系统,它是适用的,否则请忽略。

我想可能是您找不到RPM的结果。 默认值应为
/RPMS/

取决于您的体系结构。
ARCH
可能位于
x86_64
i586
noarch

您可以使用以下
~/.rpmmacro

%home %(echo $HOME)
%packager NAME OF PACKAGER
%vendor NAME OF VENDER
%_topdir ${home}/rpmbuild
否则,您只需要像下面这样的Makefile来编译、构建、打包tarball和生成RPM

SRCS = LIST OF SOURCE FILES
DATA = LIST OF DATA FILES TO BE PACKED
BINARY = LIST OF FILES AS RESULT OF BUILD
TARBALL = FILENAME_OF_THE_SOURCE_ARCHIVE

all: rpm

rpm: build pack
   rpmbuild -ba <PATH_TO_SPEC>

pack: TARBALL

TARBALL: BINARY DATA
    COMMAND TO PACK TARBALL

build: BINARY

BINARY: SRCS
   BUILD COMMANDS
SRCS=源文件列表
数据=要打包的数据文件列表
BINARY=生成结果文件列表
TARBALL=源存档文件的文件名
全部:rpm
rpm:构建包
rpmbuild-ba
包装:柏油球
TARBALL:二进制数据
打包柏油球的命令
构建:二进制
二进制:SRCS
生成命令

肯定是个老问题,但你可能对多哥感兴趣


它的重点是使您的构建环境更加健全和易于管理

rpmbuild有什么问题?您提到的所有工具都负责创建“最终”分发文件。这是按照源代码作者打算的方式完成的。你所寻找的生活水平更高。一步之后。正如下面的评论中所述,没有rpmbuild,您无法进行RPM。我已经在用那个工具了。然而,我有很多RPM需要构建,因此我认为rpmbuild不是构建工具(比如make),而是“编译器”,而规范文件是“源代码”。这些RPM一起组成了一个套件,这是构建工具将产生的产品。我已经使用rpmbuild作为“编译器”,我使用规范文件(以及二进制文件的相关源代码)作为“源代码”来“编译”RPM。我想找一个工具来协调这个过程。@Djaskin987你刚才的问题有点让人困惑。它没有提到你需要一些东西来协调和在rpmbuild之上的东西。rpmbuild不是编译器。它是一个使用spec文件生成RPM的工具。它使用环境或规范文件中指定的规范文件和编译器来编译源代码(假设它是必需的-取决于规范文件)。如果您正在寻找生成器,Fedora项目将使用生成器koji。它位于fedorahosted.org。您可以设置koji服务器并使用koji的命令行工具来构建RPM。建设者可能无法完全解决您的问题,但如果您有一些空闲时间,请看一看。谢谢您的反馈。我将编辑这个问题。如果你把你的评论变成一个答案,我至少会投赞成票