最近做一个需求:把某个目录打包成rpm。就像tar包打包一样,不过要求是rpm包。
环境
- openEuler-21.09
- rpmbuild
安装软件
yum install rpm-build rpmdevtools -y
执行以下命令,生成rpm构建目录
rpmdev-setuptree
生成的目录结构如下
目录说明:
- BUILD:源代码解压以后放的位置,只需提供BUILD目录,具体里面放什么,不用我们管,所以真正的制作车间是BUILD目录。
- BUILDROOT:假根,使用install临时安装到这个目录,把这个目录当作根来用的,所以在这个目录下的目录文件,才是真正的目录文件。当打包完成后,在清理阶段,这个目录将被删除。
- RPMS:制作完成后的rpm包存放目录,为特定平台指定子目录(i386,i686,ppc)。
- SOURCES:收集的源文件,源材料,补丁文件等存放位置。
- SPECS:存放spec文件,作为制作rpm包的领岗文件,文件以.spec结尾。
- SRPMS:src格式的rpm包位置 ,既然是src格式的包,就没有平台的概念了
将要打包的目录放在 SOURCES目录下
例如:我这里创建了test目录,并在该目录下创建a.txt文件,文件内容为openEuler
在SPECS目录下创建spec文件
vi test.spec
内容如下,spec书写的规则查看最后的链接吧,比较复杂。
Name:test
Version:1.0
Release:0%{?dist}
Summary: test
Group:test
License:GPL
AutoReqProv: no
BuildRoot:%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%description -l zh_CN
"the tools for test"
%prep
echo "Nothong to do"
%install
cd %{_sourcedir}
cp -ar * %{buildroot}/
%files
/test
%postun
rm -rf /test
rpmbuild进行打包
rpmbuild -bb test.spec
执行成功后,在RPMS目录下有制作好的rpm包
查看rpm里的内容
rpm -qpl test-1.0-0.x86_64.rpm
解压rpm包
rpm2cpio test-1.0-0.x86_64.rpm | cpio -div
参考: