两种姿势教你如何定制RPM包_定制属于自己的rpm包-程序员宅基地

技术标签: 开发  

一、rpmbuild方式定制rpm包

rpmbuid是用于制作rpm格式包的工具。rpm 4.4.x版本之前,rpmbuid工具默认的工作车间为/usr/src/redhat,所以造成普通用户不能制作rpm包。rpm 4.5.x版本开始,将rpmbuid工具默认的工作车间为$HOME/rpmbuild(用户家目录),并且推荐用户尽量不用root账号制作rpm包。

#rpm版本查看方法:

[root@localhost ~]# rpm -qa | grep rpm

perl-srpm-macros-1-8.el7.noarch

rpm-python-4.11.3-35.el7.x86_64

rpm-4.11.3-35.el7.x86_64

rpm-build-libs-4.11.3-35.el7.x86_64

redhat-rpm-config-9.1.0-87.el7.centos.noarch

rpm-build-4.11.3-35.el7.x86_64

rpm-libs-4.11.3-35.el7.x86_64

rpmbuild默认工作车间为/usr/lib/rpm/macros这个文件,具体由%_topdir宏变量进行定义。官方不建议在/usr/lib/rpm/macros目录中更改这个工作路径。如果需要则可以在用户家目录下建立一个.rpmmacros隐藏文件,在里面重新定义%_topdir,指向一个新的目录名。内容一般为:

[gxm@localhost ~]$ cat .rpmmacros

%_topdir $HOME/新目录

在%_topdir目录下一般需要有6个目录(实际操作的时候执行命令自动创建):

备注:执行rpmdev-setuptree命令会在当前用户的家目录下的rpmbuild目录(如果该目录不存在也会被自动创建)里自动建立上述目录。

目录名macros宏名说明

BUILD%_builddir编译rpm包的临时目录

BUILDROOT%_buildrootdir编译后生成的软件临时安装目录

RPMS%_rpmdir最终生成的可安装rpm包的所在目录

SOURCES%_sourcedir所有源代码和补丁文件的存放目录

SPECS%_specdir存放SPEC文件的目录(重要)

SRPMS%_srcrpmdir软件最终的rpm源码格式存放路径(暂时忽略掉,别挂在心上)

当上述目录建立好之后,将所有用于生成rpm包的源代码、shell脚本、配置文件都拷贝到SOURCES目录里,注意通常情况下源码的压缩格式都为*.tar.gz格式。然后将编辑好的SPEC文件,命名为“软件名-版本.spec”,将其拷贝到SPECS目录下。

最后切换SPEC目录下执行命令制作rpm包:

[gxm@localhost ~]$ cd SPEC

[gxm@localhost SPEC]$ rpmbuild -bb 软件名-版本.spec

#打包好的rpm包在RPMS目录下

SPEC文件是最核心的,在它里面定义了头部信息和一些“阶段”(%prep、%build、%install、%clean、%pre、%post、%preun和%postun),当rpmbuild执行时它首先会去解析SPEC文件,然后依次执行每个“阶段”里的指令。

参考:http://blog.chinaunix.net/uid-23069658-id-3944462.html

1、安装相关包和查看默认工作车间

[root@localhost ~]# yum -y install rpm-build rpmdevtools

[root@localhost ~]# rpmbuild --showrc | grep topdir

-14: _builddir %{_topdir}/BUILD

-14: _buildrootdir %{_topdir}/BUILDROOT

-14: _rpmdir %{_topdir}/RPMS

-14: _sourcedir %{_topdir}/SOURCES

-14: _specdir %{_topdir}/SPECS

-14: _srcrpmdir %{_topdir}/SRPMS

-14: _topdir %{getenv:HOME}/rpmbuild

2、新增普通用户

[root@localhost ~]# useradd gxm

[root@localhost ~]# passwd gxm

更改用户 gxm 的密码 。

新的 密码:

无效的密码: 密码未通过字典检查 - 它基于字典单词

