PXE的概念:
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于C/S的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动的过程中,终端要求服务器分配IP地址,再用TFTP或者MTFTP协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件的设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC),即网卡中必须要有PXE Client。PXE协议可以通使计算机通过网络启动。此协议分为Client端和Server端,而PXE Client则在网卡的ROM中。当计算机引导时,BIOS把PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器会给PXE Client分配一个IP地址,由于是给PXE Client分配IP地址,所以在配置DHCP服务器时需要增加相应的PXE设置。此外,在PXE Client的ROM中,已经存在了TFTP Client,那么它就可以通过TFTP协议到TFTP Server上下载所需要的文件了。
PXE的工作流程:
1、PXE Client从自己的PXE网卡启动,向本网络的DHCP服务器索取IP;
2、DHCP服务器返回分配给客户端IP以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上。)
3、PXE Client向本网络中的TFTP服务器索取pxelinux.0文件。
4、PXE Client取得pxelinux.0文件后执行该文件。
5、根据pxelinux.0的执行结果,通过TFTP服务器加载内核和文件系统。
6、进入安装画面,此时可以通过选择HTTP、FTP和NFS方式之一进行安装。
什么是Kickstart
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg文件。如果在安装的过程中出现要填写的数据的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取得ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序就根据ks.cfg的设置重启系统,并结束安装。
PXE+Kickstart无人值守安装操作系统完整过程如下:
PXE Client 开机启动->DHCP(pxelinux.0; next-server: tftp-server)
TFTP:
syslinux: 引导linux启动的安装程序
vmlinuz:内核的启动镜像
initrd.img:加载系统时的驱动程序
ks.cfg: kickstart配置文件
系统环境:
1、关闭防火墙和SELinux:
systemctl stop firewalld
systemctl disable firewalld
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
2、环境准备:
需要配置双网卡,一个作用是dhcp,一个使用网络源安装环境包。
dhcp自动分配IP的网卡得是net1仅主机模式。
然后我们检查网卡信息:
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens36
[root@vm1 network-scripts]# cat ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.182.100
NETMASK=255.255.255.0
DNS1=114.114.114.114
说明:
1)特别要注意的一点是不要配置GATEWAY,网络配置文件,在一台服务器上只能有一个网络接口的配置文件有GATEWAY,如果有多个,网络就无法访问外网。
2)UUID要删除,不然相同的UUID会发生冲突;
3)当然,配置文件中的NAME和DEVICE的名称都是要进行修改的。
在改之前,我们需要查看一下net1网卡得网段。
说明:“在使用本地DHCP服务器IP地址分配给虚拟机”这项不要勾选。
配置完后,重新启动网卡。
systemctl restart network
3、安装和配置DHCP服务器:
yum install -y dhcp
然后进入到主配置文件:
cat /etc/dhcp/dhcpd.conf
根据文件里的信息,我们可以复制一个模板文件。
cp -p /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcp.conf
-p: 连带文件属性一起拷贝
然后我们编辑dhcpd.conf主配置文件。
说明:禁止动态更新。
说明:
range:地址池
option routers:网关
dns:dns地址
next-server: 指定tftp服务器地址
filename:指定pxe引导程序的文件名
配置完毕,重新启动dhcp服务,并设置开机自启动。
systemctl start dhcp
systemctl enable dhcp
另外,我们也可以参考下这段配置:
4、安装和配置TFTP服务程序:
tftp是一个小而且容易实现的文件传输协议,tftp是基于UDP数据报,需要有自己的差错纠正机制。
tftp只支持文件传输,不支持交互,没有庞大的命令集。安全性低,不支持身份验证。
yum install -y tftp-server xinetd
tftp的运行和关闭是由xinet网络守护进程服务来管理的。xinet服务程序会同时监听系统的多个端口,然后根据用户请求的端口号调取相应的服务程序来相应用户的请求。
vim /etc/xinetd.d/tftp
说明:需要将disable的yes改成no。表示开启tftp服务。
另外,我们也要注意下目录:/var/lib/tftpboot。指定tftp的根目录(引导文件的存储路径)-c是允许上传。
然后是挂载镜像文件:
[root@vm1 mnt]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@vm1 mnt]#
[root@vm1 mnt]#
[root@vm1 mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 9.7M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda5 16G 4.9G 11G 32% /
/dev/sda2 497M 254M 243M 52% /boot
tmpfs 182M 0 182M 0% /run/user/0
/dev/sr0 973M 973M 0 100% /mnt
[root@vm1 mnt]#
然后进入到内核文件,将内核初始化镜像文件复制到/var/lib/tftpboot
cd /mnt/images/pxeboot
cp initrd.img vmlinuz /var/lib/tftpboot # 复制内核初始化文件
vmlinuz:是可引导的,压缩的内核
initrd.img : 系统初始化文件
systemctl restart xinetd
systemctl enable xinetd
systemctl start tftp
systemctl enable tftp
以上就是为了将镜像中的内核文件+系统的初始化文件,丢到tftp的默认共享目录中,以便客户端来下载使用。
准备PXE引导镜像文件pxelinux.0
SYSLinux是一个用于 提供引导加载的服务程序。不如说它是一个包含了很多引导文件的文件夹。
yum install -y syslinux
yum provides /pxelinux.0
yum install -y syslinux
rpm -ql syslinux | grep pxelinux.0
查找pxe引导程序的位置。
然后拷贝系统引导文件pxelinux.0到tftp的根目录下面。
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
注,只有安装了syslinux软件包,才会有/usr/share/syslinux/目录及目录中的文
然后在tftp服务程序的目录中新建pxelinux.cfg目录。虽然这个目录的名字带有后缀,但是依然是个目录,不是文件。将系统光盘中的开机选项菜单复制到该目中,并命名为default。这个default文件就是开机时的选项菜单。
mkdir pexlinux.cfg
cp /mnt/isolinux/isolinux.cfg pxelinux.cfg/default
然后我们编辑这个default文件:
说明:只要修改者两个地方。
1)default linux是选择下面label linux的这个位置。
2)prompt 0,表示没有不等待用户控制,1表示等待用户控制,设置是否等待用户选择。如果按回车则选择linux模式。
安装ftp服务,准备centos安装源:
yum install -y vsftpd
mount /dev/cdrom /mnt
cp -r /mnt/* /var/ftp
然后再开启ftp服务:
systemctl start vsftpd
systemctl enable vsftpd
下面是配置kickstart无人值守安装:
yum install -y system-config-kickstart
然后打开这个软件:
我这边也没使用这个工具来生成ks.cfg文件。
我是直接从网上找到一个centos7最小化安装的ks.cfg文件。
内容如下:
[root@vm1 pub]# cat ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --plaintext 123456
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="ftp://192.168.182.100"
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part biosboot --fstype="biosboot" --ondisk=sda --size=2
part swap --fstype="swap" --ondisk=sda --size=4096
part /boot --fstype="xfs" --ondisk=sda --size=500
part / --fstype="xfs" --ondisk=sda --size=15880
%packages
@^minimal
@core
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
注意这个文件是放到/var/ftp/pub中。
然后我们再看下这个default文件里的内容:
那我们知道这个pub路径的由来了吧。
那到这里就配置完成了。
然后我们在vmware中新创建一台机器,然后就可以实现自动安装。
操作步骤,可以参考《linuxprobe.pdf》这本书。
我们看到其中的IP是182.151。确实是地址池中的一个IP地址。
另外,这台机器还不能上网。因为我们使用的是仅主机模式。
我们可以试着解决下上网的问题。
另外,我们还可以在ks.cfg文件中增加一些需要预先安装软件的事情,另外还有解决ssh的问题。
这些都可以解决的。
我们还要注意ks.cfg等文件的权限。切记!