单个脚本的 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
我需要将初始化脚本复制到 /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