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中设置的选项来安装系统。

 

工作流程图:

kickstart自动部署centos_第1张图片

 

实验


配置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的过程


查看客户端开机引导界面,查看报错

wKioL1jlC5HAOQNsAAAEa62-afM179.png

#客户机已经获取到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   FD  TYPE DEVICE SIZE/OFF NODE NAME

xinetd  5171 root    5u IPv4  61272      0t0 UDP *:tftp  #UDP69端口在监听,说明tftp服务正常运行

[root@kickstartserver ~]# vi /etc/dhcp/dhcpd.conf

  next-server192.168.23.134;      #tftp服务器的地址

  filename"pxelinux.0";           #引导文件名称

[root@kickstartserver ~]# systemctl restart dhcpd

[root@kickstartserver ~]# setenforce 0

[root@kickstartserver ~]# firewall-cmd --permanent --add-service=tftp

success

[root@kickstartserver ~]# firewall-cmd --reload

 

把引导文件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

 

查看客户端开机引导界面,查看报错

wKioL1jlC8mxCRI9AAAFWZ0thGk870.png

#客户机已经成功引导,但是没有获取到配置文件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

 

查看客户端开机引导界面,查看报错

wKiom1jlC-uCbfdoAAAG8p_81qw156.png

#系统已经找到配置文件,但是找不到窗口模块,把窗口模块放置在tftp默认目录下

[root@kickstartserver~]# cp /mnt/isolinux/vesamenu.c32   /var/lib/tftpboot/

 

kickstart自动部署centos_第2张图片

#系统已经成功引导,也找到了配置文件和窗口模块,但是并没有找到内核vmlinuz,所在在此处选择第一项,无法进入,把内核拷贝到tftp默认目录

[root@kickstartserver~]# cp /mnt/p_w_picpaths/pxeboot/vmlinuz /var/lib/tftpboot/



kickstart自动部署centos_第3张图片

#启动客户机,报找不到驱动文件

[root@kickstartserver~]# cp /mnt/p_w_picpaths/pxeboot/initrd.img /var/lib/tftpboot/




kickstart自动部署centos_第4张图片

#找不到安装源


 

配置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

success

[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

 

生成ks.cfg文件

[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

label linux

  menu label ^Install CentOS 7

  kernel vmlinuz

  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

 

 

开启客户端,这时候便会开始自动安装

kickstart自动部署centos_第5张图片


 

如有纰漏,欢迎指正。