1.一般系统的启动流程:
    bootloader --> kernel(initramfs) --> rootfs --> /sbin/init


2.anaconda:安装程序
    tui:基于curses的文本窗口
    gui:图形窗口

3.CentOS的安装程序准备过程(即anaconda执行之前的程序运行)
    首先我们先将光盘连接至虚拟机上,然后挂载到/mnt/cdrom/目录下,继而可以查看详细的内容
    
  

  # mkdir /mnt/cdrom
    # mount /dev/cdrom1 /mnt/cdrom/
    # cd /mnt/cdrom/
    # ls
    CentOS_BuildTag  EULA  p_w_picpaths    Packages                  repodata              RPM-GPG-KEY-CentOS-Debug-6     RPM-GPG-KEY-CentOS-Testing-6
    EFI              GPL   isolinux  RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-6  RPM-GPG-KEY-CentOS-Security-6  TRANS.TBL

    可以看到光盘中有如下的文件,我们进入isolinux目录下,在其中保存有完整的安装系统时的开机启动程序

    # cd isolinux/
    # ls
    boot.cat  boot.msg  grub.conf  initrd.img  isolinux.bin  isolinux.cfg  memtest  splash.jpg  TRANS.TBL  vesamenu.c32

    接下来我们分别介绍一下这些文件的意义

    (1)光盘中的MBR:boot.cat
         stage2: isolinux.bin    (这个程序会读取isolinux.cfg显示一个菜单,而读取vesamenu.c32则会显示一个图形窗口,并取用splash.jpg作为背景图片)
                配置文件:isolinux.cfg  
                        这个配置文件对应的内容如下
                            每个对应的菜单选项:
                                加载内核:isolinux/vmlinuz
                                向内核传递参数:append initrd=initrd.img


        

       # cat isolinux.cfg 
        default vesamenu.c32
        #prompt 1
        timeout 600
        display boot.msg
        menu background splash.jpg
        menu title Welcome to CentOS 6.6!
        menu color border 0 #ffffffff #00000000
        menu color sel 7 #ffffffff #ff000000
        menu color title 0 #ffffffff #00000000
        menu color tabmsg 0 #ffffffff #00000000
        menu color unsel 0 #ffffffff #00000000
        menu color hotsel 0 #ff000000 #ffffffff
        menu color hotkey 7 #ffffffff #ff000000
        menu color scrollbar 0 #ffffffff #00000000
        label linux
          menu label ^Install or upgrade an existing system
          menu default
          kernel vmlinuz
          append initrd=initrd.img
        label vesa
          menu label Install system with ^basic video driver
          kernel vmlinuz
          append initrd=initrd.img xdriver=vesa nomodeset
        label rescue
          menu label ^Rescue installed system
          kernel vmlinuz
          append initrd=initrd.img rescue
        label local
          menu label Boot from ^local drive
          localboot 0xffff
        label memtest86
          menu label ^Memory test
          kernel memtest
          append -

    

    (2)装载根文件系统并启动anaconda
        默认启动gui窗口
        若是显式指定tui接口
                1)向内核传递“text”参数
                    例:boot:linux text
                2)在选定的菜单下敲tab键,即可键入文本提示符
                   或是直接敲ESC键,在boot:提示符下键入 text即可


4.anaconda程序运行时的工作过程
    (1)安装前的配置阶段
            安装过程使用的语言
            键盘类型
            安装目标存储设备
                Basic Storage:本地磁盘
                特种设备:iSCSI
            设定主机名
            配置网络接口
            时区
            管理员密码
            设定分区方式及MBR的安装位置                    
            创建一个普通用户            
            选定要安装的程序包
    
    (2)安装阶段
            在目标磁盘创建分区,执行格式化操作等
            将选定的程序包安装至目标位置
            安装bootloader

    (3)首次启动
            iptables
            selinux
            core dump

注意:CentOS系统安装准备阶段的相关内容一般位于引导设备上,而后续的anaconda以及安装用到的程序包等有几种方式可用
        本地光盘
        本地硬盘
        ftp server:yum repository
        http server:yum repository
        nfs server
    如果想手动指定安装源
        boot:linux method


