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打包程序的更多相关文章

  1. 在Linux下通过rpm打包发布Java程序

    这个东西涉及的内容较多,根据下面这些文章慢慢学习 一个简单的例子 http://blog.csdn.net/king_on/article/details/7169384 按照文章中的步骤来,打包之后 ...

  2. rpm打包过程

    [需求] 接触那么久的Linux,还没有试验过怎么打rpm包 [过程] 1.rpm打包准备工作 系统默认的rpmbuild的相关路径

  3. linux 版本控制及rpm打包

    版本控制 subversion:是一个自由/开源的版本控制系统,在subversion管理下,文件和目录可以超越时空subversion允许你数据恢复到早期版本,或者是检查数据修改历史许多人将版本控制 ...

  4. RPM打包原理、示例、详解及备查

    原文地址:https://blog.csdn.net/qq_16542775/article/details/80961213 RPM(Redhat Package Manager)是用于Redhat ...

  5. RPM打包原理、示例、详解及备查( 转)

    RPM(Redhat Package Manager)是用于Redhat.CentOS.Fedora等Linux 分发版(distribution)的常见的软件包管理器.因为它允许分发已编译的软件,所 ...

  6. 用 RPM 打包软件,第 1 部分

    http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part1/ RPM(Red Hat Package Manager ...

  7. 【centos7常用技巧】RPM打包

    一.RPM打包的目的 1.当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可. 2.当需要在目标机中安装多个软件或者增加多个文件时,可以将 ...

  8. 图解使用VS的安装项目打包程序

    背景 这段时间一直在做客户端程序的打包程序,遇到各种坑.因为以前没有任何这方面的经验,历经各种折腾,费尽九牛二虎之力总算是完成了. 虽然没有太多技术含量,但是因为挺繁琐的,所以还是在此记录一下. 由于 ...

  9. [No00009D]使用visual studio 2015 update3打包程序安装包的简单方法(不需要InstallShield)

    注意: 该方法只适用于小型软件的打包发布: 该打包向导可以预先检查需要的运行库支持: 由于visual studio自2012后取消掉了自带的打包程序,如果有需要打包安装,需要使用一个叫用Instal ...

随机推荐

  1. iOS的坑:ERRORITMS-90096: "Your binary is not optimized for iPhone 5 - New iPhone appsand app updatesXcode7提交到App Store二进制文件时报错错误:“你itms-90096二进制不是iPhone 5的新iPhone应用程序和应用程序的更新必须提交支持iPhone 5英寸的显示器........

    在工程里的Images.xcassets添加并设置LaunchImage对解决ERROR ITMS-90096根本不会起到任何作用,需要单独添加针对iPhone 5的载入图片.关键点有三项: 1.图片 ...

  2. kettle连接oracle出现Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)

    jdbc驱动,下载jdbc14.jar文件放入   pdi-ce-5.3.0.0-213\data-integration\libswt\win64里 之后重启kettle即可 jdbc14.jar文 ...

  3. BZOJ1878 SDOI2009 HH的项链 【莫队】

    BZOJ1878 SDOI2009 HH的项链 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的 ...

  4. Codeforces 25E Test 【Hash】

    Codeforces 25E Test E. Test Sometimes it is hard to prepare tests for programming problems. Now Bob ...

  5. 《DSP using MATLAB》示例9.1

    前段时间发生许多事,主要是楼盘开发商资金链紧张,无法通过验收,拿不到两书一表(住宅质量保证书.住宅使用说明书.房屋建筑工程竣工验收备案表), 各种配套设施都没有,就在这条件下还强制我们业主收房,心塞, ...

  6. vs2010 创建和C#使用动态链接库(dll)

    一.VS 用 C++ 创建动态链接库 Step 1:创建Win32 Console Application 本例中我们创建一个叫做“Test”的Solution. Step 2:将Applicatio ...

  7. E519: Option not supported: fileencodings

    怒转,来自http://blog.chinaunix.net/uid-10671107-id-2943841.html,感谢分享. vim中文乱码,原来是编译就除了问题,看来还不一定是不是坑爹的red ...

  8. dda的fpga实现(转载)

    The general approach using DDAs will be to simulate a system of first-order differential equations, ...

  9. fpga配置过程(转载)

    fpga 配置时序图如下 1.FPGA器件有三类配置下载方式:主动配置方式(AS)和被动配置方式(PS)和最常用的(JTAG)配置方式.             AS 由FPGA器件引导配置操作过程, ...

  10. Navicat Premium 连接O​r​a​c​l​e​ ​出现o​r​a​-​1​2​5​0​5​ ​错​误​解​决​方​案

    找到listener.ora文件:我的Oracle是安装在F盘, 路径为:F:\oracle\product\10.2.0\db_1\network\admin\listener.ora  改动前的配 ...