spec脚本常用路径宏变量
通过命令rpm --showrc查看实现代码。另外直接通过 rpm --eval "%{macro}"来查看具体对应路径。
比如我们要查看%{_bindir}的路径,就可以使用命令rpm --eval "%{ _bindir}"来查看。
另外,所有的宏都可以在/usr/lib/rpm/macros里找到。
下面是宏对应路径一览表:
Macros mimicking autoconf variables
%{_sysconfdir} /etc
%{_prefix} /usr
%{_exec_prefix} %{_prefix}
%{_bindir} %{_exec_prefix}/bin
%{_lib} lib (lib64 on 64bit systems)
%{_libdir} %{_exec_prefix}/%{_lib}
%{_libexecdir} %{_exec_prefix}/libexec
%{_sbindir} %{_exec_prefix}/sbin
%{_sharedstatedir} /var/lib
%{_datadir} %{_prefix}/share
%{_includedir} %{_prefix}/include
%{_oldincludedir} /usr/include
%{_infodir} /usr/share/info
%{_mandir} /usr/share/man
%{_localstatedir} /var
%{_initddir} %{_sysconfdir}/rc.d/init.d
Note: On releases older than Fedora 10 (and EPEL), %{_initddir} does not exist. Instead, you should use the deprecated %{_initrddir} macro.
RPM directory macros
%{_topdir} %{getenv:HOME}/rpmbuild
%{_builddir} %{_topdir}/BUILD
%{_rpmdir} %{_topdir}/RPMS
%{_sourcedir} %{_topdir}/SOURCES
%{_specdir} %{_topdir}/SPECS
%{_srcrpmdir} %{_topdir}/SRPMS
%{_buildrootdir} %{_topdir}/BUILDROOT
Note: On releases older than Fedora 10 (and EPEL), %{_buildrootdir} does not exist.
Build flags macros
%{_global_cflags} -O2 -g -pipe
%{_optflags} %{__global_cflags} -m32 -march=i386 -mtune=pentium4 # if redhat-rpm-config is installed
Other macros
%{_var} /var
%{_tmppath} %{_var}/tmp
%{_usr} /usr
%{_usrsrc} %{_usr}/src
%{_docdir} %{_datadir}/doc
rpm包查看
rpm -qpl jdk-linux-x64.rpm |more
用Python写了一段在多个rpm包中批量查找指定文件的脚本:
import os ,re
import commands
for root, dirs, files in os.walk('.'):
for f in files:
if f[-4:]=='.rpm':
ret, output = commands.getstatusoutput('rpm -qpl '+f+'|more |grep libceph-common.so.0')
if ret == 0:
if len(output)>1:
print f
查看版本是1.8.0_131
也可以直接解压查看rpm包中的内容
rpm2cpio jdk-linux-x64.rpm |cpio -idmv
Python批量解压:
import os ,re
import commands
for root, dirs, files in os.walk('.'):
for f in files:
if f[-4:]=='.rpm':
ret, output = commands.getstatusoutput('rpm2cpio '+f+' |cpio -idmv')
print f
查看rpm版本
rpm -qa|grep rpm
解压所有rpm包
find . -name *.rpm -print0 | xargs -0 -I x sh -c ‘rpm2cpio x | cpio -idv’
or deb
find . -name ‘*.deb’ -print0 | tr ‘\n’ ‘\0’ | xargs -0 -I deb_f sudo dpkg -x deb_f
问题整理
1. RPM 构建错误: 发现已安装(但未打包的)文件:
解决方式1:
vi /usr/lib/rpm/macros
#%__check_files %{_rpmconfigdir}/check-files %{buildroot}
注释以上行
解决方式2:
修改spec文件
在%install下面添加
%define _unpackaged_files_terminate_build 0
2. rpath检测错误
vi ~/.rpmmacros
注释下面这行
#%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
参考:
https://www.cnblogs.com/noxy/p/7676871.html