第一步:搭建本地yum源
若无互联网环境,使用iso镜像搭建本地yum源
mount /dev/cdrom /mnt/
[root@pxe-server ~]# cd /etc/yum.repos.d/
[root@pxe-server yum.repos.d]# ls
CentOS-Base.repo CentOS-CR.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Sources.repo CentOS-Vault.repo CentOS-x86_64-kernel.repo
[root@pxe-server yum.repos.d]# mkdir bak
[root@pxe-server yum.repos.d]# mv *.repo bak/
[root@pxe-server yum.repos.d]# ls
bak
[root@pxe-server yum.repos.d]#
[root@pxe-server yum.repos.d]# vi iso.repo
[root@pxe-server yum.repos.d]# cat iso.repo
[iso]
name=iso
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@pxe-server yum.repos.d]# yum clean all
[root@pxe-server yum.repos.d]# yum makecache
第二步:搭建pxe服务器
安装命令行自动补齐的包
[root@pxe-server yum.repos.d]# yum install -y bash-completion
[root@pxe-server yum.repos.d]# su -
关闭防火墙和selinux,安装所需软件
systemctl stop firewalld.service
setenforce 0
yum install -y vsftpd tftp-server dhcp
获取uefi启动文件,将启动文件和镜像文件复制到指定位置
cd /tmp/
cp -pr /mnt/Packages/shim-x64-15-8.el7.x86_64.rpm /tmp
cp -pr /mnt/Packages/grub2-efi-x64-2.02-0.86.el7.centos.x86_64.rpm /tmp
rpm2cpio /tmp/shim-x64-15-8.el7.x86_64.rpm | cpio -dimv
rpm2cpio /tmp/grub2-efi-x64-2.02-0.86.el7.centos.x86_64.rpm | cpio -dimv
mkdir /var/lib/tftpboot/uefi/
cp /tmp/boot/efi/EFI/centos/grubx64.efi /var/lib/tftpboot/uefi/
cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/uefi/
cp /tmp/boot/efi/EFI/centos/shim.efi /var/lib/tftpboot/uefi/
chmod +r /var/lib/tftpboot/uefi/{grubx64.efi,shim.efi}
cp -arvp /mnt/* /var/ftp
编辑grub.cfg文件
set timeout=6 #6秒后超时,开始安装系统
menuentry 'Centos 7.9' #安装时会显示的提示内容
ks=ftp://192.168.189.150/ks.cfg #指定ks文件路径(ftp服务器文件根目录)
inst.repo=ftp://192.168.189.150 #指向ftp服务器,存放着镜像文件内容
cat /var/lib/tftpboot/uefi/grub.cfg
set timeout=6
menuentry 'Centos 7.9' {
linuxefi uefi/vmlinuz ip=dhcp ks=ftp://192.168.189.150/ks.cfg inst.repo=ftp://192.168.189.150
initrdefi uefi/initrd.img
}
编辑ks文件
其中 url --url="ftp://192.168.189.150"指向软件包位置,即ftp服务器根目录
文件内容如下
cat /var/ftp/ks.cfg
auth --enableshadow --passalgo=sha512 #加密方式sha512
text #字符安装,默认是图形化的
reboot #安装完要重启
firstboot --enable
ignoredisk --only-use=sda #只用第一块盘
keyboard --vckeymap=us --xlayouts='us' #设置键盘
lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 #设置语言为英文,并添加中文支持
network --bootproto=dhcp --device=ens32 --onboot=yes #网卡配置
#network --hostname=ddcw #主机名
url --url="ftp://192.168.19.201"
# 设置root密码
rootpw mintsy@123
services --disabled="chronyd"
services --disabled="NetworkManager"
services --disabled="firewall"
services --disabled="selinux"
timezone Asia/Shanghai --nontp
bootloader --location=mbr --boot-drive=sda
clearpart --all --initlabel
autopart --type=lvm #自动分区
%packages
@^minimal
@compat-libraries
@core
@system-admin-tools
wget
vim
%end
%post
cd /root
SN=`dmidecode -t 1|grep Serial|awk -F : '{print $2}'|awk -F ' ' '{print $1}'` ##获取SN号
wget ftp://192.168.19.201/1.csv 下载csv格式文件里面包括(网络地址,带外地址,带外网口最后由ansible推送,主机名)
IP=`grep $SN 1.csv|awk -F , '{print $2}'`
HOSTNAME=`grep $SN 1.csv|awk -F , '{print $3}'`
GATEWAY=192.168.19.2
NETMASK=255.255.255.0
hostnamectl set-hostname $HOSTNAME
echo $IP $HOSTNAME >> /etc/hosts
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
cat <<EOF>/etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
EOF
echo "IPADDR=$IP" >>/etc/sysconfig/network-scripts/ifcfg-ens33
echo "NETMASK=$NETMASK" >>/etc/sysconfig/network-scripts/ifcfg-ens33
echo "GATEWAY=$GATEWAY" >>/etc/sysconfig/network-scripts/ifcfg-ens33
echo "nameserver 114.114.114.114" > /etc/resolv.conf
systemctl restart network
%end
两个文件服务器内的文件如下所示,检查是否有缺失内容
[root@pxe uefi]# pwd
/var/lib/tftpboot/uefi
[root@pxe uefi]# ls
grub.cfg grubx64.efi initrd.img shim.efi vmlinuz
[root@pxe ftp]# pwd
/var/ftp
[root@pxe ftp]# ls
CentOS_BuildTag EFI EULA GPL images isolinux ks.cfg LiveOS Packages pub repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
[root@pxe ftp]#
编辑dhcp配置文件
subnet 为子网网段
netmask为掩码
option routers为网关
next-server 192.168.189.150 指向启动存放启动文件的tftp服务器
range 192.168.189.151 192.168.189.170;为dhcp服务器可分配的ip范围
class "pxeclients"来判断启动方式
文件内容如下
cat /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;
subnet 192.168.189.0 netmask 255.255.255.0 {
option routers 192.168.189.2;
range 192.168.189.151 192.168.189.170;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.189.150;
if option architecture-type = 00:07 or option architecture-type = 00:09 {
filename "uefi/grubx64.efi";
} else {
filename "pxelinux/pxelinux.0";
}
}
}
重启dhcpd、vsftpd、tftp
systemctl restart dhcpd vsftpd tftp