为什么需要PXE+DHCP+TFTP+KS实现无人值守批量装机?
一台两台服务器,你拿光盘去装是可以应付的。那么有100台服务器需要装机的时候,你也拿光盘去装吗?显然是不现实的,因此PXE+DHCP+TFTP+KS实现无人值守批量装机就可以满足多台服务器需要装机的需求。
PXE+DHCP+TFTP+KS组件:
PXE(preboot execute environment):预启动执行环境,可以利用此技术通过网络启动操作系统。
DHCP(Dynamic Host Configuration Protocol):动态主机配置协议,可以利用此技术给局域网内的用户分配IP地址、子网掩码、网关等网络相关的配置信息。端口号 UDP:67
TFTP(Trivial File Transfer Protocol):简单文件传输协议,通常在局域网内传输文件大小比较小的文件。端口号 UDP:69
KS (kickstart):anaconda的配置文件,anaconda能够利用此配置文件实现操作系统自动化安装。
PS:anaconda是centos系列系统的操作系统安装程序。
centos系列光盘安装的安装过程:
步骤:
1、CPU会根据BIOS中的boot sequence寻找启动设备。(用光盘安装时,要保证boot sequence中光盘在引导次序的最前面)。
2、CPU会执行找到的光盘中的的MBR中的Bootloader,之后Bootloader会把用于执行系统安装的内核和initrd.img文件调入内存解压并执行。
3、内核会启动当前光盘上的anaconda安装程序。根据软件的提示,用户手动输入安装参数(若此时光盘中有用户定义好的ks.cfg文件,并把ks文件路径传递内核,即可以实现光盘自动化安装)。
centos系列pxe网络安装的安装过程:
在实现网络安装的这种方式时,要确保网卡支持PXE功能,且此网卡中有一段程序能够让CPU执行。此类型的网卡在可以在没有操作系统的情况下从DHCP服务器请求IP地址等信息,并配置在网卡上。这种网卡还具有TFTP功能,可以到TFTP服务器上请求文件。
步骤:
1、CPU会根据BIOS中的boot sequence寻找启动设备。(用网络安装时,要保证boot sequence中网卡在引导次序的最前面)
2、CPU执行找到的网卡中的程序,此程序会让网卡发送请求向DHCP服务请求IP地址。(此类型的DHCP服务器的配置文件中会有next-server和filename两个指令来指明TFTP服务器的IP地址和要从TFTP服务器上下载的文件)
3、网卡中的程序首先会下载TFTP服务器中的pxelinux.0文件(此文件由系统光盘上的syslinux软件包提供),接着会下载TFTP服务器中的vesamenu.c32、splash.jpg、default文件来给用户提供一个启动选择界面。界面如下:
4、选择第一项之后,网卡中的程序会根据选择下载TFTP服务器中的vmlinuz(内核文件)和initrd.img(虚拟根文件系统)到内存中解压并执行。之后内核会根据传给ks.cfg文件url路径从服务器中下载ks.cfg文件,而后内核会根据ks.cfg指定的url路径从服务器中下载anaconda程序让CPU执行。最后运行的anaconda程序会读取ks.cfg文件中指定的配置完成自动化安装。
PXE+DHCP+TFTP+KS无人值守批量装机具体实现步骤:
配置前准备 :
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE="eth0" BOOTPROTO="static" IPV6INIT="no" MTU="1500" NM_CONTROLLED="no" ONBOOT="yes" TYPE="Ethernet" IPADDR="172.16.0.1" NETMASK="255.255.0.0" [root@localhost ~]# service network restart # 给服务器配置静态IP地址
PS:若用yum安装软件时,先要配置好yum源
1、安装配置tftp-server
[root@localhost ~]# yum -y install tftp-server # 安装tftp-server程序的时候会装一个xinetd程序,xinetd服务是管理tftp-server等服务的超级守护进程,其管理的服务通常称之为瞬时守护进程。 [root@localhost ~]# rpm -ql tftp-server /etc/xinetd.d/tftp /usr/sbin/in.tftpd /usr/share/doc/tftp-server-0.49 /usr/share/doc/tftp-server-0.49/CHANGES /usr/share/doc/tftp-server-0.49/README /usr/share/doc/tftp-server-0.49/README.security /usr/share/doc/tftp-server-0.49/README.security.tftpboot /usr/share/man/man8/in.tftpd.8.gz /usr/share/man/man8/tftpd.8.gz /var/lib/tftpboot # 此目录是tftp服务的根目录 # 查看tftp-server程序安装后生成的文件 [root@localhost ~]# chkconfig tftp on [root@localhost ~]# chkconfig --list tftp tftp 启用 # 配置tftp服务开机启动 [root@localhost ~]# service xinetd start 正在启动 xinetd: [确定] [root@localhost ~]# ss -unlp | grep 69 UNCONN 0 0 *:69 *:* users:(("xinetd",4315,5)) # 查看tftp服务的69号端口是否开启 [root@localhost ~]# yum install syslinux # pxe安装所需的pxelinux.0文件在此程序安装的/usr/share/syslinux/pxelinux.0 [root@localhost ~]# cp /cdrom/isolinux/{vesamenu.c32,vmlinuz,initrd.img,splash.jpg} /var/lib/tftpboot/ [root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@localhost ~]# cp /cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # 复制pxe网络安装系统时需要的文件
2、安装配置dhcp服务
[root@localhost tftpboot]# yum -y install dhcp [root@localhost tftpboot]# rpm -q dhcp dhcp-4.1.1-38.P1.el6.centos.x86_64 [root@localhost tftpboot]# vim /etc/dhcp/dhcpd.conf option domain-name "cyccn.net"; option domain-name-servers 202.106.46.151; default-lease-time 600; max-lease-time 86400; subnet 172.16.0.0 netmask 255.255.0.0 { range 172.16.0.100 172.16.0.200; next-server 172.16.0.1; filename "pxelinux.0"; } # 配置文件中输入以上内容 [root@localhost tftpboot]# service dhcpd start [root@localhost tftpboot]# ss -unlp | grep 67 UNCONN 0 0 *:67 *:* users:(("dhcpd",4470,7)) # 验证dhcp服务是否启动 [root@localhost tftpboot]# service iptables stop # 确保iptables处于关闭状态 [root@localhost tftpboot]# setenforce 0 setenforce: SELinux is disabled # 确保selinux处于关闭状态
3、配置http的yum源
[root@localhost ~]# yum install httpd [root@localhost ~]# service httpd start 正在启动 httpd: [确定] [root@localhost ~]# ss -ntlp | grep 80 LISTEN 0 128 :::80 :::* users:(("httpd",28969,4),("httpd",28972,4),("httpd",28973,4),("httpd",28974,4),("httpd",28975,4),("httpd",28976,4),("httpd",28977,4),("httpd",28978,4),("httpd",28979,4)) # 确认httpd服务的80端口是否开启 [root@localhost ~]# mkdir /var/www/html/centos6 [root@localhost ~]# mount /dev/cdrom /var/www/html/centos6 # /var/www/html/目录是rpm安装httpd的默认网页文档目录 [root@localhost ~]# mv /etc/yum.repos.d/* ~/
4、创建anaconda软件的ks.cfg配置文件
[root@localhost ~]# vim /var/www/html/ks.cfg #platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="http://172.16.0.1/centos6" # Root password rootpw --iscrypted $1$ZRZM7Xhy$CuOUIwUmj9eUcXr9bn.Sw1 # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text firstboot --disable # System keyboard keyboard us # System language lang zh_CN # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Africa/Abidjan # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype="ext4" --size=200 part swap --fstype="swap" --size=2048 part / --fstype="ext4" --grow --size=1 %packages @chinese-support %end # 在ks.cfg配置文件中输入以上内容
5、通过/var/lib/tftpboot/pxelinux.cfg/default文件传给内核anaconda程序的配置文件url路径
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=http://172.16.0.1/ks.cfg
# 在default文件中label为linux中指令为append的后面添加ks=http://172.16.0.1参数
6、配置pxe客户端从网卡启动(我这以vmware workstation虚拟机为例)
调整测试机的网卡和pxe服务器的网卡在同一个虚拟交换机上
开机启动时按F2进入 BIOS配置界面,把boot中的Network boot调到最前面
调整完成后按F10,选择yes保存并退出BIOS,而后系统会自动重启。
重启后,如果一切正常会出现以下界面:
选择第一项,pxe客户端则会自动进行系统安装。根据ks文件中的定义,安装完成后会重启系统。
下图是系统安装是软件包的安装过程