更新centos系統的repo檔案

(-----------------------------------------------------

http://mirrors.ustc.edu.cn/help/centos.html(這個很有用)

http://mirrors.163.com/.help/centos.html(這個我嘗試了,不能正常使用)

這兩個網址先寫下來,後面要用,很重要!

------------------------------------------------------)

阿里云yum源:http://mirrors.aliyun.com/repo/

方法一:

国内比较好的yum源主要是阿里云、163以及搜狐的,更新yum的命令如下:

1. 进入yum源配置目录

cd /etc/yum.repos.d

2. 备份原来的yum源,便于恢复,改啥都得留个备份,万一玩儿了还能恢复

mv CentOS-Base.repo CentOS-Base.repo.bak

PS:

enabled=1 #启用yum源,0为不启用,1为启用 
gpgcheck=1 #检查GPG-KEY,0为不检查,1为检查 
gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release #GPG-KEY路径

3. 下载新的CentOS-Base.repo 到/etc/yum.repos.d/

----阿里云镜像源

# CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo

# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

----163镜像源

# CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS5-Base-163.repo

# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo

# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

4. 运行yum makecache生成缓存

yum clean all #清除yum缓存
yum makecache #缓存本地yum源中的软件包信息

报错信息:

Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in <module>
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 298, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 187, in main
    (result, resultmsgs) = base.buildTransaction()
  File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 1003, in buildTransaction
    (rescode, restring) = self.resolveDeps()
  File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 781, in resolveDeps
    for po, dep in self._checkFileRequires():
  File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 1066, in _checkFileRequires
    self.installedFileProviders = self.rpmdb.fileRequiresData()
  File "/usr/lib/python2.6/site-packages/yum/rpmsack.py", line 910, in fileRequiresData
    rpmdbv = self.simpleVersion(main_only=True)[0]
  File "/usr/lib/python2.6/site-packages/yum/rpmsack.py", line 1141, in simpleVersion
    if 'checksum_type' in ydbi and 'checksum_data' in ydbi:
  File "/usr/lib/python2.6/site-packages/yum/rpmsack.py", line 1870, in __contains__
    x = self.get(attr)
  File "/usr/lib/python2.6/site-packages/yum/rpmsack.py", line 1900, in get
    res = self._read(attr)
  File "/usr/lib/python2.6/site-packages/yum/rpmsack.py", line 1817, in _read
    info = misc.stat_f(fn)
  File "/usr/lib/python2.6/site-packages/yum/misc.py", line 920, in stat_f
    return os.stat(filename)
OSError: [Errno 5] 输入/输出错误: '/var/lib/yum/yumdb/a/f6c47592fc6a105295afe1701509e359802ea041-avahi-glib-0.6.25-15.el6-x86_64/checksum_data'

解决方法:

 我将/var/lib/yum/yumdb 文件挪走后,yum 恢复正常

----EPEL

EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS等提供高质量软件包的项目。装上了 EPEL,就像在 Fedora 上一样,可以通过 yum install 软件包名,即可安装很多以前需要编译安装的软件、常用的软件或一些比较流行的软件,比如现在流行的nginx、htop、ncdu、vnstat等等,都可以使用EPEL很方便的安装更新。

目前可以直接通过执行命令: yum install epel-release 直接进行安装,如果此命令无法安装可以尝试以下方法

----安装EPEL 阿里云源

1、备份(如有配置其他epel源)

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup

2、下载新repo 到/etc/yum.repos.d/

epel(RHEL 7) 

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

epel(RHEL 6)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

epel(RHEL 5)

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo

----官方源直接安装

CentOS/RHEL 5 :

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm

CentOS/RHEL 6 :

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

CentOS/RHEL 7 :

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

方法二:

解决了什么问题:一键式更新yum源,省去了复杂的命令和步骤

注:所有执行的脚本都需要root身份来执行,执行方法:以root身执行命令:bash xxx.sh

功能:更新系统的yum源为163的yum源

适用系统版本:线上centos5/6系列,redhat5系列,兼容32位和64位

vim update_yum_source.sh

