RPM:RPM 构建示例基础

RPM:RPM 构建示例基础

我有一个关于 RPM 的基本问题。除了基本的 .rpmmacros 文件、构建目录等之外,我对 RPM 构建了解不多。我在一家拥有持续构建服务器 (Jenkins) 的公司工作,运营部门希望将自包含的 RPM 放在其中进行部署。这是我第一次接触这种方法,所以现在我需要了解构建 RPM 的“细节”。我觉得如果我理解了 rpmbuild 逻辑的最基本精神,我就可以开始使用它,但一直很难找到阐明该过程的教程或文档。

所以,基本上我把它归结为一个简单的“如何做这三件简单的事情”类型的问题,我认为这将揭开 RPM 构建的面纱。

起点是一个 .spec 文件和几个要部署的文件。

Name:           my-ws
Version:        0.1.0
Release:        1
Summary:        A web service to do cool stuff 
URL:            http://my.ws/
BuildRoot:      %{_tmppath}/my-ws-build-root
Requires:       some-web-server-such-as-Jetty

%description
my-ws war file and data update script

%prep
%build
%install
%pre
%preun
%postun
%clean
%files
%defattr(-,www-data,www-data,-)
%doc

现在,Web 服务实际上由 3 段代码组成:一个更新数据文件的 Python 脚本、一个定义路由并用 Java 进行一些计算的 .war 文件,以及一个每天运行一次 Python 脚本并重新启动服务器(可能是 Jetty)的 cronjob。

因此,我认为我需要在这个规范文件的某个地方编写以下逻辑:

To install this rpm
   copy the python script my-ws-update.py to /opt/my-ws/bin and chown it to www-data
   copy the war file my-ws.war to /opt/webapps
   install a cronjob for www-data to run my-ws-update.py and restart some server

To uninstall this rpm
   undo install steps

从空的 spec 文件开始,我不知道下一步该怎么做。我尝试过一些教程,但似乎没有一个针对这种简单、基础的层面。我觉得 %files 指令是所有这一切的关键,但当我查看其他人的示例时,我看到的只是一个目录列表,我不清楚 rpm 如何知道将文件 x 从路径 y 放入路径 z 中的文件 w。

有人能帮我理解这个操作的基本要点吗?至少在接下来的一年里我需要做很多次这个操作,所以非常感谢你的帮助!

更高级的版本最终将是在服务器之间错开时间安装 cronjobs,以避免停机。

答案1

首先,您需要要在系统上安装的文件。将它们放入 tar.gz 中即可。然后在准备部分添加以下内容:

%prep
%setup -q

它会将您的 tar.gz 解压为 rpmbuild/BUILD 并 cd 到您的目录。

在安装部分输入简单的命令来从 BUILDROOT 下的 BUILD/mydir 复制文件,并使用与安装文件相同的层次结构。

%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT/dir/to/create
cp -a my-ws-update.py $RPM_BUILD_ROOT/dir/to/create
etc...

最后,您必须列出 rpm 文件中所需的文件。如果您列出未复制到 $RPM_BUILD_ROOT 的文件或复制文件而不列出它们,rpmbuild 将发出警告。例如:

error: Installed (but unpackaged) file(s) found:
    /etc/redhat-release
    /etc/system-release

你也应该写变更日志部分,例如

%changelog
* Tue Jan 08 2013 Dennis Gilmore <[email protected]> - 17-2
- add the fedora 18 GPG keys

完成 spec 文件后,构建 rpm:

rpmbuild -ba myfile.spec

它还将创建二进制和源 rpm。源 rpm 名为 src.rpm,其中包含重新创建 rpm 所需的所有源文件和 spec 文件。

我希望它有所帮助。

您在什么系统上构建 rpm?如果您需要,我可以为您提供更多详细信息。:)

相关内容