教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

linux安装分析anaconda(2)

来源:网络收集 时间:2026-05-21
导读: 我们假设当前安装步骤为bootloaderadvanced,其后的另一个具有用户界面的安装步骤为网络配置network,而进行网络配置的前置条件就是安装的主机要具有网络设备,因此,系统安装程序在network之前插入了步骤networkde

我们假设当前安装步骤为"bootloaderadvanced",其后的另一个具有用户界面的安装步骤为网络配置"network",而进行网络配置的前置条件就是安装的主机要具有网络设备,因此,系统安装程序在"network"之前插入了步骤"networkdevicecheck"。假设安装过程从当前安装步骤

"bootloaderadvanced"进行到下一个安装步骤"networkdevicecheck",该安装步骤没有用户界面,Dispatcher直接调用函数networkDeviceCheck,我们看一下该函数的代码(network.py

):

可以看到,该函数首先检测是否存在网络设备,如果没有网络设备,Dispatcher则忽略安装步骤

"network"。这里,可以说函数networkDeviceCheck是有用户界面的安装步骤"network"的前置操作。

Linux 的安装过程可以分为两个阶段,第一个阶段就是加载内核,创建供后续安装过程使用的系统环境,第二阶段就是加载系统安装程序,执行具体的安装过程。对于第一阶段,有不少资料作了比较详细的介绍,而对于第二阶段,也就是具体的安装过程,却鲜有资料介绍,本文作者结合自己在实践中的心得体

通过上面的分析,我想我们不难理解为什么Dispatcher被称为"主要安装流程控制类"了。其它的安装步骤控制基本相同,我们不一一分析了。

下面我们看一下Dispatcher的主要接口。

gotoNext & gotoPrev:这两个接口分别从当前安装步骤前进(后退)到下一个(上一个)具有用户界面的安装步骤,在图形界面安装模式下,由installcontrolwindow调用,在字符模式下,由InstallInterface调用。这两个函数只是简单的设置安装方向,然后调用movestep函数,其核心操作是movestep。我们来重点分析movestep函数:

……

if self.step == None:

else:

self.step = self.step + self.dir

while ((self.step >= self.firstStep and self.step < len(installSteps)) self.step = self.firstStep def moveStep(self): and (self.skipSteps.has_key(installSteps[self.step][0])

or (type(installSteps[self.step][1]) == FunctionType))): info = installSteps[self.step]

if ((type(info[1]) == FunctionType) and (not

self.skipSteps.has_key(info[0]))):

(func, args) = info[1:]

rc = apply(func, self.bindArgs(args)) if rc == DISPATCH_BACK: self.dir = -1 elif rc == DISPATCH_FORWARD: self.dir = 1 self.step = self.step + self.dir

if self.step == len(installSteps):

return None

我们重点看一下程序while循环体,首先看一下循环条件:当下一个安装步骤是合法的,即在第一个安装步骤和最后一个安装步骤之间,并且(and)该步骤被裁减了或者该步骤是一个无用户界面的安装步骤,即installSteps的条目的第二个元素是一个function,则进入循环体。进入循环后,Dispatcher直接调用该函数执行安装操作,其中bindArgs是Dispatcher类的一个函数,负责参数解析,这里的apply是python的的一个内置方法,用来执行函数,apply接口的第一个参数是要运行的函数名称,第二个参数是传给该函数的参数。如果下一个安装步骤依然无用户界面,则继续循环,直到下一个没有被裁减的具有用户界面的安装步骤,对于图形安装模式,Dispatcher将控制权交给InstallControlWindow,对于字符安装模式,Dispatcher将控制权交给InstallInterface。如果安装过程完成则退出循环。

currentStep:Dispatcher类的另一个主要接口,取得当前的安装步骤及其相关信息返回给调用者。在图形安装模式下,该函数主要由InstallControlWindow调度图形用户界面类时调用,在字符模式下,主要由InstallInterface调度字符用户界面时调用,这两个类通过该接口取得当前安装步骤的用户界面对应的类及创建该用户界面类的实例所需的信息。

Linux 的安装过程可以分为两个阶段,第一个阶段就是加载内核,创建供后续安装过程使用的系统环境,第二阶段就是加载系统安装程序,执行具体的安装过程。对于第一阶段,有不少资料作了比较详细的介绍,而对于第二阶段,也就是具体的安装过程,却鲜有资料介绍,本文作者结合自己在实践中的心得体

另外,Dispatcher类的主要接口还有skipStep(self, stepToSkip, skip = 1, permanent = 0)是裁减安装步骤函数。setStepList(self, *steps)是安装步骤设置函数,主要由安装类型实例调用,每个安装类型会根据自身的特点设置安装步骤。这些接口的实现逻辑都比较简单,这里不一一给出分析了。

至此,Dispatcher的主体基本分析完了,看完下面InstallControlWindow以及后面字符安装模式的InstallInterface类的分析,我们对Dispatcher将会有更好的理解。

3 InstallControlWindow

该类在anaconda主目录下的gui.py模块中。首先我们先看一下启动图形安装界面的入口函数run:

该函数调用了setup_window接口,该接口调用gtk"绘制"图形安装界面的主窗体,然hou控制权交给了gtk。

nextClicked & prevClicked:这两个接口分别执行从当前图形安装界面向前(向后)到下一个图形安装界面的操作,我们可以想象安装过程中当用户点击"下一步"或"上一步"按钮时,这两个函数被调用。这两个函数首先调用主流程控制Dispatcher实例向前(向后)前进到下一个图形安装界面,然后调用

setScreen函数,从函数名称的字面上看,setScreen是设置图形界面的,那么接下来我们看一看该函数的具体功能,在分析其之前,我们要首先看一下gui.py模块中的一个字典数据结构:stepToClass。该字典中记录了安装过程中所有的具有图形用户界面的安装步骤。

每一个条目从左到右依次是安装步骤名称、图形界面对应的类所在的模块,图形界面类的名称。如

language为安装步骤名称,language_gui为该步骤对应的图形界面类所在的模块language_gui.py,LanguageWindow为图形界面对应的类名。理解了该数据结构后,我们开始分析setScreen函数:

Linux 的安装过程可以分为两个阶段,第一个阶段就是加载内核,创建供后续安装过程使用的系统环境,第二阶段就是加载系统安装程序,执行具体的安装过程。对于第一阶段,有不少资料作了比较详细的介绍,而对于第二阶段,也就是具体的安装过程,却鲜有资料介绍,本文作者结合自己在实践中的心得体

前面的nextClicked和prevClicked函数已经通过Dispatcher将要进行的安装步骤标记为当前安装步骤,所以该函数首先通过Dispatcher的currentStep从Dispatcher的数据结构installSteps中取得当前安装步骤名称及相关信息,接下来,做了一下判断,如果Dispatcher的当前安装步骤不在字典

stepToClass中,则忽略该步骤,调用nextClicked或prevClicked继续下一个图形界面安装步骤,直到下一个步骤在字典stepToClass中。验证通过后,从字典stepToClass中取得当前图形安装界面对应的类及该类所在模块,然后导入该模块并创建图形安装界面的实例,销毁前一个图形安装界面,并将新创建的图形界面实例置为当前安装界面,调用图形安装界面实例的getScreen函数生成该安装步骤的图形用户界面,然后显示。

至此,InstallControlWindow的主要逻辑已经分析完了,接下来 …… 此处隐藏:3335字,全部文档内容请下载后查看。喜欢就下载吧 ……

linux安装分析anaconda(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/107994.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)