因为工作的原因,需要在隔离的内网环境中搭建 YUM 私有源。搭建完成后,发觉绕了一些弯路,而且网上类似文章虽多,但基本很少有对镜像和源进行校验,所以还是同样做个备忘(主要是十一月都要过半了,文章还没一篇)。

搭建 YUM 私有源有两个方法,一个是借用镜像,另一个是同步网上公开的 YUM 源,本篇采用的是前一种方法,至于另一种主要是还没解决与内网服务器同步的问题(非一次性),等有合适的解决方法之后再另外写一篇(挖坑)。

挂载镜像

因为公司用的都是阿里云服务器,所以镜像也是从阿里巴巴开源镜像站下载,版本是 CentOS-7-x86_64-Everything-1908(当然从其他源也是一样的,这里只是为了日后方便说明)。

最开始我是先在能连外网的 CentOS 7 服务器中下载 httpd 包和其依赖,但事后发觉其实没这个必要,等 YUM 私有源搭建好之后再安装也不迟,顺便还可以在本机做个测试。不过步骤还是放在附录中,以防以后需要用到。

先把下载好的 iso 镜像做个校验(非必要,但建议),sha256sum 可在当前版本下的 sha256sum.txt 查看,这里是 sha256sum.txt,因为下载的是 Everything,所以对应的是 bd5e6ca18386e8a8e0b5a9e906297b5610095e375e4d02342f07f32022b13acf

查看镜像的 sha256sum:

# macOS
openssl dgst -sha256 ~/Downloads/CentOS-7-x86_64-Everything-1908.iso

# Linux
sha256sum CentOS-7-x86_64-Everything-1908.iso

# Windows
certutil -hashfile ./CentOS-7-x86_64-Everything-1908.iso SHA256

校验完成后,便可以上传文件到内网服务器:

# 把 ios 文件上传到内网服务器
scp CentOS-7-x86_64-Everything-1908.iso root@10.1.1.42:/root

# 建立挂载镜像的目录
mkdir -p /var/www/html/centos/7
# 挂载镜像,loop 选择表示把文件作为硬盘分区挂载,默认只读
mount -o loop CentOS-7-x86_64-Everything-1908.iso /var/www/html/centos/7

修改源指向

# 首先备份 /etc/yum.repos.d 目录
mv /etc/yum.repos.d /etc/yum.repos.d.bak
# 验证备份
ll /etc | grep yum.repos.d.bak
# 重新创建目录
mkdir -r /etc/yum.repos.d
# 新建文件,并写入内容
vi /etc/yum.repos.d/centos.repo
# 下面是 centos.repo 中的内容
[load]
name=CentOS-$releasever - Everything
baseurl=file:///var/www/html/centos/7
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-$releasever

字段说明:

  • name:源名称,$releasever 获取系统大版本号;
  • baseurl:源目录,因为没安装 httpd,所以这里指向的是本地;
  • enabled:是否启用源,1 表示启用,0 表示禁用;
  • gpgcheck:是否对源进行校验,这里也可以填写 0 表示禁用;
  • gpgkey:指向本地的 RPM-GPG-KEY 路径,不用可以删除;

接下来就可以在本机使用 YUM 源了,不过先清除下本机的 YUM 缓存:

# 清除缓存
yum clean all

# 查看仓库列表
yum repolist

启动 httpd 服务

# 安装 httpd
yum install httpd

# 启动服务
service httpd start

# 查看防火墙状态
systemctl status firewalld.service

# 防火墙如果启用,则需开放 80 端口
# 开放服务器 80 端口,permanent 表示永久有效
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=80/tcp --permanent
# 重启防火墙
firewall-cmd --reload

现在可以通过 http://10.1.1.42/centos/7 打开页面,将会成功显示镜像内容,之后在其他局域网的服务器中使用,只要把 centos.repo 中的 baseurl 改为 http://10.1.1.42/centos/7 即可。

最后

快要写完时,发现 CentOS 7 和 CentOS 6 是需要对应的镜像,两者并不能通用,而且 CentOS 6 并没有 Everything 的镜像可下载,所以在又把上面的链接和挂载目录重新编辑过。

另外实际使用中,可以写个 sh 脚本直接用 wget 从服务器下载自动替换 repo。

对了,补充一点,YUM 是以大写形式书写的,可以参考维基:yum (software) - Wikipedia

再补充一点,当初想建立 YUM 私有源时,以为和搭建镜像站是同一码事(虽然它们的确是放在一起的),后面才意识到其实两者是可以分开的。

信息

附录

关于下载 httpd 和依赖包,并上传到内网服务器中。

# 在外网服务器上下载 httpd(包含依赖)
yum install --downloadonly --downloaddir=/root/httpd httpd

# 把下载完成的包复制到内网远程服务器
scp -r /root/httpd root@10.1.1.42:/root

# 在内网服务器中安装
yum localinstall httpd/*.rpm

版本

  • 系统版本
    • CentOS 6.8
    • CentOS 7.2

参考