5.anaconda的配置方式
    (1)交互式配置方式,即在图形化的窗口下实现的人工配置
    (2)通过读取实现给定的配置文件自动完成配置
            按特定语法给出的配置选项
               kickstart文件


6.安装引导选项(即在boot:提示符下我们可以传递给内核的参数选项)
        boot:text 文本格式的安装方式
        boot:method 手动指定使用的安装方法
        与网络相关的安装选项:
                ip=IPADDR
                netmask=MASK
                gateway=GW
                dns=DNS_SERVER_IP
                ifname=NAME:MAC_ADDR 指明网络接口的具体名称
        与远程访问功能相关的引导选项
                vnc(使用此命令,可以利用vnc服务打开本机vnc server服务让远程主机连入,帮助配置启动
                vncpassword='PASSWD' 远程连接本地时需要键入密码
        指明kickstart文件的位置

                ks=
                    DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
                    Hard drive: ks=hd:/device/drectory/KICKSTART_FILE
                    HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
                    FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
                    HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE

        启动紧急救援模式:
                rescue

    注意:在完成安装后,在本地家目录下有一个anaconda.cfg文件,其中保存了本次安装的相关配置选项,同时这也是一个安装模板


7.kickstart文件的格式:
    命令段:指明各种安装前配置,如键盘类型等;
    程序包段:指明要安装的程序包组或程序包,不安装的程序包等;
            %packages 开始的标志
            @group_name  装一个包组
            package 装特定的一个程序包
            -package 不安装特定的一个程序包
            %end 结束标志
    脚本段:
            %pre: 安装前脚本
                运行环境:运行于安装介质上的微型Linux环境

            %post: 安装后脚本
                运行环境:安装完成的系统;


    (1)命令段中的命令:
            必备命令

                authconfig: 认证方式配置
                    authconfig --useshadow  --passalgo=sha512
                bootloader:bootloader的安装位置及相关配置
                    bootloader --location=mbr --driveorder=sda --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet quiet"
                keyboard: 设定键盘类型
                lang: 语言类型
                part: 创建分区
                rootpw: 指明root的密码
                timezone: 时区
            可选命令
                install OR upgrade
                text: 文本安装界面
                network
                firewall
                selinux
                halt
                poweroff
                reboot
                repo:安装过程中额外用到yum源的指明
                user:安装完成后为系统创建新用户
                url: 指明安装源

    (2)在root家目录下的anaconda-ks.cfg配置文件,其中的内容大体对应上述的介绍

            # cat anaconda-ks.cfg 
            # Kickstart file automatically generated by anaconda.
            #version=DEVEL
            install
            cdrom
            lang en_US.UTF-8
            keyboard us
            network --onboot yes --device eth0 --bootproto dhcp
            rootpw  --iscrypted $1$vr9VWqou$ds1.AIZMTpPHpgZy4ZOG9.
            # Reboot after installation
            reboot
            firewall --service=ssh
            authconfig --useshadow --enablemd5
            selinux --enforcing
            timezone --utc America/Los_Angeles
            bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
            # The following is the partition information you requested
            # Note that any partitions you deleted are not expressed
            # here so unless you clear all partitions first, this is
            # not guaranteed to work
            #clearpart --all --initlabel
            #part /boot --fstype=ext4 --size=300
            #part / --fstype=ext4 --grow --size=3000
            #part swap --grow --maxsize=1984 --size=1984
            repo --name="CentOS"  --baseurl=cdrom:sr1 --cost=100
            %packages
            @Base
            @Core
            @Desktop
            @Fonts
            @General Purpose Desktop
            @Internet Browser
            @Printing client
            @X Window System
            binutils
            gcc
            kernel-devel
            make
            patch
            python
            %end
            %post
            if [ -f /boot/grub/menu.lst -a ! -h /boot/grub/menu.lst ]; then cp /boot/grub/menu.lst /boot/grub/menu.lst.bak && sed -i 's/ rhgb//' /boot/grub/menu.lst; fi
            if [ -f /boot/grub/grub.conf -a ! -h /boot/grub/grub.conf ]; then cp /boot/grub/grub.conf /boot/grub/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub/grub.conf; fi
            if [ -f /boot/grub2/grub.conf -a ! -h /boot/grub2/grub.conf ]; then cp /boot/grub2/grub.conf /boot/grub2/grub.conf.bak && sed -i 's/ rhgb//' /boot/grub2/grub.conf; fi
            if [ -f /etc/rc.d/rc.local ]; then cp /etc/rc.d/rc.local /etc/rc.d/rc.local.backup; fi
            cat >>/etc/rc.d/rc.local <<EOF
            #!/bin/bash
            echo
            echo "Installing VMware Tools, please wait..."
            if [ -x /usr/sbin/getenforce ]; then oldenforce=\$(/usr/sbin/getenforce); /usr/sbin/setenforce permissive || true; fi
            mkdir -p /tmp/vmware-toolsmnt0
            for i in hda sr0 scd0; do mount -t iso9660 /dev/\$i /tmp/vmware-toolsmnt0 && break; done
            cp -a /tmp/vmware-toolsmnt0 /opt/vmware-tools-installer
            chmod 755 /opt/vmware-tools-installer
            cd /opt/vmware-tools-installer
            mv upgra32 vmware-tools-upgrader-32
            mv upgra64 vmware-tools-upgrader-64
            mv upgrade.sh run_upgrader.sh
            chmod +x /opt/vmware-tools-installer/*upgr*
            umount /tmp/vmware-toolsmnt0
            rmdir /tmp/vmware-toolsmnt0
            if [ -x /usr/bin/rhgb-client ]; then /usr/bin/rhgb-client --quit; fi
            cd /opt/vmware-tools-installer
            for s in sr0 sr1; do eject -s /dev/\$s; done
            ./run_upgrader.sh
            if [ -f /etc/rc.d/rc.local.backup ]; then mv /etc/rc.d/rc.local.backup /etc/rc.d/rc.local; else rm -f /etc/rc.d/rc.local; fi
            rm -rf /opt/vmware-tools-installer
            sed -i 's/3:initdefault/5:initdefault/' /etc/inittab
            if [ -f /boot/grub/menu.lst.bak ]; then mv /boot/grub/menu.lst.bak /boot/grub/menu.lst; fi
            if [ -f /boot/grub/grub.conf.bak ]; then mv /boot/grub/grub.conf.bak /boot/grub/grub.conf; fi
            if [ -f /boot/grub2/grub.conf.bak ]; then mv /boot/grub2/grub.conf.bak /boot/grub2/grub.conf; fi
            if [ -x /usr/sbin/getenforce ]; then /usr/sbin/setenforce \$oldenforce || true; fi
            if [ -x /bin/systemd ]; then systemctl restart prefdm.service; else telinit 5; fi
            EOF
            chmod 755 /etc/rc.d/rc.local
            if [ -x /bin/systemd ]; then systemctl enable rc-local.service; fi
            /usr/sbin/adduser ahui
            /usr/sbin/usermod -p '$1$vr9VWqou$ds1.AIZMTpPHpgZy4ZOG9.' ahui
            /usr/bin/chfn -f "CentOS 6" ahui
            %end

8.创建kickstart文件的方式
    (1)直接手动编辑;
            依据某模板修改;
     (2) 可使用创建工具:system-config-kickstart (注意这是一个命令,运行后可以生成一个图形化的窗口,让我们手动配置生成kickstart文件)(CentOS 6)
            依据某模板修改并生成新配置;

            http://172.16.0.1/centos6.x86_64.cfg

  检查ks文件的语法错误:ksvalidator

        # ksvalidator /PATH/TO/KICKSTART_FILE



  创建引导光盘:

        # mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.6 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/


        这个命令的意思是:把myiso/这个目录创建为光盘镜像,保存至/root/boot.iso文件中,并指明相关选项

        实质上这个引导光盘可以最简到仅包括如下的文件
            myiso目录下有
                  isolinux目录和myks.cfg配置文件就可以了