Linux 中 RPM 的构建与打包( 四 )


构建 Source RPM 和二进制 RPM下面我们演示如何通过源码和刚修改的 SPEC 文件构建 Source RPM 并在构建时指定-bs 参数(如果使用-bb 参数,则直接生成二进制 RPM),以便生成 SRPM,如下图 19 所示:
图 19. 构建 SRPM

Linux 中 RPM 的构建与打包

文章插图
 
首先,我们基于 SRPM 生成二进制 RPM 。执行过程如清单 7 所示:
清单 7. 由 SRPM 构建二进制 RPM# rpmbuild --rebuild ~/rpmbuild/SRPMS/bello-0.1-1.el7.src.rpmInstalling /root/rpmbuild/SRPMS/bello-0.1-1.el7.src.rpmwarning: bogus date in %changelog: Tue Jun 29 2019 DavidWei - 0.1-1Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.hNMkOC+ umask 022+ cd /root/rpmbuild/BUILD+ cd /root/rpmbuild/BUILD+ rm -rf bello-0.1+ /usr/bin/tar -xf -+ /usr/bin/gzip -dc /root/rpmbuild/SOURCES/bello-0.1.tar.gz+ STATUS=0+ '[' 0 -ne 0 ']'+ cd bello-0.1+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .+ exit 0Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.0isn4Y+ umask 022+ cd /root/rpmbuild/BUILD+ cd bello-0.1+ exit 0Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.epoHml+ umask 022+ cd /root/rpmbuild/BUILD+ '[' /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64 '!=' / ']'+ rm -rf /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64++ dirname /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64+ mkdir -p /root/rpmbuild/BUILDROOT+ mkdir /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64+ cd bello-0.1+ mkdir -p /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/bin+ install -m 0755 bello /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/bin/bello+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /root/rpmbuild/BUILD/bello-0.1/usr/lib/rpm/sepdebugcrcfix: Updated 0 CRC32s, 0 CRC32s did match.+ '[' noarch = noarch ']'+ case "${QA_CHECK_RPATHS:-}" in+ /usr/lib/rpm/check-buildroot+ /usr/lib/rpm/redhat/brp-compress+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1+ /usr/lib/rpm/redhat/brp-python-hardlink+ /usr/lib/rpm/redhat/brp-JAVA-repack-jarsProcessing files: bello-0.1-1.el7.noarchExecuting(%license): /bin/sh -e /var/tmp/rpm-tmp.hV1l1H+ umask 022+ cd /root/rpmbuild/BUILD+ cd bello-0.1+ LICENSEDIR=/root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/share/licenses/bello-0.1+ export LICENSEDIR+ /usr/bin/mkdir -p /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/share/licenses/bello-0.1+ cp -pr LICENSE /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64/usr/share/licenses/bello-0.1+ exit 0Provides: bello = 0.1-1.el7Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1Requires: /bin/bashChecking for unpackaged file(s): /usr/lib/rpm/check-files /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64Wrote: /root/rpmbuild/RPMS/noarch/bello-0.1-1.el7.noarch.rpmExecuting(%clean): /bin/sh -e /var/tmp/rpm-tmp.PCJIAr+ umask 022+ cd /root/rpmbuild/BUILD+ cd bello-0.1+ /usr/bin/rm -rf /root/rpmbuild/BUILDROOT/bello-0.1-1.el7.x86_64+ exit 0Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.ift0pO+ umask 022+ cd /root/rpmbuild/BUILD+ rm -rf bello-0.1+ exit 0二进制 RPM 构建成功后,可以在~/rpmbuild/RPMS/中找到生成的二进制 RPM:
bello-0.1-1.el7.noarch.rpm,如下图 20 所示:
图 20. 查看生成的二进制 RPM
Linux 中 RPM 的构建与打包

文章插图
 
通过 SRPM 构建成二进制 RPM 后,源码会被自动删除 。如果想恢复源码,需要安装 srpm,如下图 21 所示:
图 21. 安装 SRPM 并查看源代码
Linux 中 RPM 的构建与打包

文章插图
 
现在我们检查生成的二进制 RPM 的正确性并进行安装 。
检查并安装 RPM 包Rpmlint 命令可以检查二进制 RPM、SRPMs 和 SPEC 文件的正确性 。
我们以 bello.spec 为例进行检查 。
# rpmlint bello.specbello.spec: E: specfile-error warning: bogus date in %changelog: Tue Jun 29 2019 DavidWei - 0.1-10 packages and 1 specfiles checked; 1 errors, 0 warnings.从 bello.spec 的检查结果中,发现一个 error 。具体报错描述我们需要检查 srpm 。
# rpmlint ~/rpmbuild/SRPMS/bello-0.1-1.el7.src.rpmbello.src: W: invalid-url URL: https://www.example.com/bello HTTP Error 404: Not Foundbello.src: E: specfile-error warning: bogus date in %changelog: Tue Jun 29 2019 DavidWei - 0.1-11 packages and 0 specfiles checked; 1 errors, 1 warnings.从检查 SRPM 的结果可以看出,报错的原因是 URL(
https://www.example.com/bello)无法访问 。我们修改 SEPC,将地址设置为可访问地址,如下图 22 所示:
图 22. 修改 SPEC 设置 URL 为可访问地址
Linux 中 RPM 的构建与打包


推荐阅读