inBuilder 今日分享丨 RPM 包制作入门
RPM-概念
RPM(RedHat Package Manager),Rethat 软件包管理工具,类似 windows 里面的 setup.exe,是 Linux 这系列操作系统里面的打包安装工具,它虽然是 RedHat 的标志,但是其原始设计理念是开放式的,包括 OpenLinux、S.u.S.E.以及 Turbo Linux 等 Linux 的发行版本都有采用,可以算是公认的行业标准。目前国产专用机一般都需要提供 rpm 安装包。
RPM 打包及安装流程
1、打包资料准备
GS Cloud 安装盘
不同架构的 OpenJDK 二进制文件
不同架构的 NodeJS 二进制文件
具有管理员权限的 Linux 机器(架构任意,最好是 CentOS7 或者 CentOS8)
安装 rpmbuild 打包工具
编写打包所需要的 spec 配置文件.
(可选)部分编译好的二进制文件,如 redis 和 nginx(不同架构分别存放)
2、安装 rpmbuild
如果机器可以上网, 直接使用 yum install rpm-build -y 即可
如果机器不可以上网,推荐方法为:
将与操作系统相同版本的 CentOS 安装镜像上传到 Linux 服务器上面
mkdir /mnt/repo # 创建 被挂载的路径
mount -o loop CentOSXXX.iso /mnt/repo # 实现挂载 iso
vim /etc/yum.repos.d/local.repo # 添加一个配置文件, 其他的 repo 建议转移目录[local]
name=local
baseurl=file:///mnt/repo
gpgcheck=0
enabled=1
注意 gpgchech 可以关闭, enabled 可以打开
yum makecache 创建一下缓存
yum install rpm-build -y 即可
3、创建文件目录打包目录结构如下:
rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
└── gscloud
├── SPECS
└── gscloud.spec
└── SRPMS
4、SOURCES/gscloud 文件准备
(1)准备 jdk 安装包
jdk 放置目录:server/runtime/java/架构名-系统类型
如果 CPU 架构为:x86_64-linux,可以直接从安装盘中拷贝,拷贝到:/server/runtime/java/x86_64-linux 下的文件
如果 CPU 架构为:aarch64-linux,需要从内网拷贝(一般与安装盘文件同目录),解压到:/server/runtime/java/aarch64-linux
如果为其他架构,需要联系产品经理专门处理。
(2)准备 nodejs 包
nodejs 放置目录:server/runtime/nodejs/架构名-系统类型
如果 CPU 架构为:x86-linux,可以直接从安装盘中拷贝,拷贝到:/server/runtime/nodejs/x86_64-linux 下的文件
如果 CPU 架构为:aarch64-linux,需要从内网拷贝(一般与安装盘文件同目录),解压到:/server/runtime/nodejs/aarch64-linux
如果为其他架构,需要联系产品经理专门处理。
(3)其他文件
除了 jdk、nodejs 外,其他 gscloud 文件有两种方式:
其他全部文件
拷贝安装盘内所有文件到该目录
缺点:打包速度比较慢,大约需要 55 分钟
优点:打包操作简单
该方法需要保证 /root 所在分区至少有 18G 左右的磁盘空间, 避免磁盘空间不足 造成搭建失败的情况;需要保证机器的 io 与 CPU 的性能,避免打包时间过于漫长
其他部分文件(推荐)
只需包含所有.sh 文件,其他的应用程序无需包含
缺点:操作复杂
优点:打包速度快,只需 2 分钟
注意:出现内存溢出的情况建议用这种方法
(4)其他文件整理
操作方式:准备.sh 文件
搜索安装盘中的所有后缀为.sh 的文件,不能漏掉任何一个.sh 文件,然后将.sh 文件按照原有的目录组织好。比如:
/startup.sh
/startup-linux.sh
/tools/collector/.sh
/tools/deploy/data/startup-linux.sh
/tools/deploy/dbo/startup-linux.sh
/tools/deploy/metadata/startup-linux.sh
/tools/deploy/project_java/startup-linux.sh
/tools/emc/.sh/tools/setup/.sh
/tools/update/.sh/bin/*.sh
5、SPECS/gscloud.spec 文件准备
#DEFINES
%define _binaries_in_noarch_packages_terminate_build 0
%global __os_install_post %{nil}
Name: gscloud
Version: 1.0.0
Release: 1%{?dist}
Summary: Rpm package for GSCloud ...
Group: gscloud
License: Copyright © xxx
URL: https://www.xxx.com/
Source0: gscloud/
BuildArch: noarch
Autoreq: no
%description
Rpm package for GSCloud
%installapp_dir=%{buildroot}
/optmkdir -p $app_dir
echo pwd
echo %{SOURCE0}/gscloud/
cp -r %{SOURCE0}/gscloud/ $app_dir/
%files
%defattr(777,root,root)
/opt/gscloud
%dir
/opt/gscloud
%define _binaries_in_noarch_packages_terminate_build 0
这个参数非常关键,如果不添加参数,java 应用会提示需要解压缩而无法执行
Name Version Release Summary Group License URL 描述性信息,用来生成 rpm 的名称以及备注说明等, 可以自定义
Source0
指向 /root/rpmbuild/SOURCES/ 目录下的具体文件信息
BuildArch 指定是否有架构需求
一般 Java 编写的应用可以写 noarch
%install %files
最核心的两个参数:
install 指定安装时要进行什么操作, 比如需要复制某些文件到指定目录
注意,java 应用使用 cp 命令最简单和快速.虽然也可以使用 tar 命令,但是打包时间过长.files 指定文件的属性等操作
%pre、%post、%preun、%postunrpm
安装前、安装后、卸载前、卸载后执行的脚本,可以根据实际情况添加
6、打包
cd /root/rpmbuild/SPECSrpmbuild -bb gscloud.spec
注意 rpmbuild 的程序会从 SOURCES 目录将文件 copy 到 BUILDROOT 目录中去
最终会根据 gscloud 目录下的文件在 /root/rpmbuild/RPMS/noarch 下面形成具体的 rpm 包
安装过程
通过刻录光盘,或者是单导的红色 U 盘,将打包好的 gscloud 的 rpm 包摆渡到专用机中
注意:不要连接互联网, 也不要使用可读写介质的 U 盘进行处理
注意:一定要使用专用机下/root 目录来存放文件,其他目录下工具无执行权限必须使用 GUI 界面 root 用户登录, 然后打开配置管理 3.0 的软件, 并且执行如下操作步骤来进行安装
添加软件包
添加自签名信息, 注意此步骤需要 secadmin 的密码
刷新软件列表
点击安装按钮进行安装注意:
在飞腾 2000+64c 内存 512G 的长城擎天 ZF720 的设备上面. 添加软件包耗时 3min 自签名耗时 5min2、刷新列表耗时 5min 安装软件耗时 20min 左右
最后插个安利:inBuilder 低代码平台开源社区版,免费下载,免费使用,欢迎体验:inBuilder社区
评论