createrepo

2023-05-16

createrepo 是一个对rpm 文件进行索引建立的工具。
大体功能就是对指定目录下的rpm文件进行检索,把每个rpm文件的信息存储到指定的索引文件中,这样方便远程yum命令在安装更新时进行检索。
看下createrepo支持的几个参数:

-u --baseurl

                    Optional base url location for all files. (not used by any clientsat this time) 

        -o --outputdir <url> 
                      Optional output directory (useful for read only media). 

        -x --exclude <package> 
                      File globs to exclude, can be specified multiple times. 

        -i --pkglist <filename> 
                      specify a text file which contains the complete list of filesto  include  in  the  repository 
                      from  the  set  found  in  the directory. File format is onepackage per line, no wildcards or 
                      globs. 

        -q --quiet 
                      Run quietly. 

        -g --groupfile <groupfile> 
                      A precreated xml filename to point to for group information. 
                      See examples section below for further explanation. 

        -v --verbose 
                      Run verbosely. 

-c --cachedir
Specify a directory to use as a cachedir. This allows createrepo tocreate a cache of check-
sums of packages in the repository. In consecutive runs ofcreaterepo over the same repository
of files that do not have a complete change out of all packagesthis decreases the processing
time dramatically.

        --update 
                      If  metadata  already  exists in the outputdir and an rpmis unchanged (based on file size and 
                      mtime) since the metadata was generated, reuse the existingmetadata rather than recalculating 
                      it.  In  the caseof a large repository with only a few new or modified rpms this cansignifi- 
                      cantly reduce I/O and processing time. 

        -C --checkts 
                      Don’t generate repo metadata, if theirtimestamps  are  newer  than  its  rpms.    This  option 
                      decreases  the  processing  time  drastically  again, if you happen to run iton an unmodified 
                      repo, but it is (currently) mutual exclusive with the --splitoption. 

        --split 
                      Run in split media mode. Rather than pass a single directory, takea set of directories corre- 
                      sponding to different volumes in a media set. 

-p --pretty
Output xml files in pretty format.

        -V --version 
                      Output version. 

        -h --help 
                      Show help menu. 

        -d --database 
                      Generate sqlite databases for use with yum. 

createrepo生成四个文件:
repodata/filelists.xml.gz
repodata/other.xml.gz
repodata/primary.xml.gz
repodata/repomd.xml
关于这几个文件的描述是:
repomd.xml this is the file that describes theother metadata files. It is like an index file to point to theother files. It contains timestamps and checksums for the otherfiles. This lets a client download this one, small file and know ifanything else has changed. This also means that cryptographically(ex: gpg) signing this one file can ensure repositoryintegrity.
primary.xml.[gz] this file stores the primarymetadata information. This includes information such as:
name, epoch, version, release, architecture
file size, file location, description, summary, format,checksums header byte-ranges, etc.
dependencies, provides, conflicts, obsoletes, suggests,recommends
file lists for the package for CERTAIN files - specificallyfiles matching: /etc*, bin/, /usr/lib/sendmail [1]
filelists.xml.[gz] this file stores thecomplete file and directory listings for the packages. The packageis identified by: name, epoch, version, release, architecture andpackage checksum id.
other.xml.[gz] this file currently onlystores the changelog data from packages. However, this file couldbe used for any other additional metadata that could be useful forclients.
groups.xml.[gz] this file is tentativelydescribed. The intention is for a common package-groupsspecification as well. There is still some sections for this formatthat need to be fleshed out.
其实我们需要记住的就是primary.xml.gz存储的是包列表,而filelist.xml存储的是所有包的目录和文件列表。

也就是说如果createrepo成功创建索引后,包的信息和每个包的文件信息都会存储在这两个文件中。

当然,如果你在执行createrepo时添加了-d 参数的话,createrepo会对

filelist.xml.gz,primary.xml.gz和other.xml.gz各自生成一个sqlite的文件(或者压缩文件)。

