速成制作rpm包
本节内容:
- FPM介绍
- 安装FPM
- 打包示例
- 卸载安装后的rpm包
一、FPM介绍
由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包。
通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐。这就用到了FPM。
FPM功能简单说就是将一种类型的包转换成另一种类型。FPM是Ruby模块,其实打包时也是调用rpmbuild命令。
支持的源类型包:
- dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包
- rpm 对rpm进行转换
- gem 对rubygem包进行转换
- python 将python模块打包成相应的类型
支持的目标类型包:
- rpm 转换成rpm包
- deb 转换成deb包
- solaris 转换成solaris包
- puppet 转换成puppet模块
二、安装FPM
1. 安装依赖包
# yum -y install ruby rubygems ruby-devel gcc make
2. 添加仓库
# gem sources -a http://mirrors.aliyun.com/rubygems/
3. 移除原有的仓库
# gem sources --remove https://rubygems.org/
# gem sources --remove http://rubygems.org/
4. 查看仓库是不是只有自己添加的那个仓库地址
# gem sources -l
http://mirrors.aliyun.com/rubygems/
5. 安装fpm
# gem install fpm
如果遇到报错:
Building native extensions. This could take a while...
ERROR: Error installing fpm:
ffi requires Ruby version >= 1.9.
原因:安装fpm需要依赖包ruby的版本在1.9以上,那么升级ruby就可以了。
解决:
1. 使用rvm安装,首先需要安装rvm
先查看你是否安装过rvm, 执行命令
rvm -v 2.yum -y update nss
curl -L get.rvm.io | bash -s stable
执行成功后,根据尾部的提示执行:source /etc/profile.d/rvm.sh (路径以尾部提示为准) 3. 查看是否安装成功, 输入:rvm -v 4. 列表显示都可以安装ruby的哪些版本
rvm list known 5. 更新ruby至版本2.3.0
rvm install 2.3.0
6. 如何查看fpm帮助
# fpm --help
常用参数:
-s 指定源类型
-t 指定目标类型
-n 指定包的名字
-v 指定包的版本号
-C 指定打包的相对路径 change directory to here before searching for files
-d 指定依赖于哪些包
-f 第二次打包时目录下如果有同名安装包存在,则覆盖它
-p 输出的安装包的目录,不想放在当前目录下就需要指定
--post-install 软件包安装完成之后所要运行的脚本,同--after-install
--pre-install 软件包安装完成之前所要运行的脚本,同--before-install
--post-uninstall 软件包卸载之后所要运行的脚本,同--after-install
--pre-uninstall 软件包卸载之前所要运行的脚本,同--before-install
三、打包示例
1. 打包MySQL
事先安装好MySQL,MySQL安装过程这里不在详述。命令行终端输入以下命令,然后等待rpm包制作完成。
# fpm -s dir -t rpm -n mysql -v 5.6.27 --description 'author: jkzhao' -d 'libaio' -d 'libaio-devel' --pre-install /usr/local/mysql/mysql_pre_init.sh --post-install /usr/local/mysql/mysql_post_init.sh /usr/local/mysql /usr/local/mysql-5.6.27-linux-glibc2.5-x86_64 /data
【注意】:默认打好的包是在当前目录下。
命令说明:
-s dir:指定源文件是目录的形式
-t rpm:指定打包的格式
-n:指定打包后名称
-v:版本号
--description:描述信息
-d:指定需要依赖的包。安装MySQL前需要在系统上安装libaio、libaio-devel。当你安装fpm打包成的rpm包时,它会先去检测系统上是否安装了这两个包,如果没有安装会给出提示,并终止rpm的安装。
--pre-install:安装rpm包前需要执行的脚本
--post-install:安装rpm包后需要执行的脚本
- mysql_pre_init.sh的内容如下:
#!/bin/bash user=mysql
group=mysql # create group if not exists.
egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ]
then
groupadd -r -g 300 $group
fi # create user if not exists.
egrep "^$user" /etc/passwd >& /dev/null
if [ $? -ne 0 ]
then
useradd -g $group -r -s /sbin/nologin -u 300 $user
fi
- mysql_post_init.sh的内容如下:
#!/bin/bash # cp my.cnf force.
\cp /usr/local/mysql/my.cnf /etc/ # start/stop/restart script.
\cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld # MySQL Client PATH.
\cp /usr/local/mysql/mysql.sh /etc/profile.d/ cd /usr/local/mysql
chown -R root.mysql .
chown -R mysql.mysql /data
打包完成后正常安装,如:
# rpm -ivh mysql-5.6.27-1.x86_64.rpm
2. 打包openresty
事先安装好openresty。命令行终端输入以下命令,然后等待rpm包制作完成。
# fpm -s dir -t rpm -n openresty -v 1.9.7.3 --description 'author: jkzhao' -d 'openssl-devel' -d 'readline-devel' -d 'pcre-devel' -d 'gcc' --post-install /usr/local/openresty/openresty_init.sh /usr/local/openresty
如果报如下错误:
Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}
解决:
# yum install -y rpm-build
- openresty_init.sh的内容如下:
#!/bin/bash mv /usr/local/openresty/nginx.service /etc/systemd/system/
systemctl enable nginx.service
四、卸载安装后的rpm包
如果重新安装rpm,必须先卸载rpm包,然后删除相应的目录及文件,否则再次安装时会报错。
【注意】:卸载不要先直接删除目录和文件,否则你再次安装这个包时会说已安装,冲突了。
# rpm -e --nodeps mysql-5.6.27-1.x86_64.rpm
然后再去删除各个目录和配置文件。
速成制作rpm包的更多相关文章
- 制作rpm包步骤
由于项目需要,需要自行制作rpm包.比较全面的可以参考如下链接: http://blog.chinaunix.net/uid-23069658-id-3944462.html 大致框架如下: 1,安装 ...
- 烂泥:Linux源码包制作RPM包之Apache
本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司服务器比较多,需要把apache源码包制作成rpm包,然后放到公司内网yum源上进行下载安装.apache的rpm包安装方式比源码安装方式比较快,这能 ...
- 手动制作rpm包
制作RPM包的过程,简单的说,就是为制作过程提供一个“工作车间”,即一个目录,里面需要包含以下几个子目录: BUILD ————编译相关源码包时的工作目录: RPMS — ...
- 利用fpm制作rpm包
使用fpm制作rpm包 安装如下 [root@web01 ~]# yum install -y gcc zlib zlib-devel wget http://ruby.taobao.org/mirr ...
- fpm制作rpm包
一.前言 在企业中我们有事安装软件包.部分都是源码安装,如nginx安装路径都已经固化了,但实际业务中,我们都是把软件包安装到固定目录下,不满足需要,这是其一.其二,编译安装很耗时,比如mysql,特 ...
- fpm 制作rpm包
使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...
- linux制作RPM包
制作rpm包 1.制作流程1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制 ...
- 制作RPM包
RPM包制作过程 1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制作的对象 ...
- 一步步制作RPM包
一步步制作RPM包 来源 http://blog.51cto.com/laoguang/1103628 一.RPM制作步骤 我们在企业中有的软件基本都是编译的,我们每次安装都得编译,那怎么办呢?那就根 ...
随机推荐
- MDX 用Ancestors得到Hierarchy中指定Level的值(附带SCOPE用法之一)
需求:用户想要用Excel,对比每月预算和整年预算,需要在两个用户定义的Hierarchy都可以浏览.财年季月日(FYQMD)和财年月日(FYMD). 自定义hierarchy 属性关系(Attrib ...
- 【2017-03-10】Tsql语句基础、条件,高级查询
一.语句基础 1.创建数据库:create database 数据库名(不能汉字,不能数字.符号开头) 2.删除数据库:drop database 数据库名 3.选用数据库:use 数据库名 4.创建 ...
- Python 3 集合基础和概念!
Python 3 集合基础和概念! Python 3中,集合是无序的,所以不能进行切片和索引操作. 创建集合有两个方法:set()方法创建的集合是可变的,可被迭代的:frozenset()方法创建的集 ...
- 九度OJ题目1076:N的阶乘 (java)运用BigInteger的例子。
题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 样例输入: 4 5 15 样例输出: ...
- macaca环境搭建(web 和 android)
一.安装配置JDK 1.1下载JDK地址http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...
- Win10下 VS2017 安装失败 未能安装包“Microsoft.VisualStudio.AspNet45.Feature,version=15.0.26208.0”
事情的起因是这样的,前段时间,VS2017发布当天,想在自己的Win10上安装VS2017,然而,由于自己的系统很久没有更新(PS:自己关闭了Windows更新). 安装提示:未能安装包“Micros ...
- (转)centos6.5安装VNC
在Linux下用VNC远程桌面是个很不错的玩意.但在CentOS中默认没有安装VNC的.可以用下面语句查询,如果出现下面情况说明没有安装vnc #rpm -q tigervnc tigervnc-se ...
- spring data jpa自定义bean字段映射
当遇到复杂多表查询时,并且同时还需要确保查询性能,此时则需要使用自定义sql查询,然而spring data jpa对于自定义sql则需使用查询需要在对应的bean中做太多的配置映射,我尝试了一下,最 ...
- 读书笔记 effective c++ Item 38 通过组合(composition)为 “has-a”或者“is-implemented-in-terms-of”建模
1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生.举个例子: class Address { ...
- jquery data属性的使用
var func=function(){console.log("test")};$("div").data("test",func);$( ...