- 論壇徽章:
- 0
|
本帖最后由 duanjigang 于 2013-01-03 13:04 編輯
yum 本地 cache
之所以要把yum 的本地 cache 拿出來單獨(dú)說下,是因?yàn)檫@個(gè)要素不管在 yum 的執(zhí)行流程中,還是在 yum 的日常問題中都很重要。
首先看下本機(jī)的 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
復(fù)制代碼 我們能夠看到配置了兩個(gè) repo,其中一個(gè)名字為test, 另外一個(gè)為 newtest.
然后再看文件
/etc/yum.conf
中的配置設(shè)備本地的cache 目錄為
/var/cache/yum 目錄,首先我們清空下該目錄:
- # rm -fr /var/cache/yum/*
復(fù)制代碼 然后執(zhí)行命令看下在 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
復(fù)制代碼 能夠看到,客戶端的兩個(gè)repo 都對(duì)應(yīng)生成了 cache 目錄,每個(gè)cache 的目錄中都有文件 repomd.xml 和 primary.xml 文件或者其 Sqlite 文件。
為了驗(yàn)證下客戶端是否把服務(wù)器上的索引文件下載下來了,我們進(jìn)行對(duì)比:
在客戶端執(zhí)行:
- # md5sum repomd.xml
- 916b78131cab447e60b17bf01a41240a repomd.xml
復(fù)制代碼 在服務(wù)器上執(zhí)行:
# md5sum /usr/local/cme/web/yum/repodata/repomd.xml
916b78131cab447e60b17bf01a41240a /usr/local/cme/web/yum/repodata/repomd.xml
[/code]
可以看到兩者是一致的。驗(yàn)證了 yum 客戶端 cache 服務(wù)器索引到本地的實(shí)事。
另外還有兩個(gè)目錄 headers 和 packages, 可以參考源碼進(jìn)行功能分析。
在此處貌似要補(bǔ)充上 yum 是怎么利用本地 cache 進(jìn)行工作的,這貌似又成了 yum 的源碼分析了,目前這塊偶還未有閱讀到,后面有空再補(bǔ)充吧。
在上一節(jié)中我們只是就 primary.xml 文件進(jìn)行了內(nèi)容分析,這里,在客戶端 cache 中,我們花點(diǎn)時(shí)間看下 sqlite 文件,因?yàn)?yum 中對(duì) rpm 包的信息存儲(chǔ)數(shù)據(jù)庫時(shí)采用的
是文件數(shù)據(jù)庫 sqlite 存儲(chǔ)的。因此我們單獨(dú)拎出來說下.
yum 索引中的 sqlite 文件
以客戶端的 primary.xml.gz.sqlite 為例,用 sqlite3 直接打開 sqlite 文件進(jìn)行查看:
- # 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;
復(fù)制代碼 通過 sqlite 的命令能看到 sqlite 中的所有表,每個(gè)文件是一個(gè)庫,這個(gè)庫中的所有 table 包含的信息,與 我們前面看到的 primary.xml 中的信息是一致的。
只不過采用了不同的存儲(chǔ)方式。
看下 package 表 中的數(shù)據(jù):
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>
呵呵,看到的數(shù)據(jù)和 xml 文件中的展示的數(shù)據(jù)是一樣的。
|
|