其中用sqlite格式存储了对应xml文件中的信息。

然后当你在客户端执行 yum clean all ,yum list 之后,这些索引文件就会下载到客户端。

默认的cache目录是:/var/cache/yum,里面按照不同的repo再分目录了,比如 rhel,test等等。

createrepo默认会生成的文件有:

filelists.xml.gz other.xml.gz primary.xml.gz repomd.xml

经过索引下载后,在客户端的cache中会生成索引文件:

cachecookie primary.xml.gz primary.xml.gz.sqlite repomd.xml
如果采用了 -d 参数的话,createrepo会生成的文件有:

filelists.sqlite.bz2 filelists.xml.gz other.sqlite.bz2 other.xml.gz primary.sqlite.bz2 primary.xml.gz repomd.xml

客户端更新后,索引文件有:

cachecookie primary.sqlite repomd.xml
我们可以看到,如果采用sqlite的db来存储的话,yum会把filelist,primary和other文件的信息都存储到

Sqlite的db文件primary.sqlite中。

查看primary.sqlite文件:

sqlite3 /var/cache/yum/ops.5Server.x86_64/primary.sqlite

运行 ".table"命令,查看表列表:

sqlite> .table
conflicts db_info files obsoletes packages provides requires
可以看到包的所有信息都存储在这几个表当中了。

我们可以做个测试,查询下packages表中的信息:

select * from packages where name =‘tops-cmos’ and version =‘1.1.0’;

输出如下:

155|ece7d2540f36adec0b098c2202601f1d1c5021a6|tops-cmos|x86_64|1.1.0|20|101|Unifiedplatform of agent program for configuration managment by TAOBAOSA|Unified platform of agent program for configuration managment byTAOBAO SA||1337054204|1337054201|©2011 System AdministrationTools Licence|System Administration Department, TaobaoInc.|Tops|v132074.sqa.cm4.tbsite.net|tops-cmos-1.1.0-101.src.rpm|280|4315|SysAdminPackertaobao-sre-sys-sa@list.alibaba-inc.com|47174|119349|121752|tops-cmos-1.1.0-101.x86_64.rpm||sha

继续以packages表为例,能够看到这个表的字段有:

.schema packages

CREATE TABLE packages ( pkgKey INTEGERPRIMARY KEY, pkgIdTEXT, name TEXT, arch TEXT, versionTEXT, epoch TEXT, release TEXT, summaryTEXT, descriptionTEXT, url TEXT, time_file INTEGER, time_buildINTEGER, rpm_licenseTEXT, rpm_vendorTEXT, rpm_groupTEXT, rpm_buildhostTEXT, rpm_sourcerpmTEXT, rpm_header_startINTEGER, rpm_header_endINTEGER, rpm_packagerTEXT, size_packageINTEGER, size_installedINTEGER, size_archiveINTEGER, location_hrefTEXT, location_baseTEXT, checksum_type TEXT);

看到了这个表的所有字段,这些字段描述了一个rpm文件的主要信息。然后你就可以根据这些字段做条件查询了。

.schema files
CREATE TABLE files ( nameTEXT, type TEXT, pkgKey INTEGER);

也能够看到file与pkg的关联关系,有个外键是pkgKey.

.schema conflicts
CREATE TABLE conflicts ( nameTEXT, flags TEXT, epoch TEXT, versionTEXT, releaseTEXT, pkgKey INTEGER );

conflicts表的信息.

.schema obsoletes
CREATE TABLE obsoletes ( nameTEXT, flags TEXT, epoch TEXT, versionTEXT, releaseTEXT, pkgKey INTEGER );

包废除表的信息.

.schema provides
CREATE TABLE provides ( nameTEXT, flags TEXT, epoch TEXT, versionTEXT, releaseTEXT, pkgKey INTEGER );
CREATE INDEX pkgprovides on provides (pkgKey);
CREATE INDEX providesname ON provides (name);

