安装软件的方式?

1.1 源代码编译安装

  • 优点:可以定制化安装目录,按需开启功能等

  • 缺点:需要查找并试验出合适的编译参数,诸如mysql数据库之类的软件编译耗时过长

1.2 利用yum源安装rpm包

  • 优点:是全自动化安装,不需要为依赖问题发愁了

  • 缺点:自主性太差,软件的功能,存放的位置已经固定好了,不易变更

1.3 源码和yum结合

根据自己的需要做成定制rpm包-->搭建yum仓库-->yum安装

结合前两者优点,暂时未发现缺点,可能的缺点就是rpm包的通用性差,一般人不会定制rpm包

rpm 概述

RPM 前是Red Hat Package Manager(Red Hat包管理器),几乎所有的Linux发行版本都是用这种形式的软件包安装,更新和卸载软件。

rpm命令有五种功能(不包括创建软件包):安装,卸载,升级,查询,和验证,关于rpm命令的是用我们可以用rpm--help来获得

2.1 rpmbuild 简介

rpmbuild是redhat系的原生打包命令,这个命令的使用难点主要在于spec文件的编写,一个类似于kickstart的ks.cfg文件

作为一个试用工具,种种的繁琐,再没有替代品时还能存活,当有了其他简单工具时,他就力有不从了

参考定制nginx的spec文件

fpm 打包工具

fpm的作者是joradansissel

fpm的github:http://github.com/jordansissel/fpm

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

3.1 支持的类型包

支持的目标类型包

dir 将目录打包成所需要的类型,用语源码编译安装的软件包
rpm 对rpm进行转换
gem 对rubygem包进行转换
python  将python模块打包成相应的类型

支持的目标类型包

rpm 转换为rpm包
deb 转换为deb包
solaris 转换为solaris
puppet  转换为puppet模块

3.2 fpm安装

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

3.3 fpm参数

详细使用见fpm –help

常用参数
-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

3.4 yum安装是如何解决依赖问题的

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

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

3.5 实战定制nginx的rpm包

以制作nginx的rpm包为例

3.5.1 准备工作

安装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……..

如果是软链接文件就会报错

3.5.2 完整的命令

编辑安装前的脚本

[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仓库搭建

导言

yum主要用于自动安装,升级rpm软件包,他能自动查询并解决rpm包之间的依赖关系,要成功的使用yum工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库)

这个软件仓库我们习惯叫做yum源,网络傻姑娘有大量的yum源,但是由于受到桑落环境的限制,但是软件安装耗时过长甚至失败,特别是当一偶大量服务器大量软件包需要安装时,缓慢的进度条令人难以忍受,因此在优化时,经常更换国内的源。

相比较而言,本地yum源服务器最大的优点就是就欲望的跨素网络链接和稳定性,有了局域网中的yum源服务器,纪实在internet链接中断的情况下,也不会影响其他yum客户端的软件安装和升级

4.1 创建yum仓库目录

mkdir -p /application/yum/centos6/x86_64/
cd /application/yum/centos6/x86_64/
yumdownloader openssl-devel pcre-devel

4.2 安装createrepo软件

yum install -y createrepo

4.3 初始化repodata索引文件

createrepo -pdo \
/application/yum/centos6/x86_64/ \
/application/yum/centos6/x86_64/

4.4 提供yum服务

可以通过Apache或者nginx提供web服务,但是用python的http模版更简单,适用于内网环境

cd /application/yum/centos6/x86_64/

python -m SimpleHTTPServer 80 &>/dev/null &

可以通过浏览器查看

4.5 添加新的rpm包

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

4.6 客户端配置

[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库

4.7 yum命令用法

functionintroduction
安装软件包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

4.8 yum服务配置文件

配置文件分为两部分main和repository

4.8.1 全局配置文件

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

4.8.2 yum仓库配置文件

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
4.8.3 配置本地yum源
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