YUM仓库搭建-程序员宅基地

技术标签: 运维  操作系统  ruby  

1.1 yum介绍

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

1.2 rpm 介绍

1.2.1 概述

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

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

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

RPM另一个强大的功能是进行软件包的验证。如果我们担心误删了某个软件包中的某个文件,我们就可以对它进行验证。任何非正常现象将会被通知。如果需要的话还可以重新安装该软件包。在重新安装过程中,所有被修改过的配置文件将被保留。

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

概括的说:RPM有五种基本的操作功能(不包括创建软件包):安装、卸载、升级、查询、和验证。关于rpm命令的使用我们可以用以下命令:

[root@hostname root]rpm -help

1.2.2 RPM工具功能

1) 安装

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

2 )删除

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/

转载于:https://www.cnblogs.com/blsnt/p/10025635.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30379911/article/details/95112979

智能推荐

5个超厉害的资源搜索网站,每一款都可以让你的资源满满!_最全资源搜索引擎-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏41次。生活中我们无时不刻不都要在网站搜索资源,但就是缺少一个趁手的资源搜索网站,如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间!今天小编在这里为大家分享5款超厉害的资源搜索网站,每一款都可以让你的资源丰富精彩!网盘传奇一款最有效的网盘资源搜索网站你还在为找网站里面的资源而烦恼找不到什么合适的工具而烦恼吗?这款网站传奇网站汇聚了4853w个资源,并且它每一天都会持续更新资源;..._最全资源搜索引擎

Book类的设计(Java)_6-1 book类的设计java-程序员宅基地

文章浏览阅读4.5k次,点赞5次,收藏18次。阅读测试程序,设计一个Book类。函数接口定义:class Book{}该类有 四个私有属性 分别是 书籍名称、 价格、 作者、 出版年份,以及相应的set 与get方法;该类有一个含有四个参数的构造方法,这四个参数依次是 书籍名称、 价格、 作者、 出版年份 。裁判测试程序样例:import java.util.*;public class Main { public static void main(String[] args) { List <Book>_6-1 book类的设计java

基于微信小程序的校园导航小程序设计与实现_校园导航微信小程序系统的设计与实现-程序员宅基地

文章浏览阅读613次,点赞28次,收藏27次。相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低学校的运营人员成本,实现了校园导航的标准化、制度化、程序化的管理,有效地防止了校园导航的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修正建筑速看等信息。课题主要采用微信小程序、SpringBoot架构技术,前端以小程序页面呈现给学生,结合后台java语言使页面更加完善,后台使用MySQL数据库进行数据存储。微信小程序主要包括学生信息、校园简介、建筑速看、系统信息等功能,从而实现智能化的管理方式,提高工作效率。

有状态和无状态登录

传统上用户登陆状态会以 Session 的形式保存在服务器上,而 Session ID 则保存在前端的 Cookie 中;而使用 JWT 以后,用户的认证信息将会以 Token 的形式保存在前端,服务器不需要保存任何的用户状态,这也就是为什么 JWT 被称为无状态登陆的原因,无状态登陆最大的优势就是完美支持分布式部署,可以使用一个 Token 发送给不同的服务器,而所有的服务器都会返回同样的结果。有状态和无状态最大的区别就是服务端会不会保存客户端的信息。

九大角度全方位对比Android、iOS开发_ios 开发角度-程序员宅基地

文章浏览阅读784次。发表于10小时前| 2674次阅读| 来源TechCrunch| 19 条评论| 作者Jon EvansiOSAndroid应用开发产品编程语言JavaObjective-C摘要:即便Android市场份额已经超过80%,对于开发者来说,使用哪一个平台做开发仍然很难选择。本文从开发环境、配置、UX设计、语言、API、网络、分享、碎片化、发布等九个方面把Android和iOS_ios 开发角度

搜索引擎的发展历史

搜索引擎的发展历史可以追溯到20世纪90年代初,随着互联网的快速发展和信息量的急剧增加,人们开始感受到了获取和管理信息的挑战。这些阶段展示了搜索引擎在技术和商业模式上的不断演进,以满足用户对信息获取的不断增长的需求。

随便推点

控制对象的特性_控制对象特性-程序员宅基地

文章浏览阅读990次。对象特性是指控制对象的输出参数和输入参数之间的相互作用规律。放大系数K描述控制对象特性的静态特性参数。它的意义是:输出量的变化量和输入量的变化量之比。时间常数T当输入量发生变化后,所引起输出量变化的快慢。(动态参数) ..._控制对象特性

FRP搭建内网穿透(亲测有效)_locyanfrp-程序员宅基地

文章浏览阅读5.7w次,点赞50次,收藏276次。FRP搭建内网穿透1.概述:frp可以通过有公网IP的的服务器将内网的主机暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的服务器上,客户端装在内网主机上。2.简单的图解:3.准备工作:1.一个域名(www.test.xyz)2.一台有公网IP的服务器(阿里云、腾讯云等都行)3.一台内网主机4.下载frp,选择适合的版本下载解压如下:我这里服务器端和客户端都放在了/usr/local/frp/目录下4.执行命令# 服务器端给执_locyanfrp

UVA 12534 - Binary Matrix 2 (网络流‘最小费用最大流’ZKW)_uva12534-程序员宅基地

文章浏览阅读687次。题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=93745#problem/A题意:给出r*c的01矩阵,可以翻转格子使得0表成1,1变成0,求出最小的步数使得每一行中1的个数相等,每一列中1的个数相等。思路:网络流。容量可以保证每一行和每一列的1的个数相等,费用可以算出最小步数。行向列建边,如果该格子是_uva12534

免费SSL证书_csdn alphassl免费申请-程序员宅基地

文章浏览阅读504次。1、Let's Encrypt 90天,支持泛域名2、Buypass:https://www.buypass.com/ssl/resources/go-ssl-technical-specification6个月,单域名3、AlwaysOnSLL:https://alwaysonssl.com/ 1年,单域名 可参考蜗牛(wn789)4、TrustAsia5、Alpha..._csdn alphassl免费申请

测试算法的性能(以选择排序为例)_算法性能测试-程序员宅基地

文章浏览阅读1.6k次。测试算法的性能 很多时候我们需要对算法的性能进行测试,最简单的方式是看算法在特定的数据集上的执行时间,简单的测试算法性能的函数实现见testSort()。【思想】:用clock_t计算某排序算法所需的时间,(endTime - startTime)/ CLOCKS_PER_SEC来表示执行了多少秒。【关于宏CLOCKS_PER_SEC】:以下摘自百度百科,“CLOCKS_PE_算法性能测试

Lane Detection_lanedetectionlite-程序员宅基地

文章浏览阅读1.2k次。fromhttps://towardsdatascience.com/finding-lane-lines-simple-pipeline-for-lane-detection-d02b62e7572bIdentifying lanes of the road is very common task that human driver performs. This is important ..._lanedetectionlite

推荐文章

热门文章

相关标签