Linux yum 使用手册,以及内网源搭建

Linux yum 内网源搭建

在 Linux 中,我们经常安装各个开源网站编写的代码、软件,在安装的时候各个软件之间有各种依赖关系,还可能出现版本问题,比如 Centos7 支持的软件, Centos6 就未必支持。如果是 Java 开发应该知道我们可以使用 pom.xml 文件来解决这些依赖,以及快速的升级某些软件。在 Linux 中也有类似的软件可以解决这些问题,那便是本章节的主角 yum

Yum 介绍

Yellowdog Updater Modified,是一个专门为了解决包的依赖关系而存在的软件包管理器,很好的解决了 RPM 所面临的软件包依赖问题。可以快速的安装、删除、更新各个软件包,并调节他们之间的依赖关系。

在 Centos7 中,默认安装了 yum,我们可以直接输入命令来查看:

yum # 运行 yum,无参数情况下会打印使用手册
man yum # 使用 man 来查看手册

Linux yum 使用手册,以及内网源搭建_第1张图片

可以看到,上面有详细的各个子命令的使用方式,一般分为两类

一类为 command 命令,进行某项任务的运行:

yum [options] [command]
command 描述
clean 清除yum缓存
installl 安装一个包
repolist 显示软件仓库位置
resintall 重新安装一个包
search 根据关键字或者名字来搜索一个包
upgrade 升级所有包,并自动解决依赖关系
remove 删除一个包
check 检查 RPM 数据库是否有问题
check-update 检查是否有可用的软件包更新
history 显示使用yum的历史命令
list [name] 列出所有安装的软件包,如果带有name,则会过滤name
info [name] 列出所有安装的软件包的信息,如果带有name,则会过滤name
deplist [name] 列出所有安装的软件包的依赖关系,如果带有name,则会过滤name
makecache 创建元数据缓存
shell 开启一个 yum shell 进行交互

一类为 options 参数,指定运行过程中的一些参数:

yum [options] [command]
options 描述
-t –tolerant;完全忽略所有错误,不报错
-c [file] –config=[file];使用一个配置文件进行运行
-q –quiet;静默执行
-v –verbose;尽量打印所有日志
-y –assumeyes;所有需要判断的地方全部回答 yes
–installroot=[path] 设置安装包的根路径
–enablerepo=[repo] 启用软件源,repo支持通配符*
–disablerepo=[repo] 停止软件园,repo支持通配符*
–obsoletes 更新软件时,处理软件包的取代关系
–downloadonly 仅仅下载但不安装或更新,一般用于在具有公网条件的服务器上下载rpm包,以便于集群内部的离线安装
–downloaddir=[path] 指定某个文件夹用于保存如果有的安装包,一般结合–downloadonly使用

更加详细的其他命令,可以查看:http://yum.baseurl.org/

通过 yum 安装 JSON 解析器 jq

jq 是一个 json 解析器,是一个在 shell 中快速解析 json 和 json 格式化相关的命令。这里我们并不关心 jq 命令实际能有什么用,更加关心 yum 怎么安装 jq

首先要进行搜索是否 repo源 含有 jq,我们可以使用 yum list 来搜索是否含有:

yum list jq

Linux yum 使用手册,以及内网源搭建_第2张图片

可以看到搜索到了适用于当前服务器的软件包有一个 jq.x86_64,版本为 1.6-2.e17。那么我们直接安装该软件包:

yum install jq
# 如果需要解析关系,或者因为需要依赖而安装其他包,会跳出进行二次确认
# 这个时候可以输入 y 进行确认。

Linux yum 使用手册,以及内网源搭建_第3张图片

安装完毕后,会打印安装的信息,并且就已经可以使用 jq 命令了:

jq

Linux yum 使用手册,以及内网源搭建_第4张图片

/var/run/yum.pid 已被锁定

当弹出该信息的时候,说明另外一个进程正在使用 yum 命令,当前进程未能获取到 /var/run/yum.pid 写权限。因为 yum 不能多线进行操作,只能一个一个操作,这里使用轮循的方式去尝试获取 yum.pid 的写权限。

Linux yum 使用手册,以及内网源搭建_第5张图片

搭建自己的 yum 源

缘由

