- 1. CentOS: yum, dnf
- 2. yum配置文件—{/etc/yum.conf, /etc/yum.repos.d/*.repo, /var/log/yum.log}
- 3. yum仓库
- 4. yum源
- 5. yum命令
1. CentOS: yum, dnf
- YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具
- yum repository: yum repo,存储了众多rpm包,以及包的相关的元数据
文件(放置于特定目录repodata下)
文件服务器共享支持:
http://
https://
ftp://
file://
1.1. 详细介绍和注意点
- yum实现功能需要服务器端和客户端架构,需要先搭建一个yum服务器端,其主要内容就是yum的仓库。
- yum仓库主要分两大部分,一个是rpm包,一个是rpm包的元数据metadata(包含了rpm包之间的依赖性关系,版本等等各种信息,还可以对rpm包进行分组)
- 当需要yum服务的时候需要把当前机器配置为客户端。客户端可以与服务器端在同一主机上,也可不在同一主机上。不在同一主机则需要网络共享服务跨网络实现。就是上面写的那三种共享协议方式,本地路径的话就是
file://. - repodata文件夹就是存放着rpm包的元数据的位置。如果当前文件夹有repodata文件夹,则可知当前文件夹的路径就是yum仓库的路径。
- 不论是网络,还是本地,需要yum服务的话,都需要在客户端进行配置,指定yum服务器的仓库路径(仓库路径就是包含着repodata文件夹的它的这个所在目录的路径,注意centos的版本别弄错了)。
- 配置好之后使用yum安装时只需要记住包的名字即可,它会读取配置文件,自动按照所写路径搜索repodata元数据信息,查询要安装的的包信息,仓库是否拥有这个包,它的依赖性等等。
- 注意,这个查询的过程yum会先把服务器端的repodata元数据(文件夹)信息全部下载到本地缓存中并保留下来。
- 这个yum仓库的元数据信息会下载到本机的
/var/cache/yum/$basearch/$releasever路径下,这个是默认的设置,可以在配置文件/etc/yum.conf中修改
- 如果找到这个包,以及它的依赖性的所有包,它就会去yum仓库下载所有所需的rpm包到本地缓存,然后进行安装。安装完之后会把这些rpm安装包再自动删除。
- 注意,rpm安装包安装后会删除,但是已经下载到本机的元数据缓存文件(夹)并不会删除,仍然会保留在本地存储上,等下次再进行安装其他软件时,查询软件各种信息和依赖关系的时候,就直接搜索本地保存的这个元数据信息即可,然后去yum仓库下载rpm包进行安装。
- 由此可见如果yum仓库更新了,这个本地的元数据缓存信息也是需要更新一下的
2. yum配置文件—{/etc/yum.conf, /etc/yum.repos.d/*.repo, /var/log/yum.log}
2.1. yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
2.2. 仓库指向的定义:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意为随机挑选,默认值
priority:优先级,需要安装额外的包
cost= 默认为1000 ,费用越低,优先级越高
3. yum仓库
3.1. yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386, x86_64
$YUM0-$YUM9:自定义变量
3.1.1. 示例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i386
4. yum源
阿里云repo文件
http://mirrors.aliyun.com/repo/
CentOS系统的yum源
阿里云:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/
清华大学:https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
EPEL的yum源
阿里云:https://mirrors.aliyun.com/epel/$releasever/x86_64
阿里巴巴开源软件
https://opsx.alibaba.com/
/etc/yum.conf里面的各行解释(注意路径信息并不在yum.conf里面):
[main]
cachedir=/var/cache/yum/$basearch/$releasever :下载的元数据的缓存路径信息
keepcache=0 :下载后安装包是否要删除,0删除 1不删除(注意是安装包,并不是元数据,元数据不会删除)
debuglevel=2 :调试信息
logfile=/var/log/yum.log :yum的日志信息,安装了哪些包,卸载了哪些包等信息
exactarch=1
obsoletes=1
gpgcheck=1 :是否需要检查数字签名,1检查,0不检查,如果不导入key,所有的安装都通不过检查导致安装会失败:要么导入key,要么设置为0
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
distroverpkg=centos-release
exclude=kernel* centos-release* :升级软件包的时候不升级内核相关避免出现BUG,这里注意只能添加一行exclude的行,不能添加多行,添加多行的话后面的exclude的行会把前面的给覆盖掉
中间内容省略...
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
- 最关键的路径信息在上面的最后一行的/etc/yum.repos.d文件夹里,用.repo结尾
- centos初始安装的时候已经配置过部分.repo文件,指向yum仓库了,不过大多在美洲速度较慢,最好自己配置。(可新建一个文件夹,将初始的这些repo文件备份进去以备以后使用)
- 必须配置的内容的每一行解释:
[aliyunbase] :仓库ID(不是数字),可以写自己准备的名字,用以区分各个仓库,比如base
name=aliyun yum repertory
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/ : $releasever 代表版本号 比如7 ,$basearch代表操作系统架构 比如x86_64 ,这两个变量可以在这里使用,以便可以配置多台机器
gpgcheck=1 : 签名检查,1检查0不检查 ,可以用rpm导入key,或者不检查;更方便的方法是下一行写上对应yum库的网络路径
gpgkey=https://mirrors.aliyun.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7 :同上可以用那两个变量,这里为了方便对比不用了(如果上一行不检查的话则这一行可以不用)
enabled=1 :默认值就为1,不写这一行就是启用此yum源仓库,0禁用此仓库
priority=1 :设置yum仓库优先级,数字越小优先级越高,需要提前安装包 yum-plugin-priorities
- 可以配置多个yum仓库,可以在同一个repo文件里继续按照上面相同的格式来写,也可以再重新配置一个repo文件,比如再配置一个功能包更多的epel yum库:
[aliyunepelbase]
name=aliyun epel yum repertory
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7
enabled=1
priority=1
- 配置完毕第一次安装的时候会导入key,以后再安装就不会再提示导入key了.
- 注意配置yum源在企业中最好使用自己配置的内网服务器,不然网络带宽会浪费,并且网络状况会影响它
- 个人电脑配置yum源可以网络,但虚拟机最好还是需要有一个自己光盘配置的yum源,注意光盘yum源的路径中要加上双引号不然中间的空格会影响:
[rombase]
name=cdrom yum repertory
baseurl=file:///run/media/root/CentOS\ 7\ x86_64/ :注意中间有空格,两边需加上引号
#baseurl=file:///misc/cd
gpgcheck=1
gpgkey=file:///run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7
#gpgkey=file:///misc/cd/RPM-GPG-KEY-CentOS-7
enabled=1
- 注意:修改了yum源之后,因为第一次使用安装时会下载yum仓库元数据信息到缓存空间中并且会一直保留,(就是/etc/yum.conf第一行的文件夹内),**因此修改yum配置之后最好用yum clean all命令(也可以用rm命令清空这个文件夹)清除一下缓存,下次让它重新再次下载缓存更新。**可以直接再用yum repolist命令,然后它就会自动下载可以使用的yum源的元数据信息并缓存进去。
5. yum命令
yum命令的用法:
yum [options] [command] [package ...]显示仓库列表(即所有配置好的yum库的源,只显示不被禁用目前可使用的):
yum repolist [all|enabled|disabled]显示程序包:
yum list
yum list [all \| glob\_exp1] [glob\_exp2] [...]
yum list {available\|installed\|updates} [glob\_exp1] [...]
- yum list |less :可以看装好的和未装的包,@开头表示已装的包,anaconda表示装机光盘装的包
- 安装程序包:
yum install package1 [package2] [...]
- 安装时可以后面跟上-y ,不需要每次交互式输入了
yum reinstall package1 [package2] [...] (重新安装)
- 升级程序包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降级)
- 检查可用升级:
yum check-update
- 卸载程序包:
yum remove | erase package1 [package2] [...]
- 查看程序包information:
yum info [...]
- 这个命令类似于
rpm -qi和rpm -qpi的合体,不管装没装都可以用这个命令来查看,因为yum命令利用的是yum库的缓存文件来查询的,所以不管软件包是否安装
- 查看包里的文件
先安装yum-utils包:
yum -y install yum-utils
然后通过 repoquery -ql <package_name> 查看
- 查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides | whatprovides feature1 [feature2] [...]
- 清理本地缓存:
清除/var/cache/yum/releasever缓存
yum clean [ packages \| metadata \| expire-cache \| rpmdb \| plugins \|all ]
- 构建缓存:
yum makecache
- 这个命令基本不用,清除缓存之后,可以直接用yum repolist即可便可自动构建缓存
- 搜索:
yum search string1 [string2] [...]
以指定的关键字搜索程序包名及summary信息
- 查看指定包所依赖的capabilities:
yum deplist package1 [package2] [...]
- 查看yum事务历史:
yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
yum history
yum history info 6 :查看历史中第6个编号的详细信息
yum history undo 6 :删除掉第6个编号所装的所有包,包括依赖性的
yum history redo 6:重做
- 日志 :/var/log/yum.log
- 安装及升级本地程序包:
yum localinstall rpmfile1 [rpmfile2] [...]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] [...]
(用update替代)
- 包组管理的相关命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]
- yum的命令行选项:
--nogpgcheck:禁止进行gpg check
-y: 自动回答为“yes”
-q:静默模式
--disablerepo=repoidglob:临时禁用此处指定的repo
--enablerepo=repoidglob:临时启用此处指定的repo
--noplugins:禁用所有插件
5.1. 配置系统光盘作为yum仓库
- 系统安装光盘作为本地yum仓库:
(1) 挂载光盘至某目录,例如/mnt/cdrom
mount /dev/cdrom /mnt/cdrom
(2) 创建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
5.2. 创建yum仓库:
- 先安装一个包 :
yum install createrepo - 然后把自己编译好的或者自己cp的rpm包放入自己的文件夹内,比如
/data/own_repos/Packages文件夹内 - 然后利用命令创建yum仓库
createrepo [options] <directory>
此时也就是:
createrepo /data/own_repos- 注意:direcroty即为保存着许多rpm包的目录文件夹的根目录,可以在内部创建一个Package文件夹,把rpm包放进去
- 如果有新的rpm包放入了Package文件夹内,则需要更新yum库的metedata,此时用命令
createrepo --update /data/own_repos
然后别忘记了使用yum clean all清理一下yum库的缓存,并重新下载新的缓存。- repos.d中的文件自己书写即可
5.3. 更多注意点:
一些可零碎知识点再次总结 :
- yum install autofs ,然后启动功能 systemctl enable autufs , 然后立即启动此功能 systemctl start autofs (systemctl disable 和systemctl stop 也是另外对应的命令,(注意只有centos7上才有这些命令,6上面没有)
企业中不可能总是用网络上的yum源,因此要配置自己内网的yum源。对此需要用ftp,http或者https共享协议服务来进行设置。先在这里简单介绍如何配置一个httpd的共享yum源。
- 首先需要安装httpd包(提前配置一个本地光盘yum源或者网络yum源然后对它进行安装,注意阿里云的centos网络yum源其实就是官方的光盘,和cd里面的内容一模一样)
yum install httpd -y - 然后用
rpm -qi httpd和rpm -ql httpd查看一下包内信息(养成装包必看的习惯,还有rpm -qc,rpm -qd甚至可以装包之前就用rpm -qip 包的绝对路径和rpm -qpl 包的绝对路径来查看先),或者直接用yum info 包来查看(注意yum只是rpm的前端处理,仍然需要利用rpm来进行安装,如果rpm被删除或者破坏,yum则无法使用) - 如果一个软件包是一个服务包,centos7里需要注意找两个主要文件,一个主要配置文件在
/etc/httpd(包名)/conf/httpd(包名).conf,有一个服务文件在/usr/lib/systemd/system/httpd(包名).service - 然后启动对应的服务文件,
systemctl (enable 和 start) httpd.service,可以用systemctl status httpd.service来查看服务状态(再次说明这些启动命令是centos7上独有的,6上没有),启动之后便可以输入当前IP地址访问了 - 因为没有任何配置,浏览器上会显示错误,因此要在文件夹
/var/www/html(这个文件夹就相当于建好的符合http协议的当前主机IP地址根目录,它是yum安装的httpd服务的默认根目录位置)下面创建文件index.html,则里面的内容就会显示在输入的IP地址(当前主机地址)上了 - 同时在里面创建目录,然后把yum源库拷贝进去即可访问了。如果不想拷贝,可以直接把光盘挂载到此目录上:
mount /dev/sr0 /var/www/html/yumrepertory(自己创建的文件夹名字),当然这种挂载机器重启会丢失,因此需要写入文件。 - 其中自己创建的文件夹的名字可以模仿官方镜像的,比如在
/var/wwww/html目录中创建文件夹mkdir -pv centos/{6,7}/os/x86_64,然后把自己的光盘拷贝进去或者挂载到相对应的文件夹即可。
- 首先需要安装httpd包(提前配置一个本地光盘yum源或者网络yum源然后对它进行安装,注意阿里云的centos网络yum源其实就是官方的光盘,和cd里面的内容一模一样)
目前可能有部分默认安全设置会影响这些服务,比如防火墙
firewalld.service和selinux, 我们可以简单一点直接关闭它:
- 关闭防火墙:
**centos7:**
systemctl disable firewalld(.service)
systemctl stop firewalld(.service)
**centos6(和7相互对应):**
chkconfig iptables off
service iptables stop
- 关闭selinux:
vim /etc/selinux/config
SELINUX=enforcing 改为disabled
或者 sed -r -i "s/^(SELINUX=).*/\1disabled/" /etc/selinux/config
注意**之后必须重新启动reboot** ,才能关掉selinux,getenforce可以查看selinux是否真的关闭
也可不重新启动关闭
- 复习命令,增加硬件(光盘或者硬盘)之后,无需重启检测的方法(在这里用于挂载centos6的http网络共享yum源):
echo '- - -' > /sys/class/scsi_host/host0/scan
echo '- - -' > /sys/class/scsi_host/host1/scan
echo '- - -' > /sys/class/scsi_host/host2/scan
- 搭建好之后,本机路径可以写
file:///var/www/html/等等,无需走网络路径。同时还有其他写法,如例子中的两行对齐等号的写法,或者把路径写在文件里,然后用引用文件的方式写入路径。
[cdrombase]
name=cdrom yum repertory
baseurl="file:///run/media/root/CentOS 7 x86_64/"
"file:///misc/cd"
"file:///var/www/html/yumrepertory/"
"http://192.168.36.102/yumrepertory"
## 这里的意思就是同一个yum仓库,可以有多个不同的yum源地址,比如上面4个地址,每个地址都可以用来当做这个yum仓库的源地址
## 同时这里也可以不用baseurl,使用mirrorlist后面加文件的方式也可以,下面有解释
gpgcheck=1
gpgkey="file:///run/media/root/CentOS 7 x86_64/RPM-GPG-KEY-CentOS-7"
enabled=1
--------------------------------------------
或者用文件的方式,不用baseurl:
mirrorlist=file:///data/yumlist.txt
其中yumlist.txt中每一行写的都是yum源的路径,也就是baseurl=后面的内容
- 注意,
yum remove 包名,这个命令不会卸载包名所依赖的其他包,即使装它的时候顺便装的依赖性的包也不会卸载。因此用yum history命令查看历史,然后用yum history undo #(编号)来取消编号对应的操作,这样就会全部卸载掉包和它所依赖的包。当然也可以用yum history redo #重做yum历史中命令编号#, 这些历史默认存在/var/log/yum.log中,可以用cat /etc/yum.conf查看日志信息的存储地方。查看历史中做了什么操作,用yum history info #的命令来查看对应编号进行过什么操作。 - 一些相关命令
iptables -vnL查看防火墙策略yum remove libvirt-daemon卸载虚拟网络服务的包,这样会让ipconfig中的vir开头的虚拟化网卡卸载掉。
- yum的安装有依赖性,卸载也有依赖性。卸载不能卸载掉被卸载的包所依赖的包,但是会卸载掉依赖于被卸载的包的其他包.
- yum源可以有多个,一个源失败了可以再用其它的源。
- yum执行的时候不能多个用户同时使用,因此必须等待其他的用户停用yum之后才可。
yum repolist all可以查看启用的和非启用的所有源,如果不加all只显示启用的。 yum list后面可以跟模糊搜索通配符,和rpm -qa类似,但yum的好处是所有装好的未装的都会显示。它利用的是yum的元数据缓存文件来查询所有的yum包的各种信息的,所以不管包是否安装都可查询;- 同样
yum list命令,可以用Tab按键补全命令,从而缩小显示的包的范围,比如其可以显示出装好的或者未装的等等选项。 - 同时,如果不加任何额外命令,直接输入
yum list执行命令,则列出所有repo源内的包,而且已经装上的包会带有一个@的图标 @后面的是安装的repo源,比如从base源中装的就会显示@base;不过有个特殊的就是装机的时候装上的包会利用@anaconda程序装,因此是这样显示的。
- 同样
yum search或者yum provides后面可以跟包名,也可以跟文件,它会列出相关的信息(可以用来rpm -ivh安装的时候查询依赖性文件,或者用search命令查询包)- 注意,yum安装失败的主要两个原因:
- yum源配置的路径无法连通
- yum源配置环境信息更改后没有
yum clean all命令清除缓存(元数据等信息)
- yum的升级,目录源也可以配置用来升级,但最好不要升级,直接重新安装即可。(阿里源里就有yum升级包)。同时yum源里面还有个
extra源,虽然不多,但是有些功能需要它,因此最好也给配置上这个yum源(阿里源上就有)- 这个额外源里面有个包,包名叫做
epel-release,可以用来自动配置epel源,装上它就会自动创建一个epel.repo文件,不过路径是国外的。
- 这个额外源里面有个包,包名叫做
- 注意yum功能是rpm的前端,依赖于rpm功能, 如果用
rpm -e rpm --nodeps命令卸载掉rpm(–force只能安装时用),则yum也无法使用了。- 假如真的卸载掉了rpm功能,则用光盘模式,重新装上rpm功能
- 不过装的时候注意路径的问题,因为
rpm包的路径默认会装到根目录下,但救援模式下根并不是真正的系统根,因此命令后面要指定根路径命令。下面列出了如何装包
rpm -ivh /run/install/repo/Packages/rpm-4###.rpm --root=/mnt/sysimage/
- 注意前面的rpm包的路径如果不知道在哪,可用df命令先查看光盘在救援模式下挂载哪里了,后面的就是原先真正系统的根。
- 注意不能用chroot /mnt/sysimage 命令,因为切换根就相当于切换到原先系统内,它仍然没有rpm命令。(退出chroot命令用exit)
yum grouplist:可用环境组和可用普通包组,可以选择安装。
yum groupinfo 包组名:查看包组详细信息,注意包组名要加双引号,避免有空格问题(包组名大小写不敏感,但是包名大小写敏感,需要注意区分)。当用这个命令查看包组时,里面的包前面的符号:- 如果什么都没有,表明包虽然已经装上了,但并不是随着包组安装的时候装上的,而是自己装的或者随着系统安装的时候装的
=等号表示这个包是随着包组安装的时候装上的+加号和-减号表示包没有装,加号表示包虽然没有装,但是包组升级的时候它会自动装上,减号表示就算包组升级,它也不会被安装,只能自己去刻意安装它。
yum grouplist或者yum groupinstall后面用tab键补全,会看到更多的包的信息。- 如果只有rpm包,没有yum源的元数据,则可以用
createrepo后面跟存放包的文件夹即可创建,不过这个命令需要安装一个包createrepo - yum查看包里的文件需要安装
yum-utils包,然后用repoquery -ql <package_name>查看 - yum仓库的优先级设置,需要安装
yum-plugin-priorities包,然后再仓库中设置priority=1,其中数字越小,优先级越高- 注意在yum的主配置文件
/etc/yum.conf中,plugins=1必须开启
- 注意在yum的主配置文件
- yum的主配置文件要添加一个
exclude的行(多个包用空格分开),以免update的repo库和升级包的时候吧内核给升级了从而出问题
exclude=kernel* centos-release*
升级软件的时候不要升级内核,以免系统出现bug
这里注意只能添加一行exclude的行,不能添加多行,添加多行的话后面的exclude的行会把前面的给覆盖掉
留言