Yum Repository详解

什么是YUM

YUM(Yellowdog Updater Modified)是Fedora、CentOS、RedHat中的软件包管理器。基于 RPM 包管理,YUM通过分析RPM header数据,自动处理依赖关系,从指定服务器自动下载安装所有依赖的软件包。

常用yum命令

安装软件

# yum install package1 [package2] [...]

重装软件

# yum reinstall package1 [package2] [...]

删除软件

# yum remove package1 [package2] [...]
或
# yum erase package1 [package2] [...]

升级软件

# yum update [package1] [package2] [...]
或
# yum upgrade [package1] [package2] [...]

当不指定参数时,升级所有软件。

检查更新

# yum check-update

查询信息

# yum info [...]

查看可用的RPM包

# yum list [...]

搜索软件

# yum search string1 [string2] [...]

清除缓存

# yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

下载并使metadata可用

# yum makecache [fast]

解决yum安装问题

可先试以下命令:

# yum clean all
# yum makecache

Structure needs cleaning
yum安装报错:Structure needs cleaning,可使用package-cleanup查找有问题的包,删除后再重新安装:

# package-cleanup --problems or --leaves or --orphans or --oldkernels
# rpm -e xxxxxxxxx

rpmdb open failed
错误信息如下:

error: db5 error(-30973) from dbenv->open: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 -  (-30973)
error: cannot open Packages database in /var/lib/rpm
CRITICAL:yum.main:

Error: rpmdb open failed

解决方法:

# rm -f /var/lib/rpm/__db*
# rpm --rebuilddb

更多yum工具,请查看yum-utils:

# man yum-utils

YUM Repository

我们要使用YUM,必须要先找到适合的YUM Server,配置YUM Repositry。CentOS有很多的镜像站点供全世界软件更新之用。CentOS安装后已配置好这些Yum Repository,配置文件位于/etc/yum.repos.d目录下,文件扩展名为repo,如您不慎误删可执行如下命令重新安装:

#rpm -Uvh http://mirror.centos.org/centos/7/os/x86_64/Packages/centos-release-7-6.1810.2.el7.centos.x86_64.rpm

repo文件

下面我们看一下CentOS-Base.repo的内容:

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates 
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$baasearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

从文件头的说明我们知道,镜像系统使用客户端的IP地址和每个镜像的更新状态来选取在地理位置上靠近客户端的镜像,如mirrorlist不工作时可以使用baseurl。
使用Yum安装软件时可以看到用了哪些镜像:

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.huaweicloud.com
 * extras: mirrors.tuna.tsinghua.edu.cn
 * updates: mirrors.tuna.tsinghua.edu.cn

使用了哪些Repository:

=======================================================================================================================
 Package                       Arch                    Version                       Repository                   Size
=======================================================================================================================
Removing:                                  
 vim-enhanced                  x86_64                  2:7.4.160-5.el7               @base                       2.2 M

Transaction Summary                        
=======================================================================================================================

