Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解

devtools/2024/11/15 5:31:47/

👨‍🎓博主简介

  🏅CSDN博客专家
  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 前言
  • 一、准备打包环境
  • 二、创建 Python 环境的 SPEC 文件
  • 三、准备 Python 环境
  • 四、构建 RPM 包
  • 五、安装、卸载 RPM 包
    • 5.1 安装rpm
    • 5.2 查找刚刚安装rpm
    • 5.3 卸载刚刚安装的rpm
  • 六、相关文章

前言

  最近因为遇到一个服务器受系统限制,只能上传rpm包才能使用,而我们的服务都是文件,那么怎么将文件都打成rpm包呢???我也是找了好几个,终于找到了一个简单好用的打包方式,下面来给大家讲解一下部署及打包、安装;

本文已docker离线包目录为例子,将其打成rpm包,并在新的服务器上安装;

操作系统为:Centos 7.6

在使用 rpmbuild 将 Python 环境打包成 RPM 包之前,需要确保已经安装 rpmbuild 工具,并配置好相关的 RPM 打包环境。以下是具体的步骤和说明:

一、准备打包环境

首先,确保安装了 rpmbuild,可以通过以下命令安装:

sudo yum install rpm-build -y

在你的主目录下创建 rpmbuild 的目录结构:

mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

二、创建 Python 环境的 SPEC 文件

~/rpmbuild/SPECS 目录中创建一个 .spec 文件,用于定义 RPM 包的相关信息,例如 python-env.spec。以下是一个基本的 spec 文件模板:

