安装程序的主要任务包括准备安装系统的硬盘空间(分区和格式化)、 选取软件包(软件包管理)、启动管理器的配置和安装、硬件配置(键盘、鼠标、 显卡显式器、声卡、以太网卡等)、软件配置(帐号等)。由于安装程序运行时系统尚未 建立,安装程序必须自行完成自身运行环境的组建任务。目前已有可能的启动方式有: 软盘启动、光盘启动、硬盘启动、网络启动。此外,还存在从那儿获得被安装的软件包 的问题,目前可能的软件包来源,有光盘、本地硬盘、网络(NFS、http、ftp、samba等)。 从概念上来说,启动方式和软件包来源之间是相互独立的。
最常见的安装是单机安装,单机安装往往需要人机界面以便用户进行控制。人机界面 可能有文本安装和图形安装两种主要形式。除了单机安装以外,还可能存在集群同配置 系统的安装。
由于开发时间不足,MagicInstaller 目前只实现了分区和格式化、选取软件包、 启动管理器的配置和安装、帐号管理几项功能。启动方式仅支持软盘启动、光盘启动和 硬盘启动。软件包来源仅支持光盘和本地硬盘。
MagicInstaller 的人机界面,为图形化安装界面。
在本文档中,以 MagicInstaller 表示顶层目录,顶层目录中的 src 子目录则表示为 MagicInstaller/src,顶层目录的 src 子目录的 magic.installer 子目录则表示为 MagicInstaller/src/magic.installer,依此类推。
为了提高 MagicInstaller 的开发效率,减轻发行者的负担,必须为 MagicInstaller 组建 BuildSystem。MagicInstaller 以 scons 为创建工具。关于 BuildSystem 的细节, 请看这里。
由于软盘、光盘启动方式,启动映象都必须容纳在一张软盘之内。而 MagicInstaller 使用 Framebuffer 下的 Xwindow,加上 gtk2 和 pygtk2 来实现安装界面,这样的运行 环境在未压缩的情况下不可能容纳在 1.44M 的软盘上。所以,启动映象的任务,就是找到 完整的运行环境,而后进入完整运行环境开始运行安装程序。MagicInstaller 的启动映象 除了内核之外只含有一个 MagicBooter。MagicBooter 是 busybox-0.60.5 中的 init 进程的修改。MagicBooter 的具体细节请看这里。
为了简化开发过程,MagicInstaller 直接从 RPM 包中选取文件。内核模块、glibc、 busybox 作为系统的基本组成部分而存在。此外还需要:
详情请参见这里。
安装程序主体,在 MagicInstaller 中被划分成用户界面 (client) 和动作实施 (server) 两部分。虽然目前版本的 MagicInstaller 尚未将运行环境划分成 Client 和 Server 两部分,但这种结构使得用户界面有可能不必在被安装的计算机上运行。这样 就为集群安装、自动安装创造了条件。将用户界面和动作实施区分到不同的进程中去运行 还有另一个好处,就是长操作不会锁定用户界面。用户可以在长操作进行的时候进行其它 配置,从而节省安装时间。
用户界面和动作实施部分通过 XMLRPC 来通讯,选用 XMLRPC 是因为 python 对 XMLRPC 的支持很好。
为提高用户界面的开发效率,引入了 xmlgtk 引擎。这样界面的实现就可以更多地 通过 xml 文件来完成。关于 xmlgtk 的细节,请看这里。
关于用户界面部分的细节,请看这里。关于动作 实施部分的细节,请看这里。
分区和格式化功能是安装程序主体的一部分,它使得用户能够在安装过程中创建、 格式化分区,确定分区的加载点。分区和格式化分为用户界面和动作实施两部分。 细节请看这里。
帐号管理使用户能够在安装过程中设置根用户口令,添加新用户。帐号管理分为用户 界面和动作实施两部分。细节请看这里。
启动管理器的配置和安装使得用户能够在安装过程中配置 grub 启动管理器。启动管理 器功能分为用户界面和动作实施两部分。细节请看 这里。
软件包选择功能使得用户能够根据需要选择安装需要的软件包。软件包选择功能分为 用户界面和动作实施两部分。细节请看这里。