Rpm打包程序
1.Rpm打包程序
1.1为什么要使用rpm打包
1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。
2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。
===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。
3、编译源码,根据自己的需求做成定制RPM包-->搭建内网yum仓库--yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,只能适用于本公司的环境。另外一般人不会定制RPM包。这是中大型互联网企业运维自动化的必要技能。
rpm的概念,想了解的朋友可以查看http://www.ibm.com/developerworks/cn/linux/l-rpm/
2 fpm工具打包详解
FPM的作者是jordansissel
FPM的github:https://github.com/jordansissel/fpm
FPM功能简单说就是将一种类型的包转换成另一种类型。
2.1 支持的源类型包
dir #将目录打包成所需要的类型,可以用于源码编译安装的软件包
rpm #对rpm进行转换
gem #对rubygem包进行转换
python #将python模块打包成相应的类型
2.2支持的目标类型包
rpm #转换为rpm包
deb #转换为deb包
solaris #转换为solaris包
puppet #转换为puppet模块
2.3 fpm安装
fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。
[root@student ~]# yum -y install ruby rubygems ruby-devel ß安装ruby模块
[root@student ~]# gem sources -a http://mirrors.aliyun.com/rubygems/ ß添加阿里云的Rubygems仓库,国外资源会影响下载速度
http://mirrors.aliyun.com/rubygems/ added to sources
[root@student ~]# gem sources --remove http://rubygems.org/ ß移除原生的ruby仓库
http://rubygems.org/ removed from sources
[root@student ~]# gem install fpm ß安装fpm
3.fpm常用参数
-s #指定源类型
-t #指定目标类型,即想要制作为什么包
-n #指定包的名字
-v #指定包的版本号
-C #指定打包的相对路径 Change directory to here before searching forfiles
-d #指定依赖于哪些包
-f #第二次打包时目录下如果有同名安装包存在,则覆盖它
-p #输出的安装包的目录,不想放在当前目录下就需要指定
--post-install #软件包安装完成之后所要运行的脚本;同--after-install
--pre-install #软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall #软件包卸载完成之后所要运行的脚本;同--after-remove
--pre-uninstall #软件包卸载完成之前所要运行的脚本;同--before-remove
4.实战定制Nginx的Rpm包
编写脚本
[root@oldboy ~]# cd /server/scripts/ ß进入到/server/scripts
[root@oldboy scripts]# vim nginx_rpm.sh ß这是安装完rpm包要执行的脚本
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.2/ /application/nginx
[root@student scripts]# fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/ ß打包
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.3-1.x86_64.rpm"}
[root@student scripts]# rpm -qpl nginx-1.6.3-1.x86_64.rpmß查看包内容
[root@student scripts]# rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm ß查看脚本
postinstall scriptlet (using /bin/sh):
#!/bin/sh
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx/nginx-1.6.3/ /application/nginx
5.实战定制LNMP的Rpm包
如果是rpm包 直接依赖rpm包本身---然后cp替换配置文件,启动即可。
如果是源码直接打包目录。
Rpm安装报错
安装制作好的rpm包报错:Error:cpio: Digest mismatch
解决:yum remove prelink -y
注:这里有个坑。如果正常按照gem去安装 我们是没办法调用 fpm成功的,因为 cabin的版本有问题:
[root@student]# fpm
/usr/lib/ruby/gems/1.8/gems/cabin-0.8.0/lib/cabin/mixins/logger.rb:12:in
`included': undefined method `options' for #<Cabin::Subscriber:0x7fad75e31b90> (NoMethodError)
from /usr/lib/ruby/gems/1.8/gems/cabin-0.8.0/lib/cabin/channel.rb:105:in `call'
....
因此, 卸载当前cabin版本
gem uninstall cabin
用前一个版本的cabin才能正确启动fpm
gem install cabin -v 0.7.2
4、安装rpm包
安装rpm包的三种方法:
①rpm命令安装
[root@LB-nginx-01 ~]# rpm -ivh nginx-1.6.2-1.x86_64.rpm
error: Failed dependencies:
pcre-devel is needed by nginx-1.6.2-1.x86_64
openssl-devel is needed by nginx-1.6.2-1.x86_64
但会报如上依赖错误,需要先yum安装依赖才能安装rpm包。
②yum命令安装rpm包
yum -y localinstall nginx-1.6.2-1.x86_64.rpm
这个命令会自动先安装rpm包的依赖,然后再安装rpm包。
③搭建内网yum仓库
YUM仓库搭建
注意事项
相对路径问题
# 相对路径
[root@oldboy nginx]# fpm -s dir -t rpm -n nginx -v 1.6.2 .
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
[root@oldboy nginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
/client_body_temp
/conf/extra/dynamic_pools
/conf/extra/static_pools
…………
# 绝对路径
[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx-1.6.2/
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
[root@oldboy ~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
/application/nginx-1.6.2/client_body_temp
/application/nginx-1.6.2/conf/extra/dynamic_pools
/application/nginx-1.6.2/conf/extra/static_pools
/application/nginx-1.6.2/conf/fastcgi.conf
/application/nginx-1.6.2/conf/fastcgi.conf.default
…………
使用rpm -qpl 命令可以查看rpm包的内容。
注:fpm类似tar打包一样,只是fpm打的包能够被yum命令识别而已。
软链接问题
[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx
no value for epoch is set, defaulting to nil {:level=>:warn}
File already exists, refusing to continue: nginx-1.6.2-1.x86_64.rpm {:level=>:fatal}
# 报错是因为当前目录存在同名的rpm包,可以使用-f参数强制覆盖。
[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -f /application/nginx
no value for epoch is set, defaulting to nil {:level=>:warn}
Force flag given. Overwriting package at nginx-1.6.2-1.x86_64.rpm {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
打包看似成功,但查看包的内容,只是这一个软链接文件。
[root@oldboy ~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
/application/nginx
原因:目录结尾的/问题,类似rm删除软链接目录
Rpm打包程序的更多相关文章
- 在Linux下通过rpm打包发布Java程序
这个东西涉及的内容较多,根据下面这些文章慢慢学习 一个简单的例子 http://blog.csdn.net/king_on/article/details/7169384 按照文章中的步骤来,打包之后 ...
- rpm打包过程
[需求] 接触那么久的Linux,还没有试验过怎么打rpm包 [过程] 1.rpm打包准备工作 系统默认的rpmbuild的相关路径
- linux 版本控制及rpm打包
版本控制 subversion:是一个自由/开源的版本控制系统,在subversion管理下,文件和目录可以超越时空subversion允许你数据恢复到早期版本,或者是检查数据修改历史许多人将版本控制 ...
- RPM打包原理、示例、详解及备查
原文地址:https://blog.csdn.net/qq_16542775/article/details/80961213 RPM(Redhat Package Manager)是用于Redhat ...
- RPM打包原理、示例、详解及备查( 转)
RPM(Redhat Package Manager)是用于Redhat.CentOS.Fedora等Linux 分发版(distribution)的常见的软件包管理器.因为它允许分发已编译的软件,所 ...
- 用 RPM 打包软件,第 1 部分
http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part1/ RPM(Red Hat Package Manager ...
- 【centos7常用技巧】RPM打包
一.RPM打包的目的 1.当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可. 2.当需要在目标机中安装多个软件或者增加多个文件时,可以将 ...
- 图解使用VS的安装项目打包程序
背景 这段时间一直在做客户端程序的打包程序,遇到各种坑.因为以前没有任何这方面的经验,历经各种折腾,费尽九牛二虎之力总算是完成了. 虽然没有太多技术含量,但是因为挺繁琐的,所以还是在此记录一下. 由于 ...
- [No00009D]使用visual studio 2015 update3打包程序安装包的简单方法(不需要InstallShield)
注意: 该方法只适用于小型软件的打包发布: 该打包向导可以预先检查需要的运行库支持: 由于visual studio自2012后取消掉了自带的打包程序,如果有需要打包安装,需要使用一个叫用Instal ...
随机推荐
- Android Studio单独生成apk
/********************************************************************* * Android Studio单独生成apk * 说明: ...
- matlab下利用K-Means进行图像分类
FIRST & BEST SOLUTION clear all; clc; I_rgb=imread('dog.jpg'); figure();imshow(I_rgb);title('原始图 ...
- BZOJ5125: [Lydsy1712月赛]小Q的书架(DP决策单调性)
题意:N个数,按顺序划分为K组,使得逆序对之和最小. 思路:之前能用四边形不等式写的,一般网上都还有DP单调性分治的做法,今天也尝试用后者写(抄)了一遍.即: 分成K组,我们进行K-1次分治,get( ...
- BZOJ5059 前鬼后鬼的守护 【堆扩展】*
BZOJ5059 前鬼后鬼的守护 Description 八云紫的式神八云蓝有一张符卡名为[式神-前鬼后鬼的守护],这张符卡的弹幕为BOSS从两侧向自机发射大玉,大玉后面跟着一些小玉,形成一个&quo ...
- WordCount运行详解
1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...
- 《DSP using MATLAB》示例Example6.2
2017年了,阳历新年都11号了,已从外地回到家乡,依然苦逼的生活…… 接着写读书(Digital Signal Processing using MATLAB)笔记吧 代码: b = [1 -3 1 ...
- flask第二十篇——模板【3】
请关注公众号:自动化测试实战 现在我们通过查询字符串的方式给render_template传参,我们就要用到flask库的flask.request.args.get()函数先获取参数,在index. ...
- rem自适应原理
rem自适应原理 rem是根据html的font-size大小来变化,正是基于这个出发,我们可以在每一个设备下根据设备的宽度设置对应的html字号,从而实现了自适应布局.更多介绍请看这篇文章:rem是 ...
- ballerina 学习八 Parallel( 并行处理)
实际上就是并行进行任务的处理 简单例子 代码 import ballerina/io; function main (string… args) { worker first { io:println ...
- homeland 开源论坛系统搭建试用
备注: 需要使用docker docker-compose 1. clone 代码 git clone https://github.com/ruby-china/homeland-docker. ...