zoukankan      html  css  js  c++  java
  • 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删除软链接目录

  • 相关阅读:
    27款经典的 CSS 框架分享
    50款非常棒的 jQuery 插件分享
    10个和 Flash 一样的 HTML5 应用演示
    Ajax 应用六个需要注意的事项
    推荐12个漂亮的 CSS3 按钮实现方案
    8个惊艳的JavaScript 为 HTML5 Canvas 提供硬件3D加速渲染应用实验
    向网页设计师推荐15个很棒的网站
    2011年度最佳 JQuery 插件分享
    javascript 技巧总结积累173231条(正在积累中)
    [转]烦人的BeforePropertieBeforeProperties,AfterProperties,properties.ListItem
  • 原文地址:https://www.cnblogs.com/xuliangwei/p/7856865.html
Copyright © 2011-2022 走看看