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

linux安装分析anaconda

来源:网络收集 时间:2026-05-21
导读: Linux 的安装过程可以分为两个阶段,第一个阶段就是加载内核,创建供后续安装过程使用的系统环境,第二阶段就是加载系统安装程序,执行具体的安装过程。对于第一阶段,有不少资料作了比较详细的介绍,而对于第二阶段,也就是具体的安装过程,却鲜有资料介绍,本文作者

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

级别: 初级 王柏生 (baisheng@), 中科院软件所软件工程师

2005 年 1 月 01 日

本文作者结合自己在实践中的心得体会,针对redhat9.0的安装程序anaconda作了粗略的分析。 引言

Linux 的安装过程可以分为两个阶段,第一个阶段就是加载内核,创建供后续安装过程使用的系统环境,

第二阶段就是加载系统安装程序,执行具体的安装过程。对于第一阶段,有不少资料作了比较详细的介绍,而对于第二阶段,也就是具体的安装过程,却鲜有资料介绍,本文作者结合自己在实践中的心得体会,针对redhat9.0的安装程序anaconda作了粗略的分析。

为了抓住主线,文中所列代码片断基本都经过格式调整,并裁减掉了不影响理解的细节,读者可参照源代码。另外,anaconda是用python语言写的,所以读者最好具备一些python语言的基础和面向对象的基本知识,如果有过图形界面程序的设计的经验,则无论是对图形安装模式还是字符安装模式安装过程(本文只讨论图形安装模式)的理解都会有很大帮助。

1 概述

系统启动,加载启动映像,在内存中建立了linux系统环境后,解析安装程序映像文件,将安装程序载入内存,执行主执行程序anaconda,该程序是具体安装程序的一个口,负责启动具体的安转过程,完成linux系统的安装。

我们首先看一下安装映像文件。进入redhat9.0第一张系统盘的redhat/base目录,其中stage2.img就是当安装介质为CD-ROM时的安装映像文件。我们采用如下命令解析该映像文件(注意:命令中的挂载点/mnt/stage2要根据读者的实际情况修改):

mount -o loop /mnt/cdrom/Redhat/base/stage2.img /mnt/stage2

解析后,我们可以看到,安装程序的主执行体anaconda在/mnt/stag2/usr/bin目录下,其它安装脚本模块均在/mnt/stage2/usr/lib/anaconda目录下,今后的行文中,除非是anaconda主执行体,其余均指/mnt/stage2/usr/lib/anaconda目录下的模块,并将该目录简称为anaconda主目录。 我们先看一下anaconda主目录的结构:

installclasses子目录中的各个模块定义了在安装过程中用户可选择的安装类型。redhat9.0下

包含了四个文件workstation.py,server.py,custom.py和personal_desktop.py。其中,workstation.py描述了工作站安装类型,server.py描述了服务器安装类型,custom.py描述了用户自定义安装类型,personal_desktop.py描述了个人桌面安装类型。每个安装类型描述

文件根据相应安装类型的特点,分别对安装步骤、分区策略以及安装包的取舍给出了不同的方案。 Iw子目录下包含所有安装图形界面类所在的模块,每个图形界面对应一个类,负责相应安装步骤

图形界面的具体外观显示及与用户的交互,(可能)调用anaconda主目录下的相关安装行为模块完成具体的安装操作。

textw子目录和iw子目录含义是一致的,只是包含的是字符安装模式的前端字符用户界面类所在

的模块,每个字符用户界面对应一个类,负责与用户的交互,字符界面的采用了python的snack库。

如果说用户界面类是处理安装程序外观的话,则anaconda主目录下的各python模块则执行每

个安装界面背后具体的安装行为,包括那些无用户界面安装步骤的安装操作。

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

Python的许多内置模块在目录/mnt/stage2/usr/lib/pythonXX下,其中XX指版本号。另外可参考redhat的anaconda源码包,所有的相关工具都在源码包里,读者在理解了安装过程的原理后,可修改源码,重新编译,然后搭建测试环境进行测试。

2 总体分析

图形安装界面采用python + Gtk开发,各个模块(类)之间的逻辑关系可用下图表示:

图1 图形安装模式下模块(类)逻辑关系图

安装程序逻辑上可划分为三个层次,我们先看最主要的一层:调度中心。可以说,Dispatcher类和

InstallControlWindow类控制了整个安装程序的运转,理解这两个核心类的功能及其与用户界面类和安装行为类的逻辑关系,就基本上理解了整个安装程序。

Dispatcher类在anaconda主目录下的dispatch.py模块中,负责整个安装流程的控制,在安装过程中,某些安装步骤有的需要前置安装操作,有的又需要后置安装操作,而某些安装操作则是没有用户界面的,我们统称这些安装操作为无用户界面的安装操作,那么,这些没有用户界面的安装操作由谁来调度运行呢?答案就是Dispatcher。

InstallControlWindow 类在 anaconda 主目录下的 gui.py 模块中,控制安装过程中前端图形界面的显示,总体调度各个安装图形界面类,InstallControlWindow 建立图形界面的主窗体,每个具体的图形安装界面可视为其子窗体。InstallControlWindow 调用 Dispatcher 控制整个安装流程。

安装过程中,每个具体的图形安装界面均对应一个具体的类,由其对应的具体的类完成具体的安装任务,我们将这些图形界面类归为前端显示层,位于iw目录下的模块中。

anaconda将某些用户界面类中的具体安装操作分离出来,放到了另外一些模块中,这些模块放在了anaconda的主目录下。由Dispatcher直接调用的没有用户界面的安装步骤对应的函数也放在了anaconda的主目录下,我们将这些模块归为安装行为层。

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

图中虚线表达的含义是"可能调用"。如在安装过程中,负责前端显示的package_gui.py模块可能要调用负责安装行为的packages.py模块或其它负责安装行为模块中的类或函数。

2.1 主要控制类分析

2.1.1 Dispatcher

该类在anaconda主目录下的dispatch.py模块中。无论是图形模式安装还是字符模式安装,都由该类来控制安装流程,所以,分析该类时,我们将图形用户界面和字符用户界面统称为用户界面,涉及到字符安装模式的叙述,读者暂时可略过,读到字符安装模式分析时,再回头来看。dispatch.py模块中有一个序列(sequence)数据结构:installSteps。installSteps中记录了有序排列的整个安装过程中所有可能的安装步骤,在生成具体的Dispatcher实例时,会根据安装类型制定对此进行相应裁减。

installSteps中的条目(item)有如下两种格式,第一种格式:( name, tuple)

这种格式表示有用户界面的安装步骤。其中,name代表安装步骤的名称,tuple(元组,python的一种内置数据类型)存放创建相应安装步骤的用户界面的参数。

第二种格式:( name, Function, tuple)

这种格式表示没有用户界面的安 …… 此处隐藏:3245字,全部文档内容请下载后查看。喜欢就下载吧 ……

linux安装分析anaconda.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)