优点:可以定制化安装目录,按需开启功能等
缺点:需要查找并试验出合适的编译参数,诸如mysql数据库之类的软件编译耗时过长
优点:是全自动化安装,不需要为依赖问题发愁了
缺点:自主性太差,软件的功能,存放的位置已经固定好了,不易变更
根据自己的需要做成定制rpm包-->搭建yum仓库-->yum安装
结合前两者优点,暂时未发现缺点,可能的缺点就是rpm包的通用性差,一般人不会定制rpm包
RPM 前是Red Hat Package Manager(Red Hat包管理器),几乎所有的Linux发行版本都是用这种形式的软件包安装,更新和卸载软件。
rpm命令有五种功能(不包括创建软件包):安装,卸载,升级,查询,和验证,关于rpm命令的是用我们可以用rpm--help来获得
rpmbuild是redhat系的原生打包命令,这个命令的使用难点主要在于spec文件的编写,一个类似于kickstart的ks.cfg文件
作为一个试用工具,种种的繁琐,再没有替代品时还能存活,当有了其他简单工具时,他就力有不从了
参考定制nginx的spec文件
fpm的作者是joradansissel
fpm的github:http://github.com/jordansissel/fpm
fpm功能简单说就是将一种类型的包转换成另一种类型
支持的目标类型包
dir 将目录打包成所需要的类型,用语源码编译安装的软件包 rpm 对rpm进行转换 gem 对rubygem包进行转换 python 将python模块打包成相应的类型
支持的目标类型包
rpm 转换为rpm包 deb 转换为deb包 solaris 转换为solaris puppet 转换为puppet模块
fpm是用ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5
安装ruby模块
yum install -y ruby rubygems ruby-devel
添加淘宝的ruby仓库,外国的源慢
gem source -a http://mirrors.aliyun.com/rubygems/
移除原生的ruby仓库
gem source -r https://rubygems.org/
安装fpm
gem install fpm
查看当前源
gem source list
详细使用见fpm �Chelp
常用参数 -s 指定源类型 -t 指定目标类型,即想要制作为什么包 -n 指定包的名字 -v 指定包的版本号 -C 指定打包的相对路径Change directory to here seraching for files -d 指定依赖哪些包 -f 第二次打包时目录下如果有同名安装包存在,则覆盖它 -p 输出的安装包的目录,不想放在当前目录下就需要制定 --post-install 软件包安装完成之后所需要运行的脚本,同―after-install --pre-install 软家包安装完成之前所需要运行的脚本,同―befor-install --post-uninstall 软件包卸载完成之后所需要运行的脚本,同―after-remove --pre-uninstall 软家包卸载完成之前所需要运行的脚本,同―befor-remove
在使用yum安装软件A时,yum会在下砸完A的rpm包后,对该rpm包进行检查(rpm包中会给出安装该rpm包所依赖的基础库和软件),如果检查出A的安装还需要依赖软件B,那么此时yum就会自动下载并安装B,B安装完成后悔继续安装A。如果是内网yum源的话,我们只需把B放在内网yum源即可,如果检查出,A的安装不需要其他软件的支持,那么yum会自动安装A
因此使用fpm打包使用-d参数添加依赖关系。
以制作nginx的rpm包为例
安装nginx所依赖的pcre-devel和openssl-devel的安装包
yum install -y pcre-devel openssl-devel
添加nginx用户
useradd -s /sbin/nologin -M nginx
解压nginx源代码包
tar xzf nginx-1.6.3.tar.gz
配置nginx
cd nginx-1.6.3 ./configure \ --prefix=/application/nginx-1.6.3 \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_stub_status_module
安装
make && make install
创建软链接
ln -s /application/tools/ /application/nginx
相对路径问题:
fpm -s dir -t rpm -n nginx -v 1.6.3 fpm -s dir -t rpm -n nginx -v 1.6.3 -f /application/nginx-1.6.3
fpm类似tar打包一样,只是fpm打的包能够被yum命令识别而已
软链接问题
fpm -s dir -t rpm -n nginx -v 1.6 /application/nginx /usr/lib/ruby/gems/1.8……..
如果是软链接文件就会报错
编辑安装前的脚本
[root@yum x86_64]# cat nginxRpmPre.sh
脚本具体内容
#!/bin/bash source /etc/profile source /etc/init.d/functions useradd -s /sbin/nologin -M nginx
编辑安装后的脚本
cat nginxRpmPost.sh
脚本具体内容
#!/bin/bash source /etc/profile source /etc/init.d/functions ln -s /application/nginx-1.6.3/ /application/nginx
制作rpm包
fpm -s dir -t rpm -n nginx -v 1.6.4 \ -d 'pcre-devel,openssl-devel' \ --pre-install ~/nginxRpmPre.sh \ --post-install ~/nginxRpmPost.sh \ -f /application/nginx-1.6.3/
查看制作的压缩包
rpm -pql nginx-1.6.3-1.x86_64.rpm
详细安装的文件
/application/nginx-1.6.3/client_body_temp /application/nginx-1.6.3/conf/fastcgi.conf /application/nginx-1.6.3/conf/fastcgi.conf.default /application/nginx-1.6.3/conf/fastcgi_params /application/nginx-1.6.3/conf/fastcgi_params.default /application/nginx-1.6.3/conf/koi-utf /application/nginx-1.6.3/conf/koi-win /application/nginx-1.6.3/conf/mime.types /application/nginx-1.6.3/conf/mime.types.default /application/nginx-1.6.3/conf/nginx.conf /application/nginx-1.6.3/conf/nginx.conf.default /application/nginx-1.6.3/conf/scgi_params /application/nginx-1.6.3/conf/scgi_params.default /application/nginx-1.6.3/conf/uwsgi_params /application/nginx-1.6.3/conf/uwsgi_params.default /application/nginx-1.6.3/conf/win-utf /application/nginx-1.6.3/fastcgi_temp /application/nginx-1.6.3/html/50x.html /application/nginx-1.6.3/html/index.html /application/nginx-1.6.3/logs/access.log /application/nginx-1.6.3/logs/error.log /application/nginx-1.6.3/proxy_temp /application/nginx-1.6.3/sbin/nginx /application/nginx-1.6.3/scgi_temp /application/nginx-1.6.3/uwsgi_temp
发送给另一台服务器,然后yum 安装
缺少的依赖包会在yum源上自动安装
练习定制mysql的rpm包
导言
yum主要用于自动安装,升级rpm软件包,他能自动查询并解决rpm包之间的依赖关系,要成功的使用yum工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库)
这个软件仓库我们习惯叫做yum源,网络傻姑娘有大量的yum源,但是由于受到桑落环境的限制,但是软件安装耗时过长甚至失败,特别是当一偶大量服务器大量软件包需要安装时,缓慢的进度条令人难以忍受,因此在优化时,经常更换国内的源。
相比较而言,本地yum源服务器最大的优点就是就欲望的跨素网络链接和稳定性,有了局域网中的yum源服务器,纪实在internet链接中断的情况下,也不会影响其他yum客户端的软件安装和升级
mkdir -p /application/yum/centos6/x86_64/ cd /application/yum/centos6/x86_64/ yumdownloader openssl-devel pcre-devel
yum install -y createrepo
createrepo -pdo \ /application/yum/centos6/x86_64/ \ /application/yum/centos6/x86_64/
可以通过Apache或者nginx提供web服务,但是用python的http模版更简单,适用于内网环境
cd /application/yum/centos6/x86_64/ python -m SimpleHTTPServer 80 &>/dev/null &
可以通过浏览器查看
yumdownloader pcre-devel openssl-devel createrepo --update /application/yum/centos6/x86_64/
平时yum安装软件时不删除安装包
[root@yum x86_64]# cat /etc/yum.conf [main] cachedir=/var/cache/yum/$basearch/$releasever keepcache=1 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum distroverpkg=centos-release
[root@yum x86_64]# cd /etc/yum.repos.d/ [root@yum yum.repos.d]# vi oldboy.repo [oldboy] name=Server baseurl=http://10.0.0.5 enable=1 gpgcheck=0 [root@yum yum.repos.d]# yum --enablerepo=oldboy --disablerepo=base,extras,updates list #指定使用local库
function | introduction |
---|---|
安装软件包 | yum install -y httpd |
列出软件包 | yum list httpd |
搜索软件包 | yum search http |
查找特定文件属于哪个包 | yum provides /etc/my.cnf |
列出所有可用群组 | yum grouplist |
安装群租软件包 | yum groupinstall 'MySQL Database' |
列出启用的软件库 | yum repolist |
列出所有软件库 | yum repolist all#包括禁用的也列出 |
安装来自特定软件库的软件包 | 想安装来自某个启动或禁用的软件库的某个软件包 |
必须在yum命令中使用-enablerepo选项 | |
yum --enablerepo=localhost install LNMP | |
清理yum缓存内容 | yum clean all |
查看yum历史纪录 | yum history |
配置文件分为两部分main和repository
main部分定义了全局配置选项
这个yum配置文件应该只有一个main位于/etc/yum.conf
cat /etc/yum.conf [main]
yum 的缓存目录
cachedir=/var/cache/yum/$basearch/$releasever debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php? project_id=19&ref=http://bugs.centos.org/bug_report_page.p hp? category=yum distroverpkg=centos-release
repository部分定义了一个源服务器的具体配置
可以有一到多个,位于/etc/yum.repos.d/
ls /etc/yum.repos.d/ CentOS-Base.repo #网络源的配置 CentOS-fasttrack.repo CentOS-Vault.repo CentOS-Debuginfo.repo CentOS-Media.repo #本地源的配置 oldboy.repo
grep -v "^$" /etc/yum.repos.d/CentOS-Media.repo [c6-media] name=CentOS-$releasever - Media baseurl=file:///media/CentOS/ file:///media/cdrom/ file:///media/cdrecorder/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6