(一) ~ FPM打包工具

I.支持的源类型包

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

2.rpm        对rpm进行转换

3.gem        对rubygem包进行转换

4.python     将python模块打包成相应的类型

II.支持的目标类型包

1.rpm        转换为rpm包

2.deb        转换为deb包

3.solaris      转换为solaris包

4.puppet      转换为puppet模块

III.FPM安装

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

2.#安装ruby模块

yum -y install ruby rubygems ruby-devel

3.# 添加阿里云的Rubygems仓库,国外资源会影响下载速度

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

4.移除原生的ruby仓库

gem sources --remove http://rubygems.org/

5.#安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。

gem install json -v 1.8.3

gem install fpm -v 1.3.3

#此处如果安装不上,先安装gem installfpm 然后在安装gem install fpm -v 1.3.3

#上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm

#如果fpm安装不上先将fpm版本去掉安装gem install fpm然后在进行安装对应版本gem install fpm -v 1.3.3

 

(二) ~ FPM参数

详细使用见fpm -help

常用参数

1.-s                  指定源类型

2.-t                  指定目标类型,即想要制作为什么包

3.-n                  指定包的名字

4.-v                  指定包的版本号

5.-C                  指定打包的相对路径  Change directory to here before searchingforfiles

6.-d                  指定依赖于哪些包

7.-f                  第二次打包时目录下如果有同名安装包存在,则覆盖它

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

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

10.--pre-install      软件包安装完成之前所要运行的脚本;同--before-install

11.--post-uninstall   软件包卸载完成之后所要运行的脚本;同--after-remove

12.--pre-uninstall    软件包卸载完成之前所要运行的脚本;同--before-remove


(三) ~ RPM包常用命令组合

#查看rpm帮助

man rpm

#查看rpm包信息

rpm -qpi 包名

#查看rpm包内容

rpm -qpl 包名

#查看rpm包的依赖

rpm -qpR 包名

#查看rpm包带的执行脚本,执行脚本不是以文件形式存在rpm包中

rpm -qp–scripts 包名

#安装rpm包

rpm -ivh 包名

rpm -ivh --aid*.rpm   

#--aid参数解决RPM包循环依赖的问题,及当前目录有所有相互依赖的rpm包。就可以用这种方法

#查看文件属于哪个软件包

rpm -qf /etc/my.cnf

rpm -qf `which+命令`

注意:(一)要使用绝对路径打包

1.# 相对路径

[root@oldboynginx]# fpm -s dir -t rpm -n nginx -v 1.6.2 .

no valuefor epoch is set, defaulting to nil {:level=>:warn}

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}

