rpm 包
有两种类型的 RPM 包:
- 源码RPM (SRPM)
- 二进制 RPM
SRPM 和二进制 RPM 共享文件格式和工具,但具有不同的内容并用于不同的目的。
一个 SRPM 包含源代码、可选的补丁和一个 SPEC 文件,它描述了如何将源代码构建到二进制 RPM 中。
二进制 RPM 包含从源代码和补丁构建的二进制文件。
1. 构建目录结构
安装必要的 rpms,它将在构建我们的 rpm 的过程中使用
# yum install rpmdevtools rpm-build rpmsign
要设置作为 RPM 打包工作区的目录布局,请使用 rpmdev-setuptree 实用程序
# rpmdev-setuptree
接下来验证目录结构
# tree /tmp/rpmbuild/ /tmp/rpmbuild/ ├── BUILD ├── RPMS ├── SOURCES ├── SPECS └── SRPMS 5 directories, 0 files
现在我们的目录结构已经准备好了,让我们开始准备我们的规范文件spec
2. 创建 SPEC 文件
要详细了解规范文件中使用的各种参数,请点击以下链接
https://docs.fedoraproject.org/quick-docs/en-US/creating-rpm-packages.html
# vim /tmp/rpmbuild/SPECS/jack.spec Name: jack Summary: Test Rpm Version: 1.0.0 Release: 1 Group: onitroad License: Not Applicable URL: http://www.onitroad.com SOURCE0: %{name}-%{version}-%{release}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root %description This is a test rpm built by jack %prep %setup -q %build #Empty %install rm -rf %{buildroot} mkdir -p %{buildroot} cp -a * %{buildroot} %clean rm -rf %{buildroot} %files %defattr(-,root,root,-) /test1/file1 /test2/file2 %changelog * Wed Nov 03 2014 jack Prasad - 1.0.0-1 - Created first draft
3. 创建源目录和内容
现在是时候创建我们想要在安装 rpm 后转储的源目录内容了。
由于这是一个测试 rpm,我将其命名为“jack”,并且我将创建一些虚拟目录和文件,这些目录和文件将成为该 rpm 的一部分。
# cd /tmp
下面将是我们的源目录,基本版本号为 1.0.0
# mkdir jack-1.0.0
接下来让我们创建一些虚拟文件和目录
# mkdir -p jack-1.0.0/test1/file1 # mkdir -p jack-1.0.0/test2/file2
4. 使用源内容创建存档文件
使用计划版本和发布的格式创建具有上述内容的存档,例如我的规范文件包含如下
Version: 1.0.0 Release: 1
所以我的档案名称将是 jack-1.0.0-1.tar.gz
# cd /tmp # tar -czvf /tmp/rpmbuild/SOURCES/jack-1.0.0-1.tar.gz jack-1.0.0/*
5. 建立 RPM
现在该构建我们的 rpm 了
注意:如果我们在用户主文件夹以外的其他路径中创建了源目录,则 rpmbuild 可能会失败并显示以下错误
# rpmbuild -ba jack.spec error: File /root/rpmbuild/SOURCES/jack-1.0.0-1.tar.gz: No such file or directory 错误:文件/root/rpmbuild/SOURCES/jack-1.0.0-1.tar.gz:没有那个文件或者目录
按照下面的文章更改 rpmbuild 目录
如何在规范文件(rpmbuild 忽略目录)中更改 rpmbuild (_tmppath) Linux
# rpmbuild -ba /tmp/rpmbuild/SPECS/jack.spec Executing(%prep): /bin/sh -e /tmp/rpmbuild/tmp/rpm-tmp.p63FqV + umask 022 + cd /tmp/rpmbuild/BUILD + cd /tmp/rpmbuild/BUILD + rm -rf jack-1.0.0 + /usr/bin/gzip -dc /tmp/rpmbuild/SOURCES/jack-1.0.0-1.tar.gz + /usr/bin/tar -xf + STATUS=0 + '[' 0 -ne 0 ']' + cd jack-1.0.0 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /tmp/rpmbuild/tmp/rpm-tmp.Oekwnu + umask 022 + cd /tmp/rpmbuild/BUILD + cd jack-1.0.0 + exit 0 Executing(%install): /bin/sh -e /tmp/rpmbuild/tmp/rpm-tmp.My9Zk3 + umask 022 + cd /tmp/rpmbuild/BUILD + '[' /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 '!='/']' + rm -rf /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 ++ dirname /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 + mkdir -p /tmp/rpmbuild/BUILDROOT + mkdir /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 + cd jack-1.0.0 + rm -rf /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 + mkdir -p /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 + cp -a test1 test2 /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 + /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /tmp/rpmbuild/BUILD/jack-1.0.0 /usr/lib/rpm/sepdebugcrcfix: Updated 0 CRC32s, 0 CRC32s did match. + /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-jars Processing files: jack-1.0.0-1.x86_64 Provides: jack = 1.0.0-1 jack(x86-64) = 1.0.0-1 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Processing files: jack-debuginfo-1.0.0-1.x86_64 Provides: jack-debuginfo = 1.0.0-1 jack-debuginfo(x86-64) = 1.0.0-1 Requires(rpmlib): rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 Checking for unpackaged file(s): /usr/lib/rpm/check-files /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 Wrote: /tmp/rpmbuild/SRPMS/jack-1.0.0-1.src.rpm Wrote: /tmp/rpmbuild/RPMS/x86_64/jack-1.0.0-1.x86_64.rpm Wrote: /tmp/rpmbuild/RPMS/x86_64/jack-debuginfo-1.0.0-1.x86_64.rpm Executing(%clean): /bin/sh -e /tmp/rpmbuild/tmp/rpm-tmp.OipO2Y + umask 022 + cd /tmp/rpmbuild/BUILD + cd jack-1.0.0 + rm -rf /tmp/rpmbuild/BUILDROOT/jack-1.0.0-1.x86_64 + exit 0
如果一切顺利,我们的 rpm 将位于
/tmp/rpmbuild/RPMS/x86_64/jack-1.0.0-1.x86_64.rpm
让我们检查一下我们的 rpm 的内容
# rpm -qlp /tmp/rpmbuild/RPMS/x86_64/jack-1.0.0-1.x86_64.rpm /test1/file1 /test2/file2
6. 将密钥签名到 rpm
查看我们的教程:如何在 Linux 中使用 gpg 密钥(密码或者无密码)将密钥签名到 rpm
7.安装并验证rpm
安装rpm的时间
# rpm -ivh /tmp/rpmbuild/RPMS/x86_64/jack-1.0.0-1.x86_64.rpm Preparing... ################################# [100%] Updating/installing... 1:jack-1.0.0-1 ################################# [100%]
下面的命令将再次告诉我们 rpm 的内容
# rpm -ql jack /test1/file1 /test2/file2
下面的命令将查询并提供有关我们的 rpm 的更多信息
# rpm -qpi /tmp/rpmbuild/RPMS/x86_64/jack-1.0.0-1.x86_64.rpm Name : jack Version : 1.0.0 Release : 1 Architecture: x86_64 Install Date: (not installed) Group : onitroad Size : 0 License : Not Applicable Signature : (none) Source RPM : jack-1.0.0-1.src.rpm Build Date : Sat 12 Jan 2015 11:50:43 PM IST Build Host : onitroad-server.example Relocations : (not relocatable) URL : http://www.onitroad.com Summary : Test Rpm Description : This is a test rpm built by jack
在这篇教程中,我们将详细解释了rpm的每个字段。