Openeuler搭建PXE 批量装机环境(uefi启动)
PXE(Preboot Execution Environment,预启动执行环境)是一种由 Intel 公司开发的技术,它允许计算机通过网络接口卡(NIC)从网络服务器启动操作系统或其他软件,而无需依赖本地存储设备。
redhat官网手册(建议阅读): https://docs.redhat.com/zh_hans/documentation/Red_Hat_Enterprise_Linux/7/html/installation_guide/chap-installation-server-setup#chap-installation-server-setup
一、PXE 简介
PXE(Preboot Execution Environment,预启动执行环境)是一种由 Intel 公司开发的技术,它允许计算机通过网络接口卡(NIC)从网络服务器启动操作系统或其他软件,而无需依赖本地存储设备。
二、PXE工作流程
图片来自网络
- 客户端启动:计算机启动时,如果BIOS或UEFI配置为从网络启动(PXE启动),PXE客户端(通常集成在网卡的ROM或UEFI固件中)将被激活。
- DHCP请求:PXE客户端向网络发送DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)请求,以获取IP地址和其他网络配置信息。
- DHCP响应:DHCP服务器接收到请求后,分配一个IP地址给PXE客户端,并返回启动相关的信息,包括TFTP服务器的地址和启动文件名(如pxelinux.0,uefi模式启动不需要pxelinux.0)。
- TFTP引导文件下载:PXE客户端使用TFTP(Trivial File Transfer Protocol,简单文件传输协议)从TFTP服务器下载引导文件。
- 执行引导文件:下载完成后,PXE客户端执行引导文件,这通常是一个小型的引导加载程序,它能够进一步下载并加载操作系统内核和必要的初始化文件系统。
- 加载操作系统:引导加载程序从网络(通过TFTP、HTTP、FTP或其他协议)下载操作系统内核和initramfs(Linux的初始化ramdisk)或启动其他必要的组件。
- 启动操作系统:一旦内核和initramfs加载完成,PXE客户端将加载并启动操作系统,由ks应答文件自动安装,并从HTTP(NFS或者FTP)下载安装包
ks文件,即Kickstart文件,是一种基于Red Hat Enterprise Linux(RHEL)、CentOS和Fedora等发行版的自动化安装配置文件。
三、安装服务端
使用openeuler作为pxe服务端,使用ctyunos作为客户端,实验环境使用vmware虚拟机。
openeuler下载地址: https://www.openeuler.org/zh/download/archive/
ctyunos下载地址: https://repo.ctyun.cn/#/product/mirrorWarehouseDetails?name=ctyunos-23.01&activeName=GetISO
- 服务端软件安装
# yum -y install httpd tftp dhcp xinetd tftp-server
httpd
负责传输安装包tftp
负责传输引导和内核文件dhcp
负责为客户端分配地址,并指定tftp服务器地址xinetd
动态管理tftp的软件
-
配置文件修改
2.1. 修改tftp配置文件# cat /etc/xinetd.d/tftp # default: off # description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no # 默认是禁用,需要修改成no,启用它 per_source = 11 cps = 100 2 flags = IPv4 }
2.2. 修改dhcp配置文件
[root@192 ~]# cat /etc/dhcp/dhcpd.conf ddns-update-style interim; ignore client-updates; next-server 192.168.0.138; #指定tftp地址 filename ""; # 指定UEFI启动文件 tftp路径(后续将修改) subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; range 192.168.0.100 192.168.0.200; # 设置地址池 option domain-name-servers 192.168.0.138; option routers 192.168.0.138; default-lease-time 600; max-lease-time 7200; }
-
挂在光盘,将启动和引导文件放到tftp目录
3.1. 挂载光盘# ls /dev/sr0 /dev/sr0 [root@192 ~]# mkdir /mnt/cdrom [root@192 ~]# mount -o loop /dev/sr0 /mnt/cdrom [root@192 ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 714M 0 714M 0% /dev/shm tmpfs 286M 4.3M 282M 2% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/sda1 20G 1.8G 19G 9% / tmpfs 714M 0 714M 0% /tmp /dev/sda2 195M 147M 49M 76% /boot /dev/loop0 3.5G 3.5G 0 100% /mnt/cdrom
3.2. 将启动和引导文件放到tftp目录
如果是arm构架的系统,只需要将grubx64.efi 更换成 grubaa64.efi 即可
# cp /mnt/cdrom/EFI/BOOT/grubx64.efi /var/lib/tftpboot/ # cp /mnt/cdrom/images/pxeboot/vmlinuz /var/lib/tftpboot/ # cp /mnt/cdrom/images/pxeboot/initrd.img /var/lib/tftpboot/ # cp /mnt/cdrom/EFI/BOOT/grub.cfg /var/lib/tftpboot/ # ls /var/lib/tftpboot/ grub.cfg grubx64.efi initrd.img vmlinuz
- grubx64.efi: EFI系统分区中的一个可执行文件,负责在系统启动时提供GRUB菜单和引导加载程序的功能。当UEFI固件寻找可启动的EFI应用程序时,它会加载这个文件来启动GRUB。
- vmlinuz:vmlinuz是压缩的Linux内核映像,它是启动Linux系统的核心,它包含了启动系统所需的所有内核代码和模块。
- initrd.img:initrd是一个临时的根文件系统,它被加载到内存中,直到真正的根文件系统被挂载。initrd.img是initrd的镜像文件,它包含了系统启动初期所需的驱动和工具,用于支持挂载根文件系统。
- grub.cfg:UEFI启动配置文件,定义了内核的路径、启动参数、initramfs的路径等。当系统启动时,GRUB会读取这个文件来确定如何加载操作系统。
3.3. 回到dhcp配置文件指定,UEFI启动文件地址。
# cat /etc/dhcp/dhcpd.conf ddns-update-style interim; ignore client-updates; next-server 192.168.0.138; filename "grubx64.efi"; # 这里的路径在 /var/lib/tftpboot/grubaa64.efi subnet 192.168.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; range 192.168.0.100 192.168.0.200; option domain-name-servers 192.168.0.138; option routers 192.168.0.138; default-lease-time 600; max-lease-time 7200; }
3.4. 将光盘文件复制到http目录下,并从命名为CtyunOs
# cp -rp /mnt/cdrom /var/www/html/CtyunOs
-
启动服务
4.1. 启动服务[root@192 ~]# systemctl enable httpd --now [root@192 ~]# systemctl enable xinetd --now [root@192 ~]# systemctl enable dhcpd --now [root@192 ~]# systemctl enable tftp --now [root@192 ~]# systemctl is-active httpd active [root@192 ~]# systemctl is-active xinetd active [root@192 ~]# systemctl is-active dhcpd active [root@192 ~]# systemctl is-active tftp
4.2. 关闭防火墙,selinux
[root@192 ~]# sed -i 's/enforcing/disabled/g' /etc/selinux/config [root@192 ~]# setenforce 0 [root@192 ~]# systemctl disable firewalld --now
-
编写ks文件
5.1. 编写ks文件系统在安装完成后,会在/root下生成一个ks文件名为anaconda-ks.cfg,可以拿过来修改一下
[root@192 tftpboot]# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg [root@192 tftpboot]# chmod 644 /var/www/html/ks.cfg [root@192 tftpboot]# cat /var/www/html/ks.cfg
# Generated by Anaconda 36.16.5 # Generated by pykickstart v3.47 #version=DEVEL # Use graphical install # 图形化安装,text 文本界面安装 graphical # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=ens33 --ipv6=auto --activate # Use hard drive installation media # 这条需要注释掉 # harddrive --dir= --partition=LABEL=openEuler-22.03-LTS-SP3-x86_64 # 使用http进行安装 url --url=http://192.168.0.138/CtyunOs/ # 安装软件 %packages @^minimal-environment %end # Run the Setup Agent on first boot firstboot --enable # Generated using Blivet version 3.4.2 # 指定盘符安装 ignoredisk --only-use=sda # Partition clearing information # 清理无用分区 clearpart --none --initlabel # Disk partitioning information part /boot --fstype="xfs" --ondisk=sda --size=200 part /boot/efi --fstype="efi" --ondisk=sda --size=200 --fsoptions="umask=0077,shortname=winnt" # --grow 剩余容量全部分配给 / 目录 part / --fstype="xfs" --ondisk=sda --grow # System timezone timezone Asia/Shanghai --utc # Root password # 当前系统root密码加密过的,也可以使用明文如: rootpw 123456 ,也可以对密码进行加密如:openssl passwd -1 "123456" rootpw --iscrypted $y$j9T$lh.MU2FFv0jY1dZVS.wuIRvw$ac19XSQYD8s4tuW/73RlELQaivIof51Zy878qy.7ol9 # 安装完系统重启 reboot
5.2. 访问一下http,测试是否能访问到镜像文件和ks文件
-
修改UEFI 配置文件
# cat /var/lib/tftpboot/grub.cfg ...... # 等待5秒后立即执行默认选项 set timeout=5 ### END /etc/grub.d/00_header ### search --no-floppy --set=root -l 'openEuler-22.03-LTS-SP3-x86_64' ### BEGIN /etc/grub.d/10_linux ### # 安装模式 menuentry 'Install openEuler 22.03-LTS-SP3' --class openEuler --class gnu-linux --class gnu --class os { linuxefi vmlinuz inst.stage2=http://192.168.0.138/CtyunOs/ inst.ks=http://192.168.0.138/ks.cfg fpi_to_tail=off initrdefi initrd.img } # 测试媒体安装,不需要注释掉 #menuentry 'Test this media & install openEuler 22.03-LTS-SP3' --class openEuler --class gnu-linux --class gnu --class os { # linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=openEuler-22.03-LTS-SP3-x86_64 rd.live.check fpi_to_tail=off # initrdefi /images/pxeboot/initrd.img #} # 故障排除模式,不需要注释掉 #submenu 'Troubleshooting -->' { # menuentry 'Install openEuler 22.03-LTS-SP3 in basic graphics mode' --class openEuler --class gnu-linux --class gnu --class os { # linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=openEuler-22.03-LTS-SP3-x86_64 nomodeset fpi_to_tail=off # initrdefi /images/pxeboot/initrd.img # } # 救援模式不需要注释掉 # menuentry 'Rescue a openEuler system' --class openEuler --class gnu-linux --class gnu --class os { # linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=openEuler-22.03-LTS-SP3-x86_64 inst.rescue fpi_to_tail=off # initrdefi /images/pxeboot/initrd.img # } #}
- linuxefi vmlinuz 指定内核位置,不加路径默认是当前路径: /var/lib/tftpboot/vmlinuz
- inst.stage2=http://192.168.0.138/CtyunOs/ 指定镜像安装文件位置
- inst.ks=http://192.168.0.138/ks.cfg 指定ks文件位置
- fpi_to_tail=off 内核参数
- initrdefi initrd.img 指定 / 系统文件路径
到此PXE服务端已经搭建成功了!!!
四、使用客户端完成安装实验。
客户端内存必须不小于2G,PXE服务器和客户端必须处理同一个物理网络
1. 创建客户端
创建的客户端必须设置为uefi启动如下:
在虚拟机设置–> 选项 --> 高级 --> UEFI
# 安装完自动重启系统
五、扩展
1. ks文件的使用
官方文档参考:https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/sect-kickstart-syntax.html
博客阅读:
https://blog.51cto.com/64314491/1651417
https://www.cnblogs.com/panwenbin-logs/p/9340430.html(如何加密密码)
https://www.cnblogs.com/dinmin/articles/15348374.html(参数介绍)
https://blog.csdn.net/qq_50247813/article/details/138596629(使用bios方式安装)
2. 检查Kickstart(ks)文件是否正确
使用名为ksvalidator的命令行工具。这个工具是pykickstart软件包的一部分,能够验证ks文件的语法正确性
2.1. 安装pykickstart
# dnf -y install pykickstart
2.2. 验证ks文件
如果文件中存在问题,ksvalidator会指出具体的错误和所在的行号。ksvalidator虽然可以保证ks文件的语法正确性,但它无法保证安装会成功,也不会验证%pre、%post和%packages部分
。如果ksvalidator没有发现任何问题,这通常意味着ks文件在语法上是正确的,但您可能还需要检查文件中的其他逻辑是否符合您的安装需求。
[root@192 ~]# ksvalidator /var/www/html/ks.cfg
Checking kickstart file /var/www/html/ks.cfg
更多推荐
所有评论(0)