本章主要介绍使用yum对软件包进行管理
- yum的介绍
- 搭建yum源
- 创建私有仓库
- yum客户端的配置
- yum的基本使用
- 使用第三方yum源
使用rpm安装包时经常会遇到一个问题就是包依赖
[root@redhat8 ~]# rpm -ivh /mnt/AppStream/Packages/httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64.rpm
错误:依赖检测失败:
httpd-filesystem 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
httpd-filesystem = 2.4.37-41.module+el8.5.0+11772+c8e0c271 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
httpd-tools = 2.4.37-41.module+el8.5.0+11772+c8e0c271 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
libapr-1.so.0()(64bit) 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
mod_http2 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
system-logos(httpd-logo-ng) 被 httpd-2.4.37-41.module+el8.5.0+11772+c8e0c271.x86_64 需要
[root@redhat8 ~]#
这里<tab>的意思是按【Tab】键
所谓包依赖,就是在安装A时必须先把B和C安装上去。如果用rpm一个个安装是非常困难的,这里可以使用dnf或yum命令来解决。yum命令其实是软链接到dnf命令上的,所以输入yum或dnf都可以,后文都使用yum命令介绍
1.1 yum架构介绍
为了方便理解,先看图
可能我们经常会使用360软件管家管理软件包,在360服务器上有各种软件,在PC上的 360软件管家中搜索想要安装的软件,然后单击【安装】按钮,这样就可以把软件自动安装 到本地了,很方便
yum的架构也是类似的
在服务器上存在某个目录中存储了大量的软件包,然后通过ftp或http把此目录共享出去,使得客户端可以通过ftp或http能访问到此目录
在服务器端所存储的这些软件包中,服务器是知道哪些包之间有依赖关系的,例如,A、 B、C三者之间存在依赖关系,所以当客户端发布一个请求说要安装A时,如图
此时发现A和B、C有依赖关系,所以客户端会把A、B、C三 者都从服务器下载到本机的缓存,然后再把这三个包一起给安装上去
如果假设A和B、C、X有依赖关系,但是X这个包并没有出现 在现在的这个源中,那么当客户端要安装A时,因为缺少了X,所 以安装是失败的。此时我们就需要在客户端上指定多个源,保证所有的这些源中包含了所有需要的包,如图
因为客户端指定了两个源,所以当客户端发布一个请求说要 安装A时,此时从第一个源中检测到了需要的依赖包B、C,然 后从第二个源中找到了X,客户端就会把这四个包一起下载到本地缓存中并进行安装
1.2 使用光盘搭建yum源
实验结构
两台Linux系统的虚拟机(redhat8和node1)
因为光盘中包括了最常用的软件包,所以现在就把光盘的内容作为源,用vsftpd将光盘的内容共享出去。在rpm章节 已经将 vsftpd安装上去了,如果没有安装请按前面章节讲过的内容自行安装好
注意
下面的操作都是在redhat8上做的
修改letc/vsftpd/vsftpd.conf中的anonymous enable选项
由anonymous_enable=NO修改为anonymous_enable=YES,并添加如下命令
1 pasv_min_port=10010
2 pasv_max_port=10020
保存退出并启动vsftpd
[root@redhat8 vsftpd]# systemctl enable vsftpd --now
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@redhat8 vsftpd]#
如果已经启动过了,则通过systemctl restart vsftpd重启一下,使刚做的配置生效
修改防火墙
[root@redhat8 vsftpd]# firewall-cmd --add-port=20-21/tcp --permanent
success
[root@redhat8 vsftpd]# firewall-cmd --add-port=10010-10020/tcp --permanent
success
[root@redhat8 vsftpd]# firewall-cmd --reload
success
[root@redhat8 vsftpd]#
把SELinux服务关闭
创建目录/var/ftp/dvd,然后把光盘挂载到此目录上
[root@redhat8 ~]# mkdir /var/ftp/dvd
[root@redhat8 ~]# mount /dev/cdrom /var/ftp/dvd/
mount: /var/ftp/dvd: WARNING: device write-protected, mounted read-only.
[root@redhat8 ~]#
这样其他机器通过ftp访问/var/ftp/dvd时,访问的就是光盘中的内容了。设置开机自动挂载,修改/etc/fstab
[root@redhat8 ~]# grep ftp /etc/fstab
/dev/cdrom /var/ftp/dvd iso9660 defaults 0 0
[root@redhat8 ~]#
至此,服务器上的yum 源就已经配置好了,/var/ftp/dvd中的内容
[root@redhat8 ~]# ls /var/ftp/dvd/
AppStream EULA images RPM-GPG-KEY-redhat-beta
BaseOS extra_files.json isolinux RPM-GPG-KEY-redhat-release
EFI