本文是我进行翻译的,以下为翻译的文章,文章来源为:
https://blog.packagecloud.io/yum-repository-internals/

这篇文章通过针对yum仓库中的元数据(metadata<一些索引文件>)测试的方式,深入去了解下yum仓库的内部结构,我会介绍每个索引文件,并看下用户如何去检查元数据。

什么是yum仓库

yum仓库就是很多的rpm包和元数据的集合,元数据可以被yum命令行读取。有了yum仓库,你就可以让你针对一个安装包(package)或者一组安装包进行安装,卸载,升级和一些其他操作。yum仓库针对软件的存储,管理,交付来说都是必不可少的。

用createrepo创建yum仓库

在更进一步了解仓库的元数据之前,我们先来展示下如何用开源的命令行工具createrepo来设置一个仓库。你可以使用命令行工具createrepo创建yum仓库,createrepo通过运行一下命令在CentOS或者Red Hat上安装:

$ sudo yum install createrepo

createrepo最简单的用就是使用一个参数,这个参数就是yum仓库的输出目录。

假设你在当前目录有几个rpm包,你就可以运行这个命令生成一个yum仓库

$ createrepo .

这样就创建了一个名为’repodata’的文件夹,包含了下面我们会细讲的元数据文件。

译者注:列下译者本地生成仓库后的结构

$ tree
└── packages
    ├── kernel-5.16.12-100.fc34.x86_64.rpm
    └── kernel-core-5.16.12-100.fc34.x86_64.rpm
$ createrepo .
Directory walk started
Directory walk done - 2 packages
Temporary output repo path: ./.repodata/
Preparing sqlite DBs
Pool started (with 5 workers)
Pool finished
$ tree .
├── packages
│   ├── kernel-5.16.12-100.fc34.x86_64.rpm
│   └── kernel-core-5.16.12-100.fc34.x86_64.rpm
└── repodata
    ├── 47e2ab97092b91278fbac5f8dce24ea45224cb64a7a25986bc5af70b52775878-primary.xml.gz
    ├── 59fd4217fb82d5b775dcb87a12cddfe886378471eedc8ac65237fe3f24724326-primary.sqlite.bz2
    ├── 71d725cef5607f7e572716bf26703c8f34d2f4b42d269e7c0fa6fa9beb955404-filelists.xml.gz
    ├── 7223cc42ffbdc229f9c3f540d57662c8e88d8b3c0dcd989e394af344ef48ba2c-filelists.sqlite.bz2
    ├── 75f75cca763ed7988c4307a71a9f309318866b77927df5baa77f374315182c8a-other.xml.gz
    ├── d68d8e69fc4f554a71086fc9ab9edde61b689b1704825d942c0b057486f1ca18-other.sqlite.bz2
    └── repomd.xml

你可以使用GPG来签名仓库的元数据文件,能够对用户保证这些元数据是你生成的。GPG与使用rpm或者rpmsign不同

$ gpg --detach-sign --armor myrepo/repodata/repomd.xml

关于rpm包使用GPG和yum仓库可以在这里找到HOWTO: GPG sign and verify RPM packages and yum repositories。如果你希望其他人也访问你的yum仓库,就需要搭建Apache,nginx或者其他的web服务器,并指向仓库的基础目录。推荐你使用SSL证书以便于包的数据能够安全传输。

译者注:这里仓库的基础目录,就是在/etc/yum.repos.d/xxx.repo中的baseurl,也即yum仓库url的位置。在这里在基础目录下有repodata这个目录。

当然,使用packagecloud是一个更加快而且简单的方案。SSL,GPG,身份验证,合作及其他你需要的都准备好了。

yum仓库的元数据

yum仓库的元数据由一系列XML文件构成,包含了其他文件的校验(checksums)及所引用的包。

