Anaconda安装器介绍Anaconda简介
Anaconda是Fedora,RedHatEnterpriseLinux及其衍生产品中使用的操作系统安装程序。它由Python模块和脚本以及一些其他文件组成,如Gtk小部件(用C编撰),systemd单元和dracut库。它们共同构成了一个工具,容许用户设置生成(目标)系统的参数,之后在机器上安装设置的系统。安装过程有四个主要步骤:
Anaconda体系结构
Anaconda是由Python模块、shell脚本和几个外部包和库组成。此工具集的主要组件包括以下几块:
安装过程中数据的生命周期很简单。假如提供了Kickstart文件,它将由pykickstart模块处理并作为树形结构导出到显存中。若果未提供Kickstart文件,则会创建一个空的树形结构。假如安装是交互式的(并非所有必需的Kickstart命令都已使用),则会依据用户在交互式界面中作出的选择更新结构。
完成所有必需的选择后,安装过程开始,结构中储存的值用于确定安装的参数。这种值也写为Kickstart文件红帽安装软件命令,保存在/root已安装系统的目录中;为此,可以通过重用此手动生成的Kickstart文件手动安装。
树形结构的元素由pykickstart包定义,但其中一些可以通过pyanaconda.kickstart模块中的更改版本覆盖。管理此行为的一个重要规则是没有储存配置数据的位置,但是安装过程是数据驱动的嵌入式linux,而且尽可能地依赖于事务。所以必须拥有以下功能:
安装是数据驱动的事实意味着安装和配置逻辑坐落树形结构中的项的方式内。setup假如须要,设置每位项目(方式)以更改安装的运行时环境,之后执行(该execute方式)以在目标系统上执行修改。
Anaconda开发模型
在Fedora的初期版本中,安装程序的界面遵守向导设计模式,包括多个线性屏幕,时常嵌套模式弹出对话框。(参见右图)尽管使用向导作为设计模式并不存在任何问题,但安装程序所需的大量屏幕使其显得笨拙。你可以在这个过程中结束几个屏幕,而且须要返回并在之前的屏幕上修改个别内容,须要大量点击和屏幕翻转能够返回并返回到离开的位置。多个模态嵌套对话窗口有时促使与个别屏幕交互,非常是与分区相关的屏幕相混淆。
为了解决这种问题和其他问题,安装程序开发团队将UI模型从基于线性向导的模型修改为中心幅射模型。基本上,安装程序UI已被提炼为两个主菜单,您可以从中选择访问各类选项屏幕。每位菜单都列举了每位子屏幕,并总结了为每位子屏幕选择的选项,因而您可以跳过不须要配置的屏幕(假如您乐意)。请参阅右图,了解中心和轮辋模型的工作原理。
Hub&Spoke模型中提供的新安装程序解决了旧代码库中无法解决的许多问题:
线程和通讯
在安装过程中须要执行的个别操作(比如扫描现有分区的c盘或下载程序包元数据)可能须要很长时间。为了避免等待并尽可能保持响应,Anaconda会在单独的线程中运行那些操作。在基于GTK工具包不支持从多个线程元素的变化。Gtk的主风波循环在Anaconda进程本身的主线程中运行linux 分区,执行涉及GUI的操作的所有代码必须确保那些操作也在主线程中运行。惟一支持的方式是使用GLib.idle_add,这并不总是容易或须要。为了减轻这个问题,pyanaconda.ui.gui.utils模块中定义了几个辅助函数和装潢器。其中最有用的是@gtk_action_wait和@gtk_action_nowait装潢器。它们以这样一种方法更加装饰函数或方式:当调用此函数或方式时,它会手动排入Gtk的主循环,在主线程中运行红帽安装软件命令,返回值分别返回给调用者或删掉。
如前所述,使用多个线程的主要诱因之一是容许用户配置个别界面,而其他当前正忙的界面(比如下载包元数据时的安装源)自行配置。一旦配置完成,之前繁忙的轮辋界面须要宣布它如今已