TODO:
制作N系统PXE工具,ISO,配置文件,DHCP服务识别配置,TFTP服务配置,(NFS服务,apache服务),自动安装(安装完,未重启后续安装其他应用),安装完成之后配置;
用户可操作部分:1.导入ISO,2.配置DHCP,TFTP,NFS,安装脚本,安装后配置或安装其他应用,重启后自动执行脚本
鲁棒性,复用性
rpm
一、
本文以同一台设备(主机)同时部署DHCP、TFTP及WEB服务(或NFS服务)为例进行讲解,本机的IP地址设置为192.168.122.2/24,使用192.168.122.0/24这个网段 。
二、DHCP服务部署
使用yum工具安装dhcp软件包,如果您的环境无法联网,可以使用操作系统安装光盘来配置yum源地址,避免安装过程遇到软件包相互依赖导致安装失败的问题。
yum install -y dhcp
修改DHCP服务配置/etc/dhcp/dhcpd.conf配置文件如下:
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; #配置option code 93(client system arch,查找客户端的CPU架构;
# DHCP相关option code https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml)
# option code 93 https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml#processor-architecture
# options 映射关系 https://github.com/isc-projects/dhcp/blob/master/common/tables.c
# https://github.com/isc-projects/dhcp/blob/master/common/dhcp-options.5
# dhcpd服务端所在的网段
subnet 192.168.122.0 netmask 255.255.255.0 {
option routers 192.168.122.2; # dhcpd服务所在主机的IP
range 192.168.122.5 192.168.122.254; # DHCP自动分配的子网网络范围
next-server 192.168.122.2; # tftpd服务所在主机的IP
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
# aarch64 uefi
if option architecture-type = 00:0B {
filename "UEFI/aarch64/grubaa64.efi"; # 操作系统镜像/EFI/BOOT/xxxxx.EFI 文件,具体文件要看该镜像里边的文件
}
# x86_64 uefi
elsif option architecture-type = 00:07 or option architecture-type = 00:09{
filename "UEFI/x86_64/grubx64.efi"; # 操作系统镜像 /EFI/BOOT/xxxxx.EFI 文件,具体文件要看该镜像里边的文件
}
# 0x00 0x00,x86 BIOS,[RFC5970][RFC4578]
if option pxe-system-type = 00:00 {
filename "Legacy/ks-v10-sp3-r-2403-x86/pxelinux.0"
}
}
}
配置文件中定义了自动获取的IP地址池范围是192.168.100.100到192.168.100.200,并且在获得IP地址后会访问192.168.100.254。DHCP服务根据来自PXE的申请自动判断引导类型,自动选择UEFI引导加载 bootx64.efi 文件,或者 Legacy 引导加载 pxelinux/pxelinux.0 文件。
启动DHCP服务,并设置开机自动启动:
systemctl restart dhcpd ; systemctl enable dhcpd
三、TFTP服务部署,(tftp,xinetd可能需要在线安装),注:tftp一定要配置好否则奇怪问题就会出现,例如相对路径还是绝对路径都要试,因为--secure有时候会在ubuntu22.04 xinetd服务去管理tftpd服务设置失效
--secure, -s
Change root directory on startup. This means the remote host does not need to pass
along the directory as part of the transfer, and may add security. When --secure is
specified, exactly one directory should be specified on the command line. The use
of this option is recommended for security as well as compatibility with some boot
ROMs which cannot be easily made to include a directory name in its request.
使用yum工具安装tftp服务:
yum install -y tftp-server xinetd
修改/etc/xinetd.d/tftp文件,我们需要将这个文件中 disable 的设置修改为no:
# 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
per_source = 11
cps = 100 2
flags = IPv4
}
启动xinted服务,并将该服务设置为开机自动启动:
systemctl restart xinetd ; systemctl enable xinetd
TFTP服务安装后,会创建/var/lib/tftpboot目录,我们需要把引导过程用到的文件复制到这个目录中,在客户端获得IP信息后,会通过TFTP访问该目录内容并下载文件,引导进入操作系统安装界面:
## 新结构
├── ISO-dir
│ ├── kd-v10-sp1-2403-r-20240426-x86_64
│ │ ├── casper # 镜像中拷贝casper文件夹
│ │ └── EFI # 镜像中拷贝EFI文件夹
│ └── ks-v10-sp3-2403-r-20240426-x86_64
│ ├── EFI # 镜像中拷贝EFI文件夹
│ ├── images # 镜像中拷贝images文件夹
│ └── isolinux # 镜像中拷贝isolinux文件夹
├── Legacy
│ ├── aarch64
│ │ └── ISO-dir -> ../../ISO-dir
│ └── x86_64
│ ├── ISO-dir -> ../../ISO-dir
│ ├── isolinux
│ │ ├── boot.msg # 系统ISO镜像/isolinux/boot.msg 文件
│ │ ├── vesamenu.c32 # 系统ISO镜像/isolinux/vesamenu.c32 文件
| | └── splash.png # 系统ISO镜像/isolinux/splash.png 文件
│ └── pxelinux.0 # syslinux包中文件,安装了syslinux包后在/usr/share/syslinux/pxelinux.0查找得
│ └── pxelinux.cfg # 手动建立配置文件夹
│ └── default # 手动建立配置文件
└── UEFI
├── aarch64
│ └── ISO-dir -> ../../ISO-dir
└── x86_64
├── BOOTX64.EFI
├── grub.cfg
├── grubx64.efi
├── ISO-dir -> ../../ISO-dir
└── mmx64.efi
UEFI
# /var/lib/tftpboot/UEFI/.../grub.cfg文件对应EFI的引导方式,这个文件的内容如下:
set default="1"
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set timeout=60
### END /etc/grub.d/00_header ###
#search --no-floppy --set=root -l 'Kylin-Server-10-x86(x86_64)'
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install Kylin Linux Advanced Server V10 SP1 B20 0518 x86 ' --class fedora --class gnu-linux --class gnu --class os {
linuxefi UEFI/x86_64/ISO-dir/ks-v10-sp3-2403-r-20240426-x86_64/images/pxeboot/vmlinuz inst.repo=http://192.168.100.2/ks-v10-sp1-b20-0518-x86 ip=dhcp ks=http://192.168.100.2/kickstart.cfg nomodeset rd.live.check console=tty0 quiet
initrdefi UEFI/x86_64/ISO-dir/ks-v10-sp3-2403-r-20240426-x86_64/images/pxeboot/initrd.img
}
menuentry 'try Kylin Linux Desktop V10 2403 ' --class gnu-linux --class gnu --class os {
linuxefi UEFI/x86_64/ISO-dir/kd-v10-sp1-2403-r-20240426-x86_64/casper/vmlinuz only-ubiquity boot=casper ip=dhcp fsck.mode=skip audit=0 security=none netboot=nfs nfsroot=192.168.100.2:/iso/kd-v10-sp1-2403-r-20240426-x86_64/ audit=0 quiet splash live --
initrdefi UEFI/x86_64/ISO-dir/kd-v10-sp1-2403-r-20240426-x86_64/casper/initrd.lz
}
Legacy
# /var/lib/tftpboot/Legacy/ks-v10-sp3-2403/pxelinux.cfg/default文件对应Legacy的引导方式,这个文件的内容如下:
##https://wiki.syslinux.org/wiki/index.php?title=PXELINUX
# The initial Current Working Directory is either as supplied by DHCP option 210 (pxelinux.pathprefix), the hardcoded path-prefix or the parent directory of the PXELINUX file, as indicated by DHCP fields sname and file (sname="192.168.2.3" and file="boot/pxelinux.0" result in "tftp://192.168.2.3/boot/", or in "192.168.2.3::boot/" in older PXELINUX format) with the precedence as specified under the #Options section of this document.
# All unqualified filenames are relative to the Current Working Directory.
# The core module, "ldlinux.{c32,e32,e64}", is searched-for according to option 210, or, if (option 210 is) not set, in the same directory as the main bootloader file (e.g. pxelinux.0).
### 注意isolinux/syslinux或pxelinux.0去找 menu.c32 https://wiki.syslinux.org/wiki/index.php?title=Menu#MENU_START
### rpm
DEFAULT vesamenu.c32
PROMPT 0
timeout 600
DISPLAY boot.msg
LABEL linux
menu label ^Install Kylin Linux Advanced Server V10
MENU DEFAULT
KERNEL isolinux/vmlinuz
append initrd=isolinux/initrd.img ip=dhcp inst.repo=http://192.168.100.2/ky10 nomodeset rd.live.check console=tty0 quiet
LABEL vesa
menu label Install Kylin Linux Advanced Server V10 in ^basic graphics mode
KERNEL vmlinuz
append initrd=isolinux/initrd.img ip=dhcp inst.xdriver=vesa nomodeset inst.repo=http://192.168.100.2/ky10
### x86 rpm和deb混合支持
default vesamenu.c32
prompt 0
timeout 600
display boot.msg
label Server
menu label ^Install Kylin Linux Advanced Server V10 SP3 2403 ^x86_64
menu default
kernel ISO-dir/ks-v10-sp3-2403-r-20240426-x86_64/isolinux/vmlinuz
append initrd=/ISO-dir/ks-v10-sp3-2403-r-20240426-x86_64/isolinux/initrd.img ip=dhcp inst.repo=http://192.168.100.2/ky10
label Desktop
menu label ^try Kylin Linux Desktop V10 2403 ^out of install ^x86_64
kernel ISO-dir/kd-v10-sp1-2403-r-20240426-x86_64/casper/vmlinuz
append initrd=/ISO-dir/kd-v10-sp1-2403-r-20240426-x86_64/casper/initrd.lz boot=casper only-ubiquity ip=dhcp fsck.mode=skip audit=0 security=none netboot=nfs nfsroot=192.168.100.2:/iso/kd-v10-sp1-2403-r-20240426-x86_64/ quiet splash live --
四、WEB服务部署
# 安装WEB服务:
yum install httpd
# 创建KY10目录用于提供中标麒麟高级服务器操作系统KY10安装介质的HTTP访问:
mkdir -p /var/www/html/ky10
# 准备WEB服务所需要用到的数据文件。这里我们提供了三种方式,分别是复制光盘数据到本地磁盘、直接挂载光盘到指定目录及直接挂载ISO文件到指定目录:
# 挂载光盘到/mnt目录
mount /dev/sr0 /mnt
# 复制数据到/var/www/html/KY10目录
shopt -s dotglob
cp -avRf /mnt/* /var/www/html/ky10
# 或者使用下面方式,直接将光盘挂载到/var/www/html/ky10
mount /dev/sr0 /var/www/html/ky10
# 如果使用的是ISO文件,可以这样挂载,请根据实际情况调整ISO文件路径:
mount -o loop /opt/ky10.iso /var/www/html/ky10
五、kickstart R系自动应答安装
/root/initial-setup-ks.cfg
在上grub配置文件下.cfg配置里面后面ks=http://192.168.1.1/xxxxx.cfg
六、防火墙设置
默认情况下,系统会开启防火墙设置,我们为了使上面的服务正常对外提供响应,需要开放下列端口号:
DHCP服务67/UDP
TFTP服务69/UDP
Web服务80/TCP
通过 firewall-cmd 命令添加防火墙设置:
firewall-cmd --add-service=dhcp --add-service=tftp --add-service=http --permanent
firewall-cmd --reload
deb
如果我们需要在已经部署完成的服务器网络安装基础环境上追加安装选项内容,需要调整引导启动过程提供的菜单列表,例如这里我们以添加银河麒麟桌面操作系统V10为例,进行讲解。
银河麒麟桌面版本本身提供了LiveCD的运行模式,这个过程中加载了一个约2.7G的squashfs文件,如果通过网络下载这个文件,会花费大量时间,因此在桌面操作系统的网络安装配置上,和服务器版本略有区别,下面是部署过程。
需求服务:dhcpd,tftpd,nfs,自动应答
(二)配置NFS服务
我们使用NFS服务来对外共享前面提到的squashfs文件,这样客户端可以直接将该文件挂载到本地目录环境下进行访问。
安装NFS服务:
yum install nfs-utils
# 创建目录/iso/kd-v10-sp1-2403-r-20240426-x86_64
mkdir -p /iso/kd-v10-sp1-2403-r-20240426-x86_64
# 这里我们用挂载的方式将ISO文件挂载到刚刚创建的这个V10目录,如果计划复制光盘中所有文件到本地磁盘或者通过光盘提供访问,可以参考本文前面服务器的操作方式进行操作。
mount -o loop xxx.iso /iso/kd-v10-sp1-2403-r-20240426-x86_64
# 配置NFS共享,我们需要打开/etc/exports文件,添加下面内容:
/iso/kd-v10-sp1-2403-r-20240426-x86_64 *(rw,sync,no_root_squash,no_subtree_check)
# 启动NFS服务,并设置开机自动启动:
systemctl restart nfs ; systemctl enable nfs
# 防火墙开放NFS服务端口:
firewall-cmd --add-service=nfs --permanent
firewall-cmd --reload
# 测试挂载
mount IP:路径 /mnt
以上操作完成后,您在客户端通过PXE网络引导时,就能看到银河麒麟桌面版本的安装菜单选项,并可通过该选项进行操作系统安装。
标签:操作系统,--,192.168,64,2403,ISO,安装,PXE,x86 From: https://www.cnblogs.com/huangjinbang1996/p/18617429