Linux 为RPM创建等级库文件
我的一般任务是将我的软件中的所有库与可执行软件放在一个rpm文件中。我的另一种方法是使用bash脚本,将所有库放在CentOS的指定文件夹中。此外,还需要安装外部软件包(如来自yum软件包库的库)的依赖项(例如,yum-apt-get-install-freeglut)。现在,我只想使用一个rpm文件,它可以为我做任何事情,将库复制到正确的文件夹中,还可以添加yum文件,这样我就可以毫无问题地启动可执行文件 我读过有关在CentOS中创建rpm文件的内容,我的第一次尝试是创建规范文件。从中我发现了一个最小的例子:Linux 为RPM创建等级库文件,linux,unix,centos,rpm,rpmbuild,Linux,Unix,Centos,Rpm,Rpmbuild,我的一般任务是将我的软件中的所有库与可执行软件放在一个rpm文件中。我的另一种方法是使用bash脚本,将所有库放在CentOS的指定文件夹中。此外,还需要安装外部软件包(如来自yum软件包库的库)的依赖项(例如,yum-apt-get-install-freeglut)。现在,我只想使用一个rpm文件,它可以为我做任何事情,将库复制到正确的文件夹中,还可以添加yum文件,这样我就可以毫无问题地启动可执行文件 我读过有关在CentOS中创建rpm文件的内容,我的第一次尝试是创建规范文件。从中我发现
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
Summary:一个非常简单的玩具箱rpm包
姓名:toybinprog
版本:1.0
发布:1
许可证:GPL+
小组:开发/工具
SOURCE0:%%{name}-%%{version}.tar.gz
网址:http://toybinprog.company.com/
BuildRoot:%%{u tmppath}/%%{name}-%%{version}-%%{release}-root
%描述
%{摘要}
%准备
%设置-q
%建造
#空的部分。
%安装
rm-rf%{buildroot}
mkdir-p%{buildroot}
#在builddir中
cp-a*%{buildroot}
%干净的
rm-rf%{buildroot}
%档案
%defattr(-,根,根,-)
%config(noreplace)%%{sysconfdir}/%%{name}/%%{name}.conf
%{u bindir}/*
%变更日志
*2009年4月24日星期四Elia Pinto 1.0-1
-第一次建造
在宏%files中,我可以将所有文件放入其中。是否也可以将包含库内容的文件夹放在那里,而不是将所有100个库都放在额外的位置?下一个问题是我不明白macrro%SOURCE0在做什么。。我必须放在这里的tar文件是什么?也许有人能以一种简单易懂的方式让我清楚地知道我必须为我的问题做些什么
谢谢大家 我喜欢这里的指导原则:
Source0
指尝试准备包生成时将查找的第一个源文件rpmbuild
%SOURCE
指令是到源的映射。您可以在其他部分中调用%SOURCE0
来引用它
%prep
准备生成设置并创建RPM\u build\u ROOT
目录%setup-q
卸载当前目录中的tarball。根据您的示例,它的名称为toybinprog-1.0.tar.gz
在%build
部分中,您的源tarball已经被提取,因此您输入的任何命令(例如,make
)都将在提取的目录中执行
%install
部分告诉rpmbuild
在目标系统上安装程序包在生成过程中拥有或生成(您要安装)的文件的位置。在大多数情况下,您希望在目标系统上安装二进制文件和库,并将头文件和静态库保存在单独的%{name}-devel
子包中
与%files
指令类似,目录也有一个类似的宏,名为%dir
。用法相似。以下是一些准则:
%dir
宏不考虑内部文件,而是%file指令的“sub”宏。例如,
%files
%license LICENSE
%dir /usr/lib/%{name}/
%{_bindir}/%{name}
/usr/lib/%{name}/%{name}.py*
在上面,由%{name}
表示的包将拥有两样东西
%{name.py*}
文件中的/usr/lib/%{name}/
/usr/lib/%{name}
%{name}
是要写入指定%dir
的主包,则%{name}
应该拥有它。通常,如果一个包的目录是由多个包编写的,并且在安装该包的过程中,%dir
已经由系统中的某个其他包创建,则不会为该包指定目录的所有权
可以使用rpm
命令查询文件/目录的所有权,例如/var/log
目录属于Fedora box上的包文件系统
~]# rpm -qf /var/log
filesystem-3.2-40.fc26.i686
非常感谢你!这对我帮助很大!我还有一个问题。当我将共享对象文件放在%files部分,并希望安装最终的rpmbuilded rpm时,它显示需要一些lib。这些lib来自我放在file部分的共享对象文件。我通过ldd sharedobjectfile.so发现了这一点,它将libQt53D[…]作为依赖项提供给我。在安装rpm期间,它告诉我缺少libQt53D[…]的依赖项。。你有什么提示吗?我能做什么?在进入
%description
之前,你需要要求:
在顶部部分。非常感谢你的回答!这真的很有帮助。。现在我想通过yum install*.rpm安装rpm,它会给我一个文件系统的事务检查错误。