一、linux系统安装过程

  1、总体流程及概述

       POST --> Bootloader (kernel+ramdisk) --> anaconda

     ①安装系统也需要先加载内核,内核初始化完毕后会执行安装程序anaconda。

     ②若引导次序高于安装介质的设备都不能被引导,则BIOS会将安装介质作为引导设备,否则需要进入BIOS界面将安装介质调整为第一引导设备。

     ③安装介质:光盘、U盘、支持PXE的网卡等

    补充:如何在虚拟机中进入BIOS界面?(以VMware为例)

     方法一:刚开机时快速按F2键

     方法二:

wKioL1ZMXlCDjfbdAABRJtxIAns360.png



  2、启动安装过程的引导参数


   ■系统光盘中几个重要的目录:

       isolinux:存放着与安装引导相关的文件

         isolinux.bin:bootloader的第二阶段

         isolinux.cfg:isolinux.bin会读取该文件生成如上图形界面所示的菜单

         splash.jpg:图形界面背景图片

         vesamenu.c32:图形界面框架

       p_w_picpaths:包含各种引导镜像

         install.imganaconda程序就在这个镜像文件中

       Packages:各种安装包

[root@node2 ~]# mkdir /media/cdrom
[root@node2 ~]# mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@node2 ~]# ls /media/cdrom   #Packages目录为安装源
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
[root@node2 ~]# cd /media/cdrom/isolinux
[root@node2 isolinux]# ls
boot.cat  boot.msg  grub.conf  initrd.img  isolinux.bin  isolinux.cfg  memtest  splash.jpg  TRANS.TBL  vesamenu.c32  vmlinuz
[root@node2 isolinux]# cat isolinux.cfg   #bootloader图形界面菜单配置信息
default vesamenu.c32
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.5!
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 -

[root@node2 isolinux]# cd ..
[root@node2 cdrom]# ls p_w_picpaths/
efiboot.img  efidisk.img  install.img  pxeboot  TRANS.TBL

   ■bootloaderl界面:

      GUI界面

      text界面

    插入系统光盘并开机后会进入bootloader提供的图形界面,选择第一项即开始加载内核并启动anaconda图形配置接口;我们也可按ESC键进入bootloader文本界面,在boot提示符后可输入多种引导参数

wKiom1ZMY5OhGwC9AAGMAOnhzBs735.png

   ■引导参数

      CentOS 6:

        text:启动anaconda文本配置接口

        repo:指定安装源

            cdrom:/path/to/repo

            http://server/path/to/repo        

            ftp://username:password@server/path/to/repo

        网络配置:

          ip=

          netmask=

          gateway=

          dns=

          ifname=: 指定此地址配置到地的网络接口

        指定使用的kickstart文件及其位置

          ks=cdrom:/path/to/ksfile

          ks=http://server/path/to/ksfile

          ks=ftp://username:password@server/path/to/ksfile

            例如:http://172.16.0.1/centos6.x86_64.cfg

        如果额外加载驱动程序:

          dd=


      CentOS 7:

        指定安装源:

          inst.repo=

        指定额外需要加载驱动:

          inst.dd=

        指定kickstart文件及其位置:

          inst.ks=

        指定使用TUI界面:

          inst.text

          inst.cmdline:必须与kickstart文件一同使用

        网络功能选项:

          ip=method

            可用method:dhcp, dhcp6, auto6

          ip=interface:method

          ip=IP::GATEWAY:NETMASK:HOSTNAME:INTERFACE:none

          nameserver=

         

  3、anaconda

    anaconda是redhat、centos、fedora等linux系统的安装管理程序。它可以提供文本或图形界面供用户选择配置,并根据配置把位于光盘或其它源上的数据包安装到主机上。另外,它还支持Kickstart等脚本提供自动安装的功能

    ■anaconda接口:

      text接口

      GUI接口

    ■安装过程分为两个阶段:

      安装前的配置阶段:(既可交互式进行,亦可直接读取kickstart配置文件自动完成)

         键盘类型

         安装过程中的语言

         支持使用语言

         时区

         选择要使用磁盘设备

         分区、格式化配置

         选择要安装的包

         管理员密码

      安装阶段:

         在目标磁盘创建分区、执行分区格式化

         将选定的程序包安装至目标磁盘

         安装bootloader

    ■第一次启动后的配置:

        iptables

        selinux

        core kdump

    

    ■建议单独分区:/,/home,/usr,/var,swap

      不能单独分区:/proc, /sys, /etc, /bin, /sbin, /lib, /media, /mnt, /dev

      /boot:单独分区与否,取决于rootfs所在设备的类型


  4、kickstart

    在常规系统安装中需要手动选择安装选项,kickstart文件则定义好了这些安装配置,anaconda会自动读取该文件,并根据文件的配置来安装系统,不用再经过繁琐的人为选择了

    kickstart可以在安装时通过网络获取,如http,nfs,ftp等方式,也可以将其存放在系统光盘中

    系统安装结束后,anaconda还会生成一个与本次安装配置相同的kickstart文件,此文件路径为/root/anaconda-ks.cfg

