Anaconda/SourceOverview/zh-cn

From FedoraProject

< Anaconda | SourceOverview(Difference between revisions)
Jump to: navigation, search
(Created page with "{{autolang}} <!-- page was renamed from AnacondaSourceOverview --> = Source Overview = anaconda has a lot of source, and this can be a little intimidating at first. It can be d...")
 
(Source Overview)
Line 4: Line 4:
 
= Source Overview =
 
= Source Overview =
  
anaconda has a lot of source, and this can be a little intimidating at first.  It can be difficult to figure out where to even start looking when you're trying to track a problem down.  This guide is meant as a very high level overview of the various groups of source files and what sorts of things they cover.  It's not incredibly detailed, and some source files don't want to fit into categories.  Lots of pieces of functionality are spread out across multiple files.
+
anaconda 代码量非常庞大,第一次阅读代码您可能会觉得代码量有点多得吓人。当您跟踪代码分析问题时,您会有无从下手的感觉。 这篇文章从非常高的角度对代码文件进行了分组,并且描述了各个代码文件的作用。本文对代码的分析并不详细,而且个别文件没有进行分组。一些功能的代码还可能分散在多个文件中。
  
== Interface ==
+
== 接口 ==
 
pyanaconda/cmdline.py<BR>
 
pyanaconda/cmdline.py<BR>
 
pyanaconda/gui.py<BR>
 
pyanaconda/gui.py<BR>
Line 28: Line 28:
 
This file controls setting up VNC for when it is requested during installation.  Afterwards, installs proceed in graphical mode.
 
This file controls setting up VNC for when it is requested during installation.  Afterwards, installs proceed in graphical mode.
  
== Partitioning ==
+
== 磁盘分区 ==
 
pyanaconda/storage/dasd.py<br>
 
pyanaconda/storage/dasd.py<br>
 
pyanaconda/storage/devicelibs/<br>
 
pyanaconda/storage/devicelibs/<br>
Line 62: Line 62:
 
This group of files implements the partitioning logic.  It holds the DeviceTree abstraction that stores existing partitions and requests in a meaningful way, defines the actions needed to write storage requests to disk, handles automatic partitioning (which is the default), and knows how to grow and shrink all requests until they fit in the space provided.  Partitions themselves are created on disk by using the pyparted package.
 
This group of files implements the partitioning logic.  It holds the DeviceTree abstraction that stores existing partitions and requests in a meaningful way, defines the actions needed to write storage requests to disk, handles automatic partitioning (which is the default), and knows how to grow and shrink all requests until they fit in the space provided.  Partitions themselves are created on disk by using the pyparted package.
  
== Bootloader ==
+
== 引导程序 ==
 
pyanaconda/bootloader.py<br>
 
pyanaconda/bootloader.py<br>
 
pyanaconda/booty/
 
pyanaconda/booty/
Line 68: Line 68:
 
These files control writing out the bootloader to the installed system.  Each type of machine has its own bootloader quirks, and therefore has its own file in the booty/ module.  bootloader.py ties it all together.  This is useful both for fresh installations as well as upgrades.
 
These files control writing out the bootloader to the installed system.  Each type of machine has its own bootloader quirks, and therefore has its own file in the booty/ module.  bootloader.py ties it all together.  This is useful both for fresh installations as well as upgrades.
  
== Configuration ==
+
== 配置文件 ==
 
pyanaconda/desktop.py<BR>
 
pyanaconda/desktop.py<BR>
 
pyanaconda/firewall.py<BR>
 
pyanaconda/firewall.py<BR>
Line 79: Line 79:
 
These files hold the configuration settings that are either entered through the interface or through kickstart.  To some extent they affect the installation (for instance, the language and keyboard settings are used in anaconda).  However, the main purpose is to write these out to the installed system at the end of installation.
 
These files hold the configuration settings that are either entered through the interface or through kickstart.  To some extent they affect the installation (for instance, the language and keyboard settings are used in anaconda).  However, the main purpose is to write these out to the installed system at the end of installation.
  
== Package Installation ==
+
== 软件包安装 ==
 
pyanaconda/compssort.py<br>
 
pyanaconda/compssort.py<br>
 
pyanaconda/backend.py<BR>
 
pyanaconda/backend.py<BR>
Line 88: Line 88:
 
These files control package installation.  anaconda allows for multiple package installation backends, though the only real one in the tree uses yum.  Each backend provides methods for selecting groups and packages, removing groups and packages, writing out configuration settings, and so forth.
 
These files control package installation.  anaconda allows for multiple package installation backends, though the only real one in the tree uses yum.  Each backend provides methods for selecting groups and packages, removing groups and packages, writing out configuration settings, and so forth.
  
== Installation Classes ==
+
== 安装类别 ==
 
pyanaconda/installclass.py<BR>
 
pyanaconda/installclass.py<BR>
 
pyanaconda/installclasses/<BR>
 
