麒麟系统V10 SP2 Kickstart UEFI PXE 多系统安装

2022-11-19 09:45:32 浏览数 (1)

PXE

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

UEFI

UEFI启动要求硬盘上有一个特殊的分区——EFI系统分区。它是FAT32格式带有efi、boot标志的分区,大小一般在200MB到500MB之间,用来存储系统的EFI bootloader以及启动时固件使用的应用程序。BootLoader 是在操作系统内核运行之前运行的一段小程序。这段小程序可以将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

使用 Kickstart 执行 UEFI PXE 引导的顺序

  • 挂载镜像文件
  • 安装和配置 TFTP
  • 安装和配置 DHCP
  • 安装和配置 NGINX
  • 准备启动文件
  • 执行 UEFI PXE 引导

pxe系统启动过程

客户端通过dhcp获取bootx64.efi引导文件,UEFI 根据 Bootloader 加载 EFI 分区中的引导器(grubx64.efi),引导器加载配置文件(grub.cfg)呈现启动菜单(GRUB 菜单),用户选择启动项后引导器加载操作系统镜像和内核。

使用 Kickstart 配置 UEFI PXE 引导服务器的步骤

步骤 1:挂载系统iso镜像

代码语言:javascript复制
#上传麒麟v10和rhel 7.6镜像到mnt目录
#创建镜像挂载目录
mkdir -p /mnt/{rhel,kylin}
挂载镜像文件
mount /mnt/rhel-server-7.6-x86_64-dvd.iso /mnt/rhel
mount /mnt/Kylin-Server-10-SP2-x86-Release-Build09-20210524.iso /mnt/kylin

步骤 2:安装和配置 TFTP 服务器

通过TFTP 服务器来传输UEFI PXE 引导文件

代码语言:javascript复制
yum install tftp-server

将disable=no 将yes修改no

代码语言:javascript复制
sed -i '14s#yes#no#'/etc/xinetd.d/tftp

默认情况下 tftp 服务将搜索 .tftp 文件中的 TFTP 文件/var/lib/tftpboot

代码语言:javascript复制
systemctl start tftp.service
systemctl enable tftp.service --now
systemctl status tftp.service

步骤 3:配置 UEFI PXE 引导服务器

  • 传统Legacy BIOS引导,在pxelinux.0引导后,它会请求并加载server端tftpboot目录中,与pxelinux.0同目录下的pxelinux.cfg目录里的default文件。
  • EFI BIOS引导,引导了grubx64.efi后,会请求grubx64.efi同目录下的grub.cfg配置文件,同时加载显示引导菜单。

拷贝 BOOTX64.EFI和grubx64.efi到/var/lib/tftpboot/pxelinux/

代码语言:javascript复制
mkdir -p /var/lib/tftpboot/pxelinux
cp /mnt/kylin/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/pxelinux/
cp /mnt/kylin/EFI/BOOT/grubx64.efi /var/lib/tftpboot/pxelinux/

拷贝 initrd和vmlinuz到/var/lib/tftpboot/pxelinux/

代码语言:javascript复制
#麒麟v10 sp2 启动目录
mkdir -p /var/lib/tftpboot/pxelinux/kylin
#rhel 启动目录
mkdir -p /var/lib/tftpboot/pxelinux/rhel
cp /mnt/kylin/{vmlinuz,initrd.img} /var/lib/tftpboot/pxelinux/kylin/
cp /mnt/rhel/vmlinuz /var/lib/tftpboot/pxelinux/rhel/
cp /mnt/rhel/initrd.img /var/lib/tftpboot/pxelinux/rhel/
  • vmlinuz指的是内核,作用:进程管理、内存管理、文件管理、驱动管理、网络管理。
  • initrd.img是一个小的映象, 放的是和启动相关的驱动模块。通常的步骤是先启动内核,然后内核挂载initrd.img,并执行里面的脚本来进一步挂载各种各样的模块。其中最重要的就是根文件系统驱动模块,有了它才能挂载根文件系统,继而运行用户空间的第一个应用程序init或者systemd,完成系统后续的启动。

步骤 4:为 UEFI PXE 引导配置 DHCP

安装和配置DHCP来支持UEFI PXE Boot安装

代码语言:javascript复制
yum -y install dhcp-server

cat /etc/dhcp/dhcpd.conf

代码语言:javascript复制
#
#   see /usr/share/doc/dhcp-server/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#
non-authoritative;
allow bootp;
allow booting;
default-lease-time 21600;
max-lease-time 43200;   
option domain-name "kylin.pxe";
option domain-name-servers 192.168.20.10;
ddns-update-style none;
#option space pxelinux;
#option pxelinux.magic code 208 = string;
#option pxelinux.configfile code 209 = text;
#option pxelinux.pathprefix code 210 = text;
#option pxelinux.reboottime code 211 = unsigned integer 32;
option architecture-type code 93 = unsigned integer 16;
 
subnet 192.168.20.0 netmask 255.255.255.0 {
        option routers 192.168.20.254;
        range 192.168.20.10 192.168.20.100;
        class "pxeclients" {
          match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
          next-server 192.168.20.10;
          filename "pxelinux/BOOTX64.EFI";
        }
}