[root@node2 cdrom]# cat /root/anaconda-ks.cfg 
# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
cdrom
lang en_US.UTF-8
keyboard us
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$O6iF6HJMYbZnfjz6$NpjS5/QneMFmgRQ70n/4RhYui8IlnoVJnzyKGIFrwBYQ3Iwus.L.wSqce3MX/Fum5dWSLjf1vgM4igU856p1h1
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
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 --none

#part /boot --fstype=ext4 --size=200
#part / --fstype=ext4 --size=10240
#part swap --size=2048


repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100

%packages
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@input-methods
@internet-browser
@java-platform
@legacy-x
@network-file-system-client
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
mtools
pax
oddjob
sgpio
device-mapper-persistent-data
abrt-gui
samba-winbind
certmonger
pam_krb5
krb5-workstation
libXmu

    kickstart文件

      命令段

      软件包段

        %packages

          pack_name

          @group

          -pack_name: 不安装的包,但如果被依赖,也会被安装

      脚本段

        %pre

          安装前脚本

        %post

          安装后脚本

    kickstart图形配置接口:

       yum install system-config-kickstart

    配置命令:

       system-config-kickstart

    配置完成后的语法检查命令:

       ksvalidator /path/to/ks_file

[root@node2 ~]# yum -y install system-config-kickstart
...
[root@node2 ~]# system-config-kickstart
Could not open display because no X server is running.
Try running 'system-config-kickstart --help' for a list of options.

    在Xshell中执行system-config-kickstart命令时出现错误提示:“Could not open display because no X server is running”,解决办法如下:

wKiom1ZNXLXDOgNRAABNN24E774962.png

[root@node2 ~]# system-config-kickstart   #执行该命令后会出现如下kickstart配置界面
Xlib:  extension "RANDR" missing on display "localhost:10.0".
/usr/share/system-config-kickstart/kickstartGui.py:103: GtkWarning: GtkSpinButton: setting an adjustment with non-zero page size is deprecated
  xml = gtk.glade.XML ("/usr/share/system-config-kickstart/system-config-kickstart.glade", domain="system-config-kickstart")
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * epel: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Checking for new repos for mirrors
Checking for new repos for mirrors

wKiom1ZNXYzC10unAADPIcg3HC0489.png

    我们可以以现有的/root/anaconda-ks.cfg文件为模板来进行配置:“File”-->“Open File”打开如下界面,载入选中的anaconda-ks.cfg后再进行适当的修改即可

wKioL1ZNX9fCPekRAADW2wE_878512.png


二、示例:手动制作CentOS 6.5安装光盘镜像

   1、复制一份现有光盘上的isolinux目录作为安装引导文件

     mkdir /tmp/myiso

     cp -r /media/cdrom/isolinux /tpm/myiso

   2、提供kickstart文件,并将其保存于/tpm/myiso/isolinux下。(本例中以阿里云镜像站点提供的Packages作为安装源)

     system-config-kickstart

   3、在isolinux.cfg中指明kickstart文件位置,可以实现完全自动化安装。当然我们也可以在“boot:”提示符下手动指定

   3、基于isolinux目录创建引导盘

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

       -V:指定光盘ID

       -b:指定在制作可开机光盘时所需的开机映像文件

       -o:指定输出的映像文件名称

[root@node2 ~]# mkdir /tmp/myiso
[root@node2 ~]# cp -r /media/cdrom/isolinux /tmp/myiso
[root@node2 ~]# ll /tmp/myiso/isolinux
total 37160
-r--r--r-- 1 root root     2048 Nov 19 08:00 boot.cat
-r--r--r-- 1 root root       84 Nov 19 08:00 boot.msg
-r--r--r-- 1 root root      334 Nov 19 08:00 grub.conf
-r--r--r-- 1 root root 33392971 Nov 19 08:00 initrd.img
-r--r--r-- 1 root root    24576 Nov 19 08:00 isolinux.bin
-r--r--r-- 1 root root      936 Nov 19 08:00 isolinux.cfg
-r--r--r-- 1 root root   165080 Nov 19 08:00 memtest
-r--r--r-- 1 root root   151230 Nov 19 08:00 splash.jpg
-r--r--r-- 1 root root     2215 Nov 19 08:00 TRANS.TBL
-r--r--r-- 1 root root   162860 Nov 19 08:00 vesamenu.c32
-r-xr-xr-x 1 root root  4128368 Nov 19 08:00 vmlinuz
[root@node2 ~]# chmod -R u+w /tmp/myiso/isolinux
[root@node2 ~]# ll /tmp/myiso/isolinux
total 37160
-rw-r--r-- 1 root root     2048 Nov 19 08:00 boot.cat
-rw-r--r-- 1 root root       84 Nov 19 08:00 boot.msg
-rw-r--r-- 1 root root      334 Nov 19 08:00 grub.conf
-rw-r--r-- 1 root root 33392971 Nov 19 08:00 initrd.img
-rw-r--r-- 1 root root    24576 Nov 19 08:00 isolinux.bin
-rw-r--r-- 1 root root      936 Nov 19 08:00 isolinux.cfg
-rw-r--r-- 1 root root   165080 Nov 19 08:00 memtest
-rw-r--r-- 1 root root   151230 Nov 19 08:00 splash.jpg
-rw-r--r-- 1 root root     2215 Nov 19 08:00 TRANS.TBL
-rw-r--r-- 1 root root   162860 Nov 19 08:00 vesamenu.c32
-rwxr-xr-x 1 root root  4128368 Nov 19 08:00 vmlinuz
[root@node2 ~]# system-config-kickstart
...

