YUM仓库搭建

1.1 yum介绍

YUM主要用于自动安装、升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系。要成功的使用YUM工具安装更新软件或系统,就须要有一个包含各类rpm软件包的repository(软件仓库),这个软件仓库咱们习惯称为yum源。网络上有大量的yum源,但因为受到网络环境的限制,致使软件安装耗时过长甚至失败。特别是当有大量服务器大量软件包须要安装时,缓慢的进度条使人难以忍受。所以咱们在优化系统时,都会更换国内的源。相比较而言,本地YUM源服务器最大优势是局域网的快速网络链接和稳定性。有了局域网中的YUM源服务器,即使在Internet链接中断的状况下,也不会影响其余YUM客户端的软件安装和升级。php

1.2 rpm 介绍

1.2.1 概述

RPM全称是 Red Hat Package Manager(Red Hat包管理器)。几乎全部的 Linux 发行版本都使用这种形式的软件包管理安装、更新和卸载软件。html

RPM是一个开放的软件包管理系统。它工做于Red Hat Linux以及其它Linux和UNIX 系统,可被任何人使用。redhat软件公司鼓励其它厂商来了解RPM并在本身的产品中使用它。RPM的发布基于GPL协议。对于最终用户来讲,使用RPM所提供的功能来维护系统是比较容易和轻松的。安装、卸载和升级RPM软件包只需一条命令就能够搞定。RPM维护了一个全部已安装的软件包和文件的数据库,可让用户进行查询和验证工做。在软件包升级过程当中,RPM会对配置文件进行特别处理,绝对不会丢失以往的定制信息。对于程序员RPM可让咱们连同软件的源代码打包成源代码和二进制软件包供最终用户使用。python

RPM拥有功能强大的查询选项。咱们能够搜索数据库来查询软件包或文件。也能够查出某个文件属于哪一个软件包或出自哪儿。RPM软件包中的文件是以压缩格式存放的,拥有一个定制的二进制头文件,其中包含有关包和内容的信息,可让咱们对单个软件包的查询简便又快速。mysql

RPM另外一个强大的功能是进行软件包的验证。若是咱们担忧误删了某个软件包中的某个文件,咱们就能够对它进行验证。任何非正常现象将会被通知。若是须要的话还能够从新安装该软件包。在从新安装过程当中,全部被修改过的配置文件将被保留。linux

RPM设计目标之一就是要保持软件包的原始特征, 就象该软件的原始发布者发布软件时那样。经过使用RPM咱们能够拥有最初的软件和最新的补丁程序,还有详细的软件构建信息。nginx

归纳的说:RPM有五种基本的操做功能(不包括建立软件包):安装、卸载、升级、查询、和验证。关于rpm命令的使用咱们能够用如下命令:程序员

[root@hostname root]rpm -help

1.2.2 RPM工具功能

1) 安装web

rpm -i ( or --install) options file1.rpm ... fileN.rpm 经过rpm -ivh能够把rpm软件包安装到系统中,固然也可使用不一样的参数选项,笔者建议使用-ivh ,使用该选项能够解决大部分rpm软件包的安装,至于详细的参数说明可用查看rpm的man 文档。

2 )删除sql

rpm -e ( or --erase) options pkg1 ... pkgN 若是某个软件包你不再想使用了,那就用以上这个命令完全的把你指定的rpm软件包清除掉把。

3 )升级数据库

rpm -U ( or --upgrade) options file1.rpm ... fileN.rpm 因为开源软件更新速度快,用户固然要使用最新版本的软件包,此时最合适的就是rpm升级功能,固然最理想的参数选项就是-Uvh。

4 )查询

rpm -q ( or --query) options 实际上咱们一般使用rpm工具最多的功能仍是它的查询功能,好比查看软件包的版本、依赖关系等软件包的详细说明都要用到。最有用的参数选项是-qpi。

5 )校验已安装的软件包

rpm -V ( or --verify, or -y) options 通常咱们可用经过该命令来验证已安装软件包,根据笔者的经验该命令通常没什么用途,只作一个了解就ok了。

