立此博文,回答 提出的问题。
声明:
1、下文/install路径为解压install.img后的路径;
2、task为“Desktop”、“Minimal Desktop”、“Minimal”、“Basic Server”、“Database Server”、“Web Server”之类的选项。
3、修改的图片如下所示:
先看一段代码:
- # vim /install/usr/lib /anaconda/iw/task_gui.py
- class TaskWindow(InstallWindow):
- …
- def _createTaskStore(self):
- store = gtk.ListStore(gobject.TYPE_BOOLEAN, # 此变量决定是否为默认task
- gobject.TYPE_STRING,
- gobject.TYPE_PYOBJECT)
- tl = self.xml.get_widget("taskList")
- tl.set_model(store)
- …
- anyEnabled = False
- for (txt, grps) in self.tasks:
- if not self.backend.groupListExists(grps):
- continue # 当grp组名写错时,整个task不可见
- enabled = self.backend.groupListDefault(grps) # 检查是否能够被设为默认task
- # 定位到anaconda/yuminstall.py模块的groupListDefault()类
- store.append([not anyEnabled and enabled, gettext.ldgettext("comps", txt), grps])
- if enabled:
- anyEnabled = True
- # stor.append[task是否默认,字符串,task对应的组]表示扩充stor,也就是增加task项;
- # if enabled一句作用为:只要一个默认了,其他task就算满足要求,也无法成为默认项
- return tl
查看
groupListDefault()类:
- # vim /install/usr/lib /anaconda/yuminstall.py
- def groupListDefault(self, grps):
- """Returns bool of whether all of the given groups are default"""
- rc = False
- for gid in grps:
- g = self.ayum.comps.return_group(gid)
- # 定位到/install/usr/lib/python2.6/site-packages/yum/comps.py
- if g and not g.default:
- return False
- elif g:
- rc = True
- return rc
再定位就到python内置模块去了,多看无意,定位到此为止吧。分析下由3个双引号引起来的字符串,groupListDefault()检查是否所有group都为默认,结合第一段代码,如果是,则将此task设为默认项。那groupListDefault()去哪里检查呢?repodate/comps.xml文件!此文件定义了所有rpm包的层次结构(类别/组/rpm包),其中每个组都有一个default属性,groupListDefault()检查每个task所需要的组的default属性,若都为true,则将此task设为默认,并且如果多个task都满足要求,按顺序只将第一个满足要求的task设为默认项。
阅读(2181) | 评论(0) | 转发(0) |