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