rpmbuild构建rpm包

简介

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包
    

实践

在我的systemdlogrotate文章里面配置了一个使用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  #卸载软件包

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 前言 题图为RPM包制作原理图,有时候为了方便源码包的安装,和我们自己订制软件包的需求,我们会把一些源码包按照我们...
    王奥OX阅读 2,557评论 0 1
  • 安装rpmbuild 创建 rpm build 目录结构(可选) 在用户根目录生成rpmbuild 相关目录结构(...
    华阳_3bcf阅读 2,794评论 1 0
  • 有些事情我们不知道该怎么办, 但其实我们根本不知道自己在做什么 rpm 是什么? rpm 是一种"包"的格式. 其...
    whyreal阅读 1,980评论 0 0
  • 本文是以 RPM Packaging Guide[https://rpm-packaging-guide.gith...
    marsCatXDU_李经纬阅读 865评论 0 0
  • 1. 首先得确保工程的qmake编译没有问题 2. 其次需要产生可以被rpmbuild读取的源码包: 对于git工...
    耕田者阅读 296评论 0 3