码迷,mamicode.com
首页 > 其他好文 > 详细

定制RPM包

时间:2016-08-15 22:51:31      阅读:1657      评论:0      收藏:0      [点我收藏+]

标签:yum rpm定制

目录

1. 安装软件的方式... 1

2. 定制RPM... 1

2.1 RPM简介... 2

2.2 fpm工具介绍... 2

2.3 FPM安装  *****. 3

2.4 yum安装时如何解决依赖问题的... 4

3. 实战定制nginxRPM  *****. 4

3. 安装rpm  *****. 7

4. 定制LNMPRPM包思路... 8


 

1. 安装软件的方式

1 编译安装软件

   优点:定制优化安装目录;按需开启功能;可定制(定制安装目录和软件功能),一般情况下不需要网络,可选择软件版本

   缺点:需要查找并誓言出适合的编译参数;很多人碰到软件版本升级,某些参数已经取消掉了,并且报错提示非常明显,但还是有很多人无所适从;mysqlphp等软件编译耗时较长;慢、复杂,需要查找编译参数(文多了大神们讨厌),找依赖很麻烦,纯编译一开就比较复杂;


2 YUM安装软件

   优点:全自动化安装;简单,c便捷;不需要为依赖问题发愁了;

   缺点:自主性太差;网络太差,网络不好下载速度慢;没有办法定制、软件的功能,存放位置都已经固定好了,不易变更;


3 二进制安装

   优点:简单、快;

   缺点:不能定制、包容量大(mysql的二进制包近200M



2. 定制RPM

   根据自己的需求编译软件è制作RPMè搭建内网yum仓库èyum安装

   结合前两者的优点,暂未发现说明缺点,可能的缺点就是RPM包的通用型差,只能适用于本公司的环境,另外一般人不会定制RPM包。

   缺点:第一步编译安装复杂,打包不能再再次更改,一般人不会这个方法。

   这是互联网企业运维自动化的必备技能,è自动化运维的基石

2.1 RPM简介

1. RPM的全称是Red Hat PackageManagerred hat包管理器)

2. 几乎所有的Linux发行版本都使用这种形式的软件包管理安装、更新和卸载软件。

3. rpm命令有五种基本功能(不包括创建软件包);安装、卸载、升级、查询和验证。

4. 关于rpm命令的使用我们可以使用rpm –help来获得。

5. rpmbuildredhat系的原生打包命令,这个命令的使用难点主要在于spec文件的编写,语法复杂。

6. 参考定制nginxspec文件


2.2 fpm工具介绍

  • FPM的作者是iordansissel

 

 

  • FPM功能简单说就是将一种类型的包转换成另一种类型

 

支持的源类型包

ü  dir        将目录打包成所需要的类型,可以用于源码编译安装的软件包

l  rpm        rpm进行转换

l  gem        rubygem包进行转换

l  python       python模块打包成响应的类型

 

支持的目标类型包

ü  rpm       转换为rpm

l  deb           转换为deb

l  solaris       转换为salaris

l  puppet         转换为puppet模块

2.3 FPM安装 *****

1 fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5

yum -y install ruby rubygems ruby-devel     #<== 安装ruby依赖

rpm -qa ruby rubygems ruby-devel  


2 安装fpm工具

gem sources -a http://mirrors.aliyun.com/rubygems/   

#<== 换成阿里云的rubygems仓库,外国的源慢

gem sources --remove http://rubygems.org/      #<== 移除原生的ruby仓库

gem sources --list     #<== 查看软件源,会显示aliyun.

gem install fpm -v 1.3.3

#<== -v参数指定安装fpm-1.3.3版本的软件,fpm这个工具升级平凡,而且在每次升级后会出现各种样的问题,但是老版本的fpm工具能够满足我们的需求,因此使用此版本了。如果后面不加-v参数,默认会下载最新版本(如果安装不成功可以先下载最新版本然后再尝试下载1.3.3版本

fpm --help               #<==只要能使用,就表示安装成功

如果以上下载不成功执行第二种方法,如下

gem sources -a https://ruby.taobao.org/    #<== 添加淘宝的 rubygems仓库

gem sources --remove http://rubygems.org/   #<== 移除原生的ruby仓库

gem sources –list

gem install fpm -v 1.3.3

fpm --help                   #<==只要能使用,就表示安装成功


-----------------关于fpm安装时出现错误的解决方法--------------------
解决方法1:

不指定版本安装一次  gem install fpm

指定版本安装一次 gem install fpm -v 1.3.3

解决办法2:

gem install json -v 1.8.3

gem install fpm -v 1.3.3  



3. FPM常用参数—>详细使用见fpm --help

fpm参数

解释说明

-s

指定源类型       ***

-t

指定目标类型,即想要制作为什么包   ***

-n

指定包的名字      ***

-v

指定包的版本号     ***

-C

指定打包的相对路径

-d

