工作原理:

安装过程中无需填写各种参数,生成一个名为ks.cfg的文件;在其后的安装过程中,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装


现在先了解一下安装过程,主要有以下几步;

1、pxe启动,会去寻找dhcp服务器获取ip地址pxelinux.0文件

2、client通过tftp连接到服务器,下载pxelinux.0文件。

3、client下载成功pxelinux.0文件后,系统还会下载控制pxelinux.0的配置文件,叫default。然后client就会按照default的配置来执行pxelinux.0文件。

4、现在client端会在获取一次IP地址。并且根据DHCP服务器配置文件找到kickstart配置

文件并下载。

5、pxelinux.0文件定义的向服务器请求linux内核,根文件系统之类的参数。运行这个文件,client就会向服务器请求相关的文件并下载。

6、文件下载成功后,client就会启动linux内核,这就进入了我们安装时候看见的第一个图形界面,这个界面和自己安装看见的第一个画面一样,回车就是图形安装,输入text就是文本安装那里。如果使用了kickstart,这个界面消失很快,可能看不见。到这里PXE启动就完成了。

7、当按照default要求运行pxelinux.0文件,系统读取内核,挂在根文件系统以后的任务就都交给了kickstart了。包括安装介质来源、语言、时区、分区、安装哪些包等,都是在kickstart文件中定义。只要进入这一步,kickstart配置文件正确,我们的无人值守安装已经成功了


创建kickstart文件的方式:

1、复制模板/root/anaconda-ks.cfg,而后使用vim编辑配置;

2、使用system-config-kickstart来生成,建议也使用/root/anaconda-ks.cfg作为模板来进行;

如果要使用第二种方式就要先安装;yum install -y system-config-kickstart;

执行 system-config-kickstart;

利用Kickstart文件结合dhcp+tftp-server+httpd批量安装linux系统_系统

kickstart文件的组成部分;如下

命令部分,用于配置系统的基本属性;  

install

   firewall

   part

   软件包部分;安装系统所需的程序包或程序包组名(@),每行一个。

               如果程序包名称之前附加了“-”号,则表示不安装;

   %packages开始标识

       @Base

       lftp

       tree

       http

   %end结束结识

   脚本部分;  (这一段不是必须的可要可不要)

       %pre;安装过程开始之前执行的安装预备脚本,所能执行的操作较小,是一个受限的环境,因为其仅有简安装版的shell环境;

       %post;所有的软件安装完成之后执行的脚本,具有完整意义上的shell环境

具体内容如下:

[root@station103 ~]# vim anaconda-ks.cfg
#version=DEVEL
install
#url --url=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
# Reboot after installation
reboot
firewall --disabled
authconfig --useshadow  --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
# 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
part /boot --fstype=ext4 --size=200
part pv.008002 --size=61440
volgroup vg0 --pesize=8192 pv.008002
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
logvol swap --name=swap --vgname=vg0 --size=2048
logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480
#repo --name="Fedora EPEL"  --baseurl=http://172.16.0.1/fedora-epel/6/x86_64/ --cost=1000
@basic-desktop
@chinese-support
@client-mgmt-tools
@core
@desktop-platform
@fonts
@general-desktop
@graphical-admin-tools
@legacy-x
@network-file-system-client
@perl-runtime
@remote-desktop-clients
@x11
ibus-table-cangjie
ibus-table-erbi
ibus-table-wubi
lftp
tree
%end


所需用到的程序包;

   httpd

   tftp-server;

   dhcp

   kickstart

   syslinux

操作环境;虚拟机Centos6.5-64位

安装服务所需的程序包;


[root@localhost ~]# yum install -y dhcp tftp-server httpd syslinux


设置dhcp服务并启动;