在服务器环境中,大多数服务器是不具有公网环境,且与外网相隔的。此时我们需要自己进行 yum源 的搭建。

yum 源

上面我们安装了 jq 这个软件包,但软件包是会统一进行管理的,是谁在维护呢?yum 的解决思路是使用配置文件来解决(与 maven 中的 setting.xml 一样)。在 /etc/yum.repos.d/ 目录下,有多个 *.repo 文件,这些 .repo 文件都是 yum 的配置文件:

ls -ltr /etc/yum.repos.d/

Linux yum 使用手册,以及内网源搭建_第6张图片

默认情况下至少有 CentOS-Base.repo 这个文件,而这个文件也是默认生效的 repo 文件。查看该文件内容:

cat /etc/yum.repos.d/CentOS-Base.repo

Linux yum 使用手册,以及内网源搭建_第7张图片

可以看到每个小节都是 [xxx] 开头代表容器名称;每个小节都含有 namemirrirlistfailovermethodbaseurlgpgcheckgpgkeyenabled

  • name:容器说明,无实际作用。
  • mirrorlist:镜像站点,可以注释。
  • baseurl:使用哪一个 yum 源服务器地址,默认为 CentOS 官方,图示为阿里云。
  • enabled:是否生效,0 表示不生效。
  • gpgcheck:是否 RPM 数字证书生效,为 0 表示不生效。
  • gpgkey:数字证书的共钥文件保存位置,一般可以不设置。

当我们在安装 jq 的时候,就会先去 baseurl 中对应的仓库进行寻找适合当前服务器架构的包,找到后返回提供的 jq 安装包以及信息,就可以开始安装了。

像阿里云提供的源:

https://developer.aliyun.com/mirror/centos

所以我们也可以搭建类似于阿里云这样的一个镜像服务器,来提供 yum 镜像的服务;而其他内网服务器,则可以直接配置该服务器,当做 yum客户端 进行访问。

前提条件

这里所说的前提条件是当前内网环境:

  • 一个内网内所有服务器可访问的、可提供 HTTP 服务的服务器。
  • 该镜像服务器最好与其他服务器系统、架构相同,以便选择最适合的包。

仓库服务器搭建

我们选择 maggot111128.huangyichun.com 作为仓库服务器(192.168.111.128),其他服务器可以连接并获取包。并且将 RPM 包存放在 /opt/yum/yum_packages 中,在这里我们会放入一些 rpm 包(如果当前没有,后续我们会快速提供一些)。

mkdir -p /opt/yum/yum_packages

需要安装 createrepo,可以快速帮助我们构建本地仓库服务器:

yum -y install createrepo

开始本地镜像服务器构建:

cd /opt/yum/yum_packages
createrepo ./ # 请确保在 /opt/yum/yum_packages 目录下运行
# 当前目录下已经存在一个rpm包: httpd-2.4.6-97.el7.centos.5.x86_64.rpm
# 如果需要测试,可以使用 yum install --downloadonly --downloaddir=/opt/yum/yum_packages [repo] 进行下载

Linux yum 使用手册,以及内网源搭建_第8张图片

启动 HTTP - 极简

常用的操作是使用 apache 直接关联 yum仓库,如果所在环境暂时没有 ApacheServer 或者只是临时使用 yum服务,可以使用 python 临时启动一个端口服务,如下,启动了一个 10086 端口的 http 服务:

python -m SimpleHTTPServer 10086 # 注意运行位置在 /opt/yum/yum_packages

在这里插入图片描述

此时已经可以通过 http 方式访问到资源,说明搭建成功:

Linux yum 使用手册,以及内网源搭建_第9张图片

客户端配置

当我们自己的 yum源 已经搭建完毕后,客户端只需要需要进行仓库配置才能正确访问到仓库,配置文件统一存放在/etc/yum.repos.d/下,现在我们在一台客户机添加上文建立的 clickhouse 仓库:

vim /etc/yum.repos.d/my.repo # 新增一个repo名为 my.repo
# 写入内容
[myRepo]
name=myRepo-Test
baseurl=http://192.168.111.128:10086/
gpgcheck=0
enabled=1

接下来在新配置好的仓库我们可以查到我们放入的相关的包了:

yum list |grep httpd | grep myRepo

你可能感兴趣的:(shell,linux,服务器,运维)