图片来源
| 项目 | 说明 |
|---|---|
| Vmware Workstation | 虚拟机平台 |
| Linux镜像 | CentOS 7.9 |
| DHCP | 给虚拟机分配IP地址 |
| TFTP | 存放PXE启动的相关文件 |
| HTTP | 以HTTP的方式,提供挂载后的CentOS 7.9 ISO文件夹与kickstart文件 |
| kickstart文件 | 定义操作系统安装详情 |
本次实验将DHCP,TFTP,HTTP三个服务安装在同一台服务器上。
环境准备在vmware workstation中编辑虚拟网卡,如下图:将其DHCP功能去掉,PXE客户端启动后将不从该网卡的DHCP获取,而从我们搭建的DHCP服务器获取。
在vmware workstation中,使用NAT方式,手动安装一台CentOS 7.9,关闭firewalld与selinux,
# systemctl stop firewalld # systemctl disable firewalld # setenforce 0 # sed -i 's#=Enforce#=Disable#g' /etc/selinux/config #
其余过程省略。
DHCP# yum install -y dhcp
# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
# cat >> /etc/dhcp/dhcpd.conf << EOF
subnet 172.16.200.0 netmask 255.255.255.0 {
# range dynamic-bootp 172.16.200.11 172.16.200.20;
# DHCP分配的IP范围
range 172.16.200.11 172.16.200.20;
# DNS地址
option domain-name-servers 8.8.8.8;
# 路由器
option routers 172.16.200.2;
# 广播地址
option broadcast-address 172.16.200.255;
default-lease-time 600;
max-lease-time 7200;
# tftp服务器
next-server 172.16.200.128;
filename "pxelinux.0";
}
EOF
# systemctl start dhcpd
# systemctl enable dhcpd
#
httpd
# yum install -y httpd # mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf_bak20211127 #不显示默认欢迎页,直接显示目录结构 # mkdir -p /var/www/html/iso/CentOS-7.9 # 用于挂载ISO文件 # mount -o loop /root/CentOS-7-x86_64-Everything-2009.iso /var/www/html/iso/CentOS-7.9 #挂载 # systemctl start httpd # systemctl enable httpd # mkdir /var/www/html/ks #创建用于存放ks的文件夹 # cat >> /var/www/html/ks/anaconda-ks.cfg << EOF #version=DEVEL # System authorization information auth --enableshadow --passalgo=sha512 # Use CDROM installation media # repo #repo --name=EPEL --baseurl=http://download.fedoraproject.org/pub/epel/7/x86_64 repo --name=EPEL --baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64 #cdrom url --url="http://172.16.200.128/iso/CentOS-7.9" # Use graphical install graphical # Run the Setup Agent on first boot firstboot --enable # Keyboard layouts keyboard --vckeymap=us --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=eth0 --onboot=on --ipv6=auto --no-activate network --hostname=localhost.localdomain # Reboot after installation reboot # Root password rootpw --iscrypted $6$oXrbP8nt5o2eq7Q8$jqOBtb..rAusqF/b0Doy2JKugnF6gLF6aVLMiMARu8ut0MomyTnyVPaysOkZHqeMhK6WIJJC4DTh/oszv5Tbf. # System services services --disabled="chronyd" # System timezone timezone Asia/Shanghai --isUtc --nontp # System bootloader configuration bootloader --location=mbr --boot-drive=sda # Partition clearing information clearpart --none --initlabel # Disk partitioning information part pv.01 --fstype="lvmpv" --ondisk=sda --size=321816 part /boot --fstype="xfs" --ondisk=sda --size=488 volgroup centos --pesize=4096 pv.01 logvol swap --fstype="swap" --size=131072 --name=swap --vgname=centos logvol /var --fstype="xfs" --size=95367 --name=var --vgname=centos logvol / --fstype="xfs" --size=95367 --name=root --vgname=centos #part pv.02 --fstype="lvmpv" --ondisk=nvme0n1 #volgroup ssd --pesize=4096 pv.02 #logvol /tmp --fstype="xfs" --size=102400 --name=tmp --vgname=ssd #logvol /lhome --fstype="xfs" --grow --size=1 --name=root --vgname=ssd %packages @^minimal @core @development net-tools #@Xfce %end %addon com_redhat_kdump --disable --reserve-mb='auto' %end %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end %post # modify network wget http://172.16.200.128/scripts/nic_settings.sh -P /root wget http://172.16.200.128/scripts/hw_addr2ip_netmask_mappings.txt -P /root echo "cd /root; bash ./nic_settings.sh" >> /etc/rc.local %end EOF #tftp
# yum install -y tftp tftp-server xinetd
# cat > /etc/xinetd.d/tftp << EOF
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
# 表示服务器默认的目录是/var/lib/tftpboot
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
EOF
# systemctl start xinetd
# systemctl enable xinetd
#
准备需要使用的文件
# yum install syslinux # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # cp /var/www/html/iso/CentOS-7.9/images/pxeboot/initrd.img /var/lib/tftpboot/ # cp /var/www/html/iso/CentOS-7.9/images/pxeboot/vmlinuz /var/lib/tftpboot/ # cp /var/www/html/iso/CentOS-7.9/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
修改/var/lib/tftpboot/pxelinux.cfg/default文件
# vi /var/lib/tftpboot/pxelinux.cfg/default default linux timeout 60 label linux menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.repo=http://172.16.200.128/iso/CentOS-7.9 inst.ks=http://172.16.200.128/ks/anaconda-ks.cfg net.ifnames=0 biosdevname=0 ksdevice=eth0 #
其中,ksdevice=eth0,将网卡名字命名为eth0。
自动化安装在vmware workstation中创建另一台虚拟机,网络同样使用NAT,磁盘400GB,并启动。随后开始自动化安装过程:
PXE+kickstart自动安装录屏
花絮10:44 11/28/2021
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/installation_guide/chap-anaconda-boot-options#tabl-boot-options-network-formats
vmlinuz initrd=initrd.img inst.repo=http://172.16.200.128/iso/CentOS-7.9 inst.ks=http://172.16.200.128/ks/anaconda-ks.cfg net.ifnames=0 biosdevname=0 ksdevice=eth0 ip=172.16.200.21:172.16.200.2:255.255.255.0:host200021:eth0:none
work的。
命令行非交互式设置IP:
# cat > /var/www/html/scripts/nic_settings.sh << EOF
#!/bin/bash -f
# Author: wanlinwang
# Date: 11/28 2021
# Desciption: for CentOS 7.9 initialization.
hw_addr=`ip -br link| awk '{if($1=="eth0") print $3}'`
connection_name=`nmcli -t -f NAME,DEVICE con show | awk -F: '{if($NF=="eth0")print $1}'`
# Get ip/netmask info by hw_addr from mappings file.
ip_netmask=`grep -i $hw_addr ./hw_addr2ip_netmask_mappings.txt| awk '{print $2}'`
# Example: nmcli con mod 'System eth0' ipv4.method manual ipv4.addr '172.16.200.17/24'
nmcli con mod "${connection_name}" ipv4.method manual ipv4.addr ${ip_netmask}
# restart network
systemctl restart network
EOF
#
# cat > /var/www/html/scripts/hw_addr2ip_netmask_mappings.txt << EOF
#00:0C:29:B6:FB:6F 172.16.200.21/24
00:0C:29:B6:FB:6F 172.16.200.21/24
EOF