指定依赖于那些包    ***

-f

第二次打包时目录如果有同名安装包存在,则覆盖它  **

-p

输出的安装包的目录,不想放在当前目录下就需要指定

-post-install

软件包安装完之后所要运行的脚本;同-after-install   ***

-pre-install

软件包安装完成之前所要运行的版本;同-before-install  **

-post-uninstall

软件包卸载完成之后所要运行的版本,同-after-remove

-pre-uninstall

软件包卸载完成之前所要运行的脚本,同-before-remove

2.4 yum安装时如何解决依赖问题的

技术分享

  • 在使用yum安装软件a时,yum会在下载完Arpm包后,对该rpm包进行检查(rpm包中会给出安装rpm包依赖的基础库和软件),如果检查出A的安装还要依赖软件B,那么此时yum就会自动下载并安装BB安装完毕后,就会继续安装A,如果是内网yum源的话,我们只需要把B放在内网yum网即可,如果检查出A的安装不需要其他软件的支持,那么yum会自动安装A

  • 因此使用fpm打包使用-d参数添加依赖关系。

  • 实战定制nginxRPM  *****

1 查看系统环境

[root@m01 ~]# cat /etc/redhat-release       #<== 查看系统版本

CentOS release 6.7 (Final)

[root@m01 ~]# uname -r                #<== 查看系统内核

2.6.32-573.el6.x86_64

[root@m01 ~]# getenforce                 #<== SELinux为关闭状态

Disabled

[root@m01 ~]# /etc/init.d/iptables stop       #<== 防火墙确认为关闭


2. 准备环境

mkdir -p /home/oldboy/tools             #<== 软件包统一存放目录(规范)

mkdir -p /application/                       #<== 软件统一安装目录

sed -i ‘s#keepcache=0#keepcache=1#g‘ /etc/yum.conf     #<== 开启yum缓存

find /var/cache/ -type f -name ‘*rpm‘|xargs rm -f     #<== 清空本机yum缓存,排除rpm包干扰


3. 编译安装web服务软件nginx

yum -y install pcre pcre-devel opensslopenssl-devel

cd /home/oldboy/tools 

wget -q https://nginx.org/download/nginx-1.6.3.tar.gz  

tar xf nginx-1.6.3.tar.gz

useradd -M -u504 -s /sbin/nologin nginx

cd/home/nginx/tools/nginx-1.6.3

./configure  --user=nginx --group=nginx --prefix=/application/nginx-1.6.3/ --with-http_stub_status_module  --with-http_ssl_module

make && make install


4. 将以上安装nginx的依赖包进行打包

find /var/cache/ -type f -name ‘*rpm‘   #<== 使用该命令,查找nginx安装后的依赖包并进行打包

我进行打包时,收缩到的依赖包都在这两个目录下(/var/cache/yum/x86_64/6/base/packages/ var/cache/yum/x86_64/6/updates/packages/),然后使用mv命令将其移动到一起,在相对路径下打包,命令如下:

cd/var/cache/yum/x86_64/6/updates/packages

mv */var/cache/yum/x86_64/6/base/packages/

cd/var/cache/yum/x86_64/6/base/

