Linux yum源问题基础分析和排查

前言

Linux使用过程中,通常需要安装不少公共软件、工具、补丁和升级包等,系统本身提供了比较便利的方式,

那就是yum(REHL、CentOS、Fedora等)/apt-get(Ubuntu、Debian等)/zypp(openSUSE),可以通过命令行直接从软件源(yum源)下载。

Yum(全称 Yellow Dog Updater)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。

针对yum/apt-get命令的使用不多细说,大家可以通过man命令来查看使用方式,这里我们主要讨论yum源相关问题。

基本知识

Linux通过yum/apt-get/zypper安装软件的过程简而言之就是读取配置文件和请求yum源。

yum源

1. 阿里云内网yum源

经典网络:

mirrors.aliyuncs.com

VPC网络:

mirrors.cloud.aliyuncs.com

sg.mirrors.cloud.aliyuncs.com

2. 阿里云公网yum源

mirrors.aliyun.com

3. 其他公网yum源

e.g.

mirrors.163.com

mirrors.soho.com

mirrors.fedoraproject.org

yum源配置文件

执行命令时候从对应路径配置文件读取yum源地址信息:

yum - /etc/yum.repos.d/*

apt-get - /etc/apt/sources.list

zypper - /etc/zypp/repos.d/*

yum源自动更新工具

国内站:https://help.aliyun.com/knowledge_detail/41177.html

国际站:https://www.alibabacloud.com/help/en/faq-detail/41177.htm

update_source.sh脚本可以下载下来直接执行一下或者打开看看具体是怎么写的,这里截取脚本中部分信息,以便大家快速了解。

#检查OS信息check_os_release()

#基于操作系统修改更新源配置文件,这里列出部分系统:rhel7/ubuntu10/opensuse

modify_rhel7_yum(){

wget-O/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget-qO/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum clean metadata

yum makecache

cd~

}

update_ubuntu10_apt_source()

{

echo-e"\033[40;32mBackup the original configuration file,new name and path is /etc/apt/sources.list.back.\n\033[40;37m"

cp-fp/etc/apt/sources.list/etc/apt/sources.list.back

cat>/etc/apt/sources.list<

#ubuntu

debhttp://cn.archive.ubuntu.com/ubuntu/maverick main restricted universe multiverse

deb-src http://cn.archive.ubuntu.com/ubuntu/maverick main restricted universe multiverse

#163

deb http://mirrors.163.com/ubuntu/maverick main universe restricted multiverse

deb-src http://mirrors.163.com/ubuntu/maverick main universe restricted multiverse

deb http://mirrors.163.com/ubuntu/maverick-updates universe main multiverse restricted

deb-src http://mirrors.163.com/ubuntu/maverick-updates universe main multiverse restricted

#lupaworld

deb http://mirror.lupaworld.com/ubuntu/maverick main universe restricted multiverse

deb-src http://mirror.lupaworld.com/ubuntu/maverick main universe restricted multiverse

deb http://mirror.lupaworld.com/ubuntu/maverick-security universe main multiverse restricted

deb-src http://mirror.lupaworld.com/ubuntu/maverick-security universe main multiverse restricted

deb http://mirror.lupaworld.com/ubuntu/maverick-updates universe main multiverse restricted

deb http://mirror.lupaworld.com/ubuntu/maverick-proposed universe main multiverse restricted

deb-src http://mirror.lupaworld.com/ubuntu/maverick-proposed universe main multiverse restricted

deb http://mirror.lupaworld.com/ubuntu/maverick-backports universe main multiverse restricted

deb-src http://mirror.lupaworld.com/ubuntu/maverick-backports universe main multiverse restricted

deb-src http://mirror.lupaworld.com/ubuntu/maverick-updates universe main multiverse restrictedEOFapt-get 

update

}

update_opensuse_source()

{

mv/etc/zypp/repos.d/*/tmp/

zypper addrepo-f http://mirrors.aliyun.com/opensuse/distribution/13.1/repo/oss/openSUSE-13.1-Oss

zypper addrepo-f http://mirrors.aliyun.com/opensuse/distribution/13.1/repo/non-oss/openSUSE-13.1-Non-Oss