参考:https://www.ibm.com/developerworks/cn/linux/l-rpm/

1.3 FPM打包工具

1.3.1 FPM功能

简单说就是将一种类型的包转换成另外一种类型。

1.3.2 . 支持的源类型包

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

1.3.3 支持的目标类型包

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

1.4 服务端配置

1.4.1 FPM安装

fpm是ruby写的,所以系统环境须要ruby,且ruby版本号大于1.8.5。

# 安装ruby模块
yum -y install ruby rubygems ruby-devel

# 查看当前使用的rubygems仓库
gem sources list

# 添加淘宝的Rubygems仓库,外国的源慢,移除原生的Ruby仓库
gem sources -a http://mirrors.aliyun.com/rubygems/ --remove http://rubygems.org/

# 安装fpm,gem从rubygem仓库安装软件相似yum从yum仓库安装软件。首先安装低版本的json,高版本的json须要ruby2.0以上,而后安装低版本的fpm,够用。
gem install json -v 1.8.3
gem install fpm -v 1.3.3
# 上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm
[root@m01 tools]# gem install fpm
Fetching: cabin-0.9.0.gem (100%)
Successfully installed cabin-0.9.0
Fetching: backports-3.11.1.gem (100%)
Successfully installed backports-3.11.1
Fetching: arr-pm-0.0.10.gem (100%)
Successfully installed arr-pm-0.0.10
Fetching: clamp-1.0.1.gem (100%)
Successfully installed clamp-1.0.1
Fetching: ffi-1.9.21.gem (100%)
Building native extensions.  This could take a while...
.......
Parsing documentation for pleaserun-0.0.30
Installing ri documentation for pleaserun-0.0.30
Parsing documentation for fpm-1.9.3
Installing ri documentation for fpm-1.9.3
14 gems installed  
[root@m01 tools]# echo $?  #不知道有没有安装好的话,能够检测这条命令是否执行成功
0
说明:过程可能会有点慢

1.4.1.1 安装时遇到的问题

1.Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}
解决方法:
[root@m01~]# yum install -y rpm-build
 
2.若是里面有gcc make的错误.
解决方法:
yum install -y gcc  

1.4.2 FPM参数

详细使用见fpm –help

经常使用参数
-s          指定源类型
-t          指定目标类型,即想要制做为何包
-n          指定包的名字
-v          指定包的版本号
-C          指定打包的相对路径  Change directory to here before searching forfiles
-d          指定依赖于哪些包
-f          第二次打包时目录下若是有同名安装包存在,则覆盖它
-p          输出的安装包的目录,不想放在当前目录下就须要指定
--post-install      软件包安装完成以后所要运行的脚本;同--after-install
--pre-install       软件包安装完成以前所要运行的脚本;同--before-install
--post-uninstall    软件包卸载完成以后所要运行的脚本;同--after-remove
--pre-uninstall     软件包卸载完成以前所要运行的脚本;同--before-remove

1.4.3 使用实例–实战定制nginx的RPM包

1.4.3.1 安装nginx

  • 检测80端口是否开启或者被占用(若是开启请关闭)
lsof -i:80
  • 检查防火墙是否开启(我这是centos7)
[root@cs tools]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
  • 检查selinux是否开启
[root@cs tools]# grep 'SELINUX' /etc/selinux/config 
# SELINUX= can take one of these three values:
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
SELINUXTYPE=targeted
  • 下载并安装nginx
yum -y install pcre-devel openssl-devel
useradd nginx -M -s /sbin/nologin
tar xf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure --prefix=/application/nginx-1.12.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /application/nginx-1.12.2/ /application/nginx

1.4.4 编写脚本

[root@oldboy ~]# cd /server/scripts/
[root@oldboy scripts]# vim nginx_rpm.sh  # 这是安装完rpm包要执行的脚本
#!/bin/bash

useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.12.2/ /application/nginx

1.4.5 打包

