(一) ~ 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包的依赖,然后再安装Nginx的rpm包
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
解决方法:
1、yum安装依赖包
2、rpm -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
(四) ~ 打包实例
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/