如何从细分磁盘创建RPM



我有一个分区my_sw,它有我想安装的东西的映像:

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

等等。我想一定有一种简单的方法可以创建一个spec文件,并使用rpmbuild将其打包为RPM,这样其他用户就可以安装它。我不在乎RPM可以做什么花哨的构建工作,我只想让它安装目录树。(我想我有点滥用rpm,但这样我的用户就会在他们的rpm数据库中跟踪我的文件,这是他们想要的。)

我尝试过各种各样的事情,但rpm想做的比我想做的多得多,大多数项目也希望rpm做更多的事情(预构建、构建、测试、剥离等)。有没有一个方法可以展示如何将一个只安装文件的琐碎rpm组合在一起?

我在CentOS 5或6(或类似的RedHat)上执行此操作。

是的,您可以根据您描述的文件系统映像创建RPM。这是RPM构建中比较容易的一种情况,但您仍然必须使用这些工具。

步骤大致如下:

1) 创建一个RPM构建环境,如果你还没有这样做的话

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

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

3) 在spec/子目录中创建等级库文件。有一些工具可以帮助您创建等级库文件骨架。例如,如果您可以使用"rpcdevtools"软件包(适用于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章。

最新更新