provides表的信息。

.schema requires
CREATE TABLE requires ( nameTEXT, flags TEXT, epoch TEXT, versionTEXT, releaseTEXT, pkgKey INTEGER , pre BOOLEAN DEFAULTFALSE);
CREATE INDEX pkgrequires on requires (pkgKey);
CREATE INDEX requiresname ON requires (name);

requires表的信息。

其余这几个表都是以packages表为基础,来补充存储rpm包的信息,比如prides,require,obsolete等信息。

如果你做一个程序,能够生成同样的数据文件,基本上就实现了createrepo在带-d参数时的效果。

知道了这些信息,当你的yum服务出现问题时,比如包不能更新,版本不对等问题时,就能通过这些文件来查找问题的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

createrepo 的相关文章

  • springmvc的配置文件详解

    springmvc xml需要配置的东西 配置controller扫描包 使用组件扫描器省去在spring容器配置每个Controller类的繁琐 使用context component scan自动扫描标记 64 Controller的控
  • Bug随手记----关于java.lang.IllegalStateException: The following classes could not be excluded because the

    Consider the following If you want an embedded database H2 HSQL or Derby please put it on the classpath If you have data
  • linux:Systemd使用(systemctl)

    系统服务管理工具systemd是为了便于linux用户操作系统服务的管理 xff0c systemd提供了systemctl命令工具进行systemd的各项操作 Systemd的版本 systemd version systemd和syst
  • C++面试宝典:进程间通讯方式概述

    1 管道 我们来看一条 Linux 的语句 netstat tulnp grep 8080 学过 Linux 命名的估计都懂这条语句的含义 xff0c 其中 是管道的意思 xff0c 它的作用就是把前一条命令的输出作为后一条命令的输入 在这
  • ubuntu16.04LTS更换阿里源

    sudo gedit etc apt sources list 替换 xff1a 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 deb cdrom Ubuntu 16 04 LTS Xenial
  • a++多线程下出现消失的请求现象

    a 43 43 多线程下出现消失的请求现象 a 43 43 多线程下出现消失的请求现象是一个常见的多线程运行结果错误的例子 我们先来看一下a 43 43 代码执行图 xff1a 按照我们想让它执行的顺序执行 xff0c 结果应该是3 但在多
  • 2013年十佳优秀主席将获得传智播客.NET学院培训名额

    2013年CSDN高校俱乐部十佳优秀主席将会免费获得价值9580元的传智播客 NET学院免费培训名额 培训时间为2015年之前有效 优秀主席评选截止日期为10月底 截止日期之前请提交你的评选内容 评选内容是俱乐部介绍 自我介绍和俱乐部活动介
  • MySQL各数据类型的特点

    MySQL各数据类型的特点 常用的整数类型 常见误区 int n 是设置数据最大的显示宽度 xff0c 所占的存储空间不会改变 常用的浮点类型 123456789 987654321 61 decimal 18 9 占用9个字节 涉及财务等
  • Redis持久化——RDB、AOF

    Redis持久化 RDB AOF 什么是持久化 redis所有数据都保存在内存中 xff0c 对数据的更新异步保存到磁盘上 在Redis中持久化的方式有两种 xff0c 一种是快照持久化 xff0c 一种是AOF持久化 xff0c 各有各的
  • Redis主从复制—看完这篇你就懂了

    Redis主从复制 主从复制 xff0c 是指将一台Redis服务器的数据 xff0c 复制到其他的Redis服务器 前者称为主节点 master leader xff0c 后者称为从节点 slave follower xff1b 数据的复
  • 轻松搞定单例模式以及线程安全等问题

    单例模式 单例模式 xff08 Singleton Pattern xff09 是 Java 中最简单的设计模式之一 这种类型的设计模式属于创建型模式 xff0c 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 xff0c 该类
  • 设计模式之原型模式

    原型模式 定义 xff1a 指原型实例指定创建对象的种类 xff0c 并且通过拷贝这些原型创建新的对象 不需要知道任何创建的细节 xff0c 不需要调用构造函数类型 xff1a 创建型 适用的场景 类初始化消耗较多资源 xff08 比较重的
  • 设计模式之外观模式

    外观模式 概念介绍 定义与类型 定义 xff1a 又叫门面模式 xff0c 提供了一个统一的接口 xff0c 用来访问子系统中的一群接口外观模式定义了一个高层接口 xff0c 这个接口使得子系统更容易被访问或者使用类型 xff1a 结构型
  • Mac无法连接本地Linux服务器 无法ping通

    遇到的问题 xff1a 虚拟机是从Win环境下复制到Mac上的 xff0c 在Win电脑下可以直接使用Xshell远程连接 xff0c 但在Mac下 xff0c 无法连接而且Ping不通 虚拟机使用的是CentOS 7版本 解决方案 查看M
  • gazebo视角设置问题

    How can I make my objects robot appear in image raw topic when using Gazebo camera plugin Initial view after gazebo star
  • DISM命令使用小结

    DISM命令使用小结 文章目录 DISM命令使用小结操作WIM镜像说明演示 操作系统映像说明添加功能启用本地策略启用Hyper V 操作WIM镜像 说明 REM 制作镜像并添加一个分卷 dism capture image imagefil
  • ZYNQ7000-AXI GPIO详解

    摘要 AXI GPIO是ZYNQ的一个IP核 xff0c 它能够将PS侧的AXI4 Lite接口转成PL侧的IO口 xff0c 可解决PS侧IO口不够用的问题 本文就AXI GPIO的概念 作用 配置与使用做了详细说明 xff0c 展示了示
  • Android Dialer源码分析之去电流程

    Android的拨号流程 xff0c 从拨号盘的点击拨号按钮开始 xff0c DialpadFragment java span class token annotation punctuation 64 Override span spa
  • 区块链-PancakeSwap抢跑机器人

    核心思路 监听txpool xff0c 直到检测匹配符合我们的条件时购买提高gas费实现插队 核心技术 ethers或web3 xff0c 本文采用etherserc20 核心方法 1 通过ehters提供的监听方法 xff0c 监听链上的

