yum基于Red Hat的发行版如CentOS、Fedora和Red Hat Enterprise Linux (RHEL)中广泛使用的包管理器。
YUM(Yellow dog Updater, Modified)的起源可追溯至一款名为YUP(Yellow dog Updater)的软件更新工具,该工具最初由Terra Soft Solutions, INC.(后称TSS公司)采用Python编程语言研发,旨在为Yellow dog Linux操作系统提供高效的软件包管理服务。随后,这款工具吸引了杜克大学(Duke University)Linux开发团队的关注,他们对其进行了显著的优化与扩展,最终赋予了它新的名字——YUM,标志着其功能与性能的全面提升。
YUM (Yellowdog Updater Modified) 是一个基于RPM包管理系统的工具,它提供了更高级的包管理功能,如依赖性解析、自动下载RPM包以及处理软件仓库。YUM可以从多个仓库中查找、安装、更新或删除软件包,并且可以处理复杂的依赖关系。
YUM仓库服务 是指在一台服务器上设置一个包含大量软件包的中心仓库,这样局域网内的多台客户端可以通过网络访问这个仓库来安装或更新软件。这样做的好处包括:
- 减少外部带宽消耗:所有客户端都从内部仓库获取软件包,而不是直接从互联网上的远程仓库下载,这可以节省外部带宽。
- 统一管理软件版本:管理员可以在仓库中控制哪些版本的软件包可用,从而保持整个网络中软件的一致性和安全性。
- 加速软件包的下载:内部仓库通常比远程仓库更快,因为数据不需要通过互联网传输。
- 易于审计和控制:管理员可以更容易地跟踪和管理哪些软件包被安装或更新。
部署YUM仓库服务通常涉及到以下步骤:
- 选择仓库类型:可以选择FTP、HTTP或NFS等不同类型的仓库。
- 配置服务器:在服务器上安装必要的服务(如vsftpd、httpd或nfs-utils),并配置它们以提供仓库目录。
- 填充仓库:将RPM包上传到仓库目录中,这些包可以从官方镜像站点下载,也可以从其他可靠的来源获取。
- 配置客户端:在客户端上修改
/etc/yum.repos.d/
目录下的repo文件,添加指向仓库服务器的URL,以及相关的配置选项,比如GPG检查和优先级设置。 - 测试连接:确保客户端能够成功地从仓库服务器下载包列表和元数据。
服务端-网络安装源
步骤 1: 安装必要的软件
首先,你需要在服务器上安装可以提供网络服务的软件。如果是HTTP服务,可以使用Apache或Nginx;如果是FTP服务,则可以使用vsftpd。这里以HTTP服务为例,使用nginx作为web服务器。在CentOS/RHEL上,你可以使用以下命令安装
sudo yum -y install nginx
步骤 2: 创建仓库目录
创建一个目录,用于存储所有的软件包和相关元数据。例如,你可以在/var/www/html
目录下创建一个名为repos
的子目录:
sudo mkdir /var/www/html/repos sudo chmod -R 755 /var/www/html/repos
步骤 3: 下载并填充软件包
接下来,你需要下载软件包到上面创建的仓库目录中。你可以从官方的镜像站点或其他可信源下载RPM包。对于CentOS,你可以使用createrepo
工具从官方镜像站点同步整个仓库:
sudo yumdownloader --disablerepo='*' --enablerepo=base --enablerepo=updates --resolve --destdir=/var/www/html/repos sudo createrepo /var/www/html/repos
步骤 4: 配置nginx
编辑Apache的配置文件,通常是/etc/httpd/conf/httpd.conf
,确保repos
目录对网络是可访问的。你可能需要启用AllowOverride All
,并确保DocumentRoot
设置正确指向/var/www/html
。
创建Nginx配置文件
在/etc/nginx/conf.d/
目录下创建一个新的配置文件,例如repos.conf
,并输入以下内容:
server { listen 80; server_name your_server_ip_or_domain; root /var/www/html/repos; location / { try_files $uri $uri/ =404; } # 可选:如果你需要限制访问,可以添加以下行 # location /repos { # auth_basic "Restricted Content"; # auth_basic_user_file /etc/nginx/.htpasswd; # } }
在这个配置文件中,你需要替换your_server_ip_or_domain
为你的服务器IP地址或域名,同时确保root
指令指定的路径是之前创建的仓库目录。
启用Nginx配置
在保存配置文件后,需要重启Nginx服务以应用新配置:
sudo systemctl restart nginx
检查Nginx状态
确保Nginx正在运行且没有错误,可以使用以下命令:
sudo systemctl status nginx
如果一切配置正确,现在你的Nginx服务器应该正在提供YUM仓库服务,客户端可以通过http://your_server_ip_or_domain/repos
访问仓库中的软件包和元数据。
客户端配置
步骤 5: 配置客户端
假设你的服务端Nginx仓库的URL是 http://your_server_ip_or_domain/repos
,你需要在客户端的/etc/yum.repos.d/
目录下创建一个新的repo文件,例如custom.repo
,并编辑它以包含以下内容:
[Custom_Repo] name=Custom Repository baseurl=http://your_server_ip_or_domain/repos enabled=1 gpgcheck=0
这里的[Custom_Repo]
是仓库的标识符,你可以自定义这个名字;name
字段是对仓库的描述;baseurl
是你的Nginx仓库的URL;enabled
字段设为1
表示启用这个仓库;gpgcheck
设为0
表示禁用GPG签名检查,这通常在测试环境中使用,但在生产环境中建议保留GPG检查以确保软件包的完整性和安全性。
检查和更新客户端的YUM配置
在编辑完custom.repo
文件后,你可以使用以下命令检查YUM配置是否正确,并刷新YUM的元数据:
sudo yum clean all sudo yum makecache
如果一切正常,你应该能看到类似下面的输出,显示YUM成功从你的自定义仓库中获取了元数据:
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.example.com * extras: mirror.example.com * updates: mirror.example.com * Custom_Repo: your_server_ip_or_domain
这里Custom_Repo
就是你刚配置的自定义仓库。
安装软件包
现在,你可以尝试从你的自定义仓库安装一个软件包来测试配置是否正确:
sudo yum install <package-name>
将<package-name>
替换为你想要安装的实际软件包名称。
yum工具用法
列出所有可用的软件包:
sudo yum list
列出已安装的所有软件包:
sudo yum list installed
列出可以升级的软件包:
sudo yum list upgrades
搜索特定的软件包:
sudo yum list | grep <package-name>
将<package-name>
替换为你要搜索的软件包名称的部分或全部。
查看软件包详细信息的方法
方法 1: 使用 yum list
和 grep
如果你想查看一个特定软件包的版本、大小、依赖关系等信息,可以使用以下命令:
sudo yum list <package-name> | grep -i "<package-name>"
这里 <package-name>
是你感兴趣的软件包名称。虽然这不会提供所有信息,但它至少会告诉你有关版本和可从哪个仓库安装的信息。
方法 2: 使用 rpm -qi
(对于已安装的包)
如果你想知道一个已经安装的软件包的详细信息,可以使用 rpm -qi
命令:
sudo rpm -qi <package-name>
这将显示关于软件包的详细信息,包括名称、版本、发布、安装日期、大小、供应商、摘要、构建日期、组、依赖关系、验证结果、构建主机、URL 和安装脚本。
方法 3: 使用 yum provides
如果你知道某个文件或模式,并想找出是哪个软件包提供了它,可以使用:
sudo yum provides /path/to/file-or-pattern
或者
sudo yum whatprovides /path/to/file-or-pattern
这将列出所有包含该文件或模式的软件包。
在某些较新的Linux发行版中,如Fedora和RHEL 8及更高版本,YUM已经被DNF(Dandified Yum)替代,DNF提供了 dnf info
命令来直接获取软件包的详细信息,用法与 apt show
类似。
groupinstall
groupinstall
命令允许用户一次性安装整个组的软件包,这在设置特定类型的系统(如 Web 服务器、开发环境或桌面环境)时特别有用。
基本语法
sudo yum groupinstall 'Group Name'
这里的 'Group Name'
是你想安装的软件包组的名称。通常,这些组名是描述性的,例如 Development Tools
、Xfce
或 GNOME Desktop
。
示例
安装开发工具组:
sudo yum groupinstall 'Development Tools'
这将安装一组常见的开发工具,包括编译器、库和调试工具。
安装 GNOME 桌面环境:
sudo yum groupinstall 'GNOME Desktop'
这将安装 GNOME 桌面环境及其所有必需的组件。
安装 Xfce 桌面环境:
sudo yum groupinstall 'Xfce'
这将安装 Xfce 桌面环境。
groupupdate
用于更新已安装的软件包组到其最新版本。在基于RPM的Linux发行版中,如CentOS、Fedora和RHEL,软件包经常被分组在一起,形成“软件包组”。这些组可能包括桌面环境、服务器角色或开发工具集合等。当新的更新或版本可用时,groupupdate
命令允许用户一次性更新整个组的软件包,而不需要单独更新每个包。
基本语法
sudo yum groupupdate 'Group Name'
这里的 'Group Name'
是你想要更新的软件包组的名称。
示例
更新开发工具组:
sudo yum groupupdate 'Development Tools'
这将更新所有属于“开发工具”组的软件包到其最新版本。
更新 GNOME 桌面环境:
sudo yum groupupdate 'GNOME Desktop'
这将更新 GNOME 桌面环境及其所有相关组件到最新版本。
- 在使用
groupupdate
命令前,最好先运行yum updateinfo
或yum check-update
来检查是否有可用的更新。 groupupdate
会自动处理依赖关系,确保所有相关的软件包都被更新到最新版本。
groupremove命令
用于卸载预定义的软件包组。当你不再需要某一组软件包时,例如在服务器上移除桌面环境或在工作站上移除服务器软件,使用 groupremove
可以方便地一次移除整个组,而无需手动卸载每一个软件包。
基本语法
sudo yum groupremove 'Group Name'
这里的 'Group Name'
是你想要卸载的软件包组的名称。
示例
卸载开发工具组:
sudo yum groupremove 'Development Tools'
这将卸载所有属于“开发工具”组的软件包。
卸载 GNOME 桌面环境:
sudo yum groupremove 'GNOME Desktop'
这将卸载 GNOME 桌面环境及其所有相关组件。
- 在使用
groupremove
命令前,最好确认你不再需要该软件包组的功能,因为卸载后可能需要重新安装才能恢复。 groupremove
会尽可能地移除组内所有软件包,但有时由于其他软件包的依赖关系,某些包可能无法被卸载。这种情况下,你可能需要手动处理剩余的包。