Linux网络服务之部署YUM仓库

  • A+
所属分类:linux技术
摘要

镜像下载、域名解析、时间同步请点击 阿里云开源镜像站CentOS使用yum和dnf 解决rpm的包依赖关系。

镜像下载、域名解析、时间同步请点击 阿里云开源镜像站

1 YUM简介

1.1 YUM简介

CentOS使用yum和dnf 解决rpm的包依赖关系。

YUM:rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具,CentOS 8 使用dnf代替了yum,不过保留了和yum的兼容性,配置也是通用的。

YUM 的前身是 YUP(Yellow dog Updater,Yellow dog Linux 的软件更新器),最初由 TSS 公司(Terra Soft Solutions,INC.)使用 Python 语言开发而成,后来由杜克大学(Duck University)的 Linux 开发队伍进行改进,命名为 YUM(Yellow dog Updater,Modified)。 要成功使用 YUM 机制来更新系统和软件,需要有一个包含各种 rpm 安装包文件及其依 赖软件的软件仓库(repository),提供软件仓库的服务器也称为“源”服务器。在客户机中只 要正确指定软件仓库的地址等信息,就可以通过对应的“源”服务器来安装或更新软件。

YUM(Yellow dog Updater,Modified):

  • 基于RPM包构建的软件更新机制
  • 可以自动解决依赖关系
  • 所有软件包由集中到YUM软件仓库提供

Linux网络服务之部署YUM仓库

1.2 yum工作原理

yum依赖于环境,依赖于服务端和客户端,允许跨网络。

Yum基于C/S模式:

  • yum 服务器存放rpm包和相关包的元数据
  • yum客户端访问yum服务器进行安装或查询等

Yum实现过程:

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装时包时,会自动下载repodata中的元数据,查询远数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装。

Linux网络服务之部署YUM仓库

服务器(RPM包和元数据缺一不可):

  • RPM包 (存放在包文件夹Packages中)
  • 元数据(存放在元数据文件夹repodata中,其中包含:目录(软件的目录),软件的依赖关系,软件的分组)
 #查看光盘中自带的Yum仓库,可以看到Packages文件夹和repodata文件夹:  ​  [root@localhost ~]# mount /dev/sr0 /mnt   //将光盘挂载到/mnt/目录下  mount: /dev/sr0 写保护,将以只读方式挂载  [root@localhost ~]# ls /mnt      //查看光盘内的包文件夹和元数据文件夹  CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7  EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7  EULA             isolinux  repodata  TRANS.TBL 

Linux网络服务之部署YUM仓库

本地仓库类型:

  • 光盘的仓库(基本仓库)
  • epel 扩展仓库

1.3 如何实现安装服务

Linux网络服务之部署YUM仓库

2 yum客户端配置

yum客户端配置文件

 /etc/yum.conf              #为所有仓库提供公共配置  /etc/yum.repos.d/*.repo    #每个仓库的配置文件 

2.1 yum主配置文件

位置:/etc/yum.conf

 [root@localhost ~]# vim /etc/yum.conf  [main]  cachedir=/var/cache/yum/$basearch/$releasever  //yum下载的RPM包的缓存目录, $basearch代表硬件架构,$releasever系统版本比如7  keepcache=0                         //是否保存缓存  0代表不保存,1代表保存  debuglevel=2                        //调试级别(0-10),默认为2  logfile=/var/log/yum.log            //日志文件位置  exactarch=1                         //是否允许不同版本的rpm安装  obsoletes=1                         //这是一个update的参数,是否允许旧版本的运行    gpgcheck=1                          //是否验证GPG(GNU Private Guard)密钥,1表示验证  plugins=1                           //是否允许插件,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  ​  ​  # yum的repo配置文件中可用的变量:  $releasever: 当前OS的发行版的主版本号,如:8,7,6  $arch: CPU架构,如:aarch64, i586, i686,x86_64等  $basearch:系统基础平台;i386, x86_64  $contentdir:表示目录,比如:centos-8,centos-7  $YUM0-$YUM9:自定义变量 