随机推荐

  • ubuntu下载安装python

    背景 fuzzbench最近又重新更新了python的版本要求是python3 10 8及以上版本 xff0c 但直接使用apt get install 无法下载这一版本 xff0c 会报错无法找到 xff0c 因此记录一下解决这一问题的全
  • STC USB-CDC 虚拟串口使用

    STC USB CDC 虚拟串口使用 目前该功能只能在STC8和STC32G单片机上实现该功能 比起WCH的单片机 xff0c 这一点要远强于STC的USBCDC功能了 xff37 xff23 xff28 随便一个 xff18 位单片机上都
  • kali 卡在 started gnome display manager(更新gnome导致,非磁盘满)

    手贱更新到gnome3 解决方案 xff1a 1 进入急救模式 xff0c 我的是在grub选择界面选择advanced 那个选项里面进入的 2 先卸载桌面环境 http www cnblogs com wanghuixi p 787580
  • Pyhton语音播放

    用Pyhton实现语音播放的功能 我们都知道python比较简单 xff0c 能够实现的功能比较全面 xff0c 而且 xff0c 他还有一些你可能想不到的功能呢 xff01 今天我就来说一说如何用python实现语音播放的功能 首先呢 x
  • 控制台运行java

    控制台执行java 新建java代码 新建一个记事本文件 xff0c 将文件名改为HelloWorld java xff0c 注意 xff1a 后缀是 java 若没有显示文件后缀 xff0c 可以在资源管理器打开显示后缀 xff0c 然后
  • Ubuntu系统主机如何免密登录服务器

    一 主机端操作 Ubuntu系统主机终端执行 cd 命令 xff0c 切换到用户目录下 在用户目录下执行 ll a 执行 cat ssh id rsa pub 获取公钥并复制公钥准备粘贴到服务器 二 服务器端操作 登录服务器后 xff0c
  • 【报错】GitHub 配置域名但是显示 Domain does not resolve to the GitHub Pages server... 怎么办

    应该只是域名解析需要时间 xff0c 反正我1小时后看就正常了 xff08 提示变绿了 xff09 xff0c 等等吧 xff08 24小时内都正常 xff09
  • 计算机论文常见词汇

    quantization kw nt ze n n 量子 量子化 xff1b 分层 xff1b 数字化 differentiating 英 d f ren e t 美 d f r n et v 区别 xff0c 区分 xff1b 使不同 x
  • 每日固定时间执行一次的shell实现

    在不使用crontab定时任务的情况下 xff0c 我们如何去实现每日定时执行某个任务的工作呢 xff1f 我遇到了类似问题 xff0c 遂转换思路 xff0c 花几分钟写了个小脚本实现如下 xff1a bin bash 每日7点执行 ct
  • FTPClient上传文件storeFile失败,没有异常,切换目录操作可以成功

    FTPClient上传文件storeFile失败 xff0c 没有异常 xff0c 切换目录操作可以成功 解决方法 xff1a 有没有设置被动模式 防火墙 有没有设置被动模式 要执行下面的语句 ftpClient span class to
  • 知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3

    知识图谱 命名实体 关系 免费标注工具 快速打标签 Python3 一 功能介绍1 代码文件夹结构2 运行环境3 自定义命名实体 关系模板4 导入文件5 选择自定义实体和关系文件6 文本标注7 撤销和取消标注8 导出和导出并退出系统9 导出
  • Ubuntu报错:Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

    之前在Ubuntu系统安装Navicat的时候出现了这样的问题 xff0c 难为自己半天 首先是下载文件 xff0c 出现报错 xff1a navicat16 mysql cs AppImage error while loading sh
  • linux中crontab的jar文件定时任务失败原因记录

    本文章作为备忘 xff0c 若能解决朋友们的遇到的问题 xff0c 再好不过 在创建定时任务时 xff0c 所有的路径都需要写绝对路径 xff0c 包括配置文件 若定时文件为定时执行sh文件 xff0c 而sh文件中需要的配置文件也需要写绝
  • docker安装MongoDB以及redis

    一 安装Redis 以redis 4 0 9版本为例 docker pull redis 4 0 9 span class token function mkdir span usr local docker redis data span
  • linux安装好的mysql rpm -qa |grep mysql不见

    输入 xff1a rpm qa grep i mysql
  • MariaDB导入XXX.sql文件

    使用的 MariaDB5 5 52 开启数据库服务 xff1a systemctl start mariadb 要使用该脚本 xff0c 登录数据 xff0c mysql u root p 根据提示输入你安装数据库时需设置密码 xff0c
  • BaseOs之:Error: No available modular metadata for modular package

    文章目录 Error No available modular metadata for modular package先下载rpm包 xff1a 安装modular metadata生成工具 随便找一个目录 xff0c 执行git clo
  • BaseOs之:网络yum源部署

    文章目录 参考阿里mirror aliyum源 x86 arm source站点目录结构 简单分析 每个目录站点详细结构 x86 64为例 简单分析 制作x86 64的yum源 创建Packages与debug目录 复制x86 64 noa
  • Shell脚本加入开机自启动的方法:

    Shell脚本加入开机自启动的方法 xff1a Linux中脚本设定开机自启动 方法一 xff1a 1 xff0c 在某个目录下创建脚本 xff1a 例如 xff1a root hello wei sh span class token p
  • createrepo

    createrepo 是一个对rpm 文件进行索引建立的工具 大体功能就是对指定目录下的rpm文件进行检索 xff0c 把每个rpm文件的信息存储到指定的索引文件中 xff0c 这样方便远程yum命令在安装更新时进行检索 看下creater