
OpenCloudOS 操作系统开源社区是由操作系统、软硬件厂商与个人共同倡议发起的操作系统社区项目,为用户提供自主可控、绿色节能、安全可靠、高性能的下一代云原生操作系统,目前社区理事单位已达 31家,联接生态伙伴达 500+家,OpenCloudOS 操作系统将与众多生态伙伴一起打造面向未来开放中立的操作系统开源生态。
截止目前 OpenCloudOS 操作系统已支持 X86_64、ARM64、RISC-V 架构,完善适配 LoongArch、飞腾、海光、兆芯、鲲鹏等芯片。同时提供支持全栈国密和机密计算,下载量和装机量已达千万节点,另有 600 余家企业产品与 OpenCloudOS 操作系统完成适配。
本节实验将介绍 Linux 系统常用命令,通过学习本节实验能够掌握 Linux 基本操作,为操作 OpenCloudOS 系统奠定基础。Linux 命令可以在不同的 Linux 发行版中运行,本次实验环境的 Linux 发行版是 OpenCloudOS 8.6(下载链接见文末)。
本次实验主要介绍如何在 OpenCloudOS 系统上编译生成并安装 RPM 软件包。
一、RPM 包制作
RPM(Red Hat Package Manager)包是一种用于在 Linux 操作系统上进行软件安装、升级和卸载的标准格式,它是基于 RPM 软件包管理系统的。该软件包管理系统是由 Red Hat 开发的,并被广泛应用于多个 Linux 发行版中,如 Fedora、OpenSUSE、OpenCloudOS、TencentOS Server 等。
RPM 包通常包含一个或多个软件包文件、安装脚本、配置文件和其他必要的元数据。这些元数据包括软件包名称、版本、依赖关系和许可证等信息。通过使用 RPM 包管理器,用户可以轻松地安装、更新和删除软件包,这使得在 Linux 系统上进行软件管理变得更加方便和高效。
RPM 包管理器提供了一些基本的命令,如 rpm、yum 和 dnf 等,用于在 Linux 系统上管理软件包。其中,rpm 命令用于安装、升级和卸载 RPM 包,而 yum 和 dnf 命令则是基于 rpm 命令的高级包管理器,它们可以自动解决依赖关系,从软件仓库中下载和安装软件包等。
二、环境配置
在进行具体的 RPM 包制作之前,我们首先需要配置对应的打包环境,比如工具的安装配置,工作用户的配置以及工作目录的配置等等。
打包工具安装
RPM 包主要通过 rpm-build 这个工具进行安装。rpm-build 是一个用于在 Linux 系统上构建 RPM 包的工具,它提供了一些命令和脚本,可以将源代码和其他必要的文件打包成 RPM 包。该工具通常需要在 RPM 打包环境中使用,可以通过安装 rpm-build 软件包来获取。使用 rpm-build 可以有效地管理和维护 RPM 包,提高开发人员的工作效率和技能水平。
我们通过 dnf 这个命令安装 rpm-build,需要以 root 用户执行以下命令:
dnf install -y rpm-build
因此我们通过 `useradd`创建一个普通用户 `builder01`
adduser builder01
su builder01
cd ~

mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
三、RPM 包编译
touch ~/rpmbuild/SOURCES/hello
编辑脚本
vim home/builder01/rpmbuild/SOURCES/hello
打开后输入一下命令:
#!/bin/bashecho "hello, RPM"
这个脚本执行一个简单的 echo命令,输出 hello, RPM 到标准输出。
创建 SPEC 文件
接下来创建 RPM 的 SPEC 文件,spec 文件是 RPM 软件包的规范文件,用于控制 RPM 的制作过程。它包含了 RPM 软件包的基本信息、依赖关系、安装、卸载、文件列表等信息。在使用 rpm-build 构建 RPM 包时, 需要编写 spec 文件,以告诉 rpm-build 如何构建RPM包。.spec 文件通常由以下几个部分组成:
头部:包含了RPM包的基本信息,如名称、版本、发布号、许可证等。
依赖关系:指定了RPM包所依赖的其他软件包和库文件。
安装、卸载、文件列表:指定了RPM包的安装、卸载和文件列表等信息。
脚本:包含了在安装、卸载、升级RPM包时需要执行的脚本。
编写 spec 文件需要遵循一定的规范和格式,可以使用 rpmdev-newspec 命令生成一个基本的 spec 文件,然后根据需要进行修改。我们这里手动创建一个 spec 文件。
touch ~/rpmbuild/SPECS/demo.spec
编辑 demo.spec
vim home/builder01/rpmbuild/SPECS/demo.spec
# 头部Summary: a simple demo for rpmbuildName: demoVersion: 0.1Release: 1%{?dist}License: Public DomainURL: https://cloud.tencent.com/lab/contribution/29554/Source0: hello# 依赖关系Requires: /bin/bashBuildArch: noarch%descriptionThis package provides a simple shell script, whichecho 'hello rpm' into stdout.# 安装/卸载脚本%prep%build%installrm -rf $RPM_BUILD_ROOTinstall -D -m 755 %{SOURCE0} $RPM_BUILD_ROOT/%{_bindir}/hello# 文件列表%files%{_bindir}/*%changelog* Thu Nov 10 2022 builder01 - 0.1-1- make a simple hello rpm.
生成 RPM 包
完成上述文件配置后,就可以执行在第一步中安装的命令 rpmbuild,即可完成 RPM 包的构建。命令如下:
rpmbuild -bb ~/rpmbuild/SPECS/demo.spec
rpmbuild -bb 是一个用于在 Linux 系统上构建 RPM 包的命令,它会读取.spec 文件和 SOURCES 目录下的文件,将其打包成 RPM 包。其中,-bb 选项表示只构建二进制 RPM 包,不构建源代码 RPM 包。使用 rpmbuild -bb 可以快速、高效地构建 RPM 包。
最后生成的 RPM 包将在 ~/rpmbuild/RPMS/noarch 中,这里通过 ls 查看该目录下文件:
ls ~/rpmbuild/RPMS/noarch
可以看到 demo-0.1-1.oc8.noarch.rpm 文件。
RPM 包内容
这时候 RPM 包已经成功制作出来了,我们可以通过以下命令查看其中的内容:
rpm -qpl ~/rpmbuild/RPMS/noarch/demo-0.1-1.oc8.noarch.rpm
其中,rpm -q -p -l 是一个用于在 Linux 系统上列出 RPM 包中文件列表的命令,其中 -q 选项表示查询 RPM 包,-p 选项表示查询未安装的 RPM 包,-l 选项表示列出 RPM 包中的文件列表。
此命令输出如下:
/usr/bin/hello
这表示,当这个 rpm 包被安装到系统后,hello 命令会被安装到 /usr/bin 下。 同时,我们还可以通过以下命令查看 rpm 包的包头信息:
rpm -q -p -i ~/rpmbuild/RPMS/noarch/demo-0.1-1.oc8.noarch.rpm
其中 -i 选项表示查询 RPM 包的包头信息。 此命令输出如下:
Name : demoVersion : 0.1Release : 1.oc8Architecture: noarchInstall Date: (not installed)Group : UnspecifiedSize : 32License : Public DomainSignature : (none)Source RPM : demo-0.1-1.oc8.src.rpmBuild Date : Tue 09 May 2023 06:46:55 AM EDTBuild Host : localhostRelocations : (not relocatable)URL : https://cloud.tencent.com/lab/contribution/29554/Summary : a simple demo for rpmbuildDescription :This package provides a simple shell script, whichecho 'hello rpm' into stdout.
这个信息就是在前面 demo.spec 文件中所指定的内容。
四、RPM 包安装验证
exit
rpm -ivh /home/builder01/rpmbuild/RPMS/noarch/demo-0.1-1.oc8.noarch.rpm
rpm -ivh 是一个用于在 Linux 系统上安装 RPM 包的命令,其中 -i 选项表示安装 RPM 包,-v 选项表示显示详细信息,-h 选项表示显示进度条。使用 rpm -ivh 可以快速、高效地安装 RPM 包,同时可以查看安装过程和进度。
安装完成后,可以看到 /usr/bin 下存在一个 hello 的可执行文件:
ls /usr/bin | grep hello
执行安装在系统中的 hello 命令:
hello
执行完成后显示:
hello, RPM
至此,我们在 OpenCloudOS 上简单的完成了 RPM 的制作。
相关链接:
腾讯云实践课程:https://cloud.tencent.com/lab/courseDetail/1832534624698873OpenCloudOS 8.6 下载链接:https://www.opencloudos.org/iso[why-is-it-bad-to-build-rpms-as-root](https://serverfault.com/questions/10027/why-is-it-bad-to-build-rpms-as-root))RPM 相关学习资料:https://rpm.org/index.htmlhttps://ftp.osuosl.org/pub/rpm/max-rpm/
如果在制作 RPM 包的过程中,或者使用 OpenCloudOS 中遇到技术问题,可扫描下方二维码,加入社区交流群,获取技术支持,交流使用体验。





