概述
通过网络启动时会启动dhcp协议,我们需要搭建一个dhcp服务器给需要安装系统的服务器分配IP地址,分配IP的地址的目的为了让需要安装系统的主机连接tftp,连接tftp做什么呢?tftp有镜像和预启动文件,需要安装系统的服务器只有获取到了这两样东西才可以自动安装系统。
所以我们需要安装dhcp服务器,通过dhcp服务器给服务器分配地址,然后还要告诉服务器tftp的地址,让服务器去找tftp服务,下载镜像和预启动文件。
pxe网络启动全自动安装系统的流程介绍:
操作pxe客户端 通过dhcp服务器 获取ip和tftp的地址
pxe客户端 通过tftp服务器 下载预启动文件
运行预启动文件,pxe客户端 去tftp服务器 获取引导文件,引导安装。这边可设置多种安装,例如centos6和centos7的安装
pxe客户端 -> tftp服务器 获取安装需要的vmliuz和initrm.img
内存加载vmliuz和initrd.img,然后去下载安装文件,全自动安装
dchp
yum install net-tools -y
yum install dhcp -y
vim /etc/dhcp/dhcpd.conf
allow booting;
allow bootp;
class "pxeclients"{
match if substring(option vendor-class-identifier,0,9) = "PXEClient";
filename "pxelinux.0";
next-server 192.168.80.20;
}
subnet 192.168.80.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.80.10 192.168.80.15;
option subnet-mask 255.255.255.0;
option routers 192.168.80.2;
option domain-name-servers 223.6.6.6;
option time-offset -18000;
default-lease-time 216000;
max-lease-time 432000;
}
配置说明
allow 允许pxe
next-server tftp服务器的ip信息,可以配置在非dhcp服务器
filename tftp服务器的预启动文件
subnet 配置dhcp服务器的网络信息,192.168.237.0/24
range dynamic-bootp 设置分配的地址范围
subnet-mask 配置分配地址的子网掩码
option routers 配置分配的路由地址,可以直接上网 route -n
option domain-name-servers dns地址设置 cat /etc/resolv.conf
启动dhcpd服务器
systemctl restart dhcpd #启动
systemctl enable dhcpd #开机启动dhcpd
测试dhcp是否安装成功,使用新建的虚拟机启动看一下能否获取到ip
netstat -tulnp|grep dhcp
tftp
安装tftp服务,并且准备好服务器要预拉取的文件:pxelinux.0。
安装tftp服务器
yum install xinetd -y #tftp服务器使用xinetd统一纹理
yum install tftp-server -y
vim /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
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
tftp配置文件解析
disable改为no说明要启动tftp服务器
server_args设置tftp服务器的根目录,pxelinux.0默认会到根目录下查找
启动tftp,然后测试一下tftp能否连接上
systemctl restart xinetd
systemctl enable xinetd
再次尝试连接,发现IP可以获取到,tftp的IP也能获取到,但是tftp里面的预启动文件无法获取!!下面我们就来准备这个预启动文件。
准备预启动文件和引导配置文件
//安装pxelinux.0引导文件,会安装到tftp的根目录下/var/lib/tftpboot/,这个目录与tftp的配置文件对应
yum install syslinux-tftpboot -y
ll -h /var/lib/tftpboot/pxelinux.0
这个预加载文件已经生成好了,这个预加载文件是要被服务器下载到本地去读取的,那里面的内容是什么呢?这个预加载文件里面的内容是去引导服务器去下载“引导配置文件”,这个引导配置文件也是放在tftp上面,这个文件是要我们手工写的 /var/lib/tftpboot/pxelinux.cfg/default
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 300
menu title welcome to shijiange auto install system
label shijiange_install_centos7
menu label zhanghehe install centos7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img inst.ks=http://192.168.80.20/ks7.cfg
label shijiange_rescue
menu label zhanghehe rescue
menu default
kernel centos7/vmlinuz
append initrd=centos7/initrd.img inst.ks=http://192.168.80.20/ks7.cfg rescue
配置说明
timeout 300 超时30s
menu title 供选择时的标题展现
kernel 配置内核
append 配置内存加载的文件
pxe网络启动自动安装系统的流程介绍
测试一下:
引导配置文件我们也已经创建完成了,第一条就是安装,第二条是救援模式,默认如果30秒不操作就会进入到救援模式,为什么会这样,这是我们故意设置的,因为如果30秒内无人操作自动安装的话危险太大,因为安装的时候就会格式化硬盘!!!
我们要进行下一步了,下一步就是根据上图这个引导配置文件 获取安装需要的vmliuz(linux内核)和initrm.img文件
准备vmlinuz和initrm.img
这两个文件在哪里有呢?在镜像文件里面就有,我们要下载一个最小化的centos镜像,上传到/usr/local/src
目录里面,然后将镜像挂载到 /var/www/html/centos7
目录上。
mkdir -pv /var/www/html/centos7
mount /usr/local/src/CentOS-7-x86_64-Minimal-1908.iso /var/www/html/centos7/
[root@dhcp centos7]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
拷贝内核文件到tftp的根目录
mkdir -pv /var/lib/tftpboot/centos7/
cd /var/www/html/centos7/isolinux
cp vmlinuz initrd.img /var/lib/tftpboot/centos7/
//测试一下能否正常加载vmliux和initrd.img
这两个安装的时候要使用的文件都准备好了,下面我们来测试一下,效果如下图:
上图是加载完linuz和initrd.img之后的报错,提示找不到http://192.168.80.20/ks7.cfg,这个文件是干啥的呢?这个文件就是安装系统的时候要选择各种项目的内容,这个文件也要我们手工进行配置的,要通过http协议,我们通过nginx进行实现。
准备ks7配置文件
nginx配置,root配置要参考centos7的mount位置
location / {
root /var/www/html/;
index index.html index.htm;
autoindex on;
}
vim /var/www/html/ks7.cfg
firewall --disabled
install
rootpw zhanghe
auth --useshadow --passalgo=sha512
#graphical
text
firstboot --disable
keyboard us
lang en_US
selinux --disabled
logging --level=debug
zerombr
reboot
timezone Asia/Shanghai
network --bootproto=dhcp --device=eth0 --onboot=on --noipv6
bootloader --location=mbr
clearpart --all --initlabel
part / --asprimary --fstype="ext4" --size=5000
part /boot --fstype="ext4" --size=200
part /data --fstype="ext4" --grow --size=1
url --url http://192.168.80.20/centos7
%packages
%end
%post
/usr/bin/echo "run post script"
/usr/bin/echo "zhanghe" >/tmp/zhanghe
/usr/bin/yum install -y net-tools
%end
配置说明,把之前手动安装改成自动安装,需要配置
install 全新安装
text 文本安装
firstboot --disable 不设置代理
keyboard 键盘总局英文
lang en_US 语言选择英文
zerombr 清除mbr分区
reboot 安装完毕后重启
clearpart 清除分区,磁盘有数据需要小心,默认选项一定不能放安装的这里
part 设置分区 --size指定分区大小,--grow指定使用剩余所有空间
url 指定包的位置
%packages和%end中间放安装包,最小化安装不用配置
%post和%end中间放安装后的自定义代码,用来做一些初始化