[root@oldboynginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm   

/client_body_temp

/conf/extra/dynamic_pools

/conf/extra/static_pools

  …………

3.# 绝对路径

[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v1.6.2 /application/nginx-1.6.2/

no valuefor epoch is set, defaulting to nil {:level=>:warn}

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Createdpackage {: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

…………

注:fpm类似tar打包一样,只是fpm打的包能够被yum命令识别而已。

注意:(二)软链接问题 不能使用软链接打包,使用安装目录打包

1.[root@oldboy~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Filealready exists, refusing to continue: nginx-1.6.2-1.x86_64.rpm{:level=>:fatal}

# 报错是因为当前目录存在同名的rpm包可以使用-f参数强制覆盖

2.[root@oldboy~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -f /application/nginx

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Force flaggiven. Overwriting package at nginx-1.6.2-1.x86_64.rpm {:level=>:warn}

no valuefor epoch is set, defaulting to nil {:level=>:warn}

Createdpackage {:path=>"nginx-1.6.2-1.x86_64.rpm"}

 

打包看似成功,但查看包的内容,只是这一个软链接文件。

3.[root@oldboy~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm

/application/nginx

原因:目录结尾的/问题,类似rm删除软链接目录

注意:(三)yum 安装本地仓库软件时,yum不上,先清下本地缓存在进行安装

安装rpm

命令安装rpm

yum localinstallnginx-1.10.2-1.x86_64.rpm

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

 rpm 命令安装  报没有pcre-devel openssl-devel这两个包

rpm -ivh nginx-1.10.2-1.x86_64.rpm

会发现报如下错误

[root@m01tools]# rpm -ivh nginx-1.10.2-1.x86_64.rpm

error:Failed dependencies:

   pcre-devel is needed by nginx-1.10.2-1.x86_64

   openssl-devel is needed by nginx-1.10.2-1.x86_64

解决方法:

1yum安装依赖包

2rpm -ivh openssl-devel1.0.1e-42.e16.x86_64.rpm

   rpm -ivh pcre-devel-7.8.7.e16.x86_64.rpm

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

tar xfnginx_yum.tar.gz

#将所有的rpm包放在一个目录

rpm -ivh--aid *.rpm


(四) ~ 打包实例

  1. nginx打包

(1).编写脚本 

#cat /server/scripts/nginx_rpm.sh #这是安装完rpm包要执行的脚本

 #!/bin/sh

 #Custom rpmpackage to be implemented by YH

 NGINXversion=1.10.2

 ##Judge wwwusers do not exist  ##判断www用户存在不存在

 id www >/dev/null2>&1

 if [ $? -eq0 ];then

    echo "OK"  

 else

    useradd -s /sbin/nologin -M www -u 1003

 fi

 #Judgenginx and no soft links   ##判断nginx又没有软链接

 ls -l/application/nginx &>/dev/null

 if [ $? -eq0 ];then

    echo "OK"

 else

/bin/ln-s /application/nginx-$NGINXversion /application/nginx

 fi

 #echo -e ‘\n#NginxServer\n/etc/init.d/nginx start’ >>/etc/rc.local

(2) 打包

#fpm -s dir -t rpm -nnginx -v 1.10.2 -d 'pcre-devel,openssl-devel' --post-install/server/scripts/nginx_rpm.sh -f /application/nginx-1.10.2/

2.php打包

(1) 编写脚本

#cat /server/scripts/php-install.sh 

 #!/bin/sh

 id www&>/dev/null

 [ $? -eq 0] || /usr/sbin/useradd -M -s /sbin/nologin -u 1003 www

 ln -s/application/php-5.5.32/ /application/php

 /application/php/sbin/php-fpm

 grep"/application/php/sbin/php-fpm" /etc/rc.local &>/dev/null

 [ $? -eq 0] || \

 echo -e"\n#php-fpm start from the boot\n/application/php/sbin/php-fpm">>  /etc/rc.local

(2) 打包

#fpm -s dir-t rpm -n php -v 5.5.32 -d'zlib-devel,libxml2-devel,libjpeg-devel,libjpeg-turbo-devel,libiconv,freetype-devel,libpng-devel,gd-devel,libcurl-devel,libxslt-devel,libmcrypt-devel,mhash,mcrypt'--post-install /server/scripts/php-rpm.sh -f /application/php-5.5.32/ /usr/local/libiconv

3.mysql打包

(1)编写脚本

#cat mysql_install.sh

 #!/bin/sh

 #Installmysql ready

 id mysql&>/dev/null

 if [ $? -eq0 ];then

    echo "OK" &>/dev/null

 else

    useradd -s /sbin/nologin  -M mysql

 fi

 ln -s/application/mysql-5.6.34/ /application/mysql

 #Modifypermissions

 chown -Rmysql.mysql /application/mysql/

 #Configurethe self-starting program

 /bin/cp/application/mysql/support-files/mysql.server /etc/init.d/mysqld

 chmod +x/etc/init.d/mysqld

 chkconfig--add mysqld

 chkconfigmysqld on

 sed -i's#/usr/local/mysql#/application/mysql#g'  /application/mysql/bin/mysqld_safe/etc/init.d/mysqld 

 /bin/cp -a/application/mysql/bin/* /usr/local/sbin/

 \cp/application/mysql/support-files/my-default.cnf /etc/my.cnf

 /etc/init.d/mysqldstart 

 #Configureenvironment variables

 grep"/application/mysql/bin" /etc/profile &>/dev/null

 [ $? -eq 0] || echo 'export PATH="/application/mysql/bin:$PATH"' >>/etc/profile

 source/etc/profile

(2)打包

#fpm -s dir-t rpm -n mysql -v 5.6.34 -d 'ncurses-devel' --post-install/server/scripts/mysql_rpm.sh -f /application/mysql-5.6.34/