常见问题:
Q1、No Such File or Directory.
A1: 不同版本的Linux上会有不同版本的rpmbuild,它定义的%buildroot 路径 有可能会不同,而且对于有些版本,在spec文件中指定的%buildroot 并不会起作用,使得package过程中需要的sources所在目录定位出错。一般在低版本的rpmbuild上能成功package的spec文件在其他较高版本上使用时会出现上述错误。
我们可以在spec文件的 %install 块中把打包所需的文件和目录 拷贝或移动 到现有版本指定的路径下。
例如:
rpm 4.11中:%buildroot = %{_buildrootdir}/XXXX = %{_topdir}/BUILDROOT/%{name}-%{version}
rpm 4.3中 :%buildroot = spec文件中指定,一般 = %{_topdir}/buildroot/%{name}-%{version}
可以使用如下方式进行区分:(注:本人使用redhat5和7)
(uname -r | grep -q "el7" #查看Linux版本
if [[ $? -eq 0 ]] #如果是radhat7,则进行文件的移动;如果不是,则不进行任何操作
then
mv $(dirname $(dirname %buildroot))/buildroot/* %buildroot/
fi
)
A2:指定的中间目录的路径和package时要求的不一致,更改保存文件的路径一致即可。
Q2:file xxx conflict with xxx。
A1:spec文件中的%files块中指定文件或目录时使用的权限和其他文件中指定的不一致,解决方法如下:
1、使用 ll 命令查看冲突文件的权限,
2、在spec文件的%file块中修改冲突文件的权限和上一步查看到的一致即可:
%attr(555,root,sys) %dir /opt/hp93000/soc_hvmapi
spec文件:
%file 设置应该捆绑到 RPM 中的文件,并且能够可选地设置捆绑文件的许可权和其它信息
%attr(755,root,sys) dir / file #将会覆盖文件或者目录的所有者和权限,有时候可以设置括号中的内容和原来的权限相同来解决安装rpm包时该目录/文件 冲突的问题
查看RPM包中的内容:
rpm -qpl packagename