一、PXE简介
- PXE,全名Pre-boot Execution Environment,预启动执行环境;
- 通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统;
- 由Intel和Systemsoft公司于1999年9月20日公布的技术;
- Client/Server的工作模式;
- PXE客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议;
- PXE客户端(client)这个术语是指机器在PXE启动过程中的角色。一个PXE客户端可以是一台服务器、笔记本电脑或者其他装有PXE启动代码的机器(我们电脑的网卡)。
二、PXE工作流程
1.网卡上的PXE芯片有512字节,存放了DHCP和TFTP的客户端
2.启动计算机并选择网卡启动
3.PXE上的DHCP客户端会向DHCP服务器,申请IP地址
4.DHCP服务器分配一个IP址地给它,同时DHCP配置文件还告诉PXE
TFTP服务器的地址,并去下载一个pxelinux.0的文件
(1)next-server 192.168.128.140;
(2)filename "pxelinux.0";
5.pxelinux.0告诉PXE要址载的配置文件是pxelinux.cfg目录下面的default
6.PXE下载并依据配置文件的内容下载启动必须的文件,并通过kickstart.cfg配置文件开始安装系统
如图
三、安装前的准备
(0)环境准备
1.dell r720 服务器1台
2.vware workstation 10
3.手动安装一台centos7.4做为部署服务器,配置以下各步骤后,再启多个新的虚拟,实现自动安装
虚拟机网卡采用NAT模式,不要使用桥接模式,DHCP服务器,在同一局域网多个DHCP服务会有冲突。
VMware的NAT模式的dhcp服务要关闭,避免干扰。
(1)由于涉及到主机间不同基于不同协议的通信,所以为了避免不必要的麻烦,我们选择关闭防火墙以及selinux。
#systemctl disable firewalld # 关闭防火墙#vim /etc/selinux/config # 修改文件永久关闭selinux
SELINUX=disabled # 设置SELINUX的值为disabled
(2)查看一下生效情况
# firewall-cmd --state
not running
# getenforce
Disabled
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.128.140
NETMASK=255.255.255.0
GATEWAY=192.168.128.2
DNS1=202.96.128.166
#systemctl restart network #重启网络服务
四、安装并配置DHCP服务
# yum install dhcp -y
#rpm -ql dhcp # 查询dhcp相关的配置文件
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
#cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf # 复制模板配置文件
# vim /etc/dhcp/dhcpd.conf
#---------可用最简配置-------------------
next-server 192.168.128.140; #tftp服务器地址
filename "pxelinux.0"; #启动文件
subnet 192.168.128.0 netmask 255.255.255.0 {:
range 192.168.128.10 192.168.128.50; #ip地址option routers 192.168.128.2; #网关
option domain-name-servers 192.168.128.2; #DNS
}
#systemctl start dhcpd
#systemctl enable dhcpd
-------------------------------------------------------------
** 多网卡默认监听eth0,指定DHCP监听eth1网卡**
# vim /etc/sysconfig/dhcpd 在这个文件中,不是/etc/dhcp/dhcpd.conf
# Command line options here
DHCPDARGS=eth1 # 指定监听网卡
# yum install -y xinetd
# yum install -y tftp-server syslinux #syslinux 会在 /usr/share/syslinux/pxelinux.0 生成pxelinux.0文件 ,需要手动复制到/var/lib/tftpboot/ 目录中,详细见第8小点。
(2)配置xinetd,由xinetd管理tftp
# vim /etc/xinetd.d/tftp#---------可用最简配置-------------------
service tftp
{socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no #默认disable是yes的,把它改为no即可
per_source = 11
cps = 100 2
flags = IPv4
}
systemctl enable tftp
systemctl enable xinetd
systemctl start tftp
systemctl start xinetd
(3)TFTP服务根目录下要放4个文件
(1)vmlinuz #vmlinuz是可引导的、压缩的内核文件,vmlinuz是vmlinux的压缩文件。是可执行的Linux内核
(2)initrd.img #initrd.img是“initial ram disk”的简写。initrd用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态
(3)boot.msg #启动信息,可以修改
(4)pxelinux.cfg/default #安装菜单
(5)pxelinux.0 #由syslinux生成
在第8步中,有详细说明
六、安装并配置HTTP服务
(1)安装HTTP服务
yum -y install httpd
#systemctl enable httpd
#systemctl start httpd # 启动http服务
(2)后续要做的
1.将ks.cfg文件COPY到:/var/www/html
2.将镜像文件挂到:/var/www/html/cdrom
systemctl enable httpd
systemctl start httpd
七、配置ks.cfg文件
(1)ks.cfg模板文件在/root下的anaconda-ks.cfg文件
# cp /root/anaconda-ks.cfg /var/www/html/ks.cfg
(2)编辑ks.cfg文件,稍微修改一下安装介质就可以
vim /var/www/html/ks.cfg
#---------可用最简配置-------------------
#version=DEVEL
# System authorization information
auth --useshadow --enablemd5
# Install OS instead of upgrade
install
# Use CDROM installation media
url --url="http://192.168.128.140/cdrom"
# Use graphical install
#graphical
text
# Firewall configuration
firewall --enabled
firstboot --disable
ignoredisk --only-use=sda
# Keyboard layouts
# old format: keyboard us
# new format:
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=link --activate
network --hostname=localhost.localdomain
# Reboot after installation
reboot
# Root password
rootpw --iscrypted $1$GM1bMPDP$QTx3eC82a9MWJmcCaMpPX1
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc
# X Window System configuration information
xconfig --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=2048
part / --fstype="xfs" --size=1 --grow
%packages
@base
@compat-libraries
@debugging
@development
gcc
glibc
gcc-c++
openssl-devel
openssh
tree
nmap
sysstat
lrzsz
vim
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end(3)更改ks.cfg权限
chmod +r /var/www/html/ks.cfg
(4)参数说明
关键字 | 含义 |
---|---|
install | 告知安装程序,这是一次全新安装,而不是升级upgrade 。 |
url --url=" " | 通过FTP 或HTTP 从远程服务器上的安装树中安装。url --url="http://10.0.0.7/CentOS-6.7/" url --url ftp://<username>:<password>@<server>/<dir> |
nfs | 从指定的NFS 服务器安装。nfs --server=nfsserver.example.com --dir=/tmp/install-tree |
text | 使用文本模式安装。 |
lang | 设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8 |
keyboard | 设置系统键盘类型。keyboard us |
zerombr | 清除mbr 引导信息。 |
bootloader | 系统引导相关配置。bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location= ,指定引导记录被写入的位置.有效的值如下:mbr (缺省),partition (在包含内核的分区的第一个扇区安装引导装载程序)或none (不安装引导装载程序)。--driveorder ,指定在BIOS 引导顺序中居首的驱动器。--append= ,指定内核参数.要指定多个参数,使用空格分隔它们。 |
network | 为通过网络的kickstart 安装以及所安装的系统配置联网信息。network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 --bootproto=[dhcp/bootp/static] 中的一种,缺省值是dhcp 。bootp 和dhcp 被认为是相同的。static 方法要求在kickstart 文件里输入所有的网络信息。network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。 --ip= ,要安装的机器的IP 地址.--gateway= ,IP地址格式的默认网关.--netmask= ,安装的系统的子网掩码.--hostname= ,安装的系统的主机名.--onboot= ,是否在引导时启用该设备.--noipv6= ,禁用此设备的IPv6 .--nameserver= ,配置dns 解析. |
timezone | 设置系统时区。timezone --utc Asia/Shanghai |
authconfig | 系统认证信息。authconfig --enableshadow --passalgo=sha512 设置密码加密方式为 sha512 启用shadow 文件。 |
rootpw | root 密码 |
clearpart | 清空分区。clearpart --all --initlabel --all 从系统中清除所有分区,--initlable 初始化磁盘标签 |
part | 磁盘分区。part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 part / --fstype=ext4 --grow --asprimary --size=200 --fstype= ,为分区设置文件系统类型.有效的类型为ext2 ,ext3 ,swap 和vfat 。--asprimary ,强迫把分区分配为主分区,否则提示分区失败。--size= ,以MB 为单位的分区最小值.在此处指定一个整数值,如500 .不要在数字后面加MB 。--grow ,告诉分区使用所有可用空间(若有),或使用设置的最大值。 |
firstboot | 负责协助配置redhat一些重要的信息。firstboot --disable |
selinux | 关闭selinux 。selinux --disabled |
firewall | 关闭防火墙。firewall --disabled |
logging | 设置日志级别。logging --level=info |
reboot | 设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt 关机。 |
八、复制内核文件
内核文件、虚拟根文件以及菜单文件,我们都是通过tftp服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img文件。菜单文件只需要一份即可。/var/lib/tftpboot/目录规划如下:
(1)挂载光驱,虚拟一定要先在连接光驱打上钩
[root@localhost mnt]# ls -l /dev|grep cdrom
lrwxrwxrwx 1 root root 3 4月 25 23:58 cdrom -> sr0
crw-rw---- 1 root cdrom 21, 1 4月 25 23:58 sg1
brw-rw---- 1 root cdrom 11, 0 4月 25 23:58 sr0 #找到光驱设备名
#mkdir /var/www/html/cdrom 由于使用HTTP安装,所以镜像文件到挂到http根目录下
#mount /dev/cdrom /var/www/html/cdrom #挂载如果是镜像文件已上传到linux中,可以这样挂
#mount -o loop /opt/CentOS-7-x86_64-Minimal-1511.iso /var/www/html/cdrom
# ls /var/www/html/cdrom
-rw-rw-r-- 3 root root 14 9月 5 2017 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 9月 5 2017 EFI
-rw-rw-r-- 3 root root 227 8月 30 2017 EULA
-rw-rw-r-- 3 root root 18009 12月 10 2015 GPL
drwxr-xr-x 3 root root 2048 9月 5 2017 images
drwxr-xr-x 2 root root 2048 9月 5 2017 isolinux
drwxr-xr-x 2 root root 2048 9月 5 2017 LiveOS
drwxrwxr-x 2 root root 641024 9月 5 2017 Packages
drwxr-xr-x 2 root root 4096 9月 5 2017 repodata
-rw-rw-r-- 3 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 3 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 9月 6 2017 TRANS.TBL
(2)将镜像中的启动文件COPY到tftp server的根目录中
# cp /var/www/html/cdrom/images/pxeboot/vmlinuz /var/lib/tftpboot/ #第2个文件,vmlinuz文件,在镜像文件images/pxeboot
vmlinuz是可引导的、压缩的内核文件,vmlinuz是vmlinux的压缩文件。是可执行的Linux内核
# cp /var/www/html/cdrom/images/pxeboot/initrd.img /var/lib/tftpboot/ #第1个文件,initrd.img文件,在镜像文件images/pxeboot
(3)复制pxelinux.0文件到tftp目录下
首先安装yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
(4)编辑pxelinux.cfg菜单文件,即isolinux.cfg
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vim /var/lib/tftpboot/pxelinux.cfg/default
该菜单文件的配置模板在镜像文件中:/var/www/html/cdrom/isolinux/isolinux.cfg 中
#cp /var/www/html/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # 复制并改名
#cp /var/www/html/cdrom/isolinux/boot.msg /var/lib/tftpboot #可以编辑boot.msg
#vim /var/lib/tftpboot/pxelinux.cfg/default
#---------可用最简配置-------------------
default ksprompt 0 #1出现提示,0不出现提示
kernel ks
append initrd=initrd.img ks=http://192.168.128.140/ks.cfg #指定ks.cfg文件读取的位置