tar zcf nginx_yum.tar.gz./packages/*


5. 编写脚本

mkdir -p /server/scripts/

cd /server/scripts/

vim nginx_rpm.sh         #<== 这是安装完rpm包要执行的脚本

#!/bin/bash

useradd -u504 -M -s /sbin/nologinnginx

ln -s /application/nginx-1.6.3//application/nginx

/application/nginx/sbin/nginx

cat >>/etc/rc.local<<EOF

#This is start nginx service Yes

/application/nginx/sbin/nginx

EOF


6. 打包(rpm包)

cd /server/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/

#<== -s指定源类型;-n指定包名字;-v指定包版本号;-d指定依赖包;多个依赖包以逗号分隔符;-post-install安装完rpm包后执行的脚本;-f如果下面有同名的话强制覆盖;

显示出来的内容暗黄色的表示正确的,红色的则代表作错误

sz nginx-1.6.3-1.x86_64.rpm     #<== 下载下来


   fpmrpmbuild命令关系:在第一个窗口执行打包命令,再另外打开一个窗口,使用top命令,可以看到rpmbuild进程,因此,fpm命令其实是对rpmbuild命令进行封装,其实底层还是rpmbuild命令,因此系统必须要有rpmbuild命令,如果没有,使用yum安装:yum -y installrpm-build


fpm打包注意事项

l  1. 相对路径问题不要使用相对路径,如果使用相对路径打包时打包就会从根开始,安装到根(/)下了,热不是指定的/application/nginx-1.6.3/目录。和tar打包类似,只是fpm能被yum命令识别而已。

l  2. 软连接问题:当删除一个软连接文件时(rm-f nginx)它可以删除,但是如果是(rm -f nginx/)后面机上路径符的话他代表一个目录,如果想rm -fr nginx/这样删除的话源目录和软连接目录都会存在,就是两者下面的都没有啦。

rpm常用命令组合


说明

rpm命令组合

查看rpm帮助

man rpm

查看rpm包信息

rpm -qpi nginx-1.6.3-1.x86_64.rpm   

查看rpm包内容

rpm -qpl  nginx-1.6.3-1.x86_64.rpm

查看rpm包依赖

rpm -qpR  nginx-1.6.3-1.x86_64.rpm

查看rpm包带的执行脚本,

执行脚本不是以文件的形式存在rpm包中·

rpm -qp  --scripts  nginx-1.6.3-1.x86_64.rpm

安装rpm

rpm -lvh  nginx-1.6.3-1.x86_64.rpm

rpm -lvh --ald *.rpm

1. 自动安装或更新rpm包。

2. 如果自己找的依赖包少了,它还会自动帮我们到网上去下载

rpm -lvh --ald *.rpm  #<== --aid参数解决RPM包循环依赖的问题,即当前目录有所有相互依赖的rpm包,就可以用这种方法,就是说把所有的依赖包放在一个目录里面,然后通过这条命令,rpm就会自动把nginx软件的依赖包都安装好,然后再安装nginx包,自动解决依赖问题



3. 安装rpm  *****

  • 首先确认Nginx的rpm包和依赖包的tar包已经下载到windows,如果没有问题就对当前状态做个快照,然后还原初始快照。

  • 还原完后,新的机器是没有Nginx的,上传rpm包和tar(nginx依赖)包

cd /home/oldboy/tools/

rz nginx-1.6.3-1.x86_64.rpmnginx_yum.tar.gz

安装rpm包的三种方法

1.  yum命令安装rpm包(本地测试成功)

yum localinstallnginx-1.6.3-1.x86_64.rpm

# 这个命令会自动先从网络安装rpm包的依赖,然后再安装Nginxrpm

2.  fpm命令安装

[root@web01tools]# rpm -ivh nginx-1.6.3-1.x86_64.rpm   #<== 啊喔!安装报错

error: Failed dependencies:

        pcre-devel is neededby nginx-1.6.3-1.x86_64

        openssl-devel isneeded by nginx-1.6.3-1.x86_64

以上报错是因为缺少软件包,必须手动安装(缺点)

rpm -ivhopenssl-devel-1.0.1e-42.el6.x86_64.rpm  #<== 必须手动先安装依赖包

   rpm -ivh pcre-devel-7.8-7.el6.x86_64.rpm     #<== 必须手动先安装依赖包

解决方法:

1 yum安装依赖包

2以上报错是因为缺少软件依赖包,必须一个一个手动安装(缺点)

   rpm -ivhopenssl-devel-1.0.1e-42.el6.x86_64.rpm  #<== 必须手动先安装依赖包 

   rpm -ivh pcre-devel-7.8-7.el6.x86_64.rpm  #<== 必须手动先安装依赖包

3如果本机已有所有的依赖包,就可以用下面的方法。

tar xfnginx_yum.tar.gz   #<== 解压nginx依赖包(将所有需要的rpm包放在一个目录)

rpm -ivh--aid *.rpm

执行命令如下

[root@m01 tools]# rpm -ivh --aid *rpm        #<== 报错--             

Preparing...    ###########################################[100%]

 file/usr/lib64/libkadm5clnt_mit.so.8.0 from install ofkrb5-libs-1.10.3-42z1.el6_7.x86_64 conflicts with file from packagekrb5-libs-1.10.3-42.el6.x86_64

………………

报错原因:rpm包冲突,使用U参数,因为有些包本地有,需要更新。


[root@m01 tools]# rpm -Uvh --aid *rpm     #<== 正确

Preparing...       ########################################### [100%]

1:krb5-libs      ########################################### [  9%]

  --------------------------内容省略------------------------------------

10:openssl-devel    ########################################### [91%]

11:nginx        ########################################### [100%]


3. 搭建内网yum仓库

具体见yum仓库搭建----------

4. 定制LNMPRPM包思路

1. 编译安装好nginxmysqlphp,此处有个问题,就是php的大部分依赖环境时通过yum安装,但又一个libiconv-1.14.tar.gz包需要编译安装,安装时已经制定了安装目录,只需一同打包即可。

2. 还有一个问题,就是mysql这个目录比较大,用fpm打包耗时长,平时我们有可能需要对nginxphp做优化,这样有得重新打包,因此我们可以将mysql分离出来,分别打包,只需在制作nginx+phprpm包时添加mysql的依赖即可

本文出自 “土豆” 博客,请务必保留此出处http://zhaoyulin.blog.51cto.com/11665101/1838423

定制RPM包

标签:yum rpm定制

原文地址:http://zhaoyulin.blog.51cto.com/11665101/1838423

(0)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!