搭建离线YUM源
工作中,虚拟机通常都是部署在内网环境中,无法连接互联网,因此无法使用互联网上的YUM源。我们经常会遇到系统ISO镜像中软件包缺失,系统软件补丁无法升级,第三方软件包无法安装等情况。本文通过搭建离线YUM源,解决了困扰已久的问题。
1. 目的
系统补丁升级
安装第三方源软件包,比如ngnix等。
安装额外的一些软件包
2. YUM源的种类
源名称 说明
base 操作系统镜像源,包含了ISO镜像内的所有软件包
updates 包含了系统更新,升级的软件包
extras 扩充的软件包合集
epel EPEL (Extra Packages for Enterprise Linux)是基于Fedora的一个项目,为“红帽系”的操作系统提供额外的软件包,适用于RHEL、CentOS和Scientific Linux.
3. 准备工作
准备一台可以联网的linux虚拟机
部署一台可以联网的linux虚拟机,虚拟机的部署及联网可以参考翻阅下我之前写的文档,这些不做叙述。
安装创建YUM仓库的软件工具
[root@localhost yum.repos.d]# yum install createrepo yum-utils -y
移除其他镜像源
···
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir bak
[root@localhost yum.repos.d]# mv * bak
···
下载阿里云的repo文件
最小化安装的操作系统没有wget命令,可以通过网页的形式去下载,之后上传到/etc/yum.repos.d目录
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
什么是yum源repo文件,repo文件是yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的配置内容,例如将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。
构建YUM源缓存
[root@localhost ~]# yum clean all #清除当前的yum源缓存
[root@localhost ~]# yum makecache #重新生成缓存
[root@localhost ~]# yum repolist #查看当前可用的YUM源
安装并启用httpd服务
[root@localhost /]# yum install httpd
[root@localhost /]# systemctl start httpd
[root@localhost /]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2021-06-30 00:49:06 CST; 5s ago
....output omitted....
4. 同步阿里云的YUM源到本地
在/var/www/html目录中创建一个yum目录,空间要足够大,本例中我选择挂载一个独立的分区到/var/www/html/yum目录,镜像同步到本地,预计占用30G的空间。这里选择将目录存放在httpd服务的根目录(/var/www/html),为后续搭建本地http yum仓库做准备。
[root@localhost /]# df -h
..output omitted...
/dev/sda3 50G 53M 47G 1% /var/www/html/yum
[root@localhost /]# cd /var/www/html/yum
[root@localhost yum]#
同步镜像到本地目录
#reposync根据之前下载的repo文件下载rpm包到指定文件夹
[root@localhost /]# cd /var/www/html/yum
[root@localhost yum]# reposync -r base
[root@localhost yum]# reposync -r extras
[root@localhost yum]# reposync -r updates
[root@localhost yum]# reposync -r epel
5. 创建本地YUM仓库
为本地yum仓库,生成新的repo文件
[root@localhost yum]# cd /var/www/html/yum/base
[root@localhost yum]# createrepo ./
[root@localhost yum]# cd /var/www/html/yum/extras
[root@localhost yum]# createrepo ./
[root@localhost yum]# cd /var/www/html/yum/updates
[root@localhost yum]#createrepo ./
[root@localhost yum]# cd /var/www/html/yum/epel
[root@localhost yum]# createrepo ./
6. 更新YUM仓库
到此本地YUM仓库搭建完成,如果在对应的仓库中加入新的软件包时,需要更新仓库。本文中不涉及。
[root@localhost ]# createrepo --update /var/www/html/yum/epel
7. 离线YUM仓库的使用
虚拟机导出为模板上传到生产网环境中(方法一)
将虚拟机导出为OVF模板,上传到现网虚拟化平台,配置维护域ip地址,确保与其他主机网络正常通信。配置客户端主机的yum源配置文件,将YUM仓库指向该主机,即可正常使用该YUM仓库。客户端yum源配置文件如下:
[root@client yum.repos.d]# cd /etc/yum.repos.d
[root@client yum.repos.d]# mkdir bak ; mv * bak
[root@client yum.repos.d]# vi http.repo
[base]
name=RHEL- - Base - http
baseurl=http://192.168.17.130/yum/base
enabled=1
gpgcheck=0
[updates]
name=RHEL- - updates - http
baseurl=http://192.168.17.130/yum/updates
enabled=1
gpgcheck=0
[epel]
name=RHEL- - epel - http
baseurl=http://192.168.17.130/yum/epel
enabled=1
gpgcheck=0
[extras]
name=RHEL- - extras - http
baseurl=http://192.168.17.130/yum/extras
enabled=1
gpgcheck=0
[root@client yum.repos.d]# yum clean all
[root@client yum.repos.d]# yum makecache
[root@client yum.repos.d]# yum list | grep kernel
kernel.x86_64 3.10.0-1160.el7 @anaconda
kernel-tools.x86_64 3.10.0-1160.el7 @anaconda
kernel-tools-libs.x86_64 3.10.0-1160.el7 @anaconda
abrt-addon-kerneloops.x86_64 2.1.11-60.el7.centos base
erlang-kernel.x86_64 R16B-03.18.el7 epel
kernel.x86_64 3.10.0-1160.31.1.el7 updates
kernel-abi-whitelists.noarch 3.10.0-1160.31.1.el7 updates
kernel-debug.x86_64 3.10.0-1160.31.1.el7 updates
kernel-debug-devel.x86_64 3.10.0-1160.31.1.el7 updates
kernel-devel.x86_64 3.10.0-1160.31.1.el7 updates
[root@client yum.repos.d]# yum install kernel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package kernel.x86_64 0:3.10.0-1160.31.1.el7 will be installed
--> Finished Dependency Resolution
.....output ommitted.........
Transaction test succeeded
Running transaction
Installing : kernel-3.10.0-1160.31.1.el7.x86_64
Complete!
客户端测试安装kernel软件包,成功安装。
将虚拟机的yum软件包所在目录打包上传到现网的yum源主机(方法二)
将本机/var/www/html/yum目录通过sftp等客户端工具保存到移动硬盘,之后再上传到现有的yum源主机对应目录中。更新客户端主机的yum源配置,指向新的YUM仓库目录,即可正常使用该YUM仓库。
方法二中需要注意,打包目录上传目标主机时,要将yum目录整体打包传输。其他步骤与方法一完全相同。