yum仓库中通常的元数据文件包括:

  • repomd.xml:本质上是一个索引,包含了下边要将的其他xml元数据文件的位置,校验,时间戳等等。
  • repomd.xml.asc:这个文件只有当使用GPG签署repomd.xml文件时才会生成,签署的例子上边有讲到
  • primary.xml.gz:包括了在仓库中每个包的详细信息,可以看到诸如名称,版本,许可证,依赖性信息,时间戳,大小或者更多信息。
  • filelists.xml.gz:包含了仓库中每个包中的各个文件或者文件夹相关信息
  • other.xml.gz:包含了仓库中包的在rpm spec文件的修改记录(changelogs)

还有一些其他的文件,不过其他文件不被广泛使用,上边讲述的这些文件就足够了

译者注:实际上目前的yum仓库的元数据除了xml文件这种组织形式,还有sqlite.bz2的形式

通常情况下,仓库的元数据在yum仓库url的repodata的命名空间下,或者说是放在仓库服务器的repodata目录下。

组织yum仓库将相同架构的的包存储在一起是常见的作法,这样做使得你的仓库按照架构类型分段,能够减少提供给客户端及当更新时重新生成元数据的数量。

来自packagecloud一组典型的x86_64和i386架构下的repomd.xml文件的url:

  • https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/i386/repodata/repomd.xml
  • https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/x86_64/repodata/repomd.xml

大多数可公开访问的yum仓库都基本上是类似的方案,比如说官方的Centos7 repomd.xml文件:

  • http://mirror.centos.org/centos/7/os/i386/repodata/repomd.xml
  • http://mirror.centos.org/centos/7/os/x86_64/repodata/repomd.xml

译者注:这里Centos7的文件可能不能访问了,可以直接使用Centos8-stream

http://mirror.centos.org/centos/8-stream/BaseOS/aarch64/os/repodata/repomd.xml

http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/repodata/repomd.xml

检查及验证yum仓库元数据

你可以使用一系列命令行工具来检查(examine )yum仓库的元数据,计算校验(checksums)以及核实GPG的签名

我们使用CentOS7仓库位于:https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7.

首先从检查repomd.xml文件

用curl来检验repomd.xml文件。其他的索引文件及他们的校验都可以在这个路径的文件找到:

$ curl -Ls https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/x86_64/repodata/repomd.xml

(TIP: 如果你想要看的更细致或者要debug,使用curl的-Lv(list only and verbose )参数试试)

核实repomd.xml的GPG签名

yum会自动去验证仓库的GPG签名(如果yum的配置中repo_gpgcheck置为1,更多用法可以查看这里),不过你也可以收取去验证这个签名。

如果这个仓库被GPG签名并且你也导入了这个GPG共有key,你就可以通过下载下来的repomd.xml文件和repomd.xml.asc来验证了,使用gpg --verify指令:

$ curl -Ls https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/x86_64/repodata/repomd.xml > repomd.xml
$ curl -Ls https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/x86_64/repodata/repomd.xml.asc > repomd.xml.asc
$ gpg --verify repomd.xml.asc repomd.xml
gpg: Signature made Sun Oct 12 11:07:54 2014 PDT using RSA key ID 7AD95B3F
gpg: Good signature from "packagecloud ops (production key)
<ops@packagecloud.io>"

检查primary.xml.gz元数据

然后,我们来检查primary.xml.gz元数据。正如上边所说的,这个文件包含的是仓库中每个包的信息

repomd.xml中提到了这个文件的位置:

<data type="primary">
  <location href="repodata/primary.xml.gz"/>
  <checksum type="sha">6eb7ecc041f69a5ffeabdebcb466c443aa5e8028</checksum>
  <timestamp>1413137274</timestamp>
  <open-checksum type="sha">0b08c81e46081059cbe56d2f0871017ef8073d93</open-checksum>
</data>

注:这个位置不是那么简单,因为有的仓库primary.xml.gz文件的URL会包含文件的的SHA和MD5总和。*

这个位置是相对于仓库的基础目录来说的。*

