中国Linux公社论坛's Archiver

zy_sunshine 发表于 2010-8-23 11:15

rpm安装方式...

做了几天的rpm分析,每天都在考虑这东西,而且实现了几个调节序列算法,现在记录一下,并且说明一下每种方法的失败和成功的地方。防止以后做rpm依赖再走弯路。

一、已实现的
1、增加 减少依赖关系并提供 basepkg_list 调节包的顺序。
成功 : 实现了可以调节包的顺序
失败 : 包顺序改变后 pre_in post_in 脚本的运行命令可能满足了,但是命令的运行环境可能就不满足了(比如命令存在但缺少某个库...)


2、在依赖关系满足后,又按照 “满足 pre_in post_in 脚依赖” 来调节整个包序列
成功 : 使得每个包运行 pre_in 和 post_in 命令的时候都有会找到命令。
失败 : 同1

因此这几天的忙碌都是失败的...闷

二、待实现的
可以采用如下模式,但不知道是否合理
1、安装 rpm 时不运行pre_in 和 post_in 脚本(安装时生成了rpm数据库),在安装后再按照依赖序列执行脚本。
     整体还是用rpm安装 类似 rpm -i --noscript

2、在制作 iso 的时候直接生成 rpm 数据库(类似 rpm -i --justdb),并将数据库打包。安装系统的时候用 rpm2cpio | cpio -di 将所有的rpm释放到目标系统,然后将数据库释放过去,最后按照依赖序列执行脚本。

1和2两种模式安装系统大概相差10分钟左右,相差时间都在生成 rpm 数据库上。释放rpm也就是5-7分钟,执行命令在2-4分钟。
1方法耗费21分钟左右。
2方法耗费10分钟左右。

这两种方法是否会出现不可预料的错误? 比如 pre_in post_in 在运行的时候...(:O还没发现)

貌似我这几天的 rpm 分析没有白做,起码可以提供多个侧重分析的依赖序列。
最后埋怨一下 rpm ,依赖关系太复杂了, 版本比较竟然有几个不通用... 版本比较的 flag 更是多而复杂,而且未来rpm版本中flag又不知道会不会变。
rpm库倒是给了一个自动生成安装序列的功能,但是谁知道内部是怎么分析的依赖呢? 什么时候有空再测试一下这个功能。

zy_sunshine 发表于 2010-8-23 11:45

不合理的地方 [二、待实现的]
方法2 在释放rpm时不会效验rpm的完整性。

jiangtao9999 发表于 2010-8-23 13:37

rpm完整性可以之前检测。既然安装方式都独立出来了,为什么检测不独立出来?不过这么做是不是太极端了?

zy_sunshine 发表于 2010-8-23 14:18

主要是怕光盘刻录时 iso 中的数据有损坏。
还有可能下载后的 iso 中损坏了rpm包。

当然在制作iso的过程中已经检测了rpm的完整性。

zy_sunshine 发表于 2010-8-23 14:19

我也认为有些极端,但是如果在保证包的整体依赖没有太大问题的情况下,这个方法不失为一个可行的方法。

jiangtao9999 发表于 2010-8-23 20:01

rpm和md5sum哪个快?

haulm 发表于 2010-8-23 20:12

这几天人闷,我也闷,有几次成功制做ISO,然后又在svn几次更新后又不可用了。可见原有的MI存在很多不合理的地方,另外也和现有MGC依赖混乱有关,MGC2.5是在2.0->2.1->2.5这样升级过来的,在包依赖上没有一个增量合理的依赖树,混沌一团。
我比较赞成的是直接解压安装的方式,连RPM数据库都一并移动过去,我所推荐的连rpm包都不用带了,直接可以用于livecd模式的安装。方法3、在制作 iso 的时候直接生成 rpm 数据库(类似 rpm -i --justdb),并将数据库打包。安装系统的时候用7za将所有的安装内容释放到目标系统,然后将数据库释放过去,放弃rpm方式的安装才用全系统压缩释放才是正确安全的方法,适合于MGC这样松散开发集体的需求。
rpm 体系是用来约束系统组成过程和规范更新的重要体系,但在安装中把它当成安装体系本身就是认知上的一大错误。就连Fedora都放弃传统的rpm安装方式,改用livecd方式了。不推荐重造历史的尘埃。Fedora的传统rpm安装方式提供了定制安装的方便,既然MGC一直没能实现定制安装(其实Fedora也都没安全实现),还不如直接放弃采用NO PACKAGE解压安装的方式。

