RPM快速打包python
Linux目前安装软件的方式有三种:json
1.源码安装,优势是能够自定义安装目录和一些配置文件,可是须要事先调整编译参数,比较麻烦。centos
2.Yum安装软件,优势是全自动安装,不须要为依赖的问题发愁,可是他的自主性太差,软件的功能和存放的位置都是已经放置好的,不容易改变。ruby
3.Rpm安装,这种相对上面来讲是比较方便的。既能够有自主性,又能够实现全自动安装。工具
一.下面就来介绍rpm包的制做:post
之前都是用rpmbuild来制做的,我的以为是比较麻烦的,因此下面我不会介绍,而我要介绍的是一个比较快速制做rpm包的工具fpm(实际上是一种格式转换工具)ui
1.支持的源类型包centos7
Dir 将目录打包成所须要的类型,能够用于源码编译安装的软件包spa
Rpm 对rpm进行转换rem
Gem 对rubygem包进行转换
Python 将python模块打包成相应的类型
2.支持的目标类型包
Rpm 转换为rpm包
Deb 转换为deb包
Solaris 转换为solaris包
Puppet 转换为puppet模块
3.Fpm安装
fpm是ruby写的,所以系统环境须要ruby,且ruby版本大于1.8.5
#安装ruby模块
yum -y install ruby rubygems ruby-devel
#查看当前rubygem仓库
gem sources list
#由于国外的源比较慢因此咱们要添加国内的源,移除原来的源
gem sources --add https://ruby.taobao.org/
或者
gem sources -a http://mirrors.aliyun.com/rubygems/
#移除原有的源
gem sources --remove http://rubygem.org/
#安装fpm,gem从rubygem仓库安装软件相似于yum安装。
Gem install json -v 1.8.3
Gem install fpm -v 1.3.3
#上面的两步主要是针对于centos6,若是是centos7的话咱们直接就执行 gem install fpm
4.Fpm参数
详情请参考fpm --help
常见参数:
-s 指定源类型
-t 指定目标类型,就是你想要制做什么包
-n 指定包的名字
-v 指定包的版本号
-C 指定打包的相对路径
-d 指定依赖于哪些包
-f 第二次打包时候目录下若是有同名的安装包存在则直接覆盖
-p 输出安装包的目录,若是不想放在当前目录下则必须指定
--post-install 软件包安装完成后须要运行的脚本等于--after-install
--pre-install 软件包完成以前所要运行的脚本等于--before-install
--post-uninstall 卸载软件包以后所要运行的脚本--after-remove
--pre-uninstall 卸载软件包以前所要运行的脚本--before-remove
实例:
Example:我这里有一个monitor的目录,是我一些脚本的合集,我要将他转换成rpm包,到时候经过rpm安装。
1)执行:fpm -s dir -t rpm -n monitor -v 1.0 /root/monitor-base-2/
生成一个monitor-1.0-1.x86_64.rpm的rpm包
2)rpm -ivh monitor-1.0-1.x86_64.rpm
在当前目录安装完成。
或者:yum localinstall monitor-1.0-1.x86_64.rpm也是能够搞定的。
#rpm -qpl能够查看包里面的内容,这个仍是比较好用的
rpm -qpl monitor-1.0-1.x86_64.rpm
注意:用rpm -ivh 安装会存在依赖性问题,而后就会报错。因此必须先安装依赖文件而后再运行rpm -ivh。可是若是用yum localinstall 则会很爽。由于他是先安装依赖文件而后在安装包的,我比较建议这个。