我们先来检查下SHA校验值(checksum)是否和repomd.xml所写的一致,repomd.xml所写的checksum就是这个文件SHA校验值。open-checksum表示的是这个文件被解压后的SHA校验值。

$ curl -Ls https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/x86_64/repodata/primary.xml.gz | shasuma
6eb7ecc041f69a5ffeabdebcb466c443aa5e8028  -

好消息,这个校验值是匹配的,我们使用zless查看解压后的文件,并逐页浏览:

$ curl -Ls https://packagecloud.io/computology/packagecloud-cookbook-test-public/el/7/x86_64/repodata/primary.xml.gz | zless

primary.xml.gz文件中简单示例:

<package type="rpm">
    <name>jake</name>
    <arch>x86_64</arch>
    <version epoch="87" rel="3.el6" ver="1.0"/>
    <checksum pkgid="YES" type="sha">ea721867eb0389e28bcd32e2deef7d4472c6ced8</checksum>
    <summary>jake douglas is a very nice young man.</summary>
    <description>as it so happens, jake douglas is a very nice young man.</description>
    <packager></packager>
    <url>https://twitter.com/jakedouglas</url>
    <time build="1401650103" file="1413137269"/>
    <size archive="4536" installed="4280" package="3740"/>
    <location href="jake-1.0-3.el6.x86_64.rpm"/>
    <format>
      <rpm:license>GPL</rpm:license>

filelists.xml.gz 和 other.xml.gz

对这两个文件重复上边对primary.xml.gz文件的操作:

  1. 从repomd.xml中获取元数据文件的位置及校验值(checksum)
  2. 使用curl -Ls <url> | shasum来验证文件校验值是否匹配
  3. 使用curl -Ls <url> | zless来检查这个文件

yum仓库元数据是由一系列的xml文件,校验值以及某些情况下的GPG签名组成,元数据描述了哪一个包在仓库里,每个包大量的属性,文件及目录,以及修改记录(changelog)信息

yum仓库元数据可以通过手动去检查及验证,使用了一些命令行工具curl, less/zless, gpg及shasum。如果你想要debug你的yum仓库中一些问题(包缺失,依赖缺失,不正确的版本等等)或者你对你的操作系统中一些重要部分的工作方式感兴趣,这都非常有用。