wKiom1ZNtSPAWM_lAACRkPAW9Qo746.png

 配置完后将kickstart文件保存至/tmp/myiso/isolinux下

[root@node2 ~]# vim /tmp/myiso/isolinux/ks.cfg   #对kickstart文件做适当地修改

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --enabled --service=ssh
# Install OS instead of upgrade
install
# Use network installation
url --url="http://mirrors.aliyun.com/centos/6/os/x86_64/"
repo --name="CentOS" --baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/ --cost=100   #指定安装源
# Root password
rootpw --iscrypted $1$Bmn0VLX0$2o2vCmHL.aWp3zhewY1S..
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot --eject    # --eject表示重启之前弹出光盘
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on   #如果使用网络安装源,则必须配置网络参数
# System bootloader configuration
bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda"
# Partition clearing information
clearpart --all  
# Disk partitioning information
part /boot --fstype="ext4" --size=200
part pv.008001 --size=51200
volgroup vg0 --pesize=8192 pv.008001
logvol / --fstype="ext4" --name=root --vgname=vg0 --size=10240   #图形窗口中无法配置lvm,这里为手动编辑的
logvol swap --name=swap --vgname=vg0 --size=2048
logvol /var --fstype="ext4" --name=var --vgname=vg0 --size=20480

%packages
...
[root@node2 ~]# ksvalidator !$   #语法检查无误
[root@node2 ~]# vim /tmp/myiso/isolinux/isolinux.cfg 

default vesamenu.c32
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to CentOS 6.5!
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 ks=cdrom:/isolinux/ks.cfg   #在linux标签下指定kickstart文件位置以实现全自动化安装
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
[root@node2 ~]# cd /tmp
[root@node2 tmp]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/
#针对myiso目录创建光盘镜像
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisop_w_picpath 1.1.9 (Linux)
Scanning myiso/
Scanning myiso/isolinux
Excluded: myiso/isolinux/TRANS.TBL
Excluded by match: myiso/isolinux/boot.cat
Writing:   Initial Padblock                        Start Block 0
Done with: Initial Padblock                        Block(s)    16
Writing:   Primary Volume Descriptor               Start Block 16
Done with: Primary Volume Descriptor               Block(s)    1
Writing:   Eltorito Volume Descriptor              Start Block 17
Size of boot p_w_picpath is 4 sectors -> No emulation
Done with: Eltorito Volume Descriptor              Block(s)    1
Writing:   Joliet Volume Descriptor                Start Block 18
Done with: Joliet Volume Descriptor                Block(s)    1
Writing:   End Volume Descriptor                   Start Block 19
Done with: End Volume Descriptor                   Block(s)    1
Writing:   Version block                           Start Block 20
Done with: Version block                           Block(s)    1
Writing:   Path table                              Start Block 21
Done with: Path table                              Block(s)    4
Writing:   Joliet path table                       Start Block 25
Done with: Joliet path table                       Block(s)    4
Writing:   Directory tree                          Start Block 29
Done with: Directory tree                          Block(s)    2
Writing:   Joliet directory tree                   Start Block 31
Done with: Joliet directory tree                   Block(s)    2
Writing:   Directory tree cleanup                  Start Block 33
Done with: Directory tree cleanup                  Block(s)    0
Writing:   Extension record                        Start Block 33
Done with: Extension record                        Block(s)    1
Writing:   The File(s)                             Start Block 34
 26.70% done, estimate finish Thu Nov 19 10:07:43 2015
 53.31% done, estimate finish Thu Nov 19 10:07:43 2015
 80.01% done, estimate finish Thu Nov 19 10:07:43 2015
Total translation table size: 4701
Total rockridge attributes bytes: 1438
Total directory bytes: 2534
Path table size(bytes): 26
Done with: The File(s)                             Block(s)    18577
Writing:   Ending Padblock                         Start Block 18611
Done with: Ending Padblock                         Block(s)    150
Max brk space used 0
18761 extents written (36 MB)

 将该镜像制作成光盘或拷贝到宿主机上,在待安装系统的主机开机前接上。如下图,测试成功 

wKiom1ZNvbzy7zdeAAAPhMiVYQc580.png