构建内网 RPM 软件仓库

版本说明:原案例使用 CentOS 7,适合存量环境复现。CentOS 7 已停止维护,新建仓库建议使用 Rocky Linux、AlmaLinux 或其他仍受支持的 RHEL 兼容发行版,并用 dnf reposync、createrepo_c 和 GPG 校验维护仓库。

生产仓库建议

  1. 按 BaseOS、AppStream、EPEL 和自建包分仓管理,仓库根目录必须包含 repodata,客户端 baseurl 应指向该根目录,而不是盲目指向 Packages 子目录。
  2. 同步任务使用专用账号,记录上次成功时间、下载包数量、磁盘增长和失败原因;同步完成并校验后再原子切换到新快照。
  3. 开启 gpgcheck=1,保存并核对官方 GPG Key 指纹;内部自建包使用独立签名密钥,私钥不得放在 Web 目录。
  4. 不关闭防火墙,只允许客户端网段访问仓库 Web 端口。跨不可信网络时使用 HTTPS 或专用网络。
  5. 规划快照保留、旧包清理、仓库备份和回滚,避免一次错误同步影响全部内网主机。

Rocky/Alma 9 常用同步示例:

dnf install -y dnf-plugins-core createrepo_c
reposync --download-metadata --delete --repoid=<REPO_ID> --download-path=/srv/repos
createrepo_c --update /srv/repos/<REPO_ID>

一、描述

为了提升内网环境下软件安装与依赖管理的效率,配置局域网仓库,通过定时同步在线仓库来保证软件源始终为最新。

同时出于安全考虑,在虚拟机中部署该仓库,这样可以在内网主机需要更新或安装软件包时,才将其安全地接入内网环境进行使用。

二、环境准备

1.可联网主机一台,配置为局域网仓库,操作系统版本:CentOS Linux release 7.9.2009 (Core)

2.存储空间根据实际需要减小或增加,建议不小于60G

三、部署步骤

1、因为我是测试环境,没有单独分配一块数据盘,正式环境建议单独增加一块数据盘做为仓库的存储位置

2、关闭禁用防火墙

# 不要关闭防火墙;仅允许内网客户端访问仓库 Web 端口。
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

3、默认centos安装完后,使用的源是mirrorlist.centos.org,已无法访问,建议参照以下链接更换源

https://yan-jian.com/centos%E6%9B%B4%E6%8D%A2%E9%98%BF%E9%87%8C%E4%BA%91%E6%BA%90.html

4、安装dnf命令

yum install dnf -y

5、安装yum扩展包和epel-release源

yum-utils 是一个提供额外管理和配置 YUM(Yellowdog Updater, Modified)软件包管理器的工具的集合。YUM 是基于 RPM 的 Linux 发行版(如 CentOS、Fedora、RHEL 等)中的一个关键组件,用于自动更新、安装、删除和管理 RPM 软件包及其依赖关系。

dnf install yum-utils epel-release -y

6、部署web服务

#安装http服务
dnf install httpd -y

7、同步在线仓库至本地

#获取软件包列表总数
[root@localhost yum.repos.d]# yum list | wc -l
24092

#创建本地仓库目录:
mkdir -p /var/www/html/repo

#开始同步在线仓库,-p 指定下载目录,默认为当前目录
reposync -p /var/www/html/repo

6、下载完成可以检查目录大小和本地仓库源目录

#检查下载库的目录大小
du -sh /var/www/html/repo

#遍历本地仓库源目录
ls -lh /var/www/html/repo

7、安装createrepo工具,用于创建本地元数据和仓库索引

dnf install createrepo -y

8、为下载好的软件包生成元数据和索引,使其可以被外部访问

createrepo /var/www/html/repo/appstream/Packages/ -o /var/www/html/repo/appstream/Packages/
createrepo /var/www/html/repo/baseos/Packages/ -o /var/www/html/repo/baseos/Packages/
createrepo /var/www/html/repo/epel-cisco-openh264/Packages/ -o /var/www/html/repo/epel-cisco-openh264/Packages/
createrepo /var/www/html/repo/extras/Packages/ -o /var/www/html/repo/extras/Packages/
createrepo /var/www/html/repo/epel/Packages/ -o /var/www/html/repo/epel/Packages/
createrepo /var/www/html/repo/base/Packages/ -o /var/www/html/repo/base/Packages/

9、重启服务,在浏览器访问可以看到以下仓库名

四、客户端测试

内网服务器上配置源地址为上述虚拟机,安装软件包测试。

1、备份源文件

mkdir backup
mv /etc/yum.repos.d/* /root/backup/

2、新建repo文件,配置内网源地址

vim CentOS-Base.repo

[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.213.141/repo/base/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

[baseos]
name=Linux-BaseOS
baseurl=http://192.168.213.141/repo/baseos/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

[appstream]
name=Linux-AppStream
baseurl=http://192.168.213.141/repo/appstream/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

[extras]
name=Linux-extras
baseurl=http://192.168.213.141/repo/extras/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

[epel]
name=Linux-epel
baseurl=http://192.168.213.141/repo/epel/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

[epel-cisco-openh264]
name=Linux-epel-cisco
baseurl=http://192.168.213.141/repo/epel-cisco-openh264/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever-Updates
baseurl=http://192.168.213.141/repo/updates/Packages
enabled=1
gpgcheck=1
gpgkey=http://192.168.213.141/repo/key/RPM-GPG-KEY-CentOS-7

备注:RPM-GPG-KEY-CentOS-7文件可以从阿里云http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 下载后上传至服务器。

3、重建缓存

yum clean all && yum makecache

4、查看可用软件包

yum list

5、安装软件包测试

yum install net-tools -y

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-18 13:28:39

results matching ""

    No results matching ""