PXE+Kickstart无人值守自动化安装系统

kickstart介绍

作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。

常规的办法有什么?

  • 光盘安装系统===>一个服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数。用USB外置光驱,插来插去也醉了。
  • U盘安装系统===>还是同样的问题,要一台一台服务器插U盘。
  • 网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以装系统了,但还是需要一台台服务器去敲键盘点鼠标。时刻想偷懒的我们,有没有更好的方法!

高逼格的方法:

  • Kickstart
  • Cobbler

这里我就准备一台机器搭建环境是Centos7.2:

1、PXE Client向DHCP发送请求

PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。

2、DHCP服务器提供信息

DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

3、PXE客户端请求下载启动文件

客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

Boot Server响应客户端请求并传送文件

4、当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

5、请求下载自动应答文件

客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件

无人值守自动化scripts

#!/bin/bash
#internet
#安装epel7源和centos7源
 
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo >/dev/null 2>&1
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo >/dev/null 2>&1
 
##########install softwall #############################
 
yum -y install httpd dhcp xinetd tftp-server net-tools syslinux >/dev/null 2>&1
 
####---- 设置ip和网段变量 ----####
 
read -p "Please insert ip address": IPADDR
mask=$(echo $IPADDR| cut -d '.' -f 1-3)
subnet=$(ifconfig |grep "$mask" | awk '{print $4}')
 
#######dhcp配置##########################
cat >/etc/dhcp/dhcpd.conf<<EOF
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
 
#default-lease-time 600;
#max-lease-time 7200;
#log-facility local7;
 
subnet $mask.0 netmask $subnet {
range dynamic-bootp $mask.10 $mask.60;
filename "pxelinux.0";
next-server $IPADDR;
}
EOF
####---- tftpd配置 ----####
 
sed -i 's/disable.*$/disable = no/g' /etc/xinetd.d/tftp
mkdir /var/lib/tftpboot/pxelinux.cfg -p
 
####------------httpd配置----------####
mkdir /var/www/html/centos7
mount /dev/cdrom /var/www/html/centos7
 
####-----------syslinux-----------####
/bin/cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
/bin/cp /var/www/html/centos7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
/bin/cp /var/www/html/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
/bin/cp /var/www/html/centos7/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
 
 
####-----------pxelinux.cfg/default------####
cat >/var/lib/tftpboot/pxelinux.cfg/default<<EOF
default vesamenu.c32
timeout 6
label linux
 menu label ^Install CentOS 7
 kernel vmlinuz
 append initrd=initrd.img inst.ks=http://$IPADDR/centos7_2.cfg quiet
EOF
 
####------------------------------ks.cfg自动应答文件---------------------------------####
 
cat >/var/www/html/centos7_2.cfg<<EOF
#Kickstart Configurator by Jason Zhao
#platform=x86, AMD64, or Intel EM64T
#System language
lang en_US
#System keyboard
keyboard us
#Sytem timezone
timezone Asia/Shanghai
#Root password
rootpw 123456
 
#Use text mode install
text
#Install OS instead of upgrade
install
#Use NFS installation Media
#url --url=$tree
url --url=http://$IPADDR/centos7
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype xfs --size 1024 --ondisk sda
part swap --size 2048 --ondisk sda
part / --fstype xfs --size 4096 --ondisk sda
part /data --fstype xfs --size 1 --grow --ondisk sda
#System authorization infomation
auth --useshadow --enablemd5
#Network information
#network config
network --bootproto=dhcp --device=eth0 --onboot=on
# Reboot after installation
reboot
#Firewall configuration
firewall --disabled
#SELinux configuration
selinux --disabled
#Do not configure XWindows
skipx
 
#Package install information
%packages
@ base
@ core
sysstat
iptraf
ntp
lrzsz
ncurses-devel
openssl-devel
zlib-devel
OpenIPMI-tools
nmap
screen
%end
%post
systemctl disable postfix.service
$yum_config_stanza
%end
EOF
####------------------------------ks.cfg---------------------------------####
####-------------------------- restart service---------------------------####
systemctl restart dhcpd.service
systemctl restart xinetd.service
systemctl restart httpd.service
systemctl stop firewalld.service
setenforce 0

 

posted @ 2017-04-24 14:12  ShenghuiChen  阅读(323)  评论(0编辑  收藏  举报