写点什么

inBuilder 今日分享丨 RPM 包制作入门

  • 2023-06-27
    山东
  • 本文字数:2351 字

    阅读完需:约 8 分钟

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 的软件, 并且执行如下操作步骤来进行安装

  1. 添加软件包

  2. 添加自签名信息, 注意此步骤需要 secadmin 的密码

  3. 刷新软件列表

  4. 点击安装按钮进行安装注意:

  5. 在飞腾 2000+64c 内存 512G 的长城擎天 ZF720 的设备上面. 添加软件包耗时 3min 自签名耗时 5min2、刷新列表耗时 5min 安装软件耗时 20min 左右


最后插个安利:inBuilder 低代码平台开源社区版,免费下载,免费使用,欢迎体验:inBuilder社区

用户头像

还未添加个人签名 2023-03-07 加入

塑造企业一体化研发新范式

评论

发布
暂无评论
inBuilder今日分享丨RPM包制作入门_inBuilder低代码平台_InfoQ写作社区