序本文是我进行翻译的,以下为翻译的文章,文章来源为:https://blog.packagecloud.io/yum-repository-internals/摘要这篇文章通过针对yum仓库中的元数据(metadata&lt;一些索引文件&gt;)测试的方式,深入去了解下yum仓库的内部结构,我会介绍每个索引文件,并看下用户如何去检查元数据。什么是yum仓库yum仓库就是很多的rpm包和元数据的集合,元数据可以被yum命令行读取。有了yum仓库,你就可以让你针对一个安装包(package)或者一 确认在预拉取yum包的机子关于网络的各项服务正常,拉取的过程对网路的要求挺高,今天用50M宽带拉取大概5个多小时。另在拉取的机子上配置好阿里的base源和epel源。 1.修改yum仓库 [root@mini2 /]# rm -rf /etc/yum.repos.d/* [root@mini2 /]# wget -O /etc/yum.repos.d/base.repo http://mirrors.aliyun.com/repo/Centos-7.repo //base源 [root@mini2 /]# wget -O /etc/yum.repos.d/epel.repo h
1.yum仓库 yum install 命令来在线安装 linux系统的软件, 这种方式可以自动处理依赖性关系,并且一次安装所有依赖的软体包。这些软件包来源与yum仓库。所以,yum仓库就是使用yum命令下载软件的镜像地址。 yum的配置文件 yum 的配置文件在 /etc/yum.repos.d 目录下, 其中有多个配置文件,每一个配置文件中都可以配置一个或多个repository, 但是最终会被合并为一个交给系统,所以多个文件只是为了方便管理。 2.配置 清华大学镜像仓库 帮助说明地址 https://mirrors.cnnic.cn/help/centos/ 最后不要忘了 1.yum
一、基于ISO镜像构建YUM本地源 1、首先将光驱ISO镜像连接到虚拟机上,挂载到目录/mnt上。(挂载目录自己可定义) [root@localhost ~]# mount /dev/sr0 /mnt 2、创建YUM仓库所需要的源文件。 [root@localhost ~]# vim /etc/yum.repos.d/base.repo [base]                                   #源ID name=base                         #源名称 baseu 当初瞎鼓捣服务器,更换yum源为aliyun的,奈何阿里的源最近全部打不开,导致yum安装不了,一直报错: http://mirrors.aliyun.com/centos/6/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - “The requested URL returned error: 404 Not Found” Trying other mirror. http://mirrors.a # CentOS-Base.repo # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are 使用光盘配置yum源的时候,提示找不到repomd.xml文件,具体路径应该是说找不到./repodata/repomd.xml 后来在光盘中查找,发现这些文件在cluster目录下。 后来将光盘copy到本地,将cluster的内容copy到./repodata目录下。 并且将repo文件内的baselur设置成了./media/Server .     在Lin...
报错信息: file:///mnt/cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file:///mnt/cdrom/repodata/repomd.xml 问题根源: 1、yum源配置时,敲错了字母、少一个/、目录路径不对,请按如下配置仔细核对 2、yum需要读取的是CD1,实际错误把镜像挂载成了CD2,导致一直读取不到xml配置文件 本文对此做重点介绍。
2、用开机自动配置文件,实现开机自动挂载光盘文件 [root@web1 ~]# vim /etc/fstab /dev/cdrom /dvd iso9660 defaults 0 0 [root@web1 ~]# mount -a [root@web1 ~]# ls /dvd/ CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7 EFI images Packages RPM-GPG-KEY-
Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和redhat中的Shell前端软件包管理器。基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。 接触了yum的不久,就开始按照要求,配置了一个yum,但是折腾了大半天“/r...
执行 yum update 出现repo 404错误 http://mirrors.163.com/centos/7/os/aarch64/repodata/repomd.xml 404error http://mirrors.163.com/centos/7/extras/aarch64/repodata/repomd.xml 404error http://repo.my...
服务端 repodata/ 目录下的一系列文件,就是yum能否自动解决依赖关系的关键。 repodata/   目录包含以下几部分: primary.xml.gz 、filelists.xml.gz 、other.xml.gz 、repomd.xml 、comps.xml  示例:yum安装ntpdat...
1. 安装httpd和createrepo软件包,这两个软件包是搭建yum仓库的基础。 2. 创建一个目录,用于存放rpm软件包,例如/var/www/html/yum。 3. 将需要添加到yum仓库的rpm软件包复制到该目录下。 4. 运行createrepo命令,生成repodata目录和相关文件,例如:createrepo /var/www/html/yum。 5. 配置httpd服务,将/var/www/html/yum目录设置为httpd服务的根目录,并启动httpd服务。 6. 在客户端上配置yum仓库,将仓库的baseurl设置为http://<yum服务器IP>/yum。 7. 完成上述步骤后,就可以使用yum命令从yum仓库中安装软件包了。 需要注意的是,搭建yum仓库需要一定的Linux基础知识和操作经验,建议在操作前先备份重要数据,以免造成不必要的损失。 ### 回答2: yum是一种用于在Linux操作系统中,自动从互联网上下载安装的软件包的软件工具。在Linux系统中,Yum仓库是用于存储Linux软件包和相关依赖关系的仓库。通过搭建自己的Yum仓库,可以更方便地管理软件包、集中控制软件版本,提高软件部署效率和安全性。 首先需要在服务器上安装httpd服务,以便于其他客户端可以通过http协议访问yum仓库。 接着需要安装createrepo工具,用于创建软件仓库的元数据。首先将准备好的软件包上传到web服务器指定的目录下,执行以下命令: $ createrepo --database /path/to/my_repo/ 注意:此处的/path/to/my_repo/指的是存储软件包的目录。 然后修改httpd服务的配置文件httpd.conf,将软件仓库的目录加入到httpd服务中: Alias /my_repo /path/to/my_repo/ <Directory /path/to/my_repo/> Options Indexes FollowSymLinks MultiViews Require all granted </Directory> 接着保存并重启httpd服务: $ systemctl restart httpd 最后,在客户端的yum配置文件(/etc/yum.repos.d)中添加新的仓库。例如,创建一个新的仓库文件my_repo.repo: [my_repo] name=My Repo baseurl=http://server_ip/my_repo enabled=1 gpgcheck=0 注意:此处的server_ip指的是Yum仓库所在服务器的实际IP地址。 现在可以使用yum命令来从你自己的仓库中安装软件包了: $ yum install package_name 通过以上步骤,就可以成功地搭建自己的Yum仓库了,方便地进行软件包管理、版本控制和软件部署。 ### 回答3: Linux是一种非常流行的操作系统,拥有一个强大的社区和开源生态系统。Linux搭建yum仓库是一种在Linux上管理软件包的常用方法。yum仓库是一种软件库,用于安装、更新和卸载软件包。在yum仓库中,您可以找到和下载大量的软件包。以下是如何搭建一个yum仓库的步骤。 1.准备环境 在搭建yum仓库之前,需要准备一个Linux机器,此处以CentOS为例。还需要一个HTTP服务器,这里使用Apache。确保系统已经安装了必要的软件包,如:httpd、createrepo和yum-utils。 2.配置HTTP服务器 yum使用HTTP和FTP来获取和安装软件包,因此需要配置一个HTTP服务器。可以使用Apache来搭建一个HTTP服务器。打开Apache配置文件,位置在/etc/httpd/conf/httpd.conf,搜索DocumentRoot,将其修改为所需目录,例如/var/www/html。 在此之后,启用Apache服务,这可以通过执行以下命令实现:systemctl enable httpd.service systemctl start httpd.service 3.创建yum仓库 将需要的rpm包拷贝到一个目录中,模拟一个yum仓库服务器。使用createrepo来创建仓库,这个工具会扫描指定目录中的所有rpm包并生成仓库的索引信息。 在httpd的DocumentRoot目录下,创建一个子目录yum,然后将rpm包放在这个目录下。使用createrepo工具来生成仓库索引。命令为createrepo /var/www/html/yum。 4.配置yum仓库文件 yum使用repo文件来指定软件源,新建一个*.repo文件,例如:centos7.repo,将其保存在/etc/yum.repos.d/目录下。编辑文件,添加如下内容: [base] baseurl=http://localhost/yum/ gpgcheck=0 enabled=1 在这个文件里,baseurl是yum仓库服务器的地址,gpgcheck是指是否检查GPG密钥,enbled设置为1表示该软件源可用。 5.测试yum仓库 现在,yum仓库已经配置好了,可以测试yum是否连接到了这个新的软件源。执行以下命令: yum clean all yum list 如果您可以看到新安装的rpm包,说明yum已经成功连接到了新的yum仓库服务器。 搭建yum仓库是非常方便的,您可以使用已有的HTTP服务器来构建,然后使用createrepo对rpm包进行索引。通过配置*.repo文件,您可以轻松地将新的软件源添加到yum,并使用yum命令来获取、安装和卸载rpm包。 An error has occurred while processing your request. AttributeError: module 'inspect' has no attribute 'getargspec' Full tracebacks disabled 这是什么原因呀~
webrtc实现录制屏幕小工具 weixin_51111904: 你好,请问您找到了吗 koji架构及环境搭建 leapmotion: 好像还需要专门配置,我教程应该不行 koji架构及环境搭建 weixin_48813217: 老哥,我点击网页login登录不了,您这边可以吗?