重新输入新的 密码:

passwd:所有的身份验证令牌已经成功更新。

[root@localhost ~]# su - gxm

[gxm@localhost ~]$

3、自动生成rpm打包所需目录

[gxm@localhost ~]$ rpmdev-setuptree

[gxm@localhost ~]$ ll

总用量 0

drwxrwxr-x 7 gxm gxm 67 4月 16 11:38 rpmbuild

[gxm@localhost ~]$ cd rpmbuild/

[gxm@localhost rpmbuild]$ ll

总用量 0

drwxrwxr-x 2 gxm gxm 6 4月 16 11:38 BUILD

drwxrwxr-x 2 gxm gxm 6 4月 16 11:38 RPMS

drwxrwxr-x 2 gxm gxm 6 4月 16 11:38 SOURCES

drwxrwxr-x 2 gxm gxm 6 4月 16 11:38 SPECS

drwxrwxr-x 2 gxm gxm 6 4月 16 11:38 SRPMS

4、将源码、配置文件等放入SOURCES目录下

[gxm@localhost rpmbuild]$ cd SOURCES/

[gxm@localhost SOURCES]$ wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX Latest Stable/4.0.4/zabbix-4.0.4.tar.gz

[gxm@localhost SOURCES]$ 上传其它文件

5、创建SPEC模板文件熟悉

[gxm@localhost rpmbuild]$ cd SPECS/

[gxm@localhost SPECS]$ rpmdev-newspec -o zabbix_agent-4.0.4.spec

zabbix_agent-4.0.4.spec created; type minimal, rpm version >= 4.11.

[gxm@localhost SPECS]$ cat zabbix_agent-4.0.4.spec

Name: zabbix_agent-4.0.4

Version:

Release: 1%{?dist}

Summary:

License:

URL:

Source0:

BuildRequires:

Requires:

%description

%prep

%setup -q

#这里要特别注意,如果压缩包和解压出来的文件名不相同,则用%setup -n 解压后目录名

%build

%configure

make %{?_smp_mflags}

%install

rm -rf $RPM_BUILD_ROOT

%make_install

%files

%doc

%changelog

SPEC完整版如下:

%define zabbix_user zabbix

%define zabbix_dir /home/zabbix

Name: zabbix_agent

Version: 4.0.4

Release: 1%{?dist}

Summary: zabbix agent

Group: zabbix

License: GPL

URL: www.zabbix.com

Source0: zabbix-4.0.4.tar.gz

Source1: zabbix_agentd

Source2: discovertcpport.sh

Source3: portlist.txt

Source4: discoveryproc.sh

Source5: proclist.txt

Source6: cmdline-jmxclient-0.10.3.jar

Source7: jvm.py

Source8: tomcat.py

Source9: ca.crt

Source10: client.crt

Source11: client.key

Source12: java

Source13: monitor_port

Source14: monitor_proc

BuildRequires: gcc, gcc-c++, pcre, pcre-devel, openssl, openssl-devel

Requires: gcc, gcc-c++, pcre, pcre-devel, openssl, openssl-devel

%description

Zabbix agentd 4.0.4

%pre

grep %zabbix_user /etc/passwd > /dev/null

if [ $? != 0 ]

then useradd %zabbix_user -M -s /sbin/nologin

fi

[ -d %{zabbix_dir} ]||rm -rf %{zabbix_dir}

%post

mkdir -p %{zabbix_dir}/logs

chown -R %zabbix_user.%zabbix_user %{zabbix_dir}

chmod -R 755 %{zabbix_dir}

sed -i “s/LogFile=/tmp/zabbix_agentd.log/LogFile=%{zabbix_dir}/logs/zabbix_agentd.log/g” %{zabbix_dir}/etc/zabbix_agentd.conf

sed -i “s/ServerActive=127.0.0.1/ServerActive=192.168.7.10/g” %{zabbix_dir}/etc/zabbix_agentd.conf

