内容纲要

repodata 是从一组 rpm 创建 repomd (基于xml的rpm元数据)存储库的程序。即用于创建 yum 源(软件仓库),为存放于本地特定位置的众多 rpm 包建立索引,描述各包所需依赖信息,并形成元数据。

createrepo 创建的元数据目录下有四个必要文件:filelists.xml.[gz],other.xml.[gz],primary.xml.[gz] 和 repomd.xml (md 意思是 metadata),其中最主要的是 repomd.xml 文件 。通常出现的找不到 repodata 目录或文件的错误的缘由一般有三个:一是路径问题;二是没有生成 repodate 目录;三是 *.repo 配置文件冲突(这个须要特地注意)。

语法:

createrepo [option] <directory>

参数选项说明

-u  --baseurl <url>
指定Base URL的地址

-o --outputdir <url>
指定元数据的输出位置

-x --excludes <packages>
指定在形成元数据时需要排除的包

-i --pkglist <filename>
指定一个文件,该文件内的包信息将被包含在即将生成的元数据中,格式为每个包信息独占一行,不含通配符、正则,以及范围表达式。

-n --includepkg
通过命令行指定要纳入本地库中的包信息,需要提供URL或本地路径。

-q --quiet
安静模式执行操作,不输出任何信息。

-g --groupfile <groupfile>
指定本地软件仓库的组划分,范例如下:
createrepo -g comps.xml /path/to/rpms
注意:组文件需要和rpm包放置于同一路径下。

-v --verbose
输出详细信息。

-c --cachedir <path>
指定一个目录,用作存放软件仓库中软件包的校验和信息。
当createrepo在未发生明显改变的相同仓库文件上持续多次运行时,指定cachedir会明显提高其性能。

--update
如果元数据已经存在,且软件仓库中只有部分软件发生了改变或增减,
则可用update参数直接对原有元数据进行升级,效率比重新分析rpm包依赖并生成新的元数据要高很多。

-p --pretty
以整洁的格式输出xml文件。

-d --database
该选项指定使用SQLite来存储生成的元数据,默认项。

实例

建立本地源步骤以下:

一、安装createrepo包;

# dnf provides createrepo   //查询提供createrepo的安装包
# dnf -y createrepo_c

二、新建本地源目录
1、 mkdir -p /repodir/Packages
2 、将 rpm 安装包放到/repodir/Packages/目录中
3、 建立repo元数据

[root@localhost ]# cd /repodir/Packages
[root@localhost ]# createrepo /repodir/ #建立一个源
[root@localhost ]# cd ../
[root@localhost repodata]# pwd
/repodata
[root@localhost repodata]# ll
总用量 8
drwxr-xr-x. 2 root root 4096 10月 27 12:59 Packages
drwxr-xr-x. 2 root root 4096 10月 27 13:00 repodata
[root@localhost repodata]# ll repodata/
总用量 64
-rw-r--r--. 1 root root 10632 10月 27 13:00 511b3802c2fbc6f2591f9212825aa99baa8c10b6222079c74f1a3ed9aa9d6443-filelists.xml.gz
-rw-r--r--. 1 root root  9440 10月 27 13:00 793b8eeeabb3a4a14282724064a97abf66d1abbaf5fc4863d1b64ebca8f995ed-primary.sqlite.bz2
-rw-r--r--. 1 root root  6329 10月 27 13:00 80a3c77c447db980d2e56f89be8d2983db95083025e44852a1d92df4ac5ae638-other.sqlite.bz2
-rw-r--r--. 1 root root  3539 10月 27 13:00 9ba2a8194141e3835f97b6577468db559bf998b607a12e75c10ae15e5db0ac10-other.xml.gz
-rw-r--r--. 1 root root 13726 10月 27 13:00 9bf54533e94efcc51b4dd2557918ab550fe0db078735e20d5e14a9ddc4c443a6-filelists.sqlite.bz2
-rw-r--r--. 1 root root  4310 10月 27 13:00 a6d6672498daaaf365f32b1495bb0f83de0bbcfa1da8c5c4b50b91f806e3a77f-primary.xml.gz
-rw-r--r--. 1 root root  3081 10月 27 13:00 repomd.xml
```bash

三、配置yum源

# cd /etc/yum.repos.d/
# vim local.repo
[local-repo]
name=local-repo
baseurl=file:///repodir/
enabled=1
gpgcheck=0

.reop文件字段说明:
[….] 表明仓库的名称,全局唯一不能重复
name= 仓库的说明,没有太大的实际意义,只是一个说明字段
baseurl= 说明采起什么方式传输,具体路径在哪里,可使用的方式有,file://,ftp://,http://等
enabled=1 说明启用这个更新库,0表示不启用
gpgcheck=1 表示使用gpg文件来检查软件包的签名
gpgkey= 表示gpg文件所存放的位置,此处也能够有http方式的位置

Tips

一般在安装系统镜像中的已包含的 rpm 包时,可以将镜像以 loop 方式挂载到本地然后配置本地 yum 源使用 ,镜像中已经包含了rpm 包的索引数据,就不需要我们再使用 createrepo 命令生成了。