我需要将init脚本复制到/etc/init.d/并将其他脚本复制到/ opt //。但我想把它作为RPM包。
我找到了部署singe文件的教程。 请检查一下:rpm single file tutorial
你能解释一下%install部分吗? 如果已安装的脚本位于/ opt / sample_rpm而不是$ RPM_BUILD_ROOT / opt / sample_rpm中,那么$ RPM_BUILD_ROOT会引用什么?
答案 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