[root@localhost ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
subnet 172.16.0.0 netmask 255.255.0.0 {
        range 172.16.34.150 172.16.34.160;   ip地址段
        option routers 172.16.0.1;      网关
        option domain-name "google.com";    域名
        option domain-name-servers 172.16.0.1,8.8.8.8;   域名服务 ip
        next-server 172.16.34.100;   指定tftp服务器
        filename "pxelinux.0";      tftp根目录的相对路径
}
[root@localhost dhcp]# service dhcpd restart     启动服务
Shutting down dhcpd: [  OK  ]
Starting dhcpd: [  OK  ]
[root@localhost dhcp]# ss -unl | grep "67"    查看端口是否启动
UNCONN     0      0                         *:67                       *:*
UNCONN     0      0                        :::46786                   :::*
[root@localhost dhcp]#查看DH


查看dhcp服务器状态信息;

[root@localhost ~]# vim /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.1.1-P1
server-duid "\000\001\000\001\032\255\337\372\000\014)\251\034\252";
lease 172.16.34.150 {
  starts 6 2014/03/08 14:11:36;
  ends 6 2014/03/08 14:21:36;
  cltt 6 2014/03/08 14:11:36;
  binding state active;
  next binding state free;
  hardware ethernet 34:c8:03:b4:62:d8;
  uid "\0014\310\003\264b\330";
  client-hostname "Windows-Phone";


设置tftp-server并测试tftp-servre服务是否成功启用;

[root@localhost ~]# service xinetd restart     启动服务
Stopping xinetd: [  OK  ]
Starting xinetd: [  OK  ]
[root@localhost ~]# ss -unl | grep ":69"
UNCONN     0      0                         *:69                       *:*
UNCONN     0      0                         *:69                       *:*
[root@localhost ~]# chkconfig tftp on
[root@localhost ~]# tftp 172.16.34.100
tftp> get tt
tftp> q
[root@localhost ~]# ll
total 56
-rw-r--r--  1 root root     0 Mar  8 22:32 aa
-rw-------. 1 root root  1614 Mar  7 00:53 anaconda-ks.cfg
-rw-r--r--. 1 root root 34213 Mar  7 00:53 install.log
-rw-r--r--. 1 root root  6926 Mar  7 00:49 install.log.syslog
-rw-r--r--  1 root root    47 Mar  8 22:32 issue
-rw-r--r--  1 root root     0 Mar  8 22:32 tt


准备tftpboot下的文件;

[root@localhost p_w_picpaths]# yum -y install syslinux
[root@localhost p_w_picpaths]# cp /media/p_w_picpaths/pxeboot/vmlinuz /var/lib/tftpboot/
[root@localhost p_w_picpaths]# cp /media/p_w_picpaths/pxeboot/initrd.img /var/lib/tftpboot/
[root@localhost p_w_picpaths]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@localhost p_w_picpaths]# cp /media/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]# cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
[root@localhost ~]# service xinetd restart   重新启动一下服务
[root@localhost ~]# chkconfig tftp on        设为开机自启动


准备httpd服务,服务器通过httpd服务向客户机提供ks.cfg安装文件及安装树;

[root@localhost ~]#cp anaconda-ks.cfg ks.cfg   复制root目录下文件
[root@localhost ~]#vim ks.cfg     对ks,cfg文件进行修改
[root@localhost ~]#mkdir /var/www/html/centos6  创建挂载目录
[root@localhost ~]#mount --bind /media/ /var/www/html/centos6  /media/绑定到centos6目录
[root@localhost ~]#cp ks.cfg /var/www/html/ks.cfg   复制到httpd的根目录下
[root@localhost ~]#ps aux | grep httpd  查看80端口是否启用
[root@localhost ~]#cd /var/www/html    查看文件
[root@localhost html]# ls
centos6 ks.cfg

 ks.cfg里文件如下;

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
text
# Use network installation
url --url="http://172.16.34.100/centos6"
# Root password
rootpw --iscrypted $1$/zp8vkG4$0soThC/3kqCZAlLNuwK0U.
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
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
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --append="crashkernel=auto crashkernel=auto rhgb rhgb rhgb quiet quiet quiet" --location=mbr --driveorder="sda"
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=200
part pv.008002 --size=61440
volgroup vg0 --pesize=8192 pv.008002
logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480
logvol swap --name=swap --vgname=vg0 --size=2048
logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240
logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480
%packages
@base
@chinese-support
@client-mgmt-tools
@core
@fonts
@graphical-admin-tools
@legacy-x
@network-file-system-client
@perl-runtime
@x11
%end


5、新开一台虚拟机测试;

利用Kickstart文件结合dhcp+tftp-server+httpd批量安装linux系统_系统 _02


利用Kickstart文件结合dhcp+tftp-server+httpd批量安装linux系统_系统 _03

安装软件包;

利用Kickstart文件结合dhcp+tftp-server+httpd批量安装linux系统_系统 _04

安装完成后重启;

利用Kickstart文件结合dhcp+tftp-server+httpd批量安装linux系统_系统 _05



本人现还在学习阶段,也是第一次写blog,写的不好及有不对之处,还请各位大佬们多多指出,谢谢。