Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CentOS6下rpm打包实战

CentOS6下rpm打包实战

作者头像
jeremyxu
发布于 2018-05-10 11:09:18
发布于 2018-05-10 11:09:18
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

最近的工作需要将以前编译安装的软件包打包成rpm包,这里将打包过程记录一下以备忘。

准备rpm打包环境

我这里用的操作系统是CentOS6.7,redhat系的其它发行版应该也类似。

安装rpm-build

1

sudo yum install -y gcc make rpm-build redhat-rpm-config vim lrzsz

创建必须的文件夹和文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

制作spec文件

找spec模板文件

一般找一个类似的rpm源码包,将其安装,然后参照它写自己软件包的spec文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir ~/rpms
wget -O ~/rpms/python-2.6.6-64.el6.src.rpm http://vault.centos.org/6.7/os/Source/SPackages/python-2.6.6-64.el6.src.rpm
rpm -ivh ~/rpms/python-2.6.6-64.el6.src.rpm
vim ~/rpmbuild/SPECS/python.spec # 参照这个文件来写自己软件包的spec文件

写自己软件包的spec文件

spec文件中各个选项的意义参照这里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd ~/rpmbuild
cat ./SPECS/python27-tstack.spec

%debug_package %{nil}
%define install_dir /usr/local/python27

Name:		python27-tstack
Version:	2.7.10
Release:	1%{?dist}
Summary:	python27 modified by tstack
URL: 		http://www.python.org/
Group:		Development/Languages
License:	Python
Provides:   python-abi = 2.7
Provides:   python(abi) = 2.7
Source0:	Python-2.7.10.tgz
BuildRequires:  readline-devel, openssl-devel, gmp-devel, pcre-devel, mysql-devel, libffi-devel
Requires:	readline, openssl, gmp, pcre, mysql, libffi
Autoreq: 	0

%description
Python is an interpreted, interactive, object-oriented programming
language often compared to Tcl, Perl, Scheme or Java. Python includes
modules, classes, exceptions, very high level dynamic data types and
dynamic typing. Python supports interfaces to many system calls and
libraries, as well as to various windowing systems (X11, Motif, Tk,
Mac and MFC).

Programmers can write new built-in modules for Python in C or C++.
Python can be used as an extension language for applications that need
a programmable interface.

Note that documentation for Python is provided in the python-docs
package.

%prep
%setup -q -n Python-%{version}


%build
./configure --prefix=%{install_dir} --with-cxx-main=/usr/bin/g++
make %{?_smp_mflags}

%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

%clean 
rm -rf %{buildroot}

%files
%defattr (-,root,root)
%{install_dir}/bin/
%{install_dir}/include/
%{install_dir}/lib/
%{install_dir}/share/
%doc

%changelog

制作rpm包

上传必要的source文件

1

cp ${some_where}/Python-2.7.10.tgz ~/rpmbuild/SOURCES/

开始制作

cd ~/rpmbuild

rpmbuild -bb --target x86_64 SPECS/python27-tstack.spec &> rpmbuild.log # 这时可以打开另一个终端观察下rpmbuild.log

一切顺序的话,最终会在~/rpmbuild/RPMS/x86_64/目录下找到编译好的rpm包。

技巧总结

  • 不打debug的rpm包 在spec文件中加入%debug_package %{nil}即可
  • 禁止自动分析源码添加不应该加入的依赖 在spec文件中加入Autoreq: 0即可
  • sepc文件中一些宏的用法 在spec文件中经常出现一些宏,比如%setup%patch,这两个宏的选项较多,使用时要特别注意,参见这里
  • 安装卸载rpm包前后的动作 可以通过%pre, %post, %preun, %postun指定rpm包在安装卸载前后的动作,比如在安装前用脚本做一些准备、在安装后用脚本做一些初始化动作、在卸载前用脚本做一些准备、在卸载后用脚本做一些清理动作
  • rpmbuild命令的选项 rpmbuild命令有不少选项,参见这里,个人用得比较多的有:
    1. -bp 只解压源码及应用补丁
    2. -bc 只进行编译
    3. -bi 只进行安装到%{buildroot}
    4. -bb 只生成二进制rpm包
    5. -bs 只生成源码rpm包
    6. -ba 生成二进制rpm包和源码rpm包
    7. --target 指定生成rpm包的平台,默认会生成i686x86_64的rpm包,但一般我只需要x86_64的rpm包