参数说明:
[repositoryid] 仓库ID,名称任意但不能重复
baseurl yum仓库URL,其下必须含有`repodata'目录,可以是http://、ftp:// 或 file:// URL。一个baseurl可以指定多个URL:

baseurl=url://server1/path/to/repository/
        url://server2/path/to/repository/
        url://server3/path/to/repository/

mirrorlist 指向一文件的URL,其内容为baseurl列表
enabled 是否启用这个仓库,0表示不启用,1表示启用,默认启用。如为安装某个软件自己配置了一个仓库,但又要不影响其他软件安装,可以设为0,安装这个软件时再启用:yum --enablerepo=repoid
gpgcheck 是否进行签名合法性检测,0表示不启用,1表示启用,默认启用
gpgkey gpgkey的路径,可以为本地路径,也可以为网络路径

$releasever 发行版本,可执行yum whatprovides 'system-release(releasever)' centos-release或yum version查看
$basearch 系统架构
$infra 其值可查看文件/etc/yum/vars/infra,此参数目前尚未使用。

CentOS 7,$releasever值为7,$basearch值为x86_64,$infra值为stock,替换后extras mirrorlist的值为:

http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=extras&infra=stock

在浏览器中查看输出如下结果:

http://mirrors.njupt.edu.cn/centos/7.6.1810/extras/x86_64/
http://mirrors.cn99.com/centos/7.6.1810/extras/x86_64/
http://mirrors.nwsuaf.edu.cn/centos/7.6.1810/extras/x86_64/
http://mirror.lzu.edu.cn/centos/7.6.1810/extras/x86_64/
http://mirrors.nju.edu.cn/centos/7.6.1810/extras/x86_64/
http://mirrors.aliyun.com/centos/7.6.1810/extras/x86_64/
http://mirrors.huaweicloud.com/centos/7.6.1810/extras/x86_64/
http://mirrors.neusoft.edu.cn/centos/7.6.1810/extras/x86_64/
http://mirrors.tuna.tsinghua.edu.cn/centos/7.6.1810/extras/x86_64/
http://mirrors.cqu.edu.cn/CentOS/7.6.1810/extras/x86_64/

yum.conf

Yum配置文件/etc/yum.conf,可使用man yum.conf查看各配置项的意义。

# 定义全局配置选项
[main]
# yum缓存目录
cachedir=/var/cache/yum/$basearch/$releasever
# 1或0,安装成功后是否保存header和package
keepcache=0
# debug message输出级别,0 - 10
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
# 1或0,是否执行gpg签名检查
gpgcheck=1
# 1或0,是否启用yum plugins
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
# 指定一个包,Yum据此判断发行版本来设置配置文件中的$releasever,可执行yum whatprovides 'system-release(releasever)' centos-release或yum version查看
distroverpkg=centos-release

#  This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
#  It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m

# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d

配置Repository

有时我们安装的软件不能从官方Repository获得,需要使用其它的Repository,比如:
EPEL Repository Mirrors
ELRepo Repository

Repository站点一般都提供了rpm包,安装后会自动配置repo。
EPEL CentOS/RHEL 7

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

EPEL CentOS/RHEL 6

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

ELRepo CentOS/RHEL 7/6

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# rpm -Uvh https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

或自己在/etc/yum.repos.d目录创建repo文件,比如

[ali-extras]
name=ali centos7 extras
baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/
enable=1
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

注意baseurl地址下必须含有repodata文件夹,repodata中保存了rpm依赖关系等数据。

如不知道哪个Repository有您需要的rpm,可通过以下网站查找:
Package search
RPM Search
RPM Find

Redhat订阅

默认,Redhat仅base repository是可用的,若要使用其它repository需要订阅后启用,如下:

subscription-manager register
subscription-manager list --available
subscription-manager attach --pool=8a85f98b62dd96fc0162f04efb0e6350
subscription-manager repos --enable rhel-7-server-extras-rpms
subscription-manager repos --enable rhel-7-server-rpms

搭建Repository

CentOS ISO镜像作为Repository

CentOS ISO镜像中含有大量的RPM包,可以用作Repository。
先执行如下命令mount iso:

# mount -o loop CentOS-7-x86_64-DVD-1804.iso /mnt

然后创建repo文件,如下:
/etc/yum.repos.d/centos-iso.repo

[centosiso]
name=CentOS DVD ISO
baseurl=file:///mnt
enabled=1
gpgcheck=1
gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-7

搭建自己的Repository

搭建自己的Repository可以避免重复下载rpm,也可以存放公司内部的rpm。搭建步骤如下:

  1. 安装createrepo
# yum install createrepo
  1. 创建Repository目录
# mkdir /repository
  1. 获取rpm

同步Repository:

# reposync -d --norepopath -r extras -p /repository/centos/7/extras/x86_64/

获取单独的rpm可使用yumdownloader,比如:

# yumdownloader --destdir /repository/centos/7/extras/x86_64/Packages python-docker-py
  1. 创建/更新repodata
# createrepo --update /repository/centos/7/extras/x86_64/
  1. 安装配置Apache

若要从外部访问Repository需安装apache并配置目录/repository。

# yum install httpd
# systemctl enable httpd

可以简单的编辑/etc/httpd/conf/httpd.conf,将DocumentRoot改为/repository,如下:

DocumentRoot "/repository"
<Directory "/repository">
  Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

如果系统启用了SELINUX需要修改/repository安全上下文(可通过查看文件/etc/selinux/config或运行命令getenforce来判断是否启用了selinux)。

先看一下默认DocumentRoot的安全上下文:

# ls -dZ /var/www/html/
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

查看/repository安全上下文:

# ls -dZ /repository/
drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /repository/

default_t类型,httpd进程是不能访问的,可以使用 chcon 或 restorecon 命令修改。修改/repository安全上下文类型:

# chcon -R -t httpd_sys_content_t /repository

使用chcon修改重启系统后会失效,如要永久性修改上下文类型,使用 semanage fcontext 和 restorecon 命令:

# semanage fcontext -a -t httpd_sys_content_t "/repository(/.*)?"
# restorecon -R -v /repository

启动apche:

# systemctl start httpd 
  1. 使用自己的Repository,创建repo文件

/etc/yum.repos.d/my.repo

[myextras]
name=CentOS-7 - Extras
baseurl=file:///repository/centos/7/extras/x86_64/
enabled=1
gpgcheck=0

[myextras]
name=CentOS-7 - Extras
baseurl=http://192.168.0.1/centos/7/extras/x86_64/
enabled=1
gpgcheck=0

Yum Repository详解

资源站点

YUM
List of CentOS Mirrors
清华大学开源软件镜像站
华为开源镜像站
阿里巴巴开源镜像站
EPEL Repository Mirrors
ELRepo Repository
Package search
RPM Search
RPM Find
一文彻底明白linux中的selinux到底是什么
SELinux 环境下网络服务设置 -- 配置 Apache、Samba、NFS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章