Name: python-env
Version: 1.0
Release: 1%{?dist}
Summary: Python Environment PackageLicense: YourLicense
Source0: %{name}-%{version}.tar.gz%description
This package provides a Python environment including dependencies.%prep
# 这里可以解压环境包%build
# 打包需要的构建操作可以在这里定义%install
# 假设你已经将Python环境打包为.tar.gz文件,将其解压到 /opt/python/
mkdir -p %{buildroot}/opt/python/
tar -xzvf %{SOURCE0} -C %{buildroot}/opt/python/%files
/opt/python/*%changelog
* Tue Nov 12 2024 Your Name <youremail@example.com> - 1.0-1
- Initial package for Python environment

以下是这个 RPM SPEC 文件的配置内容的详细解析:


基本配置信息

  • Name: python-env

    • 定义了 RPM 包的名称,这里指定为 python-env
  • Version: 1.0

    • 指定了 RPM 包的版本号。在后续版本更新中,可以根据需要调整这个数字。
  • Release: 1%{?dist}

    • 定义了 RPM 包的发布版本,1 表示初次发布,%{?dist} 会自动添加当前的发布版本分发标记(如 .el7 表示适用于 CentOS 7)。
  • Summary: Python Environment Package

    • 这是一个简短的描述,用于概括 RPM 包的内容。
  • License: YourLicense

    • 指定了软件包的许可证。这里应替换为实际的许可证名称(如 MITGPL 等)。
  • Source0: %{name}-%{version}.tar.gz

    • 定义了源代码文件的名称,通常与 SPEC 文件同名,格式为 Name-Version.tar.gz%{name}%{version} 会分别替换为 python-env1.0,因此实际值为 python-env-1.0.tar.gz

包的详细描述

  • %description
    • 该字段提供了包的详细描述,将会显示在 RPM 的信息中。这里说明此包包含了 Python 环境及其依赖项。

构建和安装过程

  • %prep

    • 这个部分用于准备构建环境,通常会执行一些解压缩或预处理操作。此例中,注释提到可以在此处解压环境包,但没有实际命令。
  • %build

    • 定义了构建过程中需要执行的操作,例如编译代码。但对于不需要编译的包,这部分可以为空。
  • %install

    • 在安装阶段中,指定了将内容安装到目标目录的操作。
    • mkdir -p %{buildroot}/opt/python/:创建目标目录 %{buildroot}/opt/python/,其中 %{buildroot} 是 RPM 临时安装路径。
    • tar -xzvf %{SOURCE0} -C %{buildroot}/opt/python/:将 Source0(即 python-env-1.0.tar.gz)解压到安装路径中,以便包含完整的 Python 环境。

包含的文件

  • %files
    • 指定在安装包中包含哪些文件。
    • /opt/python/*:将 /opt/python/ 中的所有内容添加到最终生成的 RPM 包中。

变更日志

  • %changelog
    • 记录包的变更历史。每条日志包括日期、作者、版本及更新说明。在此例中:
      • 日期是 2024 年 11 月 12 日
      • 作者是 Your Name <youremail@example.com>
      • 更新描述是 “Initial package for Python environment”,表示首次打包。

这个 SPEC 文件的作用是将 Python 环境打包为一个 RPM,安装时会解压到指定目录,并可方便安装在其他系统上。

三、准备 Python 环境

可以使用 virtualenvvenv 来创建 Python 虚拟环境,并安装所需的库,然后将整个环境打包为 .tar.gz 文件,例如:

cd /path/to/python-env
tar -czvf python-env-1.0.tar.gz .
mv python-env-1.0.tar.gz ~/rpmbuild/SOURCES/

四、构建 RPM 包

使用以下命令在 rpmbuild 环境中创建 RPM 包:

rpmbuild -ba ~/rpmbuild/SPECS/python-env.spec

执行后,生成的 RPM 包会保存在 ~/rpmbuild/RPMS/noarch/ 目录中。

noarch是根据你系统生成的,x86的就是x86_64

五、安装、卸载 RPM 包

首先要将打的rpm包上传到服务器上;

rpm_162">5.1 安装rpm

默认安装路径是你写的SPEC文件里的路径【本问是/opt/python】

rpm -ivh python-env-1.0-1.noarch.rpm

rpm_170">5.2 查找刚刚安装rpm

rpm -qa | grep python-env-1.0-1.x86_64

rpm_176">5.3 卸载刚刚安装的rpm

rpm -e python-env-1.0-1.x86_64

六、相关文章

文章标题文章链接
Linux如何将文件或目录打成rpm包? – fpm打包详解https://blog.csdn.net/liu_chen_yang/article/details/134270559
Linux如何将文件或目录打成rpm包?-- rpmbuild打包详解https://blog.csdn.net/liu_chen_yang/article/details/143715019

🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


http://www.ppmy.cn/devtools/133452.html

相关文章

解决部署RKE2或K3S-“docker.io/rancher/mirrored-pause:3.6\“: -无法拉取镜像办法

一、根因 1、默认的仓库在docker你懂的。 二、修改拉取的仓库前缀 1、创建文件 /etc/rancher/k3s/registries.yaml k10-01:~ # cat /etc/rancher/k3s/registries.yaml mirrors:docker.io:endpoint:- "https://m.daocloud.io" *填充上即可。

快速复制两个list

Part1 在 Java 17 中&#xff0c;有几种方法可以快速复制两个列表&#xff08;List&#xff09;。以下是几种常用的方法&#xff1a; 1. 使用 new ArrayList<>(originalList) 这是最常见和最简单的方法&#xff0c;可以创建一个新的 ArrayList 实例&#xff0c;并将原…

SQL,力扣题目1194,锦标赛优胜者

一、力扣链接 LeetCode1194 二、题目描述 Players 玩家表 -------------------- | Column Name | Type | -------------------- | player_id | int | | group_id | int | -------------------- player_id 是此表的主键(具有唯一值的列)。 此表的每一行表示每个玩…

CMake 实战

我现在项目的目录结构如下 project_root/ ├── CMakeLists.txt ├── main.cpp 主函数 ├── third_part/ │ ├── CMakeLists.txt # 总的 third_part CMakeLists.txt │ ├── json/ │ │ ├── CMakeLists.txt # json 的 CMakeLists.txt │ │ └── json.hpp │ ├…

vue的样式知识点

一、样式的定义 1、基本定义&#xff1a;Vue样式通常使用<style>标签在单文件组件中定义。这些样式可以应用于模板中的HTML元素。 2、全局样式&#xff1a;在Vue项目的根组件中引入全局样式文件&#xff0c;全局样式文件中的样式会应用到整个项目中的所有组件。 3、局…

智象未来(HiDream.ai):从科技创新启程,绘制智能未来新篇章

在人工智能领域飞速演进的当下&#xff0c;智象未来&#xff08;HiDream.ai&#xff09;作为全球领先的多模态生成式人工智能技术供应商&#xff0c;正以其独树一帜的视觉多模态大模型及创新应用&#xff0c;推动行业趋势的前进。智象未来&#xff08;HiDream.ai&#xff09;自…

【Linux】进程信号全攻略(一)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 信号的概念 二&#xff1a;&#x1f525; 信号产生的方式 &#x1f98b; 使用键盘&#x1f98b; 系统调用函数&#x1f98b; 软件条件&#x1f98b; 进程异…

渗透利器-kali工具 (第三章-4) sqlmap之sql注入原理利用

从sql注入到sqlmap的使用 一&#xff1a;认识sql注入漏洞 1.什么是sql注入&#xff1a; 攻击者通过构造不同的sql语句来实现对数据库的操作。 2.两个关键条件&#xff1a; 1.参数用户可以控制。 2.程序原本要执行的代码&#xff0c;拼接了用户输入的数据&#xff0c;然后去执行…