ipaddr=ip a | grep -w "inet" | egrep "eno16777736|eth0" |sed 's/^.*inet //g'|sed 's/\/[0-9][0-9].*$//g'

sed -i “s/Hostname=Zabbix server/Hostname=$ipaddr/g” %{zabbix_dir}/etc/zabbix_agentd.conf

sed -i “s/Timeout=3/Timeout=30/g” %{zabbix_dir}/etc/zabbix_agentd.conf

echo “UnsafeUserParameters=1” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “EnableRemoteCommands=1” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “Include=%{zabbix_dir}/etc/zabbix_agentd.conf.d/” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “PidFile=%{zabbix_dir}/zabbix_agentd.pid” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “LogFileSize=0” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “StartAgents=0” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “HostMetadataItem=system.uname” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “User=zabbix” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “TLSConnect=cert” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “TLSAccept=cert” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “TLSCAFile=%{zabbix_dir}/zabbix_ssl/ca.crt” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “TLSCertFile=%{zabbix_dir}/zabbix_ssl/client.crt” >>%{zabbix_dir}/etc/zabbix_agentd.conf

echo “TLSKeyFile=%{zabbix_dir}/zabbix_ssl/client.key” >>%{zabbix_dir}/etc/zabbix_agentd.conf

sed -i “s/BASEDIR=/usr/local/BASEDIR=/home/zabbix/g” /etc/rc.d/init.d/zabbix_agentd

systemctl daemon-reload

/etc/init.d/zabbix_agentd start

systemctl enable zabbix_agentd

%preun

systemctl stop zabbix_agentd

%postun

userdel -r zabbix

rm -rf /etc/rc.d/init.d/zabbix_agentd

rm -rf %{zabbix_dir}

%prep

%setup -n zabbix-4.0.4

%build

./configure --prefix=%{zabbix_dir} --enable-agent --with-openssl

make %{?_smp_mflags}

%install

rm -rf %{buildroot}

install -d %{buildroot}/etc/profile.d

make install DESTDIR=%{buildroot}

install -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/zabbix_agentd

install -p -D %{SOURCE2} %{buildroot}%{zabbix_dir}/script/monitor_port/discovertcpport.sh

install -p -D %{SOURCE3} %{buildroot}%{zabbix_dir}/script/monitor_port/portlist.txt

install -p -D %{SOURCE4} %{buildroot}%{zabbix_dir}/script/monitor_proc/discoveryproc.sh

install -p -D %{SOURCE5} %{buildroot}%{zabbix_dir}/script/monitor_proc/proclist.txt

install -p -D %{SOURCE6} %{buildroot}%{zabbix_dir}/script/jvm/cmdline-jmxclient-0.10.3.jar

install -p -D %{SOURCE7} %{buildroot}%{zabbix_dir}/script/jvm/jvm.py

install -p -D %{SOURCE8} %{buildroot}%{zabbix_dir}/script/jvm/tomcat.py

install -p -D %{SOURCE9} %{buildroot}%{zabbix_dir}/zabbix_ssl/ca.crt

install -p -D %{SOURCE10} %{buildroot}%{zabbix_dir}/zabbix_ssl/client.crt

install -p -D %{SOURCE11} %{buildroot}%{zabbix_dir}/zabbix_ssl/client.key

install -p -D %{SOURCE12} %{buildroot}%{zabbix_dir}/etc/zabbix_agentd.conf.d/java

install -p -D %{SOURCE13} %{buildroot}%{zabbix_dir}/etc/zabbix_agentd.conf.d/monitor_port

install -p -D %{SOURCE14} %{buildroot}%{zabbix_dir}/etc/zabbix_agentd.conf.d/monitor_proc

echo ‘export PATH=%{zabbix_dir}/bin:%{zabbix_dir}/sbin:$PATH’ > %{buildroot}/etc/profile.d/%{name}.sh

大连专科男科医院

%files