#!/bin/bash
#########################################
#Function:    update yum source
#Usage:       bash update_yum_source.sh
#Author:      Customer service department
#Company:     Alibaba Cloud Computing
#Version:     2.1
#########################################
check_os_release()
{
  while true
  do
  os_release=$(grep "Red Hat Enterprise Linux Server release" /etc/issue 2>/dev/null)
  os_release_2=$(grep "Red Hat Enterprise Linux Server release" /etc/redhat-release 2>/dev/null)
  if [ "$os_release" ] && [ "$os_release_2" ]
  then
    echo "$os_release"
    break
  fi
  os_release=$(grep "CentOS release" /etc/issue 2>/dev/null)
  os_release_2=$(grep "CentOS release" /etc/*release 2>/dev/null)
  if [ "$os_release" ] && [ "$os_release_2" ]
  then
    echo "$os_release"
    break
  fi
  break
  done
}


modify_rhel5_yum()
{
  rpm --import http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-5
  cd /etc/yum.repos.d/
  wget http://mirrors.163.com/.help/CentOS-Base-163.repo -O CentOS-Base-163.repo
  sed -i '/mirrorlist/d' CentOS-Base-163.repo
  sed -i 's/\$releasever/5/' CentOS-Base-163.repo
  yum clean metadata
  yum makecache
  cd ~
}


modify_rhel6_yum()
{
  rpm --import http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-6
  cd /etc/yum.repos.d/
  wget http://mirrors.163.com/.help/CentOS-Base-163.repo -O CentOS-Base-163.repo
  sed -i '/mirrorlist/d' CentOS-Base-163.repo
  sed -i '/\[addons\]/,/^$/d' CentOS-Base-163.repo
  sed -i 's/\$releasever/6/' CentOS-Base-163.repo
  sed -i 's/RPM-GPG-KEY-CentOS-5/RPM-GPG-KEY-CentOS-6/' CentOS-Base-163.repo
  yum clean metadata
  yum makecache
  cd ~
}


##########start######################
#check lock file ,one time only let the script run one time 
LOCKfile=/tmp/.$(basename $0)
if [ -f "$LOCKfile" ]
then
  echo -e "\033[1;40;31mThe script is already exist,please next time to run this script.\n\033[0m"
  exit
else
  echo -e "\033[40;32mStep 1.No lock file,begin to create lock file and continue.\n\033[40;37m"
  touch $LOCKfile
fi


#check user
if [ $(id -u) != "0" ]
then
  echo -e "\033[1;40;31mError: You must be root to run this script, please use root to install this script.\n\033[0m"
  rm -rf $LOCKfile
  exit 1
fi


os_type=$(check_os_release)
if [ "X$os_type" == "X" ]
then
  echo -e "\033[1;40;31mOS type is not RedHat or CentOS,So this script is not executede.\n\033[0m"
  rm -rf $LOCKfile
  exit 0
else
  echo -e "\033[40;32mThis OS is $os_type.\033[40;37m"
  echo "$os_type" |grep 5 >/dev/null
  if [ $? -eq 0 ]
  then
    modify_rhel5_yum
    rm -rf $LOCKfile
    exit 0
  fi
  echo "$os_type"|grep 6 >/dev/null
  if [ $? -eq 0 ]
  then
    modify_rhel6_yum
    rm -rf $LOCKfile
    exit 0
  fi
fi
rm -rf $LOCKfile

执行方法:以root身执行命令,bash update_yum_source.sh

更新yum

yum update

>>>>THE END>>>>至此,redhat配置yum源完成,可以开始尝试你的yum命令是否有效

异常1

在执行步骤7的过程
执行 yum makecache
可能出现"http://mirrors.163.com/centos/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found"
这个时候需要将'/etc/yum.repos.d/rhel-source.repo'文件中的的$releasever替换成你的系统版本号即可,根据我的版本替换成5或者6
例如:"http://mirrors.163.com/centos/6/os/x86_64/repodata/repomd.xml"即可访问到这个文件

异常2

Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

在网上查了查,解决办法都是编辑/etc/yum.repos.d/epel.repo,把基础的恢复,镜像的地址注释掉

#baseurl
mirrorlist

//改成

baseurl
#mirrorlist