Linux网络服务之部署YUM仓库

2.2 yum仓库配置文件

2.2.1 仓库配置文件说明

位置:/etc/yum.repos.d/*.repo

系统内默认的yum仓库,是centos官方的yum源(国外源),需要连通外网才可以使用。

 [root@localhost yum.repos.d]# ls /etc/yum.repos.d/  CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  ​  [root@localhost yum.repos.d]# vim yuji.repo    //yum仓库配置文件格式  [yuji]  name=yuji                   #设置名称  baseurl=file:///mnt        #设置链接地址,file://是本地源的固定格式  enabled=1                   #开启此yum源  gpgcheck=0                  #是否验证公钥,0表示无需验证             

yum仓库配置文件中baseurl的几种形式:

 # 本地源  本地目录   file://          ​  # 网络源  FTP服务    ftp://            HTTP服务   http://  外网环境    https:// 

2.2.2 baseurl 指向的路径

CentOS系统的yum源

 #阿里云  https://mirrors.aliyun.com/centos/$releasever/ 

EPEL的yum源

 #阿里云  https://mirrors.aliyun.com/epel/$releasever/x86_64 

更新源

 http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/ 

2.3 日志文件

位置:/var/log/yum.log

 [root@localhost yum.repos.d]# head -5 /var/log/yum.log    //查看日志文件  Jan 19 10:55:29 Installed: tree-1.6.0-10.el7.x86_64  Feb 21 23:21:53 Installed: finger-0.17-52.el7.x86_64  Mar 19 17:10:29 Updated: 32:bind-license-9.11.4-26.P2.el7_9.9.noarch  Mar 19 17:10:30 Updated: 32:bind-libs-lite-9.11.4-26.P2.el7_9.9.x86_64  Mar 19 17:10:30 Updated: 32:bind-libs-9.11.4-26.P2.el7_9.9.x86_64 

3 yum命令详解

命令 不加关键字 加入关键词、软件包、软件包组
yum list 显示所有可用包 单个的可安装包
yum info 显示所有可用包的信息 单个具体的信息
yum search 模糊查找所有的相关信息
yum whatprovides 精确查找
yum install 安装具体软件包
yum update 所有软件升级,更新内核 具体软件升级
yum upgrade 只更新软件包,但不更新内核 具体软件更新
yum remove 卸载具体软件
yum history 查看当前yum操作历史
yum history info 加序号列出某次事务的详细信息
yum history undo 加序号卸载序号里安装的软件
yum history redo 加序号重新执行序号里的操作

包组:

命令 不加关键字 加入关键词、软件包、软件包组
yum grouplist 显示所有可用包组 显示具体的包组
yum groupinfo 显示所有的包组具体信息 显示具体的包组的具体信息
yum groupinstall 安装具体软件包组
yum group update 所有包组升级 具体包组升级
yum groupremove 卸载具体包组软件

小贴士:

当使用 “yum remove 软件名” 未将软件包卸载干净时,可以使用“yum history undo 序号”进行卸载,可以完整卸载整个软件包,没有残留。

4 yum仓库搭建方式

软件仓库的提供方式:

4.1 搭建本地yum仓库

搭建步骤:

步骤1、挂载光盘(/dev/sr0或/dev/cdrom都可以,/dev/cdrom是/dev/sr0的软链接)

 [root@localhost ~]# mount /dev/sr0 /mnt    //将光盘挂载到/mnt目录下  mount: /dev/sr0 写保护,将以只读方式挂载  [root@localhost ~]# df -Th                 //查看挂载是否成功  文件系统                类型      容量  已用  可用 已用% 挂载点  /dev/mapper/centos-root xfs        10G  4.0G  6.1G   40% /  devtmpfs                devtmpfs  897M     0  897M    0% /dev  tmpfs                   tmpfs     912M     0  912M    0% /dev/shm  tmpfs                   tmpfs     912M  9.1M  903M    1% /run  tmpfs                   tmpfs     912M     0  912M    0% /sys/fs/cgroup  /dev/sdb5               xfs       2.0G   33M  2.0G    2% /data/bb  /dev/sda1               xfs      1014M  179M  836M   18% /boot  /dev/sdb1               xfs        10G   33M   10G    1% /data/aa  /dev/mapper/vg01-lvmail xfs        13G   33M   13G    1% /data/mail  tmpfs                   tmpfs     183M   12K  183M    1% /run/user/42  tmpfs                   tmpfs     183M     0  183M    0% /run/user/0  /dev/sr0                iso9660   4.3G  4.3G     0  100% /mnt 

注意:mount命令是一次性挂载,退出当前终端或重启后就不存在了。永久挂载需要修改配置文件/etc/fstab。

Linux网络服务之部署YUM仓库

步骤2、切换到 /etc/yum.repo.d/目录,将自带的仓库文件移走。

 [root@localhost ~]# cd /etc/yum.repos.d/      //切换至/etc/yum.repos.d/目录  [root@localhost yum.repos.d]# ls  CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  [root@localhost yum.repos.d]# mkdir aaa      //创建一个名为aaa的新目录  [root@localhost yum.repos.d]# mv *.repo aaa   //将yum仓库中以.repo结尾的文件移动到aaa中  [root@localhost yum.repos.d]# ls  aaa 

Linux网络服务之部署YUM仓库

步骤3、新建yum仓库文件。

 [root@localhost yum.repos.d]# vim yuji.repo    //新建yum仓库文件  [yuji]  name=yuji                   #设置名称  baseurl=file:///mnt         #设置链接地址,file://是固定格式,指向/mnt  enabled=1                   #开启此yum源  gpgcheck=0                  #无需验证公钥   

Linux网络服务之部署YUM仓库

步骤4、清理缓存并安装软件。

 [root@localhost yum.repos.d]# yum clean all    //清理yum缓存  [root@localhost yum.repos.d]# yum makecache    //重新建立元数据  [root@localhost yum.repos.d]# yum list         //查看可安装的软件列表  [root@localhost yum.repos.d]# yum install dhcp -y    //yum安装dhcp测试是否成功 

Linux网络服务之部署YUM仓库

4.2 搭建阿里云仓库(http方式外网环境)

默认的仓库文件是国外云仓库,速度比较慢,可以使用阿里云仓库代替。

操作步骤:

步骤1、切换到 /etc/yum.repo.d/目录,将自带的仓库文件移走。

 [root@localhost ~]# cd /etc/yum.repos.d/      //切换至/etc/yum.repos.d/目录  [root@localhost yum.repos.d]# mkdir aaa  [root@localhost yum.repos.d]# mv *.repo aaa   //将yum仓库中以.repo结尾的文件移动到aaa中  [root@localhost yum.repos.d]# ls  aaa 

步骤2、新建阿里云仓库。

 [root@localhost yum.repos.d]# vim ali.repo  [ali]  name=aliyun  #baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/         //开启哪个版本都可以正常使用,这边主要解释变量的作用  baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/      gpgcheck=0  ​  [epel]                                                         //epel源仓库  name=epel  baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/  gpgcheck=0  ​  [update]                                                        //更新包仓库  name=update  baseurl=https://mirrors.aliyun.com/centos/7/updates/x86_64/  gpgcheck=0 

步骤3、清理缓存并安装软件。

 [root@localhost yum.repos.d]# yum clean all    //清理yum缓存  [root@localhost yum.repos.d]# yum makecache    //重新建立元数据  [root@localhost yum.repos.d]# yum list         //查看可安装的软件列表  [root@localhost yum.repos.d]# yum install tree -y    //yum安装tree测试是否成功 

4.3 http方式搭建云仓库

http方式搭建云仓库,在外网和内网的环境下都可以使用,但多用于内网。

服务端:192.168.72.10

客户端:192.168.72.129

搭建步骤:

步骤1、服务端安装hhtpd服务程序。

 [root@localhost ~]# yum install httpd -y 

Linux网络服务之部署YUM仓库

步骤2、服务端切换到/var/www/html/ 目录,新建子目录centos7,并将光驱挂载到centos7目录下(也可以将光驱中的所有软件包拷贝到该目录下)。

 [root@localhost ~]# cd /var/www/html        //切换目录  [root@localhost html]# ls  [root@localhost html]# mkdir centos7         //新建目录centos7  [root@localhost html]# mount /dev/sr0 ./centos7    //将光驱挂载到centos7目录下  mount: /dev/sr0 写保护,将以只读方式挂载  [root@localhost html]# ls ./centos7  CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7  EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7  EULA             isolinux  repodata  TRANS.TBL 

Linux网络服务之部署YUM仓库

步骤3、服务端关闭防火墙和selinux,启动httpd服务。

 [root@localhost html]# systemctl stop firewalld  [root@localhost html]# setenforce 0  setenforce: SELinux is disabled  [root@localhost html]# systemctl start httpd 

Linux网络服务之部署YUM仓库

步骤4、客户端切换到/etc/yum.repos.d/目录,新建文件夹,将默认的yum仓库文件移动到该目录下。编写新的仓库文件

 [root@192 ~]# cd /etc/yum.repos.d        //客户端切换目录  [root@192 yum.repos.d]# ls  CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  [root@192 yum.repos.d]# mkdir bak        //新建文件夹  [root@192 yum.repos.d]# mv *.repo bak    //将默认的仓库文件移动到该文件夹下  [root@192 yum.repos.d]# ls  bak  [root@192 yum.repos.d]# vim http.repo     //编写新的仓库文件  [http]  name=http  baseurl=http://192.168.72.10/centos7  enabled=1  gpgcheck=0 

Linux网络服务之部署YUM仓库

Linux网络服务之部署YUM仓库

步骤5、清理yum缓存,重新建立元数据。并测试使用yum能否成功安装软件包。

 [root@192 yum.repos.d]# yum clean all && yum makecache  已加载插件:fastestmirror, langpacks  正在清理软件源: ftp  Cleaning up everything  Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos  Cleaning up list of fastest mirrors  已加载插件:fastestmirror, langpacks  ftp                                                        | 3.6 kB  00:00:00       (1/4): ftp/group_gz                                        | 156 kB  00:00:00       (2/4): ftp/primary_db                                      | 3.1 MB  00:00:00       (3/4): ftp/other_db                                        | 1.2 MB  00:00:00       (4/4): ftp/filelists_db                                    | 3.1 MB  00:00:00       Determining fastest mirrors  元数据缓存已建立  ​  [root@192 yum.repos.d]# yum install ftp -y    //测试yum安装,可以成功安装。 

Linux网络服务之部署YUM仓库

Linux网络服务之部署YUM仓库

4.4 ftp方式搭建云仓库

ftp方式搭建云仓库,在外网和内网的环境下都可以使用,但多用于内网。

服务端:192.168.72.10

客户端:192.168.72.129

搭建步骤:

步骤1、服务端安装vsftpd服务程序。

 [root@localhost html]# yum install vsftpd -y 

Linux网络服务之部署YUM仓库

步骤2、服务端切换到 /var/ftp/ 目录下新建一个子目录centos,并将光驱挂载到centos目录下(也可以将光驱内的所有文件包复制到centos目录下)。

 [root@localhost html]# cd /var/ftp      //切换到/ftp/var/目录  [root@localhost ftp]# ls  pub  [root@localhost ftp]# mkdir centos      //创建centos目录  [root@localhost ftp]#   [root@localhost ftp]# mount /dev/sr0 ./centos     //将光驱挂载到centos目录下  mount: /dev/sr0 写保护,将以只读方式挂载  [root@localhost ftp]# ls ./centos  CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7  EFI              images    Packages  RPM-GPG-KEY-CentOS-Testing-7  EULA             isolinux  repodata  TRANS.TBL 

Linux网络服务之部署YUM仓库

步骤3、服务端开启vsftpd服务,关闭防火墙和selinux。

 [root@localhost ~]# systemctl start vsftpd  [root@localhost ~]# systemctl stop firewalld  [root@localhost ~]# setenforce 0 

Linux网络服务之部署YUM仓库

步骤4、客户端安装ftp程序,测试ftp服务是否正常。

 [root@192 ~]# yum install ftp -y     //安装ftp程序  ​  [root@192 ~]# ftp 192.168.72.10      //测试ftp服务能否正常访问服务端  Connected to 192.168.72.10 (192.168.72.10).  220 (vsFTPd 3.0.2)  Name (192.168.72.10:root): ftp  331 Please specify the password.  Password:  230 Login successful.              //可以正常访问  Remote system type is UNIX.  Using binary mode to transfer files.  ftp> ls  227 Entering Passive Mode (192,168,72,10,85,22).  150 Here comes the directory listing.  drwxr-xr-x    8 0        0            2048 Sep 05  2017 centos  drwxr-xr-x    2 0        0               6 Jun 09  2021 pub  226 Directory send OK.  ftp> bye  221 Goodbye. 

Linux网络服务之部署YUM仓库

步骤5、客户端编写yum仓库文件。

 [root@192 ~]# cd /etc/yum.repos.d      //切换目录  [root@192 yum.repos.d]# ls  bak2              CentOS-Debuginfo.repo  CentOS-Sources.repo  CentOS-Base.repo  CentOS-fasttrack.repo  CentOS-Vault.repo  CentOS-CR.repo    CentOS-Media.repo  [root@192 yum.repos.d]# mkdir bak1        //新建文件夹  [root@192 yum.repos.d]# mv *.repo bak1    //将默认的仓库文件移动到该目录下  [root@192 yum.repos.d]# ls  bak1  bak2  [root@192 yum.repos.d]# vim ftp.repo      //编写新的仓库文件  [ftp]  name=ftp  baseurl=ftp://192.168.72.10/centos     //路径指向服务端的/var/ftp/centos/目录  enabled=1  gpgcheck=0 

Linux网络服务之部署YUM仓库

Linux网络服务之部署YUM仓库

步骤6、清理yum缓存,重新建立元数据。并测试使用yum能否成功安装软件包。

 [root@192 yum.repos.d]# yum clean all && yum makecache  已加载插件:fastestmirror, langpacks  正在清理软件源: ftp  Cleaning up everything  Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos  Cleaning up list of fastest mirrors  已加载插件:fastestmirror, langpacks  ftp                                                        | 3.6 kB  00:00:00       (1/4): ftp/group_gz                                        | 156 kB  00:00:00       (2/4): ftp/primary_db                                      | 3.1 MB  00:00:00       (3/4): ftp/other_db                                        | 1.2 MB  00:00:00       (4/4): ftp/filelists_db                                    | 3.1 MB  00:00:00       Determining fastest mirrors  元数据缓存已建立  ​  [root@192 yum.repos.d]# yum install httpd -y    //测试yum安装,可以成功安装。 

Linux网络服务之部署YUM仓库

Linux网络服务之部署YUM仓库

4.5 搭建本地epel源仓库

本地epel源仓库的应用场景:

  • 在可以连外网的情况下,可以使用国外源或阿里云仓库等。
  • 但实际工作中,公司内网常常无法连接外网,这时可以提前搭建本地epel源仓库,即在一台可连通外网的服务器中提前下载好epel源的所有软件包,编写好仓库文件后,在离线的情况下也可以使用yum安装软件包。
  • 之后其他主机可以通过http方式或ftp方式使用服务端的epel源仓库。

操作步骤:

步骤1、安装epel源,并下载epel源的所有软件包。

 [root@localhost ~]# yum install epel-release          //安装epel源  [root@localhost ~]# mkdir centos7                     //新建centos7目录    [root@localhost ~]# reposync -r epel -p /centos7/ &     //下载同步epel源软件包,下载到/centos7/目录下,&表示放到后台下载  [root@localhost ~]# ls /centos7  epel 

步骤2、安装createrepo命令(建立元数据的命令),之后使用createrepo命令建立元数据。

 [root@localhost ~]# yum -y install createrepo      //安装createrepo命令  [root@localhost ~]# createrepo -v /centos7/epel    //建立元数据(软件目录、依赖关系)   [root@localhost ~]# cd  /centos7/epel        //切换到centos7/epel 目录下  [root@localhost epel]# ls              //查看软件包和元数据  Packages  repodata 

步骤3、切换到/etc/yum.repos.d目录,移走默认仓库文件,编写新的仓库文件。

 [root@localhost ~]# cd /etc/yum.repos.d/      //切换至/etc/yum.repos.d/目录  [root@localhost yum.repos.d]# ls  CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  [root@localhost yum.repos.d]# mkdir aaa      //创建一个名为aaa的新目录  [root@localhost yum.repos.d]# mv *.repo aaa   //将yum仓库中以.repo结尾的文件移动到aaa中  [root@localhost yum.repos.d]# ls  aaa  [root@localhost yum.repos.d]# vim epellocal.repo    //新建yum仓库文件  [epellocal]  name=epellocal                       #设置名称  baseurl=file:///centos7/epel     #设置链接地址,路径指向/centos7/epel目录  enabled=1                        #开启此yum源  gpgcheck=0                       #无需验证公钥   

其他主机如果想使用这台机器中的epel仓库,可以在本地使用http或ftp方式搭建:

 baseurl=http://192.168.72.10/centos7/epel      //http方式  ​  baseurl=ftp://192.168.72.10/centos7/epel        //ftp方式 

5 小贴士

5.1 使用命令方式生成仓库文件

以上四种方式都是都是通过手动编写yum仓库文件来配置,也可以直接通过命令来搭建。

命令的方式配置原理和上面的文件配置原理一样,都是写入/etc/yum.repos.d中,只是命令行是自动生成仓库文件 。

1、外网环境搭建

命令格式:

 wget -O  /etc/yum.repos.d/name.repo(自定义以repo结尾的文件名)  源路径 

wget 命令配置阿里云仓库:

 wget -O  /etc/yum.repos.d/Centos-7.repo  http://mirrors.aliyun.com/repo/Centos-7.repo 

2、内网环境搭建

命令格式:

 yum-config-manager --add-repo=file://  yum-config-manager --add-repo=ftp:// 

示例:

 yum-config-manager --add-repo=file:///mnt           //使用本地源  yum-config-manager --add-repo=ftp://192.168.72.10/centos7   //ftp方式搭建 

5.2 下载依赖包到本地(但不安装)

当内网的一台主机安装某个软件包却缺少依赖包时,可以先由一台可连接外网的服务器下载依赖包,之后共享给这台主机。

这时可以使用“yum install --downloadonly”命令,该命令可以仅下载所需软件及其依赖包、而不安装软件,大大减少了无外网安装时找依赖包的问题。命令格式如下:

 yum install --downloadonly +软件名称 --downloaddir=指定rpm包存放路径 

例如,下载nginx所需要的依赖包到/mnt/nginx目录内:

 yum install nginx --downloadonly --downloaddir=/mnt/nginx 

本文转自:https://juejin.cn/post/7078172295302217735