pyanaconda/installclasses/<BR>
Line 96: Line 96:
 
Installation classes define settings that form a sort of installation profile.  This includes steps to show and skip, product names, installation method, enabled repositories, configuration settings, and so forth.  We primarily use it to create a difference between Fedora and RHEL installs.  Other projects or ISVs could define their own installation classes for their own defaults.
 
Installation classes define settings that form a sort of installation profile.  This includes steps to show and skip, product names, installation method, enabled repositories, configuration settings, and so forth.  We primarily use it to create a difference between Fedora and RHEL installs.  Other projects or ISVs could define their own installation classes for their own defaults.
  
== Special Modes ==
+
== 特殊模块 ==
 
pyanaconda/kickstart.py
 
pyanaconda/kickstart.py
  
Line 113: Line 113:
 
These files provide methods specific to rescue mode and upgrades.
 
These files provide methods specific to rescue mode and upgrades.
  
== Library ==
+
== ==
 
pyanaconda/__init__.py<br>
 
pyanaconda/__init__.py<br>
 
pyanaconda/anaconda_log.py<BR>
 
pyanaconda/anaconda_log.py<BR>
Line 134: Line 134:
 
These files provide a variety of miscellaneous methods that are used throughout the installer.  These functions include the logging framework, hardware probing via a udev interface, process control, handling exceptions, and other tasks.  They also contain methods that just don't fit anywhere else.
 
These files provide a variety of miscellaneous methods that are used throughout the installer.  These functions include the logging framework, hardware probing via a udev interface, process control, handling exceptions, and other tasks.  They also contain methods that just don't fit anywhere else.
  
== The Main Program ==
+
== 主程序 ==
 
anaconda
 
anaconda
  
 
This is the main anaconda program that gets called from the loader.  It handles lots of environment setup, enables updates if they exist, reads any kickstart file, sets up VNC, and other tasks.  When all this is done, it hands control over to the dispatcher which deals with the rest of the installation process.
 
This is the main anaconda program that gets called from the loader.  It handles lots of environment setup, enables updates if they exist, reads any kickstart file, sets up VNC, and other tasks.  When all this is done, it hands control over to the dispatcher which deals with the rest of the installation process.
  
== Image Building ==
+
== 镜像制作 ==
 
data/bootdisk/<BR>
 
data/bootdisk/<BR>
 
data/command-stubs/<BR>
 
data/command-stubs/<BR>
Line 150: Line 150:
 
miscellaneous tasks.
 
miscellaneous tasks.
  
== Loader ==
+
== 加载程序 ==
 
loader/
 
loader/
  

Revision as of 09:17, 4 April 2012

Contents

Source Overview

anaconda 代码量非常庞大,第一次阅读代码您可能会觉得代码量有点多得吓人。当您跟踪代码分析问题时,您会有无从下手的感觉。 这篇文章从非常高的角度对代码文件进行了分组,并且描述了各个代码文件的作用。本文对代码的分析并不详细,而且个别文件没有进行分组。一些功能的代码还可能分散在多个文件中。

接口

pyanaconda/cmdline.py
pyanaconda/gui.py
pyanaconda/installinterfacebase.py
pyanaconda/text.py

These files handle the user interfaces. There are three interfaces supported by anaconda: graphical, text, and the command line mode. Each is implemented by its own python file that contains classes for drawing various types of windows and so forth.

data/ui
pyanaconda/iw/
pyanaconda/textw/

The pyanaconda/iw/ directory contains python files for the graphical interface screens. The pyanaconda/textw/ directory contains python files for the text interface screens. The data/ui/ directory contains glade interface description files that are also needed for graphical mode. In general, we are trying to remove as much of text mode as possible and move everything in the graphical interface to using glade.

pyanaconda/dispatch.py

The dispatcher is a state machine that controls moving between steps in the installer. It knows which screen to go to when a Next or Back button is clicked, and knows which steps should be skipped depending on a variety of settings. Each mode of installation provides its own set of steps that should be skipped or added back in. Install classes (covered later) may also specify steps to skip or add. In addition, various other machine-specific details anaconda discovers and user selections can alter the set of steps.

pyanaconda/vnc.py

This file controls setting up VNC for when it is requested during installation. Afterwards, installs proceed in graphical mode.

磁盘分区

pyanaconda/storage/dasd.py
pyanaconda/storage/devicelibs/
pyanaconda/storage/fcoe.py
pyanaconda/storage/iscsi.py
pyanaconda/storage/zfcp.py

These files handle probing, configuring, starting, and stopping the advanced storage systems that anaconda supports. This includes both hardware devices (FCOE, iSCSI, RAID, ZFCP, etc.) and software abstractions (encryption, lvm, etc.) LVM and RAID are heavily used while the others are much less common.

pyanaconda/storage/formats/

