Linux | PXE批量自动化装机之Centos

Linux 使用PXE批量自动化装Centos.

前言!

  • 这即将是最振奋人心的技术.
  • 你即将GET多种技术的产物…
  • 这可花费了我不少时间…
  • 在你即将批量给上千台服务器装系统时
  • 考虑请我喝杯奶茶吧!

环境介绍.

  • 宿主机Arch Linux
  • 虚拟化KVM
  • 实验机器Centos7

PXE简介.

PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统.

严格来说,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 上下载所需的文件了.

Preboot Excution Environment 预启动执行环境.
Intel公司研发
基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持安装Windows,Linux等多种操作系统.

PXE工作原理简述(BIOS引导方式).

PXE启动原理,BIOS方式

0,按下开机键.BIOS载入PXE Client.

1,Clent向Server上的DHCP发送IP地址请求信息,DHCP检测Client是否合法(主要检测Client的网卡MAC地址),如果合法则返回Clent的IP地址,同时将启动文件pxelinux.0的位置信息一并发送pxelinux.0

2,Clent向PXE Server上的TFTP发送获取pxelinux.0请求消息之后在向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0

3,Client执行接收到的pxelinux.0文件.

4,Client向TFTP Server发送针对本机的配置信息文件(在TFTP服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作.

5,Client向TFTP发送linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client.

6,Client向TFTP发送根文件请求信息,TFTP接受消息之后返回Linux根文件系统.

7,Clent启动Linux内核.

8,Client下载安装源文件,读取自动化安装脚本.

PXE工作原理简述(UEFI引导方式).

0,按下开机键.BIOS载入PXE Client.

1,Clent向Server上的DHCP发送IP地址请求信息,DHCP检测Client是否合法(主要检测Client的网卡MAC地址),如果合法则返回Clent的IP地址,同时将启动文件syslinux.efi的位置信息一并发送syslinux.efi

2,Clent向PXE Server上的TFTP发送获取syslinux.efi请求消息之后在向Client发送syslinux.efi大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送syslinux.efi

3,Client执行接收到的syslinux.efi文件.

4,Client向TFTP Server发送针对本机的配置信息文件(在TFTP服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作.

5,Client向TFTP发送linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client.

6,Client向TFTP发送根文件请求信息,TFTP接受消息之后返回Linux根文件系统.

7,Clent启动Linux内核.

8,Client下载安装源文件,读取自动化安装脚本.

PXE启动原理,UEFI方式

PXE服务构建.

安装syslinux启动文件.

pacman -Syy syslinux
  • vmlinuz指的是内核,作用:进程管理,内存管理,文件管理,驱动管理,网络管理.
  • initrd.img是一个小的映象, 放的是和启动相关的驱动模块.通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块.其中最重要的就是根文件系统驱动模块,有了它才能挂载根文件系统,继而运行用户空间的第一个应用程序init或者systemd,完成系统后续的启动

TFTP服务器搭建配置.

pacman -Syy tftp-hpa
  • 👉 配置TFTP服务.
echo 'TFTPD_ARGS="--secure /opt/tftpboot/Centos7"' >/etc/conf.d/tftpd
  • 👉 挂载Centos7 ISO镜像,并复制启动文件
mount -o loop Centos7.iso /mnt/cd-rom/0

cp -vr /mnt/cd-rom/0/EFI /opt/tftpboot/Centos7_efi
cp -vr /mnt/cd-rom/0/images /opt/tftpboot/Centos7_efi
  • 👉 配置UEFI启动文件
mkdir -p /opt/tftpboot/Centos7_efi/
mkdir /opt/tftpboot/Centos7_efi/{pxelinux.cfg,ks,iso,centos7}

for i in "/usr/lib/syslinux/efi64/{ldlinux.e64,libutil.c32,menu.c32,syslinux.efi}"; do
    cp -v ${i} /opt/tftpboot/Centos7_efi/
done
  • 👉 配置BIOS启动文件
mkdir -p /opt/tftpboot/Centos7_efi/
mkdir /opt/tftpboot/Centos7_efi/{pxelinux.cfg,ks,iso,centos7}

for i in "/usr/lib/syslinux/efi64/{ldlinux.e64,libutil.c32,menu.c32,syslinux.efi}"; do
    cp -v ${i} /opt/tftpboot/Centos7_efi/
done
  • 👉 启动TFTP服务
systemctl daemon-reload && \
systemctl restart tftpd.socket

TFTP服务启动状态

DHCP服务器搭建配置.

pacman -Syy dnsmasq
  • 👉 UEFI引导方式.
cat << "EOF" >>/etc/dnsmasq.conf
port=0
interface=vir-host
bind-interfaces
dhcp-range=192.168.222.2,192.168.222.254,12h
dhcp-boot=syslinux.efi
enable-tftp
tftp-root=/opt/tftpboot/Centos7_efi
EOF
  • 👉 BIOS引导方式.
cat << "EOF" >>/etc/dnsmasq.conf
port=0
interface=vir-host
bind-interfaces
dhcp-range=192.168.222.2,192.168.222.254,12h
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/opt/tftpboot/Centos7
EOF
  • interface – 服务器需要监听并提供服务的网络接口.

  • bind-interfaces – 取消注释来绑定到该网络接口.

  • domain – 替换为你的域名.

  • dhcp-range – 替换为你的网络掩码定义的网段.

  • dhcp-boot – 替换该IP地址为你的网络接口IP地址.

  • dhcp-option=3,192.168.1.1 – 替换该IP地址为你的网段的网关.

  • dhcp-option=6,92.168.1.1 – 替换该IP地址为你的DNS服务器IP——可以定义多个IP地址.

  • server=8.8.4.4 – 这里放置DNS转发服务器IP地址.

  • dhcp-option=28,10.0.0.255 – 替换该IP地址为网络广播地址——可选项.

  • dhcp-option=42,0.0.0.0 – 这里放置网络时钟服务器——可选项(0.0.0.0地址表示参考自身).

  • pxe-prompt – 保持默认——按F8进入菜单,60秒等待时间.

  • pxe=service – 使用x86PC作为32为/64位架构,并在字符串引述中输入菜单描述提示。其它类型值可以是:PC98,IAEFI,Alpha,Arcx86,IntelLeanClient,IA32EFI,BCEFI,XscaleEFI和X86-64EFI.

  • enable-tftp – 启用内建TFTP服务器.

  • tftp-root – 使用/var/lib/tftpboot——所有网络启动文件所在位置.

  • 启动DHCP服务

systemctl daemon-reload && \
systemctl restart dnsmasq.service

DHCP服务启动状态

NFS服务器搭建配置.

pacman -Syy nfs-utils
  • 配置NFS服务器.
cat << "EOF" >>/etc/exports
/opt/tftpboot/Centos7/iso 0.0.0.0 (ro,no_subtree_check)
/opt/tftpboot/Centos7/ks 0.0.0.0 (ro,no_subtree_check)
/opt/tftpboot/Centos7_efi/ks 0.0.0.0 (ro,no_subtree_check)
EOF
  • 启动NFS服务
systemctl daemon-reload && \
systemctl restart nfs-server.service

NFS服务启动状态

pxelinux.cfg配置

cat << "EOF" >>/opt/tftpboot/Centos7_efi/pxelinux.cfg/default
default menu.c32
prompt 0
timeout 30

MENU TITLE example.com PXE Menu
LABEL CentOS7_x64
MENU LABEL CentOS 7.2 X86_64
KERNEL centos7/vmlinuz
APPEND initrd=/centos7/initrd.img inst.repo=nfs://192.168.223.1/opt/tftpboot/Centos7/iso ks=nfs://192.168.223.1/opt/tftpboot/Centos7_efi/ks/ks.cfg

label 2
menu label ^2) Boot from local drive
EOF

kickstart自动应答文件配置.

kickstart简介.

Kickstart是一项功能,使您能够基于预定义的列表(kickstart文件)安装完整的操作系统.每当您在Red Hat Enterprise Linux,CentOS,Fedora或其他基于Red Hat的Linux发行版上安装操作系统时,您的安装选择都会自动记录在名为anaconda-ks.cfg的kickstart文件中.该文件位于root用户的本地目录:/root/anaconda-ks.cfg

如果在执行安装后查看此文件,您将看到它反映了在安装过程中输入的条目.这些条目将是安装类型(新安装/升级),键盘和时区的目录设置,网络信息(例如dhcp或静态信息),磁盘分区信息,软件包选择等等.我们将更详细地介绍许多这些选项.

kickstart文件的主要功能是使管理员能够快速进行Linux的网络安装,另一个优点是,您可以基于经过验证的构建(标准构建配置)来创建服务器.如果必须频繁创建大量具有相同构建的服务器,则此功能非常有用.您甚至可以指定要在安装后运行的命令,例如创建新帐户.使用kickstart文件的通常方法是从导出的nfs目录中找到该文件或通过Web服务器使其可用,但是,还有其他选项可用.在以下示例中,我们将介绍使用nfs和Web服务器所涉及的过程.
在下面的示例中,我将使用VirtualBox作为测试环境,并使用CentOS 6.5作为Linux操作系统.在这里,我将创建一个服务器,该服务器将充当我们安装的nfs服务器和Web服务器.该服务器将包含定制的kickstart配置文件.

kickstart文件配置(UEFI引导方式)
cat << "EOF" >/opt/tftpboot/Centos7_efi/ks/ks.cfg
 #platform=x86, AMD64, or Intel EM64T
 #version=DEVEL
 # Firewall configuration
 firewall --disabled
 # Install OS instead of upgrade
 install
 # 使用nfs作为安装介质.
url --url="nfs://192.168.223.1/opt/tftpboot/Centos7/iso"
 # Root password [i used here 000000]
rootpw --iscrypted $6$An9sv4lvnbw3/g.u$VVoVB3SCUG7.UDvRlOwP2daES3v.Tbp59pw.k1AZAC9YbkTaJIEsAqmwwZYs7GZKAvFzY4FnpIT/mL.6dD8hl0
 # System authorization information
 auth  useshadow  passalgo=sha512
 # Use graphical install
 graphical
 reboot
 firstboot disable
 # System keyboard
 # keyboard us
keyboard --vckeymap=cn --xlayouts='cn'
 # System language
 # 语言中文
lang zh_CN.UTF-8
 # SELinux configuration
 selinux disabled
 # Installation logging level
 logging level=info
 # System timezone
timezone Asia/Shanghai --isUtc
 # System bootloader configuration
 #指定引导安装位置
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
 #清除硬盘分区表
zerombr
 #删除硬盘上的所有分区并初始化磁盘标签
clearpart --all --initlabel
 #这里是指定硬盘分区方式,划重点!!!
 #因为是UEFI引导,必须指定efi分区且分区的类型必须是efi,挂载到/boot/efi
 #size的单位: M --fstype是指定文件系统类型,例如:ext4、xfs
part /boot/efi --fstype="efi" --ondisk=vda --size=1024 --fsoptions="defaults,uid=0,gid=0,umask=0077,shortname=winnt"
part /app --fstype="xfs" --size=20480
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --size=51200
part /boot --fstype="ext4" --size=1024

 #将磁盘格式转换成gpt.
%pre
parted -s /dev/vda mklabel gpt
%end

%packages
 @core
 wget
 net-tools
 %end
 %post
 %end
 EOF
kickstart文件配置(BIOS引导方式)
cat << "EOF" >/opt/tftpboot/Centos7/ks/ks.cfg
#platform=x86, AMD64, or Intel EM64T
 #version=DEVEL
 # Firewall configuration
 firewall --disabled
 # Install OS instead of upgrade
 install
 # Use NFS installation media
url --url="nfs://192.168.223.1/opt/tftpboot/Centos7/iso"
 # Root password [i used here 000000]
rootpw --iscrypted $6$An9sv4lvnbw3/g.u$VVoVB3SCUG7.UDvRlOwP2daES3v.Tbp59pw.k1AZAC9YbkTaJIEsAqmwwZYs7GZKAvFzY4FnpIT/mL.6dD8hl0
 # System authorization information
 auth  useshadow  passalgo=sha512
 # Use graphical install
 graphical
#安装完毕后重启.
 reboot
 firstboot disable
 # System keyboard
# keyboard us
keyboard --vckeymap=cn --xlayouts='cn'
 # System language
# lang en_US
lang zh_CN.UTF-8
 # SELinux configuration
 selinux disabled
 # Installation logging level
 logging level=info
# System timezone
timezone Asia/Shanghai --isUtc
 # System bootloader configuration
 bootloader location=mbr
 clearpart --all --initlabel
 part swap --asprimary --fstype="swap" --size=1024
 part /boot --fstype xfs --size=200
 part pv.01 --size=1 --grow
 volgroup rootvg01 pv.01
 logvol / --fstype xfs --name=lv01 --vgname=rootvg01 --size=1 --grow

%packages
 @core
 wget
 net-tools
 %end

 #--安装完毕后执行的脚本.
 %post
 # 配置ssh密钥登录服务器.
 if ! [ -d /root/.ssh ]; then
    mkdir /root/.ssh
 fi
 cat << "EOF" >/root/.ssh/authorized_keys
 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDtsqSSs25RVmffaQ8WfzAE6aei3+a3twhHhRssUtN2TdoB9SoIOca3VCw+Du235ukYbAdQRdEdPihqE4HknJFQEGTdtF/S0K4DbJtOMUvXmBtjI4IlV8jXsQ/HqGt7iKYCmIUJwWqEO6Xkh2owmhaMY0NA+ABjkVOVT+hBA8oj3GC1KJl+yB+dX5a42vams2h7chKBZZ/827Hyy7J3pkGQcwLaMGmPdGigfdfNGGUUCl5PzeOsNynYYYnIH7rX8Q3tKMArUjuAyehEcrrF2lfLu1Wx0qXVlIc5S1QuLlRj+NqThiwiBz+HQTmaAyGPk8rW78tfO22EyarWy7FoFySAxAhnoeqNLOawXqIUdknvCT1iT3s1O/kLtmKmStb3rMoS0AwKPORjwpYIaUAvAKR95Wr5jPr0KzxbAC/Btn42JGTG5RhSRcmc6EIUX5LhdER8+tN1hTaRbWudBVBLSlL61+Hd5WsOPmZDf1tpeTPXMfX+L/bCeRpAKbSE3fQG96ogjnX4p8iaYkP7LirOyJGPUZbjB6nAwFeTuLw+yoThE23Y9uPa1UGgPCcByBHdq7J/B2lFc3Ku9YlfdcOVMsftqqKoqEijcPPEZWyHrAiX5pPKpTmyZ/oxu36G9xFZ+gdb+HzaOOUN/UrC3oJfFO6SQVvOgBwvKMJE16SEHXs/vQ==
EOF
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config
%end
EOF

防火墙配置.

systemctl stop firewalld.service && \
iptables -F

UEFI 过渡 PXE客户端

载入menuc32界面

载入Kernel和initramfs

启动各种systemd系统服务

启动安装程序

进入安装画面,通过NFS方式进行安装,并使用kickstart自动应答安装

BIOS PXE自动安装Centos


   转载规则


《Linux | PXE批量自动化装机之Centos》Bad-BoY 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
自定义Linux | ISO Live 自定义Linux | ISO Live
自定义Linux ISO Live镜像.博客中制作环境.硬件笔记本OEM NH5xAx.Arch Linux 操作系统.安装制作工具.pacman -Syy archiso配置本地软件源.repo-add pkg.db.tar.gz ./p
2022-04-13
下一篇 
高级网络管理 | NetworkManager 高级网络管理 | NetworkManager
NetworkManager高级网络管理.网络管理器(NetworManager)是检测网络,自动连接网络的程序.无论是无线还是有线连接,它都可以令您轻松管理.对于无线网络,网络管理器优先连接已知的网络并可以自动切换到最可靠的无线网络.利用
2022-03-29
  目录