如何制作RPM包

部署服务过程中经常获取代码,安装的需求,一般运维方法有写安装脚本,在将脚本和包远程cp到目标文件。因为有些繁琐的步骤,将需要安装的包,还有脚本打包成RPM包不失为一种高效简单的方法。目标机器只需要加入新的yum源,然后yum install就可以了。

目标机器加入新的yum源方法:

新yum源文件格式:test.repo

[test]

name=test - $basearch

baseurl=yum源的地址

enabled=1

gpgcheck=0

cp test.repo /etc/yum.epo/

下面来讲一下制作RPM包的方法:

首先,机器上需要安装必要的软件

yum install rpm-build

yum install rpmrebuild

yum install rpmdevtools

想要修改rpmbuild的默认路径,修改文件 /root/.rpmmacros

例如:

cat /root/.rpmmacros

%_topdir /data/rpmbuild

将rpmbuild路径修改到 /data/rpmbuild下面了。

运行命令,rpmdev-setuptree  在当前目录下生成rpmbuild 目录,rpmbuild目录就是编译用的目录。生成的目录结构为:

rpmbuild/

├── BUILD

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS

一、生成  test.spec

将需要的步骤编辑   test.spec 文件 放到  rpmbuild/SPECS;

test.spec记录了变成rpm包的步骤,其中,test.spec包含以下几个步骤:

第一部分:变量定义

例如:

%global    test_dir /opt/test

这三个值分别对应: 

%变量属性  变量名  变量值

软件说明,例如Name,Version,Summary 总结

Source0: 需要用到的文件名 

Source关键字指定所有需要用到的文件

%description 描述

%prep 编译前的阶段,可以做一些解压包,创建用户等操作

%build 这个阶段为建立前的阶段, 如make等操作

%install

部署的关键步骤,安装包的阶段,如 make install

%clean

部署完成之后的清理步骤

%files

部署涉及到的文件,说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。

%post

mkdir -p /var/log/supervisord

pip install -r ${RPM_BUILD_ROOT}requirements.txt

如果在安装完成之后,想要在目标机器上执行一系列操作,可以把shell命令放在 %post部分。例如以上,安装完成之后,pip 安装软件包。

%changelog

变更日志

%

写好test.spec是关键一步,里面有很多宏定义和写作规范,在制作的过程中,有自己的语法规则,比如文件 SOURCES 指定编号,后面执行这个文件的用途;

关键字介绍:

install命令,可以将文件copy到指定的目录下,并且指定文件的权限

install -m 640 %{SOURCE0}/agent/supervisord.conf ${RPM_BUILD_ROOT}/etc/

将%{SOURCE0}/agent/supervisord.conf  文件cp到 ${RPM_BUILD_ROOT}/etc/,cp之后的文件权限是640。

%setup

setup 安装之前对代码包操作,操作的对象是Source0,操作完之后,程序进入到目标目录

setup 可以带多个参数, 比如 

%setup -q  相当于对源文件的压缩包执行 tar -xof

%setup -u   对于Source0中带有参数的,可以做参数的替换

Name: cello

Source0: https://example.com/%{name}/release/hello-%{version}.tar.gz

%prep

%setup -n hello

其中 hello 和 cello 名字是不同的,这种情况下需要执行要压缩的文件名。


%setup -a and -b 

Source0: https://example.com/%{name}/release/%{name}-%{version}.tar.gz

Source1: examples.tar.gz

%prep

%setup -a 1

Source1 也是压缩包,在进入到工作目录之后,Source1也需要操作的时候。 -a after

相应的 %setup -b 1 是进入工作目录之前需要压缩的文件,-b before

需要的文件放到 rpmbuild/SOURCES 下面。

关于目录

首先要确定rpm包在目标机器的安装目录是什么?编译目录和安装目录的关系。

BUILDROOT 下面有关项目的目录是在什么时候创建的?

二、命令

spectool -g -R SPECS/test.spec

rpmbuild -bb SPECS/test.spec

可以看出命令执行过程,如果顺利执行完毕,会在 rpmbuild/RPMS 目录下面生成目标rpm包。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容