kickstart自动部署centos
工作中,我们有时候需要安装几十上百台服务器,这种情况下用u盘或者光驱逐台安装,太花时间与人力,显然不现实,所以应该选择自动化部署操作系统的方式,自动化部署操作系统的工具有很多,这里我用的是kickstart这个工具。
kickstart原理:
kickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
kickstart工作流程:
客户机先从网络上启动,执行pxe程序(PXE的作用就像是在网卡ROM里的一个小小的操作系统,它把自己的网络引导功能提供给系统的BIOS,就可以通过网络启动linux),再向dhcp服务器请求IP地址,获得到dhcp服务器发来的IP地址之后会请求引导文件(pxelinux.0),服务器发送引导文件;客户机引导成功之后,再向服务器请求配置文件(pxelinux.cfg),服务器发送配置文件,再请求内核文件(vmlinuz),发送内核文件,请求传送根文件系统(initrd.img),然后内核启动,请求ks文件,安装程序会根据ks.cfg中设置的选项来安装系统。
工作流程图:
实验
配置dhcp服务
[root@kickstartserver ~]# yum -y install dhcp
[root@kickstartserver ~]# vi /etc/dhcp/dhcpd.conf
subnet 192.168.23.0 netmask 255.255.255.0
{
range 192.168.23.230 192.168.23.250;
option broadcast-address 192.168.23.255;
option routers 192.168.23.254;
default-lease-time 3600;
max-lease-time 7200;
}
[root@kickstartserver ~]# systemctl restart dhcpd
[root@kickstartserver ~]# systemctl enable dhcpd
[root@kickstartserver ~]# firewall-cmd --permanent --add-service=dhcp
success
[root@kickstartserver ~]# firewall-cmd --reload
进入客户端BISO,设置从网络引导,然后开机,查看dhcp服务的日志
[root@kickstartserver ~]# systemctl status dhcpd -l
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded(/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
Active: active (running) sinceMon 2017-4-05 23:01:23 EDT; 2min 22s ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 4361 (dhcpd)
Status: "Dispatchingpackets..."
CGroup:/system.slice/dhcpd.service
└─4361 /usr/sbin/dhcpd -f -cf/etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
Apr 05 23:01:23 kickstartserver.example.com dhcpd[4361]: Sendingon Socket/fallback/fallback-net
Apr 05 23:01:23 kickstartserver.example.com systemd[1]: Started DHCPv4Server Daemon.
Apr 05 23:03:23 kickstartserver.example.com dhcpd[4361]: DHCPDISCOVERfrom 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:24 kickstartserver.example.com dhcpd[4361]: DHCPOFFER on192.168.23.230 to 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:25 kickstartserver.example.com dhcpd[4361]: DHCPDISCOVERfrom 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:25 kickstartserver.example.com dhcpd[4361]: DHCPOFFER on192.168.23.230 to 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:29 kickstartserver.example.com dhcpd[4361]: DHCPDISCOVERfrom 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:29 kickstartserver.example.com dhcpd[4361]: DHCPOFFER on192.168.23.230 to 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:37 kickstartserver.example.com dhcpd[4361]: DHCPDISCOVERfrom 00:0c:29:83:db:a3 via eno16777736
Apr 05 23:03:37 kickstartserver.example.com dhcpd[4361]: DHCPOFFER on192.168.23.230 to 00:0c:29:83:db:a3 via eno16777736
#可以看到客户机从服务端申请IP的过程
查看客户端开机引导界面,查看报错
#客户机已经获取到IP地址,但是没有获取到引导文件pxelinux.0,为了让客户机获取到这个文件,需要搭建tftp服务,并且要修改dhcp服务器的配置文件,在dhcp服务的配置文件中指定tftp服务器的地址和引导文件名称
ps:由于pxe的限制性,只能把引导文件放在tftp上
[root@kickstartserver ~]# yum -y install tftp-server
[root@kickstartserver ~]# vi /etc/xinetd.d/tftp
service tftp
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot #tftp服务的默认目录
disable = no #yes改成no
per_source = 11
cps = 100 2
flags = IPv4
[root@kickstartserver ~]# yum -y install xinetd
[root@kickstartserver ~]# systemctl restart xinetd
[root@kickstartserver ~]# lsof -i:69
COMMAND PID USER FDTYPE DEVICE SIZE/OFF NODE NAME
xinetd 5171 root 5uIPv4 61272 0t0UDP *:tftp #UDP69端口在监听,说明tftp服务正常运行
next-server192.168.23.134; #tftp服务器的地址
[root@kickstartserver ~]# setenforce 0
[root@kickstartserver ~]# firewall-cmd --permanent --add-service=tftp
把引导文件pxelinux.0放置在tftp默认目录
[root@kickstartserver ~]# yum -y install syslinux
ps:syslinux是一个功能强大的引导加载程序
[root@kickstartserver ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@kickstartserver ~]# systemctl restart xinetd
查看客户端开机引导界面,查看报错
#客户机已经成功引导,但是没有获取到配置文件isolinux.cfg(用来指定内核文件在哪里),把isolinux.cfg文件放在/var/lib/tftpboot/pxelinux.cfg目录下并命名为default
[root@kickstartserver~]#mount /dev/sr0 /mnt
[root@kickstartserver~]#mkdir /var/lib/tftpboot/pxelinux.cfg
[root@kickstartserver~]#cp/mnt/isolinux/isolinux.cfg/var/lib/tftpboot/pxelinux.cfg/default
[root@kickstartserver~]# systemctl restart xinetd.service
查看客户端开机引导界面,查看报错
#系统已经找到配置文件,但是找不到窗口模块,把窗口模块放置在tftp默认目录下
[root@kickstartserver~]# cp /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/
#系统已经成功引导,也找到了配置文件和窗口模块,但是并没有找到内核vmlinuz,所在在此处选择第一项,无法进入,把内核拷贝到[root@kickstartserver~]# cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/
#启动客户机,报找不到驱动文件
[root@kickstartserver~]#cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/
#找不到安装源
ftp服务,用ftp服务来搭建安装源
[root@kickstartserver~]# yum -y install *ftp*
[root@kickstartserver~]# systemctl enable vsftpd
[root@kickstartserver~]# systemctl restart vsftpd
[root@kickstartserver~]# firewall-cmd --permanent --add-service=ftp
[root@kickstartserver~]# firewall-cmd --reload
[root@kickstartserver~]# mkdir /var/ftp/pub/iso
[root@kickstartserver~]# umount /mnt
[root@kickstartserver~]#mount /dev/sr0 /var/ftp/pub/iso
[root@kickstartserver~]# vi /var/lib/tftpboot/pxelinux.cfg/default
label linux
menu label ^Install CentOS 7
kernel vmlinuz
append initrd=initrd.imginst.stage2=ftp://192.168.23.134/pub/iso quiet
[root@kickstartserver~]#yum -y install *kickstart*
[root@kickstartserver~]#system-config-kickstart #需要图形化界面的支持,用图形化界面生成ks.cfg文件,很简单,这里略过。
[root@kickstartserver~]#cp ks.cfg /var/ftp/pub/
[root@kickstartserver~]#vi /var/lib/tftpboot/pxelinux.cfg/default
append initrd=initrd.imginst.stage2=ftp://192.168.23.134/pub/iso quiet ks=ftp://192.168.23.134/pub/ks.cfg
[root@kickstartserver~]systemctl restart xinetd.service
[root@kickstartserver~]systemctl restart vsftpd.service
开启客户端,这时候便会开始自动安装
如有纰漏,欢迎指正。