- 论坛徽章:
- 0
|
本帖最后由 duanjigang 于 2013-01-03 13:04 编辑
yum 本地 cache
之所以要把yum 的本地 cache 拿出来单独说下,是因为这个要素不管在 yum 的执行流程中,还是在 yum 的日常问题中都很重要。
首先看下本机的 repo 配置:
- # ls /etc/yum.repos.d/*
- /etc/yum.repos.d/newtest.repo /etc/yum.repos.d/test.repo
- [root@yum yum]# cat /etc/yum.repos.d/*.repo
- [newtest]
- name=just a test reposity
- baseurl=http://yum.test.com:81/yum
- enabled=1
- gpgcheck=0
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
- [test]
- name=just a test reposity
- baseurl=http://yum.test.com:81/yum
- enabled=1
- gpgcheck=0
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
复制代码 我们能够看到配置了两个 repo,其中一个名字为test, 另外一个为 newtest.
然后再看文件
/etc/yum.conf
中的配置设备本地的cache 目录为
/var/cache/yum 目录,首先我们清空下该目录:
- # rm -fr /var/cache/yum/*
复制代码 然后执行命令看下在 cache 目录下能生成什么咚咚?
- # tree /var/cache/yum/
- /var/cache/yum/
- |-- newtest
- | |-- cachecookie
- | |-- headers
- | |-- packages
- | |-- primary.xml.gz
- | |-- primary.xml.gz.sqlite
- | `-- repomd.xml
- `-- test
- |-- cachecookie
- |-- headers
- |-- packages
- |-- primary.xml.gz
- |-- primary.xml.gz.sqlite
- `-- repomd.xml
复制代码 能够看到,客户端的两个repo 都对应生成了 cache 目录,每个cache 的目录中都有文件 repomd.xml 和 primary.xml 文件或者其 Sqlite 文件。
为了验证下客户端是否把服务器上的索引文件下载下来了,我们进行对比:
在客户端执行:
- # md5sum repomd.xml
- 916b78131cab447e60b17bf01a41240a repomd.xml
复制代码 在服务器上执行:
# md5sum /usr/local/cme/web/yum/repodata/repomd.xml
916b78131cab447e60b17bf01a41240a /usr/local/cme/web/yum/repodata/repomd.xml
[/code]
可以看到两者是一致的。验证了 yum 客户端 cache 服务器索引到本地的实事。
另外还有两个目录 headers 和 packages, 可以参考源码进行功能分析。
在此处貌似要补充上 yum 是怎么利用本地 cache 进行工作的,这貌似又成了 yum 的源码分析了,目前这块偶还未有阅读到,后面有空再补充吧。
在上一节中我们只是就 primary.xml 文件进行了内容分析,这里,在客户端 cache 中,我们花点时间看下 sqlite 文件,因为 yum 中对 rpm 包的信息存储数据库时采用的
是文件数据库 sqlite 存储的。因此我们单独拎出来说下.
yum 索引中的 sqlite 文件
以客户端的 primary.xml.gz.sqlite 为例,用 sqlite3 直接打开 sqlite 文件进行查看:
- # sqlite3 primary.xml.gz.sqlite
- sqlite> .table
- conflicts db_info files obsoletes packages provides requires
- sqlite> .schema packages
- CREATE TABLE packages ( pkgKey INTEGER PRIMARY KEY, pkgId TEXT, name TEXT, arch TEXT, version TEXT, epoch TEXT, release TEXT, summary TEXT, description TEXT, url TEXT, time_file TEXT, time_build TEXT, rpm_license TEXT, rpm_vendor TEXT, rpm_group TEXT, rpm_buildhost TEXT, rpm_sourcerpm TEXT, rpm_header_start TEXT, rpm_header_end TEXT, rpm_packager TEXT, size_package TEXT, size_installed TEXT, size_archive TEXT, location_href TEXT, location_base TEXT, checksum_type TEXT, checksum_value TEXT);
- CREATE INDEX packageId ON packages (pkgId);
- CREATE INDEX packagename ON packages (name);
- CREATE TRIGGER removals AFTER DELETE ON packages BEGIN DELETE FROM files WHERE pkgKey = old.pkgKey; DELETE FROM requires WHERE pkgKey = old.pkgKey; DELETE FROM provides WHERE pkgKey = old.pkgKey; DELETE FROM conflicts WHERE pkgKey = old.pkgKey; DELETE FROM obsoletes WHERE pkgKey = old.pkgKey; END;
复制代码 通过 sqlite 的命令能看到 sqlite 中的所有表,每个文件是一个库,这个库中的所有 table 包含的信息,与 我们前面看到的 primary.xml 中的信息是一致的。
只不过采用了不同的存储方式。
看下 package 表 中的数据:
sqlite> select * from packages;
1|6a6fbc7e58160ffa71b1f91912dc6eaf1cd6e0ae|wget|i386|1.14|0|1|GNU wget|The GNU wget program downloads files from the Internet using the command-line.||1357187570|1357185960|GPL||Development/Tools|yum.test.com|wget-1.14-1.src.rpm|280|9282||809949|2032999|2039664|wget-1.14-1.i386.rpm||sha|6a6fbc7e58160ffa71b1f91912dc6eaf1cd6e0ae
2|a9f4ad3086dcfcced210361bc72e4d418144cfcc|test-daddy|i386|1.1|0|1|GNU test-daddy|The GNU wget program downloads files from the Internet using the command-line.||1357187570|1357185424|GPL||Development/Tools|yum.test.com|test-daddy-1.1-1.src.rpm|280|2127||4235|9354|4936|test-daddy-1.1-1.i386.rpm||sha|a9f4ad3086dcfcced210361bc72e4d418144cfcc
3|82828b38c988399f597cceb14d896de6d36cd1c8|test-girl|i386|1.1|0|1|GNU test-girl|The GNU wget program downloads files from the Internet using the command-line.||1357187570|1357185262|GPL||Development/Tools|yum.test.com|test-girl-1.1-1.src.rpm|280|2119||4227|9354|4936|test-girl-1.1-1.i386.rpm||sha|82828b38c988399f597cceb14d896de6d36cd1c8
4|6ce87802e577736bb8b481c157cb9fb8822f8b88|wget-debuginfo|i386|1.14|0|1|Debug information for package wget|This package provides debug information for package wget.
Debug information is useful when developing applications that use this
package or when debugging this package.||1357187570|1357185960|GPL||Development/Debug|yum.test.com|wget-1.14-1.src.rpm|280|2043||19714|45564|45836|wget-debuginfo-1.14-1.i386.rpm||sha|6ce87802e577736bb8b481c157cb9fb8822f8b88
5|f377c921e23ba10507de267b345d03d1f32f02a4|test-baby|i386|1.1|0|1|GNU test-baby|The GNU wget program downloads files from the Internet using the command-line.||1356570667|1356570667|GPL||Development/Tools|localhost.localdomain|test-baby-1.1-1.src.rpm|280|2290||4463|9395|5108|test-baby-1.1-1.i386.rpm||sha|f377c921e23ba10507de267b345d03d1f32f02a4
sqlite>
呵呵,看到的数据和 xml 文件中的展示的数据是一样的。
|
|