【网络安装】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