构建内网 RPM 软件仓库
版本说明:原案例使用 CentOS 7,适合存量环境复现。CentOS 7 已停止维护,新建仓库建议使用 Rocky Linux、AlmaLinux 或其他仍受支持的 RHEL 兼容发行版,并用
dnf reposync、createrepo_c和 GPG 校验维护仓库。
生产仓库建议
- 按 BaseOS、AppStream、EPEL 和自建包分仓管理,仓库根目录必须包含
repodata,客户端baseurl应指向该根目录,而不是盲目指向Packages子目录。 - 同步任务使用专用账号,记录上次成功时间、下载包数量、磁盘增长和失败原因;同步完成并校验后再原子切换到新快照。
- 开启
gpgcheck=1,保存并核对官方 GPG Key 指纹;内部自建包使用独立签名密钥,私钥不得放在 Web 目录。 - 不关闭防火墙,只允许客户端网段访问仓库 Web 端口。跨不可信网络时使用 HTTPS 或专用网络。
- 规划快照保留、旧包清理、仓库备份和回滚,避免一次错误同步影响全部内网主机。
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








