Distutils、旧版rpm和自定义spec文件

1 投票
1 回答
2215 浏览
提问于 2025-04-16 08:54

我昨天终于在Fedora 14上把我的程序打包成了一个RPM文件,想着在CentOS 4.8上也能轻松做到同样的事情。结果发现,旧版本的rpm和distutils功能非常有限,我一直没能找到解决办法。

问题的关键在于,Python 2.7的distutils支持一个叫做“--post-install”的选项,我可以在这里指定一个脚本。这个脚本会被包含在内,并在我用yum或rpm安装时运行。一切都很好。可是,Python 2.3没有这个“--post-install”选项(实际上在RPM中也没有)。没关系,我可以把它加到我的.spec文件的“%install”部分。

于是我开始了RPM的构建过程,输入:

python setup.py bdist_rpm --spec-only

这条命令生成了我的.spec文件。我编辑这个文件,把我的脚本粘贴进去。然后,我继续构建源代码,输入:

python setup.py bdist_rpm --source-only

问题似乎就在这里开始出现。distutils会创建以下子目录:./build/bdist.linux-i686/rpm/。里面有一个叫SPECS/netinfo.spec的文件(我的程序叫netinfo)。但是,它并没有使用我刚创建的自定义.spec文件。这很奇怪,因为它应该使用生成的.spec文件。如果我尝试用默认的.spec文件进行构建,那么我的脚本显然不会包含在RPM中。如果我用我的自定义.spec文件覆盖它,结果还是不行。就好像每次命令执行时,它都会重新生成.spec文件。

bdist_rpm有各种命令,可以通过以下命令列出:

python setup.py bdist_rpm --help

我原本期待能找到一个选项,可以指定要使用的.spec文件。然而,在Python 2.3和2.7中,并没有这样的选项。

一定有某种简单的方法可以让distutils使用我的自定义.spec文件。有没有人知道怎么指定这个?

谢谢,

1 个回答

1

没有这样的东西。你可以用 rpmbuild -bs 来创建一个源RPM包,然后使用 Mock 来为EL4构建一个软件包。

撰写回答