安装软件的方式?

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命令用法

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

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