haulm 发表于 2010-8-23 20:14

还是直接解压的好吧,安装根本和RPM无关,非要扯这个RPM玩上依赖游戏,没意思。 8O

zy_sunshine 发表于 2010-8-23 20:37

OK
确定了,用解压缩方式,rpm完整性就用md5sum效验,数据库是直接生成打包然后释放到目标系统中。
当然,我们还保留原有的rpm安装方式。

不过我担心一件事情,就是...这样在制作 iso 上不考虑依赖问题会使得 MagicLinux 在包上的依赖越来越不注重

我希望是在发行之前用整体安装方式测试一下包依赖是否有严重错误,包括:
1.1、检测有没有缺少依赖的问题。
1.2、检测有没有重复提供依赖(例如某一库文件,据我所知现在的Magic中就有这么几个重复提供某一库文件)支持的问题。循环依赖不可避免。
安装测试利用两种:
2.1、利用自己分析的rpm依赖序列,测试安装。
2.2、利用rpm库自带的rpm安装序列,测试安装。
以上测试就用 rpmdeptool 完成。

ps : 其实包管理的原理并不复杂,为啥内部就这么复杂呢:evil:

jiangtao9999 发表于 2010-8-23 21:02

你把所有的检测都放在生成 iso 时吧……
如果可以,我觉得你最好看看 rpm 的数据库操作。为了以后可以进行软件包安装选择做准备……

zy_sunshine 发表于 2010-8-24 11:13

回复 10# jiangtao9999 的帖子

在制作iso时生成md5字典,在安装时通过计算md5然后比较这个字典来判断rpm是否完整。

rpm的数据库操作接口不多啊,只有 Initializing, Rebuilding, and Verifying ,外加 query 和设置需要读取的 rpm 数据库路径。

分包也可以事先打包数据库,也可以在安装时生成数据库。

jiangtao9999 发表于 2010-8-24 11:38

能否绕过rpm直接操作数据库

haulm 发表于 2010-8-24 11:40

