基于PXE实现网络自动化安装LInux系统

What(能实现什么)

    在工作的当中,作为运维人员如果要管理几十台或者上百台机器时,我们一定会用上自动化运维的思维。例如:boss限制我们一天内上线30台服务器。那我们不可能一台台去安装的,如果通过光驱或U盘的方式一个个安装,不仅效率低,也不利于维护,这是时候你就需要PXE的强大功能了。

Why(原理是什么)

操作系统安装流程

    硬盘安装的流程:bios启动——MBR寻找grub——grub程序读取menu.list等配置文件,找到内核启动镜像和相关初始化程序,安装(或者启动)。
    PXE(Pre-boot Execution Environment)是由Intel设计,可以使计算机通过网络启动的协议。基于C/S架构,PXE协议中的client在写入到网卡ROM中,当系统加电时:BIOS启动——系统把网卡中内置的PXE client中的程序调入内存中,显示内置的命令菜单。选择网络启动后程序开始寻找网络引导程序(boot loader 文件,这个文件的名字随着发行版的不同而不同,在centos中,它是pxelinux.0)——然后引导程序读取配置文件pxelinux.cfg(安装系统菜单),获得系统初始化的相关文件信息,系统启动开始安装。

PXE自动安装内部工作流程

    现在的网卡一般都会支持PXE协议和tftp和dhcp协议,并在出厂时内置在ROM当中,不用手动写入;
在这里插入图片描述

  • Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client;
  • Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回同意大小信息之后,正式向Client发送pxelinux.0;
  • Client执行接收到的pxelinux.0文件;
  • Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作;
  • Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client;
  • Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统;
  • Client启动Linux内核;
  • Client下载安装源文件,读取自动化安装脚本;

How(怎样做)

我把dhcp、tftp和http服务器都集中了一台Centos 8系统,当然生产环境也可以分开存在,最后就是指定地址的问题;
安装前准备:关闭防火墙和SELINUX,DHCP服务器设置为静态IP本机的IP为192.168.8.8;

1.安装相关的软件程序

[root@centos8 ~]#yum install httpd tftp-server dhcp syslinux-nonlinux  system-config-kickstart httpd  -y 

#tftp服务 用来存储系统引导文件放置到tftp的根本目录下/var/lib/tftpboot;
#dhcp服务 用来给客机分发IP地址,和提供系统引导文件名及下载路径;
#httpd服务 用来存放系统安装的仓库包;
#syslinux-nonlinux 软件 存放系统引导文件和系统选项启动菜单(基于字符界面);
#system-config-kickstart 用来生成系统应答文件;
#Centos 8的 system-config-kickstart可能无法安装,可以参考/root/anaconda-ks.cfg文件修改;

2.dhcp.http,tftp加入开机启动;

[root@centos8 ~]#systemctl  enable --now  tftp-socket
[root@centos8 ~]#systemctl  enable --now  httpd
[root@centos8 ~]#systemctl  enable --now  dhcpd

dhcp默认是无法启用的,报错的信息就是dhcp服务,没有为本地提供服务的网段,因为刚安装的dhcp的配置文件默认是空的,需要重新配置;

[root@centos8 ~]#systemctl  enable --now  httpd
#省略.....
Nov 14 13:19:47 centos 7.localdomain dhcpd[5247]: Not configured to listen on any interfaces!

3.配置系统安装包下载路径和生成系统应答文件;

[root@centos8 ~]#mkdir /var/www/html/centos/{6,7,8}/isos/x86_64 -p #此文件是参照阿里云目录,可以自定义;

我在VM上操作的,添加了三个光驱,这时把对应的系统光盘挂载到对应的3个目录,例如:我插入Centos7的光盘,识别为/dev/sr0;

[root@centos8 ~]#mount  /dev/sr0  /var/www/html/centos/7/isos/x86_64 
[root@centos8 ~]#mkdir /var/www/html/ksdir #用来存放应答文件;

制作系统应答文件(以安装CentOS7为例)

[root@centos8 ~]#vim /var/www/html/ksdir/ks7.cfg #对应Centos7系统