%defattr (-,root,root,0755)

%{zabbix_dir}

%{zabbix_dir}/*

/etc/profile.d/%{name}.sh

%attr(0755,root,root) /etc/rc.d/init.d/zabbix_agentd

%changelog

%clean

rm -rf %{buildroot}

6、打包编译

[root@localhost ~]# yum install gcc, gcc-c++, pcre, pcre-devel, openssl, openssl-devel -y

[gxm@localhost SPECS]$ rpmbuild -ba zabbix_agent-4.0.4.spec

[gxm@localhost SPECS]$ rpmbuild -bb zabbix_agent-4.0.4.spec

#-ba和-bb二选一

7、下载安装

[gxm@localhost SPECS]$ sz …/RPMS/x86_64/zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm

[root@localhost ~]# yum localinstall zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm -y

[root@localhost ~]# rpm -qpi zabbix_agent-4.0.4-1.el7.centos.x86_64.rpm

Name : zabbix_agent

Version : 4.0.4

Release : 1.el7.centos

Architecture: x86_64

Install Date: (not installed)

Group : zabbix

Size : 813091

License : GPL

Signature : (none)

Source RPM : zabbix_agent-4.0.4-1.el7.centos.src.rpm

Build Date : 2019年04月20日 星期六 22时22分05秒

Build Host : localhost

Relocations : (not relocatable)

URL : www.zabbix.com

Summary : zabbix agent

Description :

Zabbix agentd 4.0.4

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44239023/article/details/89518155

智能推荐

基于Nexys4DDR的数字时钟设计 — 嵌入式_nexysa7 数字时钟-程序员宅基地

文章浏览阅读269次。通过硬件平台和软件平台的配合,我们完成了时钟模块、数字时钟模块和数码管驱动模块的设计,并提供了相应的源代码。通过本设计项目的实践,我们不仅对数字时钟的原理和设计思路有了更深入的理解,还对FPGA开发工具Vivado的使用有了一定的掌握。(3)数码管驱动模块设计:设计一个数码管驱动模块,将数字时钟模块输出的时间信息转换为适合数码管显示的信号,并通过数码管进行显示。(1)时钟模块设计:利用Nexys4DDR开发板上的时钟资源,设计一个稳定的时钟模块,用于提供系统的时钟信号。_nexysa7 数字时钟

目标检测问题中的-loss,val_loss_yolo中什么样的loss是收敛的-程序员宅基地

文章浏览阅读1.6w次,点赞3次,收藏26次。概念最近在用研究keras-yolov3,遇到了loss,val_loss这两个基本的概念,在这捋一捋这两位的到底有啥作用。loss:训练集上loss,就是总的loss;val_loss:测试集中的loss;过拟合(1)loss一直下降,收敛,而val_loss却上升,不收敛,说明过拟合了。loss下降、收敛,说明模型在训练集上,表现良好,但是却在验证集、测试集上没有良好的表现..._yolo中什么样的loss是收敛的

基于YOLOv5的工地安全帽、口罩检测系统_yolo v5效果演示-程序员宅基地

文章浏览阅读779次。基于YOLOv5的工地安全帽、口罩检测系统_yolo v5效果演示

互联网公司数据安全保护新探索_互联网数据安全事件-程序员宅基地

文章浏览阅读6.9k次。背景近年来,数据安全形势越发严峻,各种数据安全事件层出不穷。在当前形势下,互联网公司也基本达成了一个共识:虽然无法完全阻止攻击,但底线是敏感数据不能泄漏。也即是说,服务器可以被挂马,但敏感数据不能被拖走。服务器对于互联网公司来说,是可以接受的损失,但敏感数据泄漏,则会对公司产生重大声誉、经济影响。在互联网公司的数据安全领域,无论是传统理论提出的数据安全生命周期,还是安全厂商提供的解决方案,..._互联网数据安全事件

2021年 第七届 互联网+大赛 报名详细流程 全国大学生互联网+大赛全国大学生创业网 (保姆级指南:如何同意对方邀请)_全国大学生互联网大赛官网入口-程序员宅基地

文章浏览阅读8w次,点赞27次,收藏78次。官网网址:https://cy.ncss.cn/第一步:点击登录入口第二步:登录大创网1、凡是参加过高考的学生都有学信网账号:直接输入账号即可登录2、忘记账号密码的先找回账号密码3、忘记用户名的找回用户名第三步:登录进入后完善个人信息1、点击设置完善个人信息第四步:创建项目1、点击我的项目,然后,点击创建项目点击继续创建2、填写项目信息:根据自己项目实际内容填写(如果是小白可以参考我写的)设置头像项目名称所在地所属领域项目概述根据实际内容填写(如果不知道_全国大学生互联网大赛官网入口

基于树莓派搭建自动驾驶小车;Donkey Car组装硬件DIY_donkeycar 项目-程序员宅基地

文章浏览阅读6.4k次,点赞8次,收藏50次。还是想朝着人工智能方向靠一靠,之前研究图像有关的分类、识别,还是觉得太枯燥了。后来结合自己接触较多的Unity引擎,发现有自动驾驶用Unreal或者Unity之类的游戏引擎进行虚拟训练。接着发现了微软的AirSim,稍微研究了下,记录了一篇博客。然后就想虚拟训练虽好,但是既然是自动驾驶,自己能DIY一个小车那就有趣多了,这样就发现了Donkey Car这个项目。它就是基于树莓派,用Tensorfl..._donkeycar 项目

随便推点

frida.InvalidOperationError: script has been destroyed-程序员宅基地

文章浏览阅读5.4k次。环境$ pip list | findstr fridafrida 15.1.14frida-tools 10.4.1# adb shell# su# cd cd /data/local/tmp/# ./frida-server-15.1.14-android-arm64 --version15.1.14报错C:\Users\xx>objection -g com.xx.xx _frida.invalidoperationerror: script has been destroyed

RK3568平台(环境篇) ubuntu18.04环境搭建_rk3568 平台ubuntu 18.04-程序员宅基地

文章浏览阅读412次。打开Windows 10控制面板,选择“应用“点击右上角“程序与功能”点击“启用或关闭Windows 功能”,勾选“适用于Linux 的Windows 子系统”和“虚 拟机平台”_rk3568 平台ubuntu 18.04

【ELM分类】基于matlab鲸鱼算法优化核极限学习机WOA-KELM数据分类【含Matlab源码 3089期】-程序员宅基地

文章浏览阅读50次。鲸鱼算法优化核极限学习机WOA-KELM数据分类完整代码和数据,数据可直接替换,适合小白!可提供运行操作视频!

Latex中插入罗马数字_latex中\rmnum-程序员宅基地

文章浏览阅读1.4w次,点赞3次,收藏13次。LaTeX不直接支持显示大小写罗马数字, 但是可以通过自定义命理来实现.定义新的命令\rmnum,\Rmnum,用来显示大小写罗马数字用法:\rmnum{数字},\Rmnum{数字}\makeatletter\newcommand{\rmnum}[1]{\romannumeral #1}\newcommand{\Rmnum}[1]{\expandafter\@slowroman_latex中\rmnum

git 跳过ssl验证-程序员宅基地

文章浏览阅读2.9k次。为什么80%的码农都做不了架构师?>>> ..._git ssl跳过

通讯录:C++实现_c++模拟一个裁判给比赛选手打分。-程序员宅基地

文章浏览阅读1.5k次。 //任何转载源代码的请保留出处作者等相关信息//作者:chlaws//运行环境:visual studio 2008//项目:通讯录//描述:可以作为课题设计或毕业论文//说明:这里不给出原创的思路,在阅读过程中有不懂得可以询问//main.cpp#ifndef HEADFILE#define HEADFILE#include #include #_c++模拟一个裁判给比赛选手打分。