单个脚本

时间:2015-10-23 09:33:43

标签: linux rpm yum

我需要将init脚本复制到/etc/init.d/并将其他脚本复制到/ opt //。但我想把它作为RPM包。

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

你能解释一下%install部分吗? 如果已安装的脚本位于/ opt / sample_rpm而不是$ RPM_BUILD_ROOT / opt / sample_rpm中,那么$ RPM_BUILD_ROOT会引用什么?

2 个答案:

答案 0 :(得分:2)

$RPM_BUILD_ROOT是“虚拟根目录”。也就是说,当您构建RPM包时,您需要形成包的完整布局,包括/usr/lib//etc/等所有路径,或者在您的情况/opt/<package>/中。但是,由于普通用户没有权限在这些系统目录中创建文件(这确实很好!),应该在$RPM_BUILD_ROOT下创建文件系统层次结构,它通常位于{{1}这样的临时目录中或类似的东西:

因此,打包器会创建/tmp/<mypackage>-buildroot$RPM_BUILD_ROOT/etc/等等,然后将包的所有文件放入这些目录中。

某些RPM变体需要在规范中使用显式$RPM_BUILD_ROOT/usr/lib标头将BuildRoot: <somepath>设置为非空值,而其他(包括Fedora / RedHat中的最新规范)则隐式设置此标头。 / p>

创建包布局的所有操作都在规范的$RPM_BUILD_ROOT部分中执行,实际上%install只是一个shell脚本,您可以按照通常的方式创建一组文件

然后您需要在%install部分指定$RPM_BUILD_ROOT下的所有文件,这次没有%files

参见例如this spec for Lua了解事情的执行方式。所有$RPM_BUILD_ROOT %{_bindir}和其他rpm宏只是%{_libdir}/usr/bin等目录的可移植替代品。例如,这种方法允许将x86-64库置于/usr/lib/,x86-32之下 - /usr/lib64下,这一切都来自同一规范。

答案 1 :(得分:0)

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

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构建环境:在这里发布#13 ... 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