695 字
3 分钟
CentOS 7 制作本地 YUM 仓库
1. 背景
需要给别人做一个 YUM 包供其在课堂实验中使用,要求:
- 不依赖外网即可安装目标软件
- 包含所有依赖
- 拿到一个目录就能直接当作仓库源使用
实现思路:用 yum-plugin-downloadonly 把包及其依赖只下载不安装,再用 createrepo 在该目录生成仓库元数据。
2. 准备公共仓库
先确保当前机器能用 YUM 拉到目标软件,否则后面下不动。这里以阿里云源为例:
$ 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 -y3. 安装 EPEL 仓库
如果目标包来自 EPEL(如 nginx),需要额外启用:
$ yum install -y epel-release4. 安装 downloadonly 插件与 createrepo
yum-plugin-downloadonly:让yum install支持只下载不安装createrepo:在目录中生成repodata/元数据,把普通目录变成合法的 YUM 仓库
$ yum install -y yum-plugin-downloadonly createrepoCentOS 7 默认已自带
downloadonly,命令存在但插件包仍可显式安装以保证可用。
5. 下载目标包及其依赖
以制作 nginx 仓库为例:
$ mkdir /yum$ yum install --downloadonly --downloaddir=/yum/ nginx参数说明:
--downloadonly:只下载,不安装--downloaddir=/yum/:指定保存目录- 末尾跟需要下载的包名(可写多个,用空格分隔)
执行完成后 /yum/ 下就是 .rpm 包及其全部依赖。
6. 生成仓库元数据
$ cd /yum/$ createrepo .执行后会在 /yum/ 下新增 repodata/ 目录,里面是 repomd.xml、primary.xml.gz 等元数据文件。此时 /yum/ 就是一个完整的 YUM 仓库。
7. 使用本地仓库
把 /yum/ 目录打包传给目标机器(或通过 HTTP / FTP 共享)。目标机器的仓库配置:
$ cat > /etc/yum.repos.d/local.repo <<EOF[local]name=localbaseurl=file:///yum/gpgcheck=0enabled=1EOF$ 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 命令找不到 | 没装 createrepo,yum install -y createrepo |
目标机器 yum makecache 报 404 | baseurl 路径与实际目录不一致,注意末尾斜杠 |
| 安装时报缺依赖 | 制作仓库时漏了依赖;可在制作端 yum reinstall --downloadonly 重抓 |
| 同名包冲突或版本旧 | 重新生成元数据:createrepo --update . |
9. 进阶:增量更新
新增软件包时不用整库重做,加 --update 增量更新元数据:
$ yum install --downloadonly --downloaddir=/yum/ <新包名>$ createrepo --update /yum/10. 小结
- 本地仓库的核心组合就是 downloadonly 下包 + createrepo 生成元数据
- 仓库可以是纯文件、FTP、HTTP 三种发布方式,按场景选
- 教学/实验场景建议直接用 file:// 协议;多机批量部署建议用 HTTP,便于多客户端共享
- 持续维护的仓库记得用
createrepo --update增量更新
CentOS 7 制作本地 YUM 仓库
https://blog.xeu.asia/posts/centos-local-yum-repo/