单个脚本的 Rpm 构建和规范文件

Rpm building and spec file for single script

我需要将初始化脚本复制到 /etc/init.d/ 并将其他脚本复制到 /opt//。但我想把它做成 RPM 包。

我找到了部署单个文件的教程。 请检查:rpm single file tutorial

你能给我解释一下 %install 部分吗? 如果安装的脚本在 /opt/sample_rpm 而不是 $RPM_BUILD_ROOT/opt/sample_rpm 中,$RPM_BUILD_ROOT 指的是什么?

$RPM_BUILD_ROOT 是一个 "virtual root directory"。也就是说,当您构建一个 RPM 包时,您需要形成一个完整的包布局,所有路径如 /usr/lib//etc/ 或您的情况 /opt/<package>/。但是由于普通用户没有在这些系统目录中创建文件的权限(这确实很好!)应该在 $RPM_BUILD_ROOT 下创建文件系统层次结构,它通常驻留在一个临时目录中,例如 /tmp/<mypackage>-buildroot 或类似的东西:

因此打包程序创建 $RPM_BUILD_ROOT/etc/$RPM_BUILD_ROOT/usr/lib 等等,然后将包的所有文件放入这些目录中。

某些 RPM 变体需要在规范中明确 BuildRoot: <somepath> header 以将 $RPM_BUILD_ROOT 设置为 non-empty 值,而其他(包括 [=47 最近的规范) =]) 隐式设置 header。

所有创建包布局的操作都在规范的%install部分执行,实际上%install只是一个shell脚本,你可以做你通常做的创建一组文件。

然后需要在%files段指定所有放在$RPM_BUILD_ROOT下的文件,这次没有$RPM_BUILD_ROOT!

参见例如this spec for Lua 了解事情是如何进行的。所有这些 %{_bindir} %{_libdir} 和其他 rpm 宏只是 /usr/bin/usr/lib/ 等目录的可移植替代品。例如,这种方法允许将 x86-64 库放在 /usr/lib64 下,x86-32 库 - 在 /usr/lib 下,这都是根据相同的规范完成的。

一个简单的规范文件,带有文件列表:

Summary:   None
Name:      
Version:   1.1.1
Release:   1
License:   GPL
Group:     None          
Packager:  Jerry Donut <jerry@donut.com>
BuildArchitectures: noarch
BuildRoot:

%description
No description

%files
/usr/local/bin/script.sh

...您可以用同样的方式添加文件。

如您所见,无需指定BuildRoot!


以非特权用户身份构建包:$ rpmbuild -bb package-name.spec

/home/<user-name>/ 中设置 rpm 构建环境:post #13 here... http://www.linuxquestions.org/questions/linux-software-2/need-rpm-package-for-php-version-5-2-7-and-up-on-redhat-5-1-a-766486/#13