YUM(Yellowdog Updater Modified)是Fedora、CentOS、RedHat中的软件包管理器。基于 RPM 包管理,YUM经过分析RPM header数据,自动处理依赖关系,从指定服务器自动下载安装全部依赖的软件包。php
安装软件html
# yum install package1 [package2] [...]
重装软件python
# yum reinstall package1 [package2] [...]
删除软件linux
# yum remove package1 [package2] [...] 或 # yum erase package1 [package2] [...]
升级软件c++
# yum update [package1] [package2] [...] 或 # yum upgrade [package1] [package2] [...]
当不指定参数时,升级全部软件。docker
检查更新apache
# yum check-update
查询信息vim
# yum info [...]
查看可用的RPM包centos
# yum list [...]
列出已安装的包浏览器
# yum list installed
搜索软件
# yum search string1 [string2] [...]
清除缓存
# yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
下载并使metadata可用
# yum makecache [fast]
安装编译器:
# yum install -y gcc gcc-c++ libstdc++ libstdc++-devel
安装Development Tools:
# yum groupinstall “Development Tools”
如出现there is no installed groups file错误,请附加参数--setopt=group_package_types=mandatory,default,optional。
查看组Development Tools的内容:
# yum groupinfo "Development Tools"
可先试如下命令:
# 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
duplicate错误
首先查看是否存在未完成的transaction:
# yum-complete-transaction
而后删除重复包:
package-cleanup --dupes lists duplicate packages package-cleanup --cleandupes removes duplicate packages
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,必需要先找到适合的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
下面咱们看一下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配置文件/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,好比:
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的软件库很庞大,AWS EC2仅提供了部分的repo订阅,可以使用yum repolist all查询。若要使用其它repository须要订阅后启用,以下:
# subscription-manager register # subscription-manager list --available # subscription-manager attach --pool=8a85f98b62dd96fc0162f04efb0e6350 # subscription-manager repos --list # subscription-manager repos --enable rhel-7-server-rpms # subscription-manager repos --enable rhel-7-server-extras-rpms
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能够避免重复下载rpm,也能够存放公司内部的rpm。搭建步骤以下:
# yum install createrepo
# mkdir /repository
同步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
# createrepo --update /repository/centos/7/extras/x86_64/
若要从外部访问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
/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
2019港百男子前十
YUM
List of CentOS Mirrors
清华大学开源软件镜像站
华为开源镜像站
阿里巴巴开源镜像站
EPEL Repository Mirrors
ELRepo Repository
Package search
RPM Search
RPM Find
Top 5 Yum Repositories for CentOS/RHEL 7/6/5
一文完全明白linux中的selinux究竟是什么
SELinux 环境下网络服务设置 -- 配置 Apache、Samba、NFS