简介
rpmbuild是用来打包rpm包的工具
构建流程
- 安装工具
#配置好yum源,使用系统安装镜像就行 yum install -y rpmdevtools
- 创建目录
rpmdev-setuptree #创建目录~/rpmbuild和文件~/.rpmmacro tree ~/rpmbuild #查看rpmbuild下面的文件结构
目录 用途 BUILD 构建过程使用的目录 RPMS 存放构建好的rpm包 SOURCES 存放用来构建的脚本和源代码 SPECS 存放xxx.spec文件 SRPMS 存放构建好的xxx.src.rpm文件,xxx.src.rpm包含 SOURCES和SPECS下的文件,可以使用这些文件自己构建 - spec
rpmbuild是根据一个配置文件构建rpm包的,配置文件一般放在~/rpmbuild/SPECS下面,后缀一般是.spec,这个文件的作用有点像make的配置文件Makefile,下面是一个简单的hello.spec文件示范。#配置文件示范,rpmdev-newspec xxx.spec可以生成简单的spec #hello.spec Name: hello Version: 1 Release: 1%{?dist} #%{?dist}是宏,rpm --eavl %{?dist} 可以查看宏的值 Summary: dsq test License: FIXME %description dsq test %prep #do nothing echo prep--------------------------- %build echo build------------------------- cat >helloworld.sh <<EOF #!/usr/bin/bash echo hello world EOF %install mkdir -p %{buildroot}/usr/bin install -m 7555 helloworld.sh %{buildroot}/usr/bin/helloworld.sh %files /usr/bin/helloworld.sh #changelog格式 :第一行*开头记录日期,第二行以后都是-开头 %changelog * Mon Jan 30 2023 dsq -
- 构建阶段
spec文件里面除了基础的描述信息Name,Version等,然后就是各个构建阶段要执行的命令配置。阶段 任务 %prep 准备阶段
rpmbuild -bp hello.spec会执行这个阶段的指令%build 构建阶段,~/rpmbuild/BUILD是默认工作路径;
rpmbuild -bc hello.spec,在~/rpmbuild/BUILD下面生成helloworld.sh%install 安装阶段
rpmbuild -bi hellp.spec,执行这个命令会将helloworld.sh拷贝到 ~/rpmbuild/BUILDROOT/usr/bin/;而且这里的配置会导致最后安装rpm包的时候,helloworld.sh被安装到/usr/bin;所以配置文件中的%{buildroot}在构建阶段代表 ~/rpmbuild/BUILDROOT,在rpm包安装阶段代表系统的根目录%files rpm包安装的文件列表 rpmbuild -bp hello.spec #执行每个构建命令之后使用tree ~/rpmbuild查看生成的文件 rpmbuild -bc hello.spec rpmbuild -bi hello.spec rpmbuild -bl hello.spec #校验%files rpmbuild -bb hello.spec #创建二进制包 rpmbuild -bs hello.spec #创建src包
实践
在我的systemd和logrotate文章里面配置了一个使用vmstat记录系统性能的服务,这里我将文件打包到一个rpm包里面,方便安装到其他系统。
#mvstat.spec
Name: mvmstat
Version: 1
Release: 1
Summary: use vmstat to record system performance
BuildArch: noarch
License: GPL
Requires: systemd>=239-58 procps-ng logrotate
Source0: %{name}-%{version}.tar.gz
%description
use vmstat to record system performance
wirte by dsq on 2023.2.1
%prep
echo prep-------------------------
#setpup -q是将Source0指定的压缩包解压到BUILD目录
%setup -q
%build
echo build-------------------------
%install
mkdir -p %{buildroot}/usr/lib/systemd/system/
mkdir -p %{buildroot}/etc/logrotate.d
mkdir -p %{buildroot}/home/monitor
install -m 0644 mvmstat.service %{buildroot}/usr/lib/systemd/system/mvmstat.service
install -m 0644 vmstat %{buildroot}/etc/logrotate.d/vmstat
#安装软件包前检查是否已经安装过了
$pre
if [ $1 -gt 1 ] ; then
echo "do nothing; mvmstat was installed before, please check!"
fi
#安装软件包之后执行下列命令
%post
systemctl stop mvmstat.service
systemctl enable mvmstat.service
systemctl start mvmstat.service
systemctl enable mvmstat.service
#卸载软件包之前执行下列命令
%preun
systemctl stop mvmstat.service
systemctl disable mvmstat.service
#安装软件包会安装的文件和目录
%files
/usr/lib/systemd/system/mvmstat.service
/etc/logrotate.d/vmstat
/home/monitor/
%changelog
* Mon Jan 30 2023 dsq
-
rpmbuild -bb mvmstat.spec
#在~/rpmbuild/RPMS/noarch下面生成mvmstat-1-1.noarch.rpm包
rpm -qip mvmstat-1-1.noarch.rpm #查看rpm包信息
rpm -ivh mvmstat-1-1.noarch.rpm #安装rpm包
rpm -ql mvmstat #查看rpm包安装了哪些文件
systemctl statu mvmstat #查看安装的服务状态
rpm -e mvmstat #卸载软件包