记载一次PXE安装Centos7.6的过程
PXE安装Centos7.6
最近搭建hadoop大数据集群,涉及到200个节点的操作系统安装,采用的Centos7.6,依次U盘安装未免过于麻烦,于是采用的是PXE网络安装。记录一下,方便以后回顾和大家参考
0 服务器端配置须知
PXE引导区分为两种方式Legacy,UEFI,两种方式配置略有差异,使用的引导文件也不同。
软件包主要需要
1.tftp
2.httpd
3.dhcpd
4.xinetd
5.wget
1 关闭防火墙和SELinux
客户机安装时需要从服务器取文件,因此需要关闭服务器的防火墙和SELinux。
# 查看系统发行版本
cat /etc/redhat-release
# 查看系统内核
uname -r
# 查看主机名
hostname -I
# 禁用防火墙(永久生效)
systemctl disable firewalld
# 禁用SELinux (临时生效)
setenforce 0
# 查看防火墙状态
systemctl status firewalld.service
# 查看SELINUX的状态
getenforce
# 安装wget
yum install -y wget
2 安装与配置http服务器
2.1安装http服务器
yum install httpd -y # 安装httpd
systemctl restart httpd.service # 服务启动
systemctl status httpd.service # 查看状态
2.2配置httpd
2.2.1 下载镜像
需要使用到安装ISO镜像,因此需要将其先导入到服务器,我使用的方法是将镜像放到windows的Nginx上,在这里直接wget下载就好。(参照我的另一篇,Nginx的环境搭建)
mkdir /var/www/html/ISO # 创建镜像存放目录
cd /var/www/html/ISO # 进入目录
wget http://192.168.0.10:8080/images/CentOS-7-x86_64-Minimal-1810.iso # 下载镜像
2.2.2 挂载镜像
将镜像挂载到 /var/www/html/ISO/MountIso,
注意会缺少.treeinfo和.discinfo两个文件!需要手动补充
mkdir /var/www/html/ISO/MountIso # 创建挂载目录
mount -o loop /var/www/html/ISO/CentOS-7-x86_64-Minimal-1810.iso /var/www/html/ISO/MountIso
2.2.3 将挂载的镜像文件复制到下载路径/var/www/html/ISO/CentOS7,使客户机能够直接通过http://192.168.0.2/CentOS7访问到系统镜像
mkdir /var/www/html/CentOS7 # 创建目录
cp -r /var/www/html/ISO/MountIso/* /var/www/html/CentOS7 # 复制镜像文件
2.2.4 创建与配置kickstart
mkdir /var/www/html/ks_config # 创建配置文件夹ks_config
touch /var/www/html/ks_config/CentOS7-UEFI-ks.cfg # 创建BIOS启动配置文件CentOS7-UEFI-ks.cfg
touch /var/www/html/ks_config/CentOS7-BIOS-ks.cfg # 创建UEFI启动配置文件CentOS7-BIOS-ks.cfg
3 安装与配置软件tftpboot
3.1安装tftpboot
yum install tftp-server -y
yum install xinetd -y
3.2配置tftpboot
3.2.1 针对BIOS引导
# 进入tftpboot文件夹
cd /var/lib/tftpboot/
# 安装syslinux(为了获取pxelinux.0文件)
yum install -y syslinux
# 创建BIOS引导文件夹
mkdir /var/lib/tftpboot/pxelinux
# 提取pxelinux.0文件
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux/
# 复制isolinux中的所有文件
cp -r /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/pxelinux/
# 创建配置文件夹,存放安装的配置default
mkdir /var/lib/tftpboot/pxelinux/pxelinux.cfg
# 创建配置文件
touch /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
编辑default文件
cat >/var/lib/tftpboot/pxelinux/pxelinux.cfg/default<<EOF
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img method=http://192.168.0.2/CentOS7 ks=http://192.168.0.2/ks_config/CentOS7-BIOS-ks.cfg
EOF
3.2.2 针对UEFI引导
# 创建UEFI引导文件夹
mkdir /var/lib/tftpboot/uefi
# 进入UEFI引导文件夹
cd /var/lib/tftpboot/uefi
# 复制镜像的中uefi引导
cp -r /var/www/html/CentOS7/EFI/BOOT/* .
# 复制内核文件
cp -r /var/www/html/CentOS7/images/pxeboot/vmlinuz .
# 复制初始化文件
cp -r /var/www/html/CentOS7/images/pxeboot/initrd.img .
# uefi/ 目录中添加名为 grub.cfg 的配置文件
touch /var/lib/tftpboot/uefi/grub.cfg
cat >/var/lib/tftpboot/uefi/grub.cfg<<EOF
set default="0"
set timeout=1
menuentry 'PXE Install CentOS 7 UEFI' --class fedora --class gnu-linux --class gnu --class os {
linuxefi uefi/vmlinuz inst.ks=http://192.168.0.2/ks_config/CentOS7-UEFI-ks.cfg inst.stage2=http://192.168.0.2/CentOS7 quiet
initrdefi uefi/initrd.img
}
EOF
3.3 配置xinetd
mv /etc/xinetd.d/tftp /etc/xinetd.d/tftp_bak # 备份tftp文件
cat >/etc/xinetd.d/tftp<<EOF
# 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 = no
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
EOF
# 开启xinetd服务
systemctl start xinetd
4 安装与配置软件DHCP
注意,如果设备都是连接在路由器的话,需要关闭路由器的DHCP功能,由服务器提供DHCP
4.1 安装DHCP
yum install dhcp -y
4.2 配置DHCP
cat >/etc/dhcp/dhcpd.conf<<EOF
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
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;
# 此处是你的网址段,我的网址端是192.168.0.X,配置时,注意最后一位是.0哦
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1; # 网关
range 192.168.0.100 192.168.0.200; # 可分配的起始IP~结束IP
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
next-server 192.168.0.2; # 提供引导文件的服务器IP地址,即tftp服务器地址
# UEFI引导
if option architecture-type = 00:07 {
# 注意以下文件的绝对路径是/var/lib/tftpboot/uefi/BOOTX64.EFI
# 提取自镜像的 CentOS7/EFI/BOOT/BOOTX64.EFI
filename "uefi/BOOTX64.EFI"; # UEFI引导映像
} else {
# BIOS引导
# 以下文件的绝对路径是/var/lib/tftpboot/pxelinux/pxelinux.0
# 提取自服务器的 /usr/share/syslinux/pxelinux.0
filename "pxelinux/pxelinux.0"; # SYSLINUX打包的BIOS引导映像
}
}
}
EOF
4.3 启动DHCP服务
# 开启DHCP服务
systemctl restart dhcpd.service
# 查看服务状态
systemctl status dhcpd.service
5 配置自动安装脚本Kickstart
5.0拓扑图
5.1 PXE自动安装脚本Kickstart编辑
5.1.1 BIOS启动脚本
注意:cat >是会覆盖原来的文件的
cat >/var/www/html/ks_config/CentOS7-BIOS-ks.cfg<<EOF
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.0.2/CentOS7/"
# Use text mode install
text
# Firewall configuration
firewall --disabled
firstboot --disable
# 这里的设备sda需要修改
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts=''
# System language
lang en_US.UTF-8
# Installation logging level
logging --level=info
# Network information
# network --bootproto=static --device=eth0 --gateway=192.168.0.1 --ip=192.168.0.102 --nameserver=180.76.76.76 --netmask=255.255.255.0 --activate
network --bootproto=dhcp --hostname=BIOS_INSTALL
# Reboot after installation
reboot
# Root password
rootpw --plaintext 1234
# SELinux configuration
selinux --disabled
# System services
services --enabled="chronyd"
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
# 清除sda所有分区
bootloader --append="rhgb quiet crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel --drives=sda
%post
systemctl disable postfix.service
%end
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
EOF
5.1.2 UEFI启动脚本
cat >/var/www/html/ks_config/CentOS7-UEFI-ks.cfg<<EOF
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.0.2/CentOS7/"
# Use text mode install
text
# Firewall configuration
firewall --disabled
firstboot --disable
# 这里的设备mmcblk0需要修改
ignoredisk --only-use=mmcblk0
# bios时删除这一条
# ignoredisk --only-use=mmcblk0
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts=''
# System language
lang en_US.UTF-8
# Installation logging level
logging --level=info
# Network information
# network --bootproto=static --device=eth0 --gateway=192.168.0.1 --ip=192.168.0.103 --nameserver=180.76.76.76 --netmask=255.255.255.0 --activate
network --bootproto=dhcp --hostname=Cobbler
# Reboot after installation
reboot
# Root password
rootpw --plaintext 1234
# SELinux configuration
selinux --disabled
# System services
services --enabled="chronyd"
# Do not configure the X Window System
skipx
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
# 清除mmcblk0所有分区
bootloader --append="rhgb quiet crashkernel=auto" --location=mbr --boot-drive=mmcblk0
autopart --type=lvm
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel --drives=mmcblk0
%post
systemctl disable postfix.service
%end
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
EOF
6 开始吧
# 重启所有服务
systemctl restart tftp httpd dhcpd xinetd