rpm -qa 就可以知道 installed software
rpm有python的API

这个管用吗?是不是你想解决的问题?

-Ray


在2010-06-08 11:26:32,"Devil Wang" <[email protected]> 写道:
也许真的从数据库入手,是提高FC下 Ailurus的最好方法。


2010/6/8 Homer Xing <[email protected]>
我补充一下吧。

推荐装 sqliteman ,图形界面看数据库用。

/var/cache/yum/ 存有一些有趣的文件。
目录结构是
i386/12/fedora/xxxx-primary.sqlite
i386/12/updates/xxxx-primary.sqlite
i386/12/rpmfusion-free/xxxx-primary.sqlite
i386/12/rpmfusion-nonfree/xxxx-primary.sqlite

打开 xxxx-primary.sqlite 文件,有惊喜。packages 表,似乎是源里提供的所有的包。


在 2010年6月7日 下午11:21,Devil Wang <[email protected]>写道:

http://defindit.com/readme_files/rpm_yum_hangs.html

只要rebuild下db,就可以看到他们对数库库都干了什么了。



2010/6/7 Devil Wang <[email protected]>
Basenames:      Berkeley DB (Hash, version 9, native byte-order)
Conflictname:   Berkeley DB (Hash, version 9, native byte-order)
__db.001:       Applesoft BASIC program data
__db.002:       data
__db.003:       data
__db.004:       data
Dirnames:       Berkeley DB (Btree, version 9, native byte-order)
Filedigests:    Berkeley DB (Hash, version 9, native byte-order)
Group:          Berkeley DB (Hash, version 9, native byte-order)

Installtid:     Berkeley DB (Btree, version 9, native byte-order)

Name:           Berkeley DB (Hash, version 9, native byte-order)
Obsoletename:   Berkeley DB (Hash, version 9, native byte-order)
Packages:       Berkeley DB (Hash, version 9, native byte-order)
Providename:    Berkeley DB (Hash, version 9, native byte-order)
Provideversion: Berkeley DB (Btree, version 9, native byte-order)
Pubkeys:        Berkeley DB (Hash, version 9, native byte-order)
Requirename:    Berkeley DB (Hash, version 9, native byte-order)
Requireversion: Berkeley DB (Btree, version 9, native byte-order)
Sha1header:     Berkeley DB (Hash, version 9, native byte-order)
Sigmd5:         Berkeley DB (Hash, version 9, native byte-order)
Triggername:    Berkeley DB (Hash, version 9, native byte-order)
de...@devil rpm$ 



2010/6/7 Devil Wang <[email protected]>

Hi all,

刚才折腾了下。

大体上有了眉目。

yum的数据库里面的信息也是表结构的。而且这个结构是不变的。

我在yum的source里面看到他也会去 select 一些 元组,这些元组的属性是固定。

 sql = "SELECT name, version, release, epoch, flags " \
                  "FROM %s WHERE pkgKey = ?" % prcotype

我本以为sqlite也跟mysql一样。会有个常住deamon,后来我看了些关于C++操作sqlite的sample ,我发现他是直接去读 
db文件的,不会有一个deamon去check是否有别的usr来访问数据库。

然后我发现 yum的数据库文件是放在 /var/lib/rpm 这个目录下的。

r...@devil rpm$ ls
Basenames     __db.004     Name            Pubkeys         Triggername
Conflictname  Dirnames     Obsoletename    Requirename
__db.001      Filedigests  Packages        Requireversion
__db.002      Group        Providename     Sha1header
__db.003      Installtid   Provideversion  Sigmd5
r...@devil rpm$ 

很显然,那些__db*因该就是 数据库文件了。

Installid我file 了下,也是数据库文件,二叉树的结构。
r...@devil rpm$ file Installtid 
Installtid: Berkeley DB (Btree, version 9, native byte-order)
r...@devil rpm$ 

如果我们直接读Installid里面的数据, 我觉得应该是Installed software info.
在Ailurus启动的时候去parse这个文件。应该可以大大的提高Ailurus的速度。

各位可以一起check下。

为了Ailurus的一切。

-- 
Thanks & Regards

Linux Developer : Devil Wang




-- 
Thanks & Regards

Linux Developer : Devil Wang




-- 
Thanks & Regards

Linux Developer : Devil Wang



_______________________________________________
Mailing list: https://launchpad.net/~ailurus
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~ailurus
More help   : https://help.launchpad.net/ListHelp




_______________________________________________
Mailing list: https://launchpad.net/~ailurus
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~ailurus
More help   : https://help.launchpad.net/ListHelp





-- 
Thanks & Regards

Linux Developer : Devil Wang
_______________________________________________
Mailing list: https://launchpad.net/~ailurus
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~ailurus
More help   : https://help.launchpad.net/ListHelp

回复