gpt4 book ai didi

linux - 为 RPM 创建规范文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:19 25 4
gpt4 key购买 nike

我的一般任务是将我的软件中的所有库与可执行软件一起放在一个 rpm 文件中。我的替代方法是使用 bash 脚本,它将所有库放在 CentOS 的指定文件夹中。还需要安装外部包的依赖项,例如来自 yum 包库的库(例如 yum apt-get install freeglut)。现在我只想使用一个 rpm 文件来为我做所有事情,将库复制到正确的文件夹中,也添加 yum 文件,这样我就可以毫无问题地启动可执行文件。

我阅读了有关在 CentOS 中创建 rpm 文件的信息,我的第一个尝试是创建 spec 文件。来自 https://stackoverflow.com/a/1165200/7105824我找到了一个最小的例子:

Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1

License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
%{summary}

%prep
%setup -q

%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p %{buildroot}

# in builddir
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Thu Apr 24 2009 Elia Pinto <devzero2000@rpm5.org> 1.0-1
- First Build

在宏 %files 中,我可以将所有文件放入其中。是否也可以将包含库内容的文件夹放在那里而不是额外放置所有 100 个库?下一个问题是我不明白,macrro %SOURCE0 在做什么。我必须放在这里的 tar 文件是什么?也许有人可以用一种简单易懂的方式向我说明我必须为我的问题做些什么。

谢谢大家!

最佳答案

我喜欢这里的这些指南:

https://rpm-packaging-guide.github.io/

Source0 指的是 rpmbuild 在尝试准备您的包构建时将查找的第一个源文件。 %SOURCE 指令是到您的源的映射。您可以在其他部分调用%SOURCE0来引用它。

%prep 准备build设置并创建一个 RPM_BUILD_ROOT 目录。 %setup -q 解压当前目录中的 tarball。根据您的示例,它的名称为 toybinprog-1.0.tar.gz

%build 部分中,您的源代码 tarball 已经被提取,因此您输入的任何命令,例如 make 都将在提取的目录中执行。

%install 部分告诉 rpmbuild 在目标系统上安装包在构建(您要安装)期间拥有或生成的文件的位置。在大多数情况下,您希望在目标系统上安装二进制文件和库,并将头文件和静态库保存在单独的 %{name}-devel 子包中。

%files指令类似,还有一个类似的目录宏,名称%dir。用法类似。这里有一些指南:

http://ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html

%dir 宏不考虑其中的文件,而是 %file 指令的“子”宏。一个例子,

  %files
%license LICENSE
%dir /usr/lib/%{name}/
%{_bindir}/%{name}
/usr/lib/%{name}/%{name}.py*

上面,由 %{name} 表示的包将拥有两个东西

  1. %{name.py*}文件在 /usr/lib/%{name}/
  2. 目录/usr/lib/%{name}

如果您的包 %{name} 是要写入指定 %dir 的主包,则 %{name}应该拥有它。通常情况下,如果一个包由多个包编写并且在安装包期间,%dir 已经由系统中的其他包创建,则不会指定包目录的所有权.

可以使用 rpm 命令查询文件/目录的所有权,例如 /var/log 目录属于包 filesystem在 Fedora 盒子上,

 ~]# rpm -qf /var/log
filesystem-3.2-40.fc26.i686

关于linux - 为 RPM 创建规范文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48129956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com