[quote]原帖由 [i]jiangtao9999[/i] 于 2010-8-24 11:38 发表 [url=http://www.linuxfans.org/bbs/redirect.php?goto=findpost&pid=4923416&ptid=192825][img]http://www.linuxfans.org/bbs/images/common/back.gif[/img][/url]
能否绕过rpm直接操作数据库 [/quote]
直接无视rpm就可以了,没理由让所有组件按照依赖重新走一遍,那是开发者的事,不是最终用户所要承受的东西。

zy_sunshine 发表于 2010-8-24 12:52

回复 13# haulm 的帖子

明白你那种方法,但是我想要提供两种安装模式,原来的每个包的安装模式也要保留,你说的那种安装也要尽量实现。

#-----------------------------------

To jiangtao
没有必要吧,现在的rpm数据库接口除了不能修改每个包的数据库记录(比如更改依赖关系),其他的像 初始化数据库,添加包信息,删除包信息,查询包信息那几个接口应该勉强可以完成。

rpm的数据库有很多个,分别保存着各个索引,因此其中的复杂度还是比较高的,如果能直接完美操作数据库,那离重写一个包管理器就不远了...

zy_sunshine 发表于 2010-8-24 16:31

宣告失败...

我彻底服了 rpm
如果之后运行 rpm 数据库中的 pre_in post_in 脚本的话起码下面这个包就不行, 幸亏没有继续,如果实现了,安装完系统后也是一定没声音的。[code]
alsa-driver-module-kernel-2.6.30.10-smp-1.0.23-4mgc25
preinstall :
echo "   The ALSA driver 1.0.23 will be installed, and the previous version will be backuped if it exists."
SNDDIR="/lib/modules/2.6.30.10-smp/kernel/sound"
SNDBAKDIR="/lib/modules/sound.2.6.30.10-smp.alsa_bak"
if [ -d ${SNDBAKDIR} ];then rm -rf ${SNDBAKDIR};fi && \
if [ -d ${SNDDIR} ];then mv ${SNDDIR} ${SNDBAKDIR};fi
rm -f /lib/modules/2.6.30.10-smp/modules.*

[sunshine@MagicLinux ~]$ rpm -qf /lib/modules/2.6.30.10-smp/kernel/sound/
alsa-driver-module-kernel-2.6.30.10-smp-1.0.23-4mgc25.i686
[/code]

haulm 发表于 2010-8-24 23:54

[quote]原帖由 [i]zy_sunshine[/i] 于 2010-8-24 16:31 发表 [url=http://www.linuxfans.org/bbs/redirect.php?goto=findpost&pid=4923447&ptid=192825][img]http://www.linuxfans.org/bbs/images/common/back.gif[/img][/url]
宣告失败...

我彻底服了 rpm
如果之后运行 rpm 数据库中的 pre_in post_in 脚本的话起码下面这个包就不行, 幸亏没有继续,如果实现了,安装完系统后也是一定没声音的。
alsa-driver-module-kernel-2.6.30.10-smp-1.0.23 ... [/quote]
所以我才强调直接实现复制安装,这个最简单的方式被你们无视了,我们可以实现有针对性地压缩系统的各种部份,甚至分割存放,然后在安装过程中释放到目标分区,最后进行设置、安装引导并重启,这样的好处还在于可以实现类 ghost 备份,完全可以把 MGC 以更自由的方式分发出去。
rpm 是个好工具,但它主要用途是用来保证系统升级过程中的完整和安全性能,安装是另一回事,如果使用rpm进行非局部的安装,那MGC当初最早建立系统到最后成型都必需把MI安装系统的可能顺序考虑进去了,可惜并不是这一回事,我发现不同时候使用MI都得出不同的安装失败经历,MI 生成可用的ISO十分困难,而且用其安装成的系统不可避免发生一些潜在的Bug。

[[i] 本帖最后由 haulm 于 2010-8-25 00:08 编辑 [/i]]

sejishikong 发表于 2010-8-25 00:07

[quote]原帖由 [i]haulm[/i] 于 2010-8-24 23:54 发表 [url=http://www.linuxfans.org/bbs/redirect.php?goto=findpost&pid=4923473&ptid=192825][img]http://www.linuxfans.org/bbs/images/common/back.gif[/img][/url]

所以我才强调直接实现复制安装,这个最简单的方式被你们无视了,我们可以实现有针对性地压缩系统的各种部份,甚至分割存放,然后在安装过程中释放到目标分区,最后进行设置、安装引导并重启,这样的好处还在于可以实现类 ghost  ... [/quote]
我再说一次,这个方式在livecd上实现并不困难,不过这和MI无关。本身magic的livecd就是按目录分割存放的,如果愿意,也完全可以按组分割存放。但是这个方式安装,需要处理前面的分区和安装完成的配置这两块。

haulm 发表于 2010-8-25 00:16

[quote]原帖由 [i]sejishikong[/i] 于 2010-8-25 00:07 发表 [url=http://www.linuxfans.org/bbs/redirect.php?goto=findpost&pid=4923474&ptid=192825][img]http://www.linuxfans.org/bbs/images/common/back.gif[/img][/url]

我再说一次,这个方式在livecd上实现并不困难,不过这和MI无关。本身magic的livecd就是按目录分割存放的,如果愿意,也完全可以按组分割存放。但是这个方式安装,需要处理前面的分区和安装完成的配置这两块。 ... [/quote]
接受se的观点,MI 也就这样了,或许 MGC2.6 在压缩ISO时会容易的多,目前制做ISO需要用VBOX进行安装分析才能应用。

[[i] 本帖最后由 haulm 于 2010-8-25 09:22 编辑 [/i]]

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.