【网络安装】2. PXE + Kickstart 实现无人值守安装 CentOS 7 系统

安装system-config-kickstart图形化工具并生成应答文件:

# yum install system-config-kickstart

将应答文件保存至以下目录并做进一步修改:

# mkdir /var/www/html/ks
# vim /var/www/html/ks/ks.cfg

ks.cfg文件内容如下:(BIOS引导模式)

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$LFCdgRJF$RhrRttAgTjpROh4aTpitg/
# System language
lang zh_CN
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled


# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://192.168.22.10/centos7"
# System bootloader configuration
bootloader --location=mbr  # 指定引导记录被写入的位置,mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)
#bootloader --location=partition
# Partition clearing information
clearpart --all
# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part /home --fstype="xfs" --size=10240
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --size=20480
part /tmp --fstype="xfs" --size=4096
part /var --fstype="xfs" --grow --size=1


%post --interpreter=/bin/bash
hostname centos7
echo centos7 >/etc/hostname
sed -i -e 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
systemctl restart sshd.service
%end


%packages
@^minimal
tree
nmap
sysstat
dos2unix
telnet
wget
bash-completion
deltarpm
net-tools
vim-enhanced
redhat-lsb
rsync
%end

LVM分区示例:

part /boot --fstype="xfs" --size=1024 --asprimary --ondisk=sda
part pv.01 --size=1 --grow --ondisk=sda
volgroup centos pv.01
logvol swap --fstype="swap" --size=2048 --vgname=centos --name=swap
logvol / --fstype="xfs" --size=20480 --vgname=centos --name=root
logvol /home --fstype="xfs" --size=10240 --vgname=centos --name=home
logvol /tmp --fstype="xfs" --size=4096 --vgname=centos --name=tmp
logvol /var --fstype="xfs" --size=1 --grow --vgname=centos --name=var

进一步修改 /var/lib/tftpboot/pxelinux.cfg/default 文件,内容如下:(BIOS引导模式)

default menu.c32
prompt 0
timeout 30

menu title ########## PXE Boot Menu ##########

label linux
  menu label ^Install CentOS 7
  kernel centos7/vmlinuz
  append initrd=centos7/initrd.img repo=http://192.168.22.10/centos7 ks=http://192.168.22.10/ks/ks.cfg quiet

UEFI引导模式介绍

UEFI引导模式启动导致centos的启动方式发生了改变,其启动流程为:

POST -> 镜像里的EFI/BOOT/grub.cfg -> load镜像里的内核images/pxeboot/vmlinuz和加载images/pxeboot/initrd.img -> 安装界面

故原来在legacy引导方式中的pxelinux.cfg目录下的default文件。系统是不会去读写的。也是不认可的。并且dhcp中filename的文件也不再是pxelinux.0而是BOOTX64.EFI。

if option pxe-system-type = 00:07 {
    filename "x86_uefi/BOOTX64.EFI";
} else if option pxe-system-type = 00:09 {
    filename "x86_uefi/BOOTX64.EFI";
} else if option pxe-system-type = 00:0b {
    filename "arm_uefi/BOOTAA64.EFI";
} else {
    filename "pxelinux.0";
}

说明:option pxe-system-type选项可以指定x86或者ARM使用不同的引导文件,07和09为x86 UEFI,0b为ARM UEFI。

通过挂载centos7的镜像,可以看到镜像中的EFI/BOOT/下有所需的一系列文件{BOOTX64.EFI,grub.cfg}。

挂载光盘并且通过http的方式对外提供下载连接。

将光盘的 images/pxeboot/ 目录下的文件拷贝至/var/lib/tftpboot目录:

# cp /var/www/html/centos7/images/pxeboot/* /var/lib/tftpboot/

并将EFI/BOOT目录下的所有文件拷贝至/var/lib/tftpboot目录:

# cp -r /var/www/html/centos7/EFI/BOOT/* /var/lib/tftpboot

http://192.168.22.10/centos7/EFI/BOOT/grub.cfg     # 为grub的配置文件,用于显示引导菜单
http://192.168.22.10/centos7/EFI/BOOT/BOOTX64.EFI  # UEFI的启动镜像

官方grub.cfg文件内容如下:(UEFI引导模式)

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 'CentOS 7 x86_64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
	linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet
	initrdefi /images/pxeboot/initrd.img
}
menuentry 'Test this media & install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
	linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
	initrdefi /images/pxeboot/initrd.img
}
submenu 'Troubleshooting -->' {
	menuentry 'Install CentOS 7 in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
		linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 xdriver=vesa nomodeset quiet
		initrdefi /images/pxeboot/initrd.img
	}
	menuentry 'Rescue a CentOS system' --class fedora --class gnu-linux --class gnu --class os {
		linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rescue quiet
		initrdefi /images/pxeboot/initrd.img
	}
}

上面的 inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 是指向带label的hard disk,这里需要修改为url,这里修改为:

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=5 ###表示引导界面等待时常,默认60秒
### END /etc/grub.d/00_header ###

search --no-floppy --set=root -l 'CentOS 7 x86_64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS 7' --class fedora --class gnu-linux --class gnu --class os {
    linuxefi centos7/vmlinuz inst.repo=http://192.168.22.10/centos7 inst.ks=http://192.168.22.10/ks/ks.cfg quiet
    initrdefi centos7/initrd.img
}

这里没有指定到哪个网口去获取相关的ks信息。因为在centos7引导中,引导程序会将所有网口retry一遍。指定了也可以,但是还是会将所有端口检查一遍,故没有用。

最后重启httpd、tftp以及dhcp服务即可。

ks文件沿用老的ks文件即可,这里不再复述。

UEFI引导模式分区示例:

part /boot/efi --fstype=efi --size=200 --asprimary --ondisk=sda
part /boot --fstype="xfs" --size=1024 --asprimary --ondisk=sda
part /home --fstype="xfs" --size=10240
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --size=20480
part /tmp --fstype="xfs" --size=4096
part /var --fstype="xfs" --grow --size=1
# LVM分区示例
part /boot/efi --fstype=efi --size=200 --asprimary --ondisk=sda
part /boot --fstype="xfs" --size=1024 --asprimary --ondisk=sda
part pv.01 --size=1 --grow --ondisk=sda
volgroup centos pv.01
logvol swap --fstype="swap" --size=2048 --vgname=centos --name=swap
logvol / --fstype="xfs" --size=20480 --vgname=centos --name=root
logvol /home --fstype="xfs" --size=10240 --vgname=centos --name=home
logvol /tmp --fstype="xfs" --size=4096 --vgname=centos --name=tmp
logvol /var --fstype="xfs" --size=1 --grow --vgname=centos --name=var
posted @ 2021-08-24 10:32  Varden  阅读(698)  评论(0编辑  收藏  举报