695 字
3 分钟
CentOS 7 制作本地 YUM 仓库

1. 背景#

需要给别人做一个 YUM 包供其在课堂实验中使用,要求:

  • 不依赖外网即可安装目标软件
  • 包含所有依赖
  • 拿到一个目录就能直接当作仓库源使用

实现思路:用 yum-plugin-downloadonly 把包及其依赖只下载不安装,再用 createrepo 在该目录生成仓库元数据。

2. 准备公共仓库#

先确保当前机器能用 YUM 拉到目标软件,否则后面下不动。这里以阿里云源为例:

Terminal window
$ mv /etc/yum.repos.d/* /media/
$ wget -O /etc/yum.repos.d/CentOS-Base.repo \
http://mirrors.aliyun.com/repo/Centos-7.repo
$ yum clean all && yum makecache
$ yum update -y

3. 安装 EPEL 仓库#

如果目标包来自 EPEL(如 nginx),需要额外启用:

Terminal window
$ yum install -y epel-release

4. 安装 downloadonly 插件与 createrepo#

  • yum-plugin-downloadonly:让 yum install 支持只下载不安装
  • createrepo:在目录中生成 repodata/ 元数据,把普通目录变成合法的 YUM 仓库
Terminal window
$ yum install -y yum-plugin-downloadonly createrepo

CentOS 7 默认已自带 downloadonly,命令存在但插件包仍可显式安装以保证可用。

5. 下载目标包及其依赖#

以制作 nginx 仓库为例:

Terminal window
$ mkdir /yum
$ yum install --downloadonly --downloaddir=/yum/ nginx

参数说明:

  • --downloadonly:只下载,不安装
  • --downloaddir=/yum/:指定保存目录
  • 末尾跟需要下载的包名(可写多个,用空格分隔)

执行完成后 /yum/ 下就是 .rpm 包及其全部依赖。

6. 生成仓库元数据#

Terminal window
$ cd /yum/
$ createrepo .

执行后会在 /yum/ 下新增 repodata/ 目录,里面是 repomd.xmlprimary.xml.gz 等元数据文件。此时 /yum/ 就是一个完整的 YUM 仓库。

7. 使用本地仓库#

/yum/ 目录打包传给目标机器(或通过 HTTP / FTP 共享)。目标机器的仓库配置:

Terminal window
$ cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=local
baseurl=file:///yum/
gpgcheck=0
enabled=1
EOF
$ yum clean all && yum makecache
$ yum install -y nginx

通过 FTP / HTTP 共享时,baseurl 改为:

baseurl=ftp://<服务器IP>/yum/
# 或
baseurl=http://<服务器IP>/yum/

8. 常见问题#

现象排查点
--downloadonly 报”未识别的参数”装上 yum-plugin-downloadonly,或检查 yum 版本
createrepo 命令找不到没装 createrepoyum install -y createrepo
目标机器 yum makecache 报 404baseurl 路径与实际目录不一致,注意末尾斜杠
安装时报缺依赖制作仓库时漏了依赖;可在制作端 yum reinstall --downloadonly 重抓
同名包冲突或版本旧重新生成元数据:createrepo --update .

9. 进阶:增量更新#

新增软件包时不用整库重做,加 --update 增量更新元数据:

Terminal window
$ yum install --downloadonly --downloaddir=/yum/ <新包名>
$ createrepo --update /yum/

10. 小结#

  • 本地仓库的核心组合就是 downloadonly 下包 + createrepo 生成元数据
  • 仓库可以是纯文件FTPHTTP 三种发布方式,按场景选
  • 教学/实验场景建议直接用 file:// 协议;多机批量部署建议用 HTTP,便于多客户端共享
  • 持续维护的仓库记得用 createrepo --update 增量更新
CentOS 7 制作本地 YUM 仓库
https://blog.xeu.asia/posts/centos-local-yum-repo/
作者
Xeu
发布于
2026-05-21
许可协议
CC BY-NC-SA 4.0