参考

  1. http://vault.centos.org/6.7/os/Source/SPackages/
  2. http://tkdchen.github.io/blog/2013/05/19/rpm-spec-for-python-gist.html
  3. http://www.dahouduan.com/2015/06/15/linux-centos-make-rpm/
  4. http://www.centoscn.com/CentOS/Intermediate/2014/0419/2826.html
  5. http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment
  6. http://ftp.rpm.org/max-rpm/rpmbuild.8.html
  7. http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何无网络下免编译的安装程序(RPM包)
摘要:rpm包是预先在Linux主机上编译好并打包的文件,安装起来非常快捷。不需要再进行繁琐的编译等操作,拿来就能用,区别于yum包管理,rpm可以在不需要网络环境的情况下使用。学习完大神的文章还是有一些细节不太清楚,下面我就再对编译RPM包的过程和详细知识点再梳理扩展一下留作备忘。
机智的程序员小熊
2019/04/22
2.3K0
如何无网络下免编译的安装程序(RPM包)
如何制作nginx的RPM包?
安装rpm-build软件并配置SPEC文件 1)安装rpm-build软件包 # yum -y install rpm-build 2)生成rpmbuild目录结构 # rpmbuild -ba nginx.spec # ls /root/rpmbuild BUILD BUILDROOT RPMS SOURCES SPECS SRPMS 3)将源码软件复制到SOURCES目录 # cp nginx-1.8.0.tar.gz /root/rpmbuild/SOURCES/ 4)创建并修改S
吴柯
2018/04/16
1.9K0
如何制作nginx的RPM包?
三分钟手操rpm包
每每开发完一个程序,对于开发人员来说commit完代码就万事大吉了,实施和运维就只能骂一句仆街,然后硬着头皮去部署。
机智的程序员小熊
2019/12/12
7110
三分钟手操rpm包
RPM打包原理、示例、详解及备查
RPM(Redhat Package Manager)是用于Redhat、CentOS、Fedora等Linux 分发版(distribution)的常见的软件包管理器。因为它允许分发已编译的软件,所以用户只用一个命令就可以安装软件。看到这篇文章的朋友想必已经知道RPM是个啥,rpm/yum命令怎么用,废话不多说,直接进入正题,来看看RPM包咋打。
菲宇
2019/06/12
11.6K0
Linux运维之教你如何定制RPM包
rpmbuid是用于制作rpm格式包的工具。rpm 4.4.x版本之前,rpmbuid工具默认的工作车间为/usr/src/redhat,所以造成普通用户不能制作rpm包。rpm 4.5.x版本开始,将rpmbuid工具默认的工作车间为$HOME/rpmbuild(用户家目录),并且推荐用户尽量不用root账号制作rpm包。
王先森sec
2023/04/24
2.5K0
在CentOS环境下编译GreatSQL RPM包
戳此链接 https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-25,找到 greatsql-8.0.32-25.tar.xz 下载GreatSQL源码包,放在上面创建的 /root/rpmbuild/SOURCES 目录下,并解压缩。
老叶茶馆
2024/01/01
2670
在CentOS环境下编译GreatSQL RPM包
CentOS 6.5 获取内核源码
http://vault.centos.org/6.5/os/Source/SPackages/kernel-2.6.32-431.el6.src.rpm
TSINGEYE清眸物联
2023/01/04
9520
rpm 快速入门与基础
RPM全称是 Red Hat Package Manager(Red Hat包管理器-红帽创建的一个开放的软件包管理系统)。几乎所有的 Linux 发行版本都使用这种形式的软件包管理安装、更新和卸载软件,现在已成为一种标准,常用在opensuse/turbo/redhat版本,
全栈工程师修炼指南
2022/09/28
1.7K0
rpm 快速入门与基础
在CentOS环境下编译GreatSQL RPM包
此链接 https://gitee.com/GreatSQL/GreatSQL/releases/tag/GreatSQL-8.0.32-25,找到 greatsql-8.0.32-25.tar.xz 下载GreatSQL源码包,放在上面创建的 /root/rpmbuild/SOURCES 目录下,并解压缩。
GreatSQL社区
2024/01/10
2180
在CentOS环境下编译GreatSQL RPM包
Centos6利用rpm-build编译Nginx rpm包
如果需要利用service来控制Nginx,SOURCES路径中还需要准备一个nginx启动程序:
子润先生
2021/06/13
8200
RPM包制作之Spec文件参数详解
看这篇文章的人基本都有一个想法,就是:“劳资不想用YUM的安装!不是版本太低就是文件分布太野路子”,此时我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,其中的Spec文件是制作RPM包的核心。
用户8710806
2021/06/11
3.4K0
将源码打包为RPM软件包
1.将源码包打包成RPM包 RPM包构成: -metadata元数据:版本,软件名称,依赖关系,发布日期 -file 文件:RPM所需所有文件的打包文件 scripts脚本:安装后,卸载后需要运行的脚本 软件打包流程:准备源码软件-安装rpm-build-编写编译配置文件-编译RPM包
陪你听风
2021/03/31
1.3K0
工具|学习RPM打包
不同公司有不同的规范来约束各种linux系统软件安装的路径以及相关配套设施。因此我们可以基于各自的 规范 使用rpm 将各种软件的二进制文件打包来满足各自的定制化需求。本文通过 安装vmtouch软件包,来介绍RPM的相关知识。
用户1278550
2019/11/12
1.8K0
rpm-build方式制作rpm包
可以将编译完成的服务打成rpm包放到私有仓库了,用于自定义的各种软件进行安装部署配置。
陈不成i
2021/05/30
6.3K0
RPM打包,安装到指定目录
0、安装rpmbuild工具包 yum -y install rpm-build rpm-devel rpmdevtools mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 1、创建原始文件 mkdir /root/rpmbuild/SOURCES/eee-1.0 2、创建需要打包的文件 3、在SOURCES目录下打包文件 tar cvf eee-1.0.tar.gz eee-1.0 4、构建RPM中的spec配置文件 Name:
Tacc
2022/01/11
2.6K0
RPM打包,安装到指定目录
openssl源码打包编译成rpm包
环境# iSoftserver-v4.2(Centos-7) openssl version:1.0.2k 编译# 从github上看到的编译脚本,本地修改后: #!/bin/bash set -e set -v mkdir ~/openssl && cd ~/openssl yum -y install \ curl \ which \ make \ gcc \ perl \ perl-WWW-Curl \ rpm-build # Get open
Amadeus
2022/10/25
1.8K0
openssl源码打包编译成rpm包
简单介绍RPM包制作方法
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。使用rpm安装软件和管理软件非常的方便。而这节我们不是介绍如何使用rpm安装或管理软件,而是如何把源码制作成rpm包。 下面我们以制作nginx的rpm开始介绍其制作方法。以下操作在centos-7进行。 制作nginx的rpm例子 建立目录结构 /usr/src/redhat/SOURCES — 存放源代码,补丁
程序员同行者
2018/07/02
1.4K0
实用入门分享:如何基于 OpenCloudOS 制作 RPM 软件包?
OpenCloudOS 操作系统开源社区是由操作系统、软硬件厂商与个人共同倡议发起的操作系统社区项目,为用户提供自主可控、绿色节能、安全可靠、高性能的下一代云原生操作系统,目前社区理事单位已达 31家,联接生态伙伴达 500+家,OpenCloudOS 操作系统将与众多生态伙伴一起打造面向未来开放中立的操作系统开源生态。
腾源会
2023/11/15
4340
CentOS7下制作openssl1.1.1i RPM包并升级
OpenSSL官方发布了拒绝服务漏洞风险通告,漏洞编号为CVE-2020-1971
yuanfan2012
2020/12/31
5.7K0
CentOS7下制作openssl1.1.1i RPM包并升级
实战演练:MySQL RPM包定制化制作全过程
墨墨导读:本文详细介绍一键式安装部署,定制化制作MySQL RPM包的过程,希望可以帮助到读者朋友 。
数据和云
2020/06/17
1.8K0
相关推荐
如何无网络下免编译的安装程序(RPM包)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验