Linux Kickstart无人值守安装
     接上篇《linux kickstart无人值守安装(上)》
 
3)用于网络启动的内核文件
RedHat 安装光盘目录中的 '''p_w_picpaths/pxeboot/{vmlinuz,initrd.img}''' 启动文件复制到某个安装目录,比如: '''/tftpboot/ '''
[root@qiuri Server]# cp /media/rhel5/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /tftpboot/
由于多个客户端可以从一个 PXE 服务器引导, PXE 引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。如果客户机的网卡的 MAC 地址为 '''88:99:AA:BB:CC:DD''' ,对应的 IP 地址为 192.168.1.195 ,那么客户机首先尝试以 MAC 地址为文件名匹配的配置文件,如果不存在就以 IP 地址来查找。根据上述环境针对这台主机要查找的以一个配置文件就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd 。如果该文件不存在,就会根据 IP 地址来查找配置文件了,这个算法更复杂些, PXE 映像查找会根据 IP 地址 16 进制命名的客户机配置文件。例如: 192.168.1.195 对应的 16 进制的形式为 C0A801C3 。(可以通过 syslinux 软件包提供的 gethostip 命令将 10 进制的 IP 转换为 16 进制)
如果 C0A801C3 文件不存在,就尝试查找 C0A801C 文件,如果 C0A801C 也不存在,那么就尝试 C0A801 文件,依次类推,直到查找 C 文件,如果 C 也不存在的话,那么最后尝试 default 文件。
总体来说, pxelinux 搜索的文件的顺序是:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/ C0A801C3
/tftpboot/pxelinux.cfg/ C0A801C
/tftpboot/pxelinux.cfg/ C0A801
/tftpboot/pxelinux.cfg/ C0A80
/tftpboot/pxelinux.cfg/ C0A8
/tftpboot/pxelinux.cfg/ C0A
/tftpboot/pxelinux.cfg/ C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
对于一台需要支持很多安装机器的安装服务器来说,将配置写在与 IP 地址对应的文件里很不灵活。把所有配置都集中在 default 文件中是个不错的主意,可以减轻配置文件维护负担。接下来创建 /tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
[root@qiuri Server]# mkdir /tftpboot/pxelinux.cfg
将光盘中的 '''isolinux/isolinux.cfg''' 文件复制为 '''/tftpboot/pxelinux.cfg/default'''
[root@qiuri Server]# cp /media/rhel5/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
查看 default 文件内容:
以下内容根据原文件略加修改并做了注释(注:该文件中的空行和以 '''#''' 开头的行都将被忽略)
# 默认启动的是 'label linux' 中标记的启动内核
default linux      
# 显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
prompt 1     
# 在用户输入之前的超时时间,单位为 1/10 秒。
timeout 60         
#显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。也可以指定位类似 'install/rhel4.4-inst/boot.msg' 这样的,路径+文件名。
display boot.msg  
F1 boot.msg  #按下 'F1' 这样的键后显示的文件。注意路径。默认是 /tftpboot。注:syslinux 官方网站上说目前只能使用 F1-F10
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
# 'label' 指定你在 'boot:' 提示符下输入的关键字。
# 比如:
# boot: linux[ENTER]
# 这个会启动 'label linux' 下标记的 kernel initrd.img 文件。
# 这里还定义了其它几个关键字:
#  boot: text
#  boot: ks
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也 都可以使用。
# 使用 kickstart 安装。
# 可以在 ks 参数后直接指定 kickstart 文件的位置。
label linux
  kernel vmlinuz
  append ks=nfs:192.168.1.1:/mnt/install/ks.cfg initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
… …
3、安装配置NFS服务器
安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP FTP ,和 NFS 。也就是我们前面提到的 OS Server 。这里使用 NFS 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。
创建共享目录,并将光盘内容拷贝到共享目录中:
[root@qiuri Server]#mkdir /mnt/install
[root@qiuri Server]#cp /media/rhel5/* /mnt/install
安装 NFS 并将共享目录发布出去
[root@qiuri Server]# vi /etc/exports
/mnt/install *(ro,sync)
~
"/etc/exports" 1L, 25C written
重启服务使配置生效。
[root@qiuri Server]# service portmap restart
停止 portmap                                             [确定]
启动 portmap                                             [确定]
[root@qiuri Server]# service nfs start
启动 NFS 服务:                                            [确定]
关掉 NFS 配额:                                            [确定]
启动 NFS 守护进程:                                    [确定]
启动 NFS mountd                                      [确定]
检查目录 /mnt/install 是否被正确共享:
[root@qiuri Server]# shoumount –e locahost
Export list for localhost:
/mnt/install *
[root@qiuri Server]# chkconfig --level 35 nfs on
   4、配置Kickstart安装
通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率 Red Hat Linux 开始支持一个称为 kickstart 的功能。使用这种方法,只需事先定义好一个 Kickstart 自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成 Kickstart 配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台 Red Hat Linux 机器, Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的 kickstart 配置文件来生成你自己的 kickstart 配置文件。 该文件位于 /root/anaconda-ks.cfg
这里我直接使用该文件,拷贝本文件到 /mnt/install 下。
[root@qiuri Server]# cp /root/anaconda-ks.cfg /mnt/install/ks.cfg
[root@qiuri Server]# chmod a+r /mnt/install/ks.cfg
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.1.1 --dir=/mnt/install   #这个选项告诉安装程序:到服务器192.168.1.1的NFS共享目录 /mnt/install下寻找安装介质
key 2515dd4e215225dd
lang zh_CN.UTF-8
keyboard us
xconfig --startxonboot
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$3xvzZgwz$1jYjrh/XtXLblT00Mn3Ys0
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
… …
clearpart --all --drives=sda --initlabel
part / --fstype ext3 --size=130000
part swap --fstype swap --size=2048
part /backup --fstype ext3 --size=100 --grow
 
%packages
@office
@admin-tools
… …
emacs
gcc43-c++
libgfortran43
注意:关闭服务器端防火墙和 SELINUX
5、配置客户端PXE引导安装
最后设置客户端 BIOS 选择从网卡启动。具体方法因 BIOS 版本不同而异。
Linux Kickstart无人值守安装(下)_第1张图片
网卡中的 PXE 代码会联系 DHCP 服务器来获取 IP 地址以及启动镜像,然后启动镜像被载入并运行。
Linux Kickstart无人值守安装(下)_第2张图片
安装完成后,安装程序会提示你重新启动机器。重新启动机器时切记要在 BIOS 里改成从硬盘启动。如果仍然从光盘启动机器,又会重复前面的自动安装步骤。