如何从子目录创建RPM?

时间:2014-08-27 21:02:06

标签: rpm rpmbuild rpm-spec

我有一个子目录my_sw,其中包含我要安装的图像:

my_sw/
  usr/
    bin/
       foo
    man/
       man1/
         foo.1

等等。我想必须有一个简单的方法来创建一个spec文件,并使用rpmbuild将其打包为RPM,以便其他用户可以安装它。我不关心rpm可以做的任何花哨的构建东西,我只是想要它安装那个目录树。 (我想我有点误用了rpm,但这样我的用户就会在他们的rpm数据库中跟踪我的文件,这是他们想要的。)

我已经尝试了各种各样的东西,但是rpm想要做的比我想要的更多,并且大多数项目都希望rpm能够做更多的事情(预建,构建,测试东西,剥离等)。有一个howto在哪里显示如何只是安装一个简单的rpm,只安装文件?

我在CentOS 5或6(或类似的RedHat)上这样做。

1 个答案:

答案 0 :(得分:3)

是的,您可以根据您描述的文件系统映像创建RPM。这是RPM构建的一个简单案例,但您仍然需要使用这些工具。

步骤大致如下:

1)创建RPM构建环境(如果尚未创建)。在它的barest,这将是您的主目录下的子目录树,如下所示:

rpm/
  BUILD/
  RPMS/
    x86_64/  (or whatever is the applicable arch)
  SOURCES/
  SPECS/
  SRPMS/

2)创建图像的tarball,并将其放在SOURCES /目录中。

3)在SPEC /子目录中创建一个spec文件。有些工具可以帮助您创建spec文件框架。例如,如果您可以使用“rpmdevtools”软件包(适用于CentOS 5和6),那么您可以使用“rpmdev-newspec”。您需要填写一些字段并提供一些(在您的情况下是次要的)shell命令。结果可能是这样的:

Name:    my_sw
Summary: Cool software
Version: 1.0
Release: 1
Group:   Applications
License: <license>
Source0: my_sw.tar.gz

%description
my_sw does awesome things that you'll really like.  If you have any need for
awesomeness, this is for you!

%prep
# different from the default:
%setup -q -c -T

%build
# nothing to do

%install
# Start clean
rm -rf %{buildroot}
mkdir -p %{buildroot}

# Put the files in the correct location relative to %{buildroot}
ln -s %{buildroot} ./my_sw
tar xzf %{S:0}

%files
%defattr(-,root,root,-)
%{_bindir}/foo
%{_mandir}/man1/foo.1

%changelog
* Wed Aug 27 2014 Gary O <garyo@gmail.com> 1.0-1
- Initial spec

其中一些涉及最终的RPM;其余的告诉rpmbuild它需要做什么的细节。

4)用rpmbuild构建它:

rpmbuild -ba SPECS/my_sw.spec

5)二进制RPM将在RPMS /中。源RPM将在SRPMS /.

我发现的最好的RPM建筑参考之一是Fedora项目的RPM指南:http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/index.html。特别参见第9章。