These files handle writing some sort of filesystem or filesystem-like abstraction to a storage device. Think of this as a layer on top of something in pyanaconda/storage/devicelibs/. Filesystem-like abstractions include disk labels, encryption, machine-specific boot partitions, and swap.

pyanaconda/partIntfHelpers.py

This file contains methods that are used for error checking, input validation, and displaying error messages. The graphical and text interfaces make use of it.

pyanaconda/storage/__init__.py
pyanaconda/storage/errors.py
pyanaconda/storage/miscutils.py
pyanaconda/storage/size.py
pyanaconda/storage/storage_log.py
pyanaconda/storage/udev.py

These files form a support library within the storage module, taking care of a variety of small tasks that don't fit well in another group. For the most part, the names describe what they do. pyanaconda/storage/__init__.py handles a rather large number of catch-all tasks including reading and writing storage-related configuration files, probing for existing installations, coordinating storage actions, marshalling data between storage objects, and performing sanity checks.

pyanaconda/storage/deviceaction.py
pyanaconda/storage/devices.py
pyanaconda/storage/devicetree.py
pyanaconda/storage/partitioning.py
pyanaconda/storage/partspec.py

This group of files implements the partitioning logic. It holds the DeviceTree abstraction that stores existing partitions and requests in a meaningful way, defines the actions needed to write storage requests to disk, handles automatic partitioning (which is the default), and knows how to grow and shrink all requests until they fit in the space provided. Partitions themselves are created on disk by using the pyparted package.

引导程序

pyanaconda/bootloader.py
pyanaconda/booty/

These files control writing out the bootloader to the installed system. Each type of machine has its own bootloader quirks, and therefore has its own file in the booty/ module. bootloader.py ties it all together. This is useful both for fresh installations as well as upgrades.

配置文件

pyanaconda/desktop.py
pyanaconda/firewall.py
pyanaconda/language.py
pyanaconda/network.py
pyanaconda/security.py
pyanaconda/timezone.py
pyanaconda/users.py

These files hold the configuration settings that are either entered through the interface or through kickstart. To some extent they affect the installation (for instance, the language and keyboard settings are used in anaconda). However, the main purpose is to write these out to the installed system at the end of installation.

软件包安装

pyanaconda/compssort.py
pyanaconda/backend.py
pyanaconda/image.py
pyanaconda/sortedtransaction.py
pyanaconda/yuminstall.py

These files control package installation. anaconda allows for multiple package installation backends, though the only real one in the tree uses yum. Each backend provides methods for selecting groups and packages, removing groups and packages, writing out configuration settings, and so forth.

安装类别

pyanaconda/installclass.py
pyanaconda/installclasses/
pyanaconda/product.py


Installation classes define settings that form a sort of installation profile. This includes steps to show and skip, product names, installation method, enabled repositories, configuration settings, and so forth. We primarily use it to create a difference between Fedora and RHEL installs. Other projects or ISVs could define their own installation classes for their own defaults.

特殊模块

pyanaconda/kickstart.py

Kickstart is a way of automating installations by providing anaconda with a file that contains all the data that the user would have to provide via the UI. This file is an interface between the parser in the pykickstart package and the anaconda internals. It primarily provides a way of saving the settings in the places anaconda expects.

data/icons
data/liveinst
liveinst/
pyanaconda/livecd.py

These files implement installation from the live CD. They provide a special installation method, a special package installation backend, and some files needed to launch the installer from the live CD's desktop.

pyanaconda/rescue.py
pyanaconda/upgrade.py

These files provide methods specific to rescue mode and upgrades.

pyanaconda/__init__.py
pyanaconda/anaconda_log.py
pyanaconda/backend_log.py
pyanaconda/baseudev.py
pyanaconda/constants.py
pyanaconda/errors.py
pyanaconda/exception.py
pyanaconda/flags.py
pyanaconda/installmethod.py
pyanaconda/isys/
pyanaconda/iutil.py
pyanaconda/packages.py
pyanaconda/platform.py
pyanaconda/pyudev.py
pyanaconda/simpleconfig.py
pyanaconda/sitecustomize.py
pyanaconda/xutils.c

These files provide a variety of miscellaneous methods that are used throughout the installer. These functions include the logging framework, hardware probing via a udev interface, process control, handling exceptions, and other tasks. They also contain methods that just don't fit anywhere else.

主程序

anaconda

This is the main anaconda program that gets called from the loader. It handles lots of environment setup, enables updates if they exist, reads any kickstart file, sets up VNC, and other tasks. When all this is done, it hands control over to the dispatcher which deals with the rest of the installation process.

镜像制作

data/bootdisk/
data/command-stubs/
data/fonts/
scripts/
utils/

These directories contain code that controls how the installation environment is made. This includes creating the initial ramdisk and the stage2 images, adding very basic versions of certain needed commands, splitting the installation tree into media-sized chunks, and other miscellaneous tasks.

加载程序

loader/

Coming soon.