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. js学习笔记知识点

    AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们“发明”的缩写:Asynchronous ...

  2. Hibernate 一对一 (one-to-one)

    一对一(one-to-one)实例(Person-IdCard) 一对一的关系在数据库中表示为主外关系.例如.人和身份证的关系.每个人都对应一个身份证号.我们应该两个表.一个是关于人信息的表(Pers ...

  3. NFS,两台linux设置网络共享文件系统

    NFS,MOUNT,UMOUNT 简介 NFS是Network File System的简写,网络文件系统.通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,根据权限的控制可以对N ...

  4. BZOJ3673 可持久化并查集 by zky 【主席树】

    BZOJ3673 可持久化并查集 by zky Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a ...

  5. 关于swagger文档的使用方法

    引言 最近在后台开发的时候,使用swagger2进行前后台接口文档的声明.由此遇见的一些问题,写下来给自己复习. 参考: https://blog.csdn.net/xupeng874395012/a ...

  6. 用firefox获取html页面元素的Xpath

    Xpath在分析网页尤其是采集固定格式数据时,非常有用,且比正则表达式和首尾截取式更加简便.准确! 工具/原料   FireFox FireBug XpathChecker UserAgentSwit ...

  7. altium布局布线原则

    布局应该先放位置确定不能随意变动的,之后是核心器件,然后是周围器件,如果周围器件过多,为防止布线时交叉过多,可以一部分小模块放到底层. 布线时优先顺序为先电源线和网络中使用频率高的线,之后是信号线.走 ...

  8. docker could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

    原因: 无法进行网络分配了 解决方法: // 所有的网络 docker network ls // 删除不用的,腾出多余的 docker network rm <networkname> ...

  9. [LeetCode系列]BST有效性确定问题[前序遍历]

    给定一个BST的根节点, 试判断此BST是否为符合规则的BST? 规则: 对于一个BST的节点, 它左侧的所有节点(包括子节点)必须小于它本身; 它右侧的所有节点(包括子节点)必须大于它本身; 它的左 ...

  10. mac版sublime 无法下载插件(Vue 代码无高亮问题)

    1.官方下载sublime(http://www.sublimetext.com/3) 然后需要两步(1)上传插件主包Package Control(2)更改channels的配置信息(原来是国外的需 ...