下面展示了构建RPM包的示例。包的名称是test,版本是1.0,。它将提供一个单独的文件/usr/local/bin/myscript,它只运行date命令。
首先,在RHEL 6工作站desktopY上创建一个名为student的非根用户。您将使用这个帐户安全地构建您的RPM包。
[root@desktopY -]# useradd student
[root@desktopY -]# passwd student
以student身份登录并创建源目录、文件和tarball:
[student@desktopY ~]$ mkdirtest-1.0
[student@desktopY ~]$ cat<< EOF > test-1.0/myscript
#!/bin/bash
date
EOF
[student@desktopY ~]$ tarczvf test-1.0.tar.gz test-1.0
在你的主目录中使用vim创建一个spec文件:
[student@desktopY ~]$ vimtest.spec
Name: test
Version: 1.0
Release: 1%{?dist}
Summary: A test package
Group: Testing
License: GPL
URL: http://www.example.com/testing
Source0: %{name}-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildArch: noarch
BuildRequires: /bin/rm,/bin/mkdir, /bin/cp
Requires: /bin/bash,/bin/date
%description
A testing package meant todeploy a single file.
%prep
%setup -q
%build
#configure
#make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_R00T
#make installDESTDIR=$RPM_BUILD_ROOT
mkdir - p$RPM_BUILD_ROOT/usr/local/bin
cp myscript$RPM_BUILD_ROOT/usr/local/bin
%clean
rm -rf $RPM_BUILD_R00T
%files
%defattr(-,root,root,-)
#%doc
%attr(0755,root,root)/usr/local/bin/myscript
%changelog
- Thu May 04 2021 Forrestforrest@redhat.com 1.0-1
-
Initial RPM
-
Added /usr/local/bin/myscript
%{name}和%{version}宏定义在上面的Name:和Version:行中。另外,您也可以使用test-1.0.tar.gz。
因为RPM只包含一个shell脚本,它可以在所有的架构上工作,所以将BuildArch指定为noarch。
rm、mkdir和cp都来自coreutils包,因此可以指定该包而不是命令。这些是%install一节中使用的命令。
有些宏即使注释了也能运行,%configure就是其中之一。如果你像这样注释%configure,它会提示找不到./configure。完全删除%configure行或从configure中删除%。
添加了% attr,强制允许到0755。注意,% defattr在权限位置有个-。这意味着文件将得到他们在tarball中拥有的相同权限。产生相同结果的替代方法是运行chmod 755test-1.0/myscript并重建tarball。
以root安装rpm-build:
[root@desktopY ]# yum install-y rpm-build
以student用户运行rpmbuild。第一次运行它时,您将得到一个错误。您将很快修复该错误。运行rpmbuild命令将创建构建RPM包所需的目录结构。
[student@desktopY -]$rpmbuild test.spec
error: File/home/student/rpmbuild/SOURCES/test-1.0.tar.gz: No such file or directory
将文件复制到正确的位置:
[student@desktopY ~]$ cptest-1.0.tar.gz rpmbuild/SOURCES/
[student@desktopY ~]$ cptest.spec rpmbuild/SPECS/
[student@desktopY ~]$ cdrpmbuild/SPECS/
Build and sign the package:
[student@desktopY -]$rpmbuild -ba test.spec
[student@desktopY ~]$ rpm–resign ~/rpmbuild/RPMS/x86_64/test-1.0-1.el6.x86_64.rpm
Enter pass phrase: testing123
Pass phrase is good.
在rpmbuild的输出中查找错误,并解决您发现的任何问题。如果没有错误,你应该找到:
Wrote:/home/student/rpmbuild/SRPMS/test-1.0-1.el6.src .rpm
Wrote:/home/student/rpmbuild/RPMS/x86_64/test-1.0-1.el6.x86_64.rpm
通过安装密钥,安装包和运行命令来测试包。
[root@desktopY ~]# rpm–import /home/student/RPM-GPG-KEY-student
[root@desktopY ~]# cd/home/student/rpmbuild/RPMS/x86_64
[root@desktopY ~]# yumlocalinstall test-1.0-1.el6.x86_64.rpm
[student@desktopY ~]$/usr/local/bin/myscript
Thu May 04 10:21:53 EST 2021
警告
您应该始终以non-root用户的身份运行rpmbuild来构建包。不要以root用户构建包。这样做的原因是spec文件中的错误,特别是%install和%clean部分中的错误,如果以root用户的身份运行,更有可能破坏构建机器的安装。