启用并启动 DHCP 服务

代码语言:javascript复制
systemctl start dhcpd
systemctl enable dhcpd --now

步骤 5:配置 Kickstart 文件自动安装

代码语言:javascript复制
#确保所有用户都可以读取 ks.cfg 文件
chmod 777 /usr/local/nginx/html/ks.cfg

cat /usr/local/nginx/html/ks.cfg

代码语言:javascript复制
##rhel kickstart
install
url --url=http://192.168.20.10/rhel/x64/
lang en_US.UTF-8
keyboard us
network --onboot yes --device bootif --bootproto dhcp --noipv6
rootpw zaq12wsx
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
text
reboot
services --enabled kdump
bootloader --location=mbr --append="biosdevname=0 nodmraid console=tty0 console=ttyS0,115200"
zerombr
clearpart --all
part swap --fstype=swap --ondisk=sda --size=8192
part /boot --size=500 --ondisk=sda
part /boot/efi --size=500 --ondisk=sda
part pv.01 --size=1 --grow --ondisk=sda
volgroup vg_root pv.01
logvol / --fstype=xfs --vgname=vg_root --size=307200 --name=lv_root
#
%packages --ignoremissing
@base
@core
@development
@core
vim
unzip
tree
telnet
tcpdump
sysstat
openssl-devel
openssh-devel
net-tools
nc
gcc
%end
%post
exec &>/root/post.log
set -x
HOST_NAME="rhel-node01"
cat > /etc/hostname <<EOF
$HOST_NAME
EOF
# stop NetworkManager
systemctl disable NetworkManager
systemctl stop NetworkManager
#升级系统内核
curl -o /etc/yum.repos.d/local.repo  http://192.168.20.10/local.repo
yum -y update kernel --enablerepo=local
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
rm -f /etc/yum.repos.d/local.repo
%end

步骤 6:部署 Nginx 发布镜像安装目录

安装Nginx所需依赖环境

代码语言:javascript复制
yum install gcc-c   pcre pcre-devel zlib zlib-devel openssl openssl-devel -y

下载Nginx 源码包

代码语言:javascript复制
#下载nginx 源码包
wget -c http://nginx.org/download/nginx-1.20.1.tar.gz
#解压
tar -zxvf  nginx-1.20.1.tar.gz -C /opt
#编译安装Nginx,进入到解压目录
cd  nginx-1.20.1/

编译安装nginx

代码语言:javascript复制
#默认配置
./configure 
--with-http_ssl_module 
--with-http_flv_module 
--with-http_stub_status_module 
--with-http_gzip_static_module 
--with-pcre
#编译安装
make && make install

启动Nginx

代码语言:javascript复制
#进入sbin
cd /usr/local/nginx/sbin
#启动nginx
./nginx -c /usr/local/nginx/conf/nginx.conf
#后面的-c参数是说指定配置文件
#查看进程
ps -ef | grep nginx
#初始安装完成,该目录只有4个文件夹:conf  html  logs  sbin
conf 配置文件目录
html 网站的静态文件目录
sbin 一些可执行文件目录,例如启动nginx就要执行该文件夹下面nginx命令

配置nginx开机启动

vim /usr/lib/systemd/system/nginx.service

代码语言:javascript复制
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建kylin和rhel 镜像安装目录

代码语言:javascript复制
#创建目录
mkdir -p /usr/local/nginx/html/kylin/x64
mkdir -p /usr/local/nginx/html/rhel/x64
#拷贝镜像文件
cp -apr /mnt/kylin/*  /usr/local/nginx/html/kylin/x64
cp -apr /mnt/rhel/*  /usr/local/nginx/html/rhel/x64

重启nginx

代码语言:javascript复制
systemctl restart  nginx

第 7 步:创建 grub.cfg 文件

对于 UEFI PXE 引导,需要一个grub.cfg文件,其中包含通过网络安装所需的 PXE 引导文件的详细信息。

vim /var/lib/tftpboot/pxelinux/grub.cfg

代码语言:javascript复制
set timeout=30
menuentry 'Install Kylin Linux Advanced Server V10' --class fedora --class gnu-linux --class gnu --class os {
    linuxefi pxelinux/vmlinuz inst.ks=http://192.168.20.10/ks/kickstart.cfg  ip=dhcp quiet
    initrdefi pxelinux/initrd.img
}
menuentry 'Install rhel 7.6' --class fedora --class gnu-linux --class gnu --class os  {
    linuxefi pxelinux/vmlinuz inst.ks=http://192.168.20.10/ks/kickstart.cfg  quiet
    initrdefi pxelinux/initrd.img
}

步骤 8:配置防火墙

代码语言:javascript复制
firewall-cmd --add-service=http --add-service=tftp --add-service=dhcp --permanent
firewall-cmd --reload
#验证规则
firewall-cmd --list-service
cockpit dhcp dhcpv6-client http ssh tftp

步骤 9:服务器执行 PXE 引导

grub.cfg文件中配置的启动菜单条目

0 人点赞