#version=DEVEL
# System authorization information
install #新装系统
text #以text字符界面安装
auth --enableshadow --passalgo=sha512 #认证加密方式
url --url=http://192.168.8.8/centos/7/isos/x86_64/ #指定系统安装包存放路径,就是http服务器上存放;
selinux --disabled #关闭selinux
firewall --disabled #关闭防火墙
reboot #安装完成后重启
keyboard  'us' #指定键盘布局
lang en_US.UTF-8 #指定系统安装语言
network  --bootproto=dhcp --device=eth0  --onboot=on --ipv6=auto # 指定本地网卡配置模式
network  --hostname=CentOS7.localdomain #指定主机名 
rootpw --iscrypted  $1$zFgkn3Ku$YrI2DryWi0w2aZaPo2kNr1
#以md5加密方式加密的root账户的密码,此处密码为root;
services --enabled="chronyd" #开启chronyd同步服务
# System timezone
timezone Asia/Shanghai --isUtc --nontp  #设置默认时区
bootloader --location=mbr  # 设定引导记录的位置
zerombr #清除mbr信息,会同时清空系统用原有分区表
# Partition clearing information
clearpart --all --initlabel  #--all 擦除系统上原有所有分区,--initlabel 初始化磁盘卷标为系统架构的默认卷标
# Disk partitioning information
part swap --fstype="swap" --size=2048  #--outdisk设定该分区创建在一个具体的磁盘上
part /boot --fstype="xfs" --size=1024	 #分区形式
part / --fstype="xfs"  --size=102400	 #分区形式
part /data --fstype="xfs"  --size=10240	 #分区形式
%packages #指定安装那一些软件包;
@core
kexec-tools
autofs #加上@是安装包组,不加@是安装程序;
%end
%post #这里可以写系统安装后执行的命令,用来初始化系统
usradd 123 #新建123用户;
%end

文件修改后可以用ksvalidatora工具检查是否存在语法错误,此工具是在system-config-kickstart软件包当中;

[root@centos 7 ~]# vim ks7.cfg
[root@centos 7 ~]# ksvalidator ks7.cfg 
[root@centos 7 ~]# echo $?
0

4.准备系统引导文件

cp  /var/www/html/centos/7/isos/x86_64/{ldlinux.c32 libcom32.c32 libutil.c32}   /var/lib/tftpboot -p
cp  /var/www/html/centos/7/isos/x86_64/isolinux/{initrd.img vmlinuz} /var/lib/tftpboot/7 -p
cp	/usr/share/syslinux/{menu.c32 pxelinux.0} /var/lib/tftpboot -p 
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /var/www/html/centos/7/isos/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default -p

文件说明:
1.ldlinux.c32、 libcom32.c32、libutil.c32三个文件是安装Centos 8系统必须的文件,CentOS 6和7则不用;
2.initrd.img vmlinuz:系统安装时的引导文件及内核;
3.menu.c32 pxelinux.0:系统选项菜单及启动时的引导文件;
3.pxelinux.cfg : 生成系统选项的菜单;

5.修系统加载的菜单文件

[root@centos8 ~]#vim /var/lib/tftpboot/pxelinux.cfg/default
  1 default menu.c32  #指定启动菜单的样式;
  2 timeout 600 #超时时长,以10分之一秒为单位,如果不选择倒数结束后直接执行默认操作;
  3 
  4 menu title CentOS #安装菜单抬头
  5 
  6 label CentOS 6  #菜单标签
  7   menu label Install CentOS ^6.0 #菜单选项内内容
  8   kernel 6/vmlinuz #选择内核
  9   append initrd=6/initrd.img ks=http://192.168.8.8/ksdir/ks6.cfg #指定应答文件的存放位置
 10 
 11 label CentOS 7
 12   menu label Install CentOS ^7.0
 13   kernel 7/vmlinuz
 14   append initrd=7/initrd.img ks=http://192.168.8.8/ksdir/ks7.cfg
 15 
 16 label CentOS 8
 17   menu label Install CentOS ^8.0
 18   kernel 8/vmlinuz
 19   append initrd=8/initrd.img ks=http://192.168.8.8/ksdir/ks8.cfg
 20 
 21 label local
 22   menu label Boot from ^local drive
 23   menu default  #如果不选择,倒数结束后直接执行此项;
 24   localboot 0xffff
 25 

6.修改dhcp的配置文件,指向tftp的位置;

[root@centos8 ~]#vim /etc/dhcp/dhcpd.conf
  1 option domain-name "example.org"; 
  2 option domain-name-servers 182.76.76.76,114.114.114.114; #指定DNS
  3 default-lease-time 600; #默认时长
  4 max-lease-time 7200; #最大时长
  5 log-facility local7;
  6 subnet 192.168.8.0 netmask 255.255.255.0 {
  7   range 192.168.8.100 192.168.8.200;
  8   option routers 192.168.8.2;
  9   filename "pxelinux.0"; #指定系统初始化引导文件的名称
 10   next-server 192.168.8.8; #指定系统初始化引导文件存放的位置
 11 }

[root@centos8 ~]#systemctl start httpd
     

到此所有的准备工作已结束下面是安装图,测试环境:VMware 15 Pro

7.安装Centos 7 的测试实例:

1.加载bios界面时,按下esc键进入以下界面,选择网卡启动;

在这里插入图片描述

2.如果DHCP服务器正常那会直接跳到此选择页面;

在这里插入图片描述

3.选择CentOS 7.0之后就自动从tftp服务器中下载initrd.img vmlinuz文件;

接下来就可以享受自动安装啦,如果出现问题,根据提示一般都可以解决;

本文结束,谢谢阅读!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值