createrepo生成yum仓库元数据xml文件
步骤 1: 安装 createrepo 工具
首先,确保你的系统已经安装了 createrepo
工具。如果尚未安装,可以通过以下命令安装:
# 对于 CentOS/RHEL 7 及类似版本:
yum install createrepo -y# 对于 CentOS Stream 8/9、RHEL 8/9 及类似版本,可能需要使用 dnf:
dnf install createrepo -y
步骤 2: 生成仓库元数据
安装完成后,进入你的仓库目录并生成元数据:
# 进入你的本地仓库目录,我当前的仓库目录为/data/app/
cd /data/app/# 使用 createrepo 命令在当前目录生成元数据
createrepo .
命令说明:
createrepo .
命令会在当前目录(即/data/app/
)下创建一个名为repodata
的子目录。repodata
目录内部会包含repomd.xml
,primary.xml.gz
,filelists.xml.gz
,other.xml.gz
等关键文件,这些文件共同描述了仓库中所有 RPM 包的信息和依赖关系 。
预期成功输出:
[root@localhost yum.repos.d]# createrepo /data/app/
Directory walk started
Directory walk done - 50 packages
Temporary output repo path: /data/app/.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
步骤 3: 验证元数据生成
生成完成后,验证 repodata
目录和 repomd.xml
文件是否已正确创建:
[root@localhost yum.repos.d]# ll /data/app/repodata/
total 232
-rw-r--r--. 1 root root 21444 Sep 3 14:25 02e0a1ab69291a701f0be7fae8a343b723ff4c53c72a3ac798dd3e441f4b924a-primary.xml.gz
-rw-r--r--. 1 root root 44620 Sep 3 14:25 1a32f5e2bf49e7d91dd3c72be7e582b69d1fe5aff6c7fcdd8aba8df993cee3cd-filelists.xml.gz
-rw-r--r--. 1 root root 55881 Sep 3 14:25 27c47c1ebfbe2189707c91cbe83f964a0c1321d9be62122ebd1a5a9927f9ac06-filelists.sqlite.bz2
-rw-r--r--. 1 root root 25710 Sep 3 14:25 560e1a85b54f8f483d2233d5ece2b3fc195cdeafa08132655f4a546badeb35df-other.xml.gz
-rw-r--r--. 1 root root 41723 Sep 3 14:25 8feb1da36844b9ddb2ce92621ddb7f9dd7090a28d9e4a5d46e9d7d529f5cfe21-primary.sqlite.bz2
-rw-r--r--. 1 root root 31451 Sep 3 14:25 f7c1ac2ac63b9e907cdcb37d9e80c9cdd237fcc9f292968f1b1f3785e09977ac-other.sqlite.bz2
-rw-r--r--. 1 root root 3090 Sep 3 14:25 repomd.xml
步骤 4: 更新 Yum 缓存
元数据生成成功后,再次运行命令更新 Yum 缓存:
yum clean all //如果是生产环境请谨慎操作
yum makecache
现在,yum makecache
命令应该能够成功读取本地仓库的元数据并创建缓存。
⚠️ 注意事项
-
仓库配置文件检查:
确保你的/etc/yum.repos.d/
目录下的某个.repo
文件(比如local.repo
)中配置了指向/data/app/
的仓库。配置块应该类似这样:[local-app] # 仓库名称 name=Local App Repository # 仓库描述 baseurl=file:///data/app/ # 关键:指向本地路径 enabled=1 # 启用此仓库 gpgcheck=0 # 如果不使用 GPG 密钥验证包,则设置为 0
如果
baseurl
配置错误,Yum 仍然无法找到正确的路径 。 -
权限问题:
确保/data/app/
目录及其下的文件对 Yum 进程(通常以 root 身份运行)有可读权限。repodata
目录生成后也应具有适当的读取权限。 -
后续更新:
每当你在/data/app/
目录中添加、删除或更新 RPM 软件包时,都需要重新运行createrepo .
命令来更新元数据索引,否则 Yum 将无法感知到这些变化。
📖 补充知识
repodata/
目录是 Yum 仓库的核心,它包含了一系列元数据文件,这些文件使得 Yum 能够:
- 解析依赖关系:通过
primary.xml.gz
了解软件包之间的依赖。 - 列出文件:通过
filelists.xml.gz
知道每个软件包包含哪些文件。 - 其他元信息:如软件包更改记录(
other.xml.gz
)和分组信息(comps.xml
)。
没有这些元数据,Yum 就无法正确工作。