zypper addrepo-f http://mirrors.aliyun.com/opensuse/update/13.1/openSUSE-13.1-Update-Oss

zypper addrepo-f http://mirrors.aliyun.com/opensuse/update/13.1-non-oss/openSUSE-13.1-Update-Non-Oss

zypper addrepo-f http://mirrors.aliyun.com/opensuse/distribution/13.1/repo/oss/openSUSE-13.1-Oss-aliyun

zypper addrepo-f http://mirrors.aliyun.com/opensuse/distribution/13.1/repo/non-oss/openSUSE-13.1-Non-Oss-aliyun 

zypper addrepo-f http://mirrors.aliyun.com/opensuse/update/13.1/openSUSE-13.1-Update-Oss-aliyun

zypper addrepo-f http://mirrors.aliyun.com/opensuse/update/13.1-non-oss/openSUSE-13.1-Update-Non-Oss-aliyun

}

#脚本执行部分,核实当前是否在运行,检查用户是否是root,检测操作系统并修改配置文件

####################Start###################

#check lock file ,one time only let the script run one time

#check user

echo-e"\033[1;40;31mError: You must be root to run this script, please use root to install this script.\n\033[0m"

#modify source configuration

echo-e"\033[40;32mStep 3.Begin to modify the source configration file and update.\n\033[40;37m"

问题排查

1. 核实报错信息

各类问题排查第一步都是先弄清楚具体问题,有报错的提供报错信息或者截图,具体跑什么命令也一并核实清楚。也可以进一步核实确认一下之前是否正常,具体出现/发现问题的时间点。

2. 运行update_source.sh脚本

运行阿里云ECS Linux软件源更新工具这一步操作比较简单,我们可以直接方便快捷地完成,一般都建议先尝试运行脚本,再核实问题是否依旧。

3. 登陆排查

如果基于脚本无法解决或者脚本运行异常,那么建议登陆进行排查,排查操作包括但不限于以下一些:

a. 排除本地配置问题, 检查 /etc/yum.repos.d/ 目录下是否含有相关的 *.repo 文件

b. 基于网络类型实际查看各个yum源能否ping通,基于url测试80、443端口能否telnet通。

c.  脚本运行异常的,可用根据异常响应修改脚本或者直接根据操作系统,找到并执行脚本中对应操作系统更新软件源的命令部分。

d 如果核实是源有问题,提交工单反馈,并尝试临时更换其他公共源。

f. yum clean all清除本地缓存

e. 测试机对比测试/复现,一般针对特定地域yum源问题或者新建ECS实例yum异常。

常见问题

1. 无法更新,同时脚本执行失败,OS无法识别。

执行脚本报错The OS does not identify, So this script is not executed.


Linux yum源问题基础分析和排查_第1张图片

当前系统版本可能并没有在脚本中列出,遇上类似情况,参考脚本源信息直接将源写入配置文件/etc/apt/sources.list。

2. yum安装报错The requestd URL returned error: 404。

考虑本地cache过期引起,尝试yum clean all清理本地缓存。

3. apt-get update失败,卡在某个地方。

执行apt-get update后,发现pending在 xx% [Waiting for headers]。后续可能出现一些404等错误码。

Linux yum源问题基础分析和排查_第2张图片

Strace跟踪命令执行,能看到请求路径找不到,且卡住的时候有请求调用在重试和超时

Linux yum源问题基础分析和排查_第3张图片

此时可以尝试更换阿里云公网yum源或者使用第三方公共源对比尝试。

也可以尝试执行以下命令清理后再重试。

rm -rf /var/lib/apt/lists/partial/*

rm -rf /var/lib/apt/lists/*

apt-get clean

apt-get update

4. 执行yum时候出现502报错。

执行yum install看到请求yum源会有HTTP 502错误。

[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 502 Bad Gateway"

Linux yum源问题基础分析和排查_第4张图片

此时建议实际测试到yum源url访问是否正常,设置的yum源是否正常。也可以同步测试其他yum源。如果定位到是请求的阿里云yum源有问题,那么可以提交工单反馈。

原文作者:尘轩

你可能感兴趣的:(Linux yum源问题基础分析和排查)