pxe介绍: 

    PXE最直接的表现是,在网络环境工作站可以省去硬盘,但又不是通常所说的无盘站的概念,因为使用该技术的pc在网络方式下的运行速度要比有盘PC快3倍以上。当然使用PXE的PC也不是传统意义上的TERMINAL终端,因为使用了PXE的PC并不消耗服务器的CPU,RAM等资源,故服务器的硬件要求极低。


工作原理:


当计算机引导时,BIOS把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行

自动化运维工具之pxe+kickstart_第1张图片

基于PXE自动安装系统所需组件


1) syslinux


    提供适用于不同的操作系统的各种bootloader文件,支持DOSFATfilesystems、Linux ext2/ext3 filesystems(EXTLINUX)、 PXEnetwork boots(PXELINUX)、ISO 9660 CD-ROMs (ISOLINUX);基于网卡引导的bootloader由其提供文件/usr/share/syslinux/pxelinux.0

2) tftp-server服务


   基于UDP文件传输,一般该服务器仅用于PXE预引导加载环境。用于提供预引导加载文件pxelinux.0的读取。

   


3) DHCP服务器

    DHCP动态主机配置协议会在预引导加载操作系统的时候动态自动分配一个IP地址,同时完成网络加载的主机的设定;需要在其地址池subnet配置中配置一下参数:

filename "pxelinux.0";

基于网卡引导时要加载的initial  boot file的文件名;

next-server  HOST;

要是一个tftp-servr,简单文件传输协议


4) file server(FTP, HTTP, NFS)


提供安装镜像文件 


下面搭建一台pxe服务器: 实现centos7.2的安装


准备工作: 关selinux、firewalld、 配置本地源 、隔离网络{   配置一个IP地址(这个网段网络里不能有DHCP分配)}   


1、关selinux和firewalld

[root@node06 ~]# setenforce 0

[root@node06 ~]# getenforce 

Disabled

[root@node06 ~]# 

[root@node06 ~]# systemctl stop firewalld

     配置本地源

[root@node06 ~]#mkdir /backup

[root@node06 ~]#mv /etc/yum.repos.d/C* /backup

[root@node06 ~]#mount /dev/sr0 /mnt

[root@node06 ~]# cat /etc/yum.repos.d/centos.repo

[centos]

name=centos

baseurl=file:///mnt

enabled=1

gpgcheck=0

     配置ip地址

[root@node06 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736 

TYPE=Ethernet

BOOTPROTO=none

PEERDNS=yes

IPADDR=192.168.91.201

PREFIX=24

GATEWAY=192.168.91.1

DNS1=114.114.114.114

NAME=eno16777736

DEVICE=eno16777736

ONBOOT=yes

[root@node06 ~]# 



2、安装软件 


[root@pxe ~]# yum install -y dhcp tftp-server xinetd syslinux vsftpd


3、 通过FTP服务共享centos7u2光盘中所有文件 


[root@pxe ~]# mkdir /var/ftp/centos7u2


[root@pxe ~]# cp -r /mnt/* /var/ftp/centos7u2/ &


[root@pxe ~]# systemctl start vsftpd

[root@pxe ~]# systemctl enable vsftpd

Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

[root@pxe ~]# 

[root@pxe ~]# ss -antp | grep :21

LISTEN     0      32          :::21                      :::*                   users:(("vsftpd",pid=2658,fd=3))


4、配置DHCP服务


[root@pxe ~]# vim /etc/dhcp/dhcpd.conf 


subnet 192.168.87.0 netmask 255.255.255.0 {

  range 192.168.87.10 192.168.87.20;

  next-server 192.168.87.101;

  filename "pxelinux.0";

}


[root@pxe ~]# systemctl start dhcpd

[root@pxe ~]# systemctl enable dhcpd

Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.

[root@pxe ~]# 

[root@pxe ~]# ss -anup | grep :67

UNCONN     0      0            *:67                       *:*                   users:(("dhcpd",pid=2768,fd=8))



5)、配置tftp服务 


[root@pxe tftpboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/


[root@pxe isolinux]# cp /mnt/isolinux/* /var/lib/tftpboot/


[root@pxe tftpboot]# pwd

/var/lib/tftpboot

[root@pxe tftpboot]# mkdir pxelinux.cfg

[root@pxe tftpboot]# cp isolinux.cfg pxelinux.cfg/default


[root@pxe tftpboot]# vim pxelinux.cfg/default 


label linux

  menu label ^Install CentOS7u2

  kernel vmlinuz

  append initrd=initrd.img inst.stage2=ftp://192.168.87.101/centos7u2 inst.repo=ftp://192.168.87.101/centos7u2 



[root@pxe ~]# vim /etc/xinetd.d/tftp 


disable = no



[root@pxe ~]# systemctl restart xinetd

[root@pxe ~]# systemctl enable xinetd

[root@pxe ~]# 

[root@pxe ~]# ss -anup | grep 69

UNCONN     0      0            *:69                       *:*                   users:(("xinetd",pid=3084,fd=5))


部署kickstart文件实现系统的自动安装


Kickstart 安装选项:    包含语言,防火墙,密码,网络,分区的设置等;


%Pre  部分: 安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;


%Package 部分:安装包的选择,可以是 @base  这样的组的形式,也可以是这样 http-* 包的形式;


%Post  部分: 安装后执行的脚本,通常用来做系统的初始化设置。比如启动的服务,相关的设定等。



方法1) anaconda-ks.cfg


方法2) system-config-kickstart 


# yum install -y system-config-kickstart



使用kickstart文件


1、拷贝到ftp根目录共享


2、编辑菜单文件 

[root@pxe tftpboot]# vim pxelinux.cfg/default    -----> 看好红色标记


label linux

  menu label ^Install CentOS7u2

  kernel vmlinuz

  appendinitrd=initrd.imginst.stage2=ftp://192.168.87.101/centos7u2   inst.repo=ftp://192.168.87.101/centos7u2 ks=ftp://192.168.87.101/centos7.cfg




=========================================================

Kickstart参考示例


1) root密码

2) url安装源

3) 安装后脚本


centos7

install

keyboard 'us'

rootpw --iscrypted $1$Pycmorhc$UEfuito8Jp5yabiiDV.6U/

timezone Asia/Shanghai

url --url="ftp://192.168.2.128/centos7u2"

lang en_US

firewall --disabled

selinux --disabled

auth  --useshadow  --passalgo=sha512

text

skipx

network  --bootproto=dhcp --device=eth0

reboot

bootloader  --location=mbr 

zerombr

clearpart --all --initlabel

part /boot --fstype="xfs" --size=1024

part swap --fstype="swap" --size=2048

part / --fstype="xfs" --grow --size=1


%packages

@^minimal

@core

httpd

vim-ehnah*

bash-com*

%end


%post

mkdir /etc/yum.repos.d/bak

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak

wget ftp://192.168.2.128/centos7.repo -P /etc/yum.repos.d

%end