PXE批量安装Centos7.6,UEFI与BIOS引导通用

记载一次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

防火墙状态inactive,SELinux状态Permissive

2 安装与配置http服务器

2.1安装http服务器

yum install httpd -y                # 安装httpd 
systemctl restart httpd.service     # 服务启动
systemctl status httpd.service      # 查看状态

httpd状态:active

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

tftpboot目录结构

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

DHCP状态:active

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值