[root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.12.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.12.2/
Created package {:path=>"nginx-1.12.2-1.x86_64.rpm"}
fpm          #固定命令
-t            #指定目标类型,即想要制做为何包
-s            #指定源类型
rpm          #对rpm进行转换
dir           #将目录打包成所须要的类型,能够用于源码编译安装的软件包
-n            #指定包名
-v            #指定包的版本号
-d            #指定依赖哪些包
-f            #第二次打包时目录下若是有同名安装包在,则覆盖它
--post-install      #软件包安装完成以后所要运行的脚本;同--after-install
libiconv-devel  (打包php的时候5.5以上的php不要安装这个依赖包,不然你打包好以后,yum安装会报错)
[root@m01 server]# ll -h nginx-1.12.2-1.x86_64.rpm 
-rw-r--r-- 1 root root 2.6M Feb 21 03:13 nginx-1.12.2-1.x86_64.rpm
  • 查看rpm自带执行脚本,执行脚本是否是以文件的形式存在rpm中的
[root@cs tools]# rpm -qp --scripts nginx-1.12.2-1.x86_64.rpm 
postinstall scriptlet (using /bin/sh):
#!/bin/bash

useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.12.2/ /application/nginx
  • 查看rpm的依赖
[root@cs tools]# rpm -qpR nginx-1.12.2-1.x86_64.rpm 
pcre-devel
openssl-devel
/bin/sh
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
  • 查看rpm的内容
[root@cs tools]# rpm -qpl nginx-1.12.2-1.x86_64.rpm 
/application/nginx-1.12.2/conf/fastcgi.conf
/application/nginx-1.12.2/conf/fastcgi.conf.default
/application/nginx-1.12.2/conf/fastcgi_params
/application/nginx-1.12.2/conf/fastcgi_params.default
/application/nginx-1.12.2/conf/koi-utf
/application/nginx-1.12.2/conf/koi-win
/application/nginx-1.12.2/conf/mime.types
....
  • 查看rpm包信息
[root@cs tools]# rpm -qpi nginx-1.12.2-1.x86_64.rpm 
Name        : nginx
Version     : 1.12.2
Release     : 1
Architecture: x86_64
Install Date: (not installed)
Group       : default
Size        : 5686816
License     : unknown
Signature   : (none)
Source RPM  : nginx-1.12.2-1.src.rpm
Build Date  : Wed 21 Feb 2018 01:24:36 PM CST
Build Host  : cs
Relocations : / 
Packager    : <root@cs>
Vendor      : root@cs
URL         : http://example.com/no-uri-given
Summary     : no description given
Description :
no description given

1.4.6 安装rpm包

1.4.6.1 安装rpm包的三种方法

rpm命令安装
[root@LB-nginx-01 ~]# rpm -ivh nginx-1.12.2-1.x86_64.rpm
error: Failed dependencies:
       pcre-devel is needed by nginx-1.12.2-1.x86_64
       openssl-devel is needed by nginx-1.12.2-1.x86_64
但会报如上依赖错误,须要先yum安装依赖才能安装rpm包。
yum命令安装rpm包
yum -y localinstall nginx-1.12.2-1.x86_64.rpm
这个命令会自动先安装rpm包的依赖,而后再安装rpm包。
搭建内网yum仓库YUM仓库搭建

1.4.7 错误说明:

[root@m01 application]# fpm -s dir -t rpm -n mysql -v 5.6.34   -f /application/mysql-5.6.34-linux-glibc2.5-x86_64  --post-install /server/scripts/mysql_rpm.sh 
All flags should be before the first argument (stray flags found: ["--post-install"] {:level=>:warn}
Invalid package configuration: Cannot package the path './--post-install', does it exist? {:level=>:error}
解决方法: --post-install不能放到最后,选项的顺序最好不要随意变换

1.4.8 安装createrepo软件(建立存储库)

yum -y install createrepo
  • 建立yum仓库目录
mkdir -p /application/nginx/html/CentOS7/
#将保存好的rpm包放入/application/nginx/html/CentOS7/
  • 初始化yum仓库
createrepo -pdo /application/nginx/html/CentOS7/ /application/nginx/html/CentOS7/
  • 当有新的rpm包执行更新(刚开始不用执行)
createrepo --update /application/nginx/html/CentOS7/
  • 修改nginx配置文件,好默认可以访问CentOS目录下的rpm包
cat  >/application/nginx/conf/nginx.conf<<EOF
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html/CentOS7;
            autoindex on;         ##开启目录浏览功能,默认是不支持的
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
EOF
  • 检查语法重启nginx服务
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx
  • 只下载软件不安装
yum install yum-utils -y   #安装yum包相关软件
yumdownloader pcre-devel openssl-devel
  • 每加入一个rpm包就要更新一下
createrepo --update/application/nginx/html/CentOS7

#访问ip能够查看yum仓库内容,下面会多个一个repodata/目录,是createrepo生成的。
#这是一个简单的yum仓库就搭建完成了,可是如今只有nginx的功能,之后能够增长更多的内容,放进来目录便可

1.5 客户端部署

  • 备份原有repo
cd /etc/yum.repos.d/
mkdir yum_bak
#把以前的yum源移动到刚建立的目录作备用
mv *.repo yum_bak
  • 新建一个本地yum源文件
cat >/etc/yum.repos.d/local.repo<<EOF
[local]
name=Server
baseurl=http://10.0.0.61
enabled=1
gpgcheck=0
EOF
  • 清空以前的缓存
yum clean all
  • 在哪一个路径下执行yum操做没有影响
[root@web01 yum.repos.d]# yum install nginx
  • 检查nginx是否安装成功
[root@web01 yum.repos.d]# netstat -lntup|grep nginx
tcp        0      0 0.0.0.0:80       0.0.0.0:*       LISTEN      2022/nginx          
[root@web01 yum.repos.d]# ps -ef|grep nginx
root   2022   1  0 21:52 ?  00:00:00 nginx: master process/application/nginx/sbin/nginx
www   2023   2022  0 21:52 ?     00:00:00 nginx: worker process       
root   2027   1947  0 21:52 pts/1    00:00:00 grep nginx
  • 其余
cachedir=/var/cache/yum
  //yum 缓存的目录,yum 在此存储下载的rpm 包和数据库,默认设置为/var/cache/yum

keepcache=0
  //安装完成后是否保留软件包,0为不保留(默认为0),1为保留

debuglevel=2
  //Debug 信息输出等级,范围为0-10,缺省为2

logfile=/var/log/yum.log
  //yum 日志文件位置。用户能够到/var/log/yum.log 文件去查询过去所作的更新。

exactarch=1
  //有1和0两个选项,设置为1,则yum 只会安装和系统架构匹配的软件包,例如,yum 不会将i686的软件包安装在适合i386的系统中。默认为1。

obsoletes=1
  //这是一个update 的参数,具体请参阅yum(8),简单的说就是至关于upgrade,容许更新陈旧的RPM包。

gpgcheck=1 
 // 有1和0两个选择,分别表明是不是否进行gpg(GNU Private Guard) 校验,以肯定rpm 包的来源是有效和安全的。这个选项若是设置在[main]部分,则对每一个repository 都有效。默认值为0。

plugins=1
  //是否启用插件,默认1为容许,0表示不容许。咱们通常会用yum-fastestmirror这个插件。

installonly_limit=5         #容许保留多少个内核包。

distroverpkg=redhat-release

  //指定一个软件包,yum 会根据这个包判断你的发行版本,默认是redhat-release,也能够是安装的任何针对本身发行版的rpm 包。

rpm的经常使用命令

rpm -qpi your.rpm #查看rpm包信息
rpm -qpl your.rpm #查看rpm包内容
rpm -qpR your.rpm #查看rpm包的依赖
rpm -qp --scripts your.rpm #查看rpm包要执行的脚本,存的不是文件了。
rpm -ivh your.rpm #安装rpm包

老男孩参考文档http://blog.oldboyedu.com/autodeploy-rpm/

相关文章
相关标签/搜索