Linux系统安装程序简介

一,CentOS 6的光盘目录介绍

(1)Packages目录:包含安装所需的所有二进制RPM包。
(2)EFI目录:用于64位的基于EFI的系统引导。其中BOOT目录下的BOOTX64.conf为grub的配置文件,用于显示引导菜单。
(3)TRANS.TBL文件:记录当前目录的列表,用mkisofs的-T参数重新生成,主要是为了长文件名称。
(4).discinfo文件是安装介质的识别信息。.treeinfo文件记录不同安装方式安装程序所在的目录结构,如PXE方式时,内核kernel=images/pxeboot/vmlinuz,根文件系统initrd=images/pxeboot/initrd.img。
(5)isolinux目录:有开机引导系统安装的内核(vmlinuz)及RAM镜像(initrd.img),在引导系统时会载入内存,给系统的安装提供一个Linux安装引导平台,文件夹中还有在不同模式下显示信息的boot.msg文件,splash.jpg是特殊格式的引导过程背景图片(640*480)。安装时这个画面上的引导菜单内容在isolinux/isolinux.cfg文件中指定。按Enter会自动进入图形界面安装模式,若按Esc,会显示”boot: “命令提示符,进入用户交互模式,界面上会有各种模式操作提示。键入”linux text”,会进入文本安装模式。
(6)images目录:包含有各种引导镜像。最重要的是引导第二阶段安装需要用到的镜像文件install.img(CentOS 5中是stage2.img),anaconda程序就在这个镜像文件中。另外还有用于制作微型启动光盘的boot.iso(为节省空间CentOS 6中已经删除了,在CentOS 5中是有的),有可放置于USB或其他大容量可引导介质的VFAT分区上,制作引导工具的镜像diskboot.img(CentOS 5中有),也有用于制作PXE安装方式引导介质的pxeboot文件夹等。

系统安装的两个阶段:
第一阶段:加载isolinux目录下的内核映像vmlinuz和初始RAM磁盘initrd.img,建立安装环境。initrd.img中的/init程序调用/sbin/loader程序,loader加载kickstart文件,最后运行/usr/bin/anaconda主程序,进入第二阶段。
第二阶段:anaconda程序加载各python和bash模块,执行各个安装步骤。
文件的调用顺序为isolinux/vmlinuz—>isolinux/initrd.img—>/init—>/sbin/loader—>imagaes/install.img—>/usr/bin/anaconda。

二,Anaconda程序目录结构和源代码包概览

Anaconda是RedHat、CentOS、Fedora等Linux的安装管理程序,使用Python编写。可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。

Anaconda程序存在于光盘的images/install.img镜像中(CentOS 5是images/stage2.img),首先我们需要解开这个install.img。

[root@163 ~]# yum install squashfs-tools
[root@163 ~]# mount -o loop -t squashfs install.img /mnt

修改以后重新导出:
[root@163 ~]# mksquashfs /mnt /root/install.img –all-root -noF

usr/bin/anaconda 安装程序的主执行文件
usr/lib/anaconda/iw/ 图形安装模式的模块
usr/lib/anaconda/textw/ 文本安装模式的模块。
usr/share/anaconda/pixmaps/ 图形安装过程的图片
usr/share/anaconda/ui/ 安装过程中显示的文字
usr/lib/anaconda/dispatch.py 来控制整个安装的流程,当一个Next或Back按钮被单击时的跳转
usr/lib/anaconda/vnc.py 用于控制对VNC进行设置(当在安装过程中请求了VNC时)

[root@163 mnt]# cat usr/lib/anaconda/dispatch.py
……
installSteps = [
    ("welcome", ),
    ("betanag", betaNagScreen, ),
    ("language", ),
    ("keyboard", ),
    ("regkey", regKeyScreen, ),
    ("findrootparts", findRootParts, ),
    ("findinstall", ),
    ("partitionobjinit", partitionObjectsInitialize, ),
    ("parttype", ),    
    ("autopartitionexecute", doAutoPartition, ),
    ("partition", ),
    ("upgrademount", upgradeMountFilesystems, ),
    ("upgradecontinue", queryUpgradeContinue, ),
    ("upgradeswapsuggestion", upgradeSwapSuggestion, ),
    ("addswap", ),
    ("partitiondone", partitioningComplete, ),
    ("upgrademigfind", upgradeMigrateFind, ),
    ("upgrademigratefs", ),
    ("upgbootloader", ),
    ("bootloadersetup", bootloaderSetupChoices, ),
    ("bootloader", ),
    ("bootloaderadvanced", ),
    ("reipl", doReIPL, ),
    ("networkdevicecheck", networkDeviceCheck, ),
    ("network", ),
    ("timezone", ),
    ("accounts", ),
    ("reposetup", doRepoSetup, ),
    ("basepkgsel", doBasePackageSelect, ),
    ("tasksel", ),
    ("group-selection", ),
    ("postselection", doPostSelection, ),
    ("confirminstall", ),
    ("confirmupgrade", ),
    ("install", ),
    ("enablefilesystems", turnOnFilesystems, ),
    ("migratefilesystems", doMigrateFilesystems, ),
    ("setuptime", setupTimezone, ),
    ("preinstallconfig", doPreInstall, ),
    ("installpackages", doInstall, ),
    ("postinstallconfig", doPostInstall, ),
    ("writeconfig", writeConfiguration, ),
    ("firstboot", firstbootConfiguration, ),
    ("instbootloader", writeBootloader, ),
    ("writexconfig", writeXConfiguration, ),
    ("writeksconfig", writeKSConfiguration, ),
    ("writeregkey", writeRegKey, ),
    ("setfilecon", setFileCons, ),
    ("copylogs", copyAnacondaLogs, ),
    ("methodcomplete", doMethodComplete, ),
    ("dopostaction", doPostAction, ),
    ("complete", ),
    ]
……

参考文章:
基于CentOS6.2定制发行版
Linux安装程序Anaconda分析

发表评论

电子邮件地址不会被公开。