Linux下常用的软件包安装方式有三种。
编译:将源代码变为机器可执行的代码文件。 安装:将可执行文件安装到操作系统里,才可以使用。
编译安装的优缺点如下:
yum安装顾名思义,就是使用yum工具进行程序的安装。
rpm
,Redhat Packages Manager,红帽包管理工具,使用rpm工具(-i)进行软件程序的安装。
综合了rpm的优点和yum的优点,定制化rpm包,自定义yum仓库,启用我们自己的yum源,这样可以使用yum帮我们一键安装软件,并执行某些操作,这在批量安装多台服务器的时候是非常有用的。
在linux环境下时,总是需要进行大量的软件安装和软件测试,如果从源码编译,可能要花费大量的编译时间,在确保包依赖关系正常的情况下,将安装好的软件打包成rpm包,可以很快的安装部署。打成rpm包有两种方式
第一种方式我没有尝试过,太繁琐,一点一点写spec文件的参数,各种出错,一不留神就花费大半个小时;软件的产生就是为了方便系统管理员管理,减少不必要的时间浪费,,学会软件使用需要花费太多的时间掌握,实在是有点惨不忍睹。
FPM功能简单说就是将一种类型的包转换成另一种类型。
名称 | 含义 |
---|---|
dir | 将目录打包成需要的类型,可以用于源码编译安装的软件包 |
rpm | 对rpm进行转换 |
gem | 对rubygem包进行转换 |
python | 对python模块打包成响应的类型 |
名称 | 含义 |
---|---|
rpm | 转换为rpm包 |
deb | 转换成deb包 |
solaris | 转换为solaris包 |
puppet | 转换为puppet模块 |
由于fpm工具是ruby写的,因此系统环境需要安装ruby,且ruby版本号大于1.8.5。
[root@centos7 ~]# yum install –y ruby rubygems ruby-devel
[root@centos7 ~]#gem sources -a http://mirrors.aliyun.com/rubygems/
[root@centos7 ~]#gem sources –remove http://rubygems.org/
[root@centos7 ~]#gem install fpm -v 1.3.3
部分常用参数如下:
我们打包前需要首先安装先安装该软件(保存依赖包)
[root@centos7 ~]#sed -i ‘s#keepcache=0#keepcache=1#g’ /etc/yum.conf
因为yum每次安装完毕后,会自动清理安装包,所以开启yum的cache功能后,下载的包会保存并存放(默认)在/var/cache/yum/x86_64/6/base/packages。
下载安装依赖包
[root@centos7 ~]#yum install -y pcre pcre-devel openssl openssl-devel
创建运行nginx的用户
[root@centos7 ~]#useradd -M -s /sbin/nologin nginx
配置nginx(上传nginx安装包,并解压)
[root@centos7 ~]#cd nginx-1.6.2
[root@centos7 ~]#./configure --prefix=/application/nginx-1.6.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
编译安装
[root@centos7 ~]#make && make install
[root@centos7 ~]#ln -s /application/nginx-1.6.2/ /application/nginx
[root@centos7 ~]#cd /server/scripts/
[root@centos7 ~]#vim nginx_rpm.sh
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.2/ /application/nginx
# 这个脚本就是安装完rpm包要执行的脚本
[root@beyond ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /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@beyond ~]# ll -h nginx-1.6.2-1.x86_64.rpm
-rw-r--r-- 1 root root 6.7M Nov 1 10:02 nginx-1.6.2-1.x86_64.rpm
附录:(php打包参数)
fpm -s dir -t rpm -n php -v 5.5.32 -d 'zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libiconv libmcrypt-devel mhash mcrypt ' --post-install /server/scripts/php_rpm.sh -f /application/php5.5.32/
[root@centos7 ~]#vim /server/scripts/php_rpm.sh
#!/bin/bash
useradd -M -s /sbin/nologin www
ln -s /application/php-5.5.32/ /application/php
/application/php/sbin/php-fpm &
使用rpm安装打好的包
[root@web02 tmp]# rpm -ivh php-5.5.32-1.x86_64.rpm
error: Failed dependencies:
libiconv-devel is needed by php-5.5.32-1.x86_64
fr is needed by php-5.5.32-1.x86_64
eetype-devel is needed by php-5.5.32-1.x86_64
libiconv is needed by php-5.5.32-1.x86_64
mhash is needed by php-5.5.32-1.x86_64
mcrypt is needed by php-5.5.32-1.x86_64
[root@web02 tmp]#
# 提示缺少依赖关系包
使用yum安装,它会检测本地rpm包依赖的包,然后通过yum源下载安装。
[root@centos7 ~]#yum -y install createrepo
[root@centos7 ~]#cd /application/tools/
[root@centos7 ~]#rz 之前打包好的两个包
[root@centos7 ~]#tar xf nginx_yum.tar.gz # nginx的依赖包(keepcache=1,缓存的包)
[root@centos7 ~]#mkdir -p /application/yum/centos6/x86_64/ # 创建yum目录
[root@centos7 ~]#cd /application/yum/centos6/x86_64/
[root@centos7 ~]#cp /application/tools/*rpm .
初始化
[root@centos7 ~]#createrepo -pdo /application/yum/centos6/x86_64/ /application/yum/centos6/x86_64/
# 会在/application/yum/centos6/x86_64/目录下生成repodata文件夹,里面存放的是索引文件
每加入一个rpm包就要更新一下
[root@centos7 ~]#createrepo --update /application/yum/centos6/x86_64/
启动一个简单的http服务,测试yum仓库(也可以用httpd服务或者nginx服务,这里用自带的模块启动)
[root@centos7 ~]#python -m SimpleHTTPServer 80 &>/dev/null &
# 在yum仓库的路径下执行,例如(/application/yum/centos6/x86_64/)
[root@centos7 ~]#cd /etc/yum.repos.d
[root@centos7 ~]#mkdir yum_bak && mv *repo yum_bak # 移出其他yum源
[root@centos7 ~]#vim beyondedu.repo # 创建yum源
[beyondedu]
name=Server #源名称
baseurl=http://10.0.0.61 # 自行指定yum源地址(服务端定义的/application/yum/centos6/x86_64/)
enable=1 # 启用源
gpgcheck=0 # 是否进行安全性检查,0表示不启动(一般用来效验包)
[root@centos7 ~]#yum clean all # 清空本机已有yum缓存
[root@centos7 ~]#yum list # 列表显示yum仓库(在列表末尾会显示创建的源里面的包,@anaconda-ks表示的是本机已经安装的包)
客户端直接下载nginx,由于我们之前已经打包了nginx所需的依赖包,所以所有包都是在本地指定的yum中下载,速度非常快~!