关于PXE

Preboot Execution Environment翻译过来就是预启动执行环境;简称PXE;传统安装操作系统的方法是CDROM或U盘引导,而PXE技术解决的是从网络引导安装系统,当然PXE技术不是什么新技术了,是Intel和Microsoft在1998年定义的更大PC98规范的一部分。有关PXE规范的详细文档

pxe引导相关角色说明

PXE作用: 引导装机
Kickstart作用: 将安装系统的过程中通过ks.cfg文件中的配置信息,实现自动安装配置达到无人值守自动安装;
TFTP: 支持PXE 引导的网卡中从tftp服务器端下载pxelinux.0文件、vmlinuz、initrd.img等内核引导文件;
DHCP: PXE引导过程中获首先获取IP地址,并提供pxelinux.0文件位置;
HTTP: 用于下载ks.cfg以及系统镜像文件
通用的无人值守做法如下:
通过一台没有系统的裸机网卡支持pxe协议,开机后从dhcp服务器获取ip和pxelinux.0文件并从tftp服务器上加载相关内核引导文件;同时下载 kickstart的cfg配置文件,指定系统镜像文件位置加载安装,从而实现无人值守安装!
如图(图片来自于网络):

满足Kickstart安装系统的需求

  1. 网卡必须支持PXE引导;
  2. 客户端需要有与Kickstart 通信的IP地址,这里一般都是通过DHCP自动分配IP地址来实现;
  3. 提供引导所需的文件,内核文件,内核镜像文件等,此时一般通过tftp-server等实现;
  4. kickstart文件,它主要实现自动化安装的过程,比如配置主机名、添加用户、安装系统后相关操作;
  5. 提供安装源,一般就是NFS/ftp/httpd等;

环境准备

vmware station虚拟机
网卡NAT模式
IP地址:192.168.153.11
所需要的服务器都安装在同一台服务器上
1、虚拟机挂载7.2的ISO文件
mount /dev/cdrom /mnt/
2、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
3、关闭selinux
setenforce 0
改配置文件

DHCP服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@localhost ~]# yum -y install dhcp
[root@localhost ~]# cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak_$(date +%Y-%m-%d-%H-%M)
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.153.0 netmask 255.255.255.0 {
option routers 192.168.153.2;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.153.2;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.153.200 192.168.153.220;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.153.11;
filename "pxelinux.0";
}

注意:多网卡的时候绑定网卡启动dhcp服务,不是多网卡不用理会这步。
[root@localhost ~]# cat /usr/lib/systemd/system/dhcpd.service
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target
[Service]
Type=notify
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid eno33554984
[Install]
WantedBy=multi-user.target
[root@localhost ~]#systemctl start dhcpd.service
[root@localhost ~]#systemctl enable dhcpd.service
[root@localhost ~]#ss -tunl | grep ":67" #验证是否运行成功

TFTP服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
[root@localhost ~]#yum install -y tftp-server xinetd  syslinux
[root@localhost ~]#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 #这个设置为no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@localhost ~]#cp -rf /usr/share/syslinux/* /var/lib/tftpboot
说明:syslinux是一个功能强大的引导加载程序,而且兼容各种介质。更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。
[root@localhost ~]#mkdir /var/lib/tftpboot/pxelinux.cfg
[root@localhost ~]#mkdir /var/lib/tftpboot/centos7
[root@localhost ~]#cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7
[root@localhost ~]#cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos7
[root@localhost ~]#touch /var/lib/tftpboot/pxelinux.cfg/default
[root@localhost ~]#chmod 755 /var/lib/tftpboot/pxelinux.cfg/default
[root@localhost ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 1
timeout 30
menu title ########## GXM-PXE Boot Menu ##########
label linux
menu label Install CentOS 7.2 x86_64
menudefault
kernel centos7/vmlinuz
append initrd=centos7/initrd.img text inst.repo=http://192.168.153.11/CentOS-7.2-x86_64 ks=http://192.168.153.11/CentOS-7.2-x86_64/CentOS-7.2-x86_64.cfg
[root@localhost ~]#systemctl start xinetd
[root@localhost ~]#systemctl enable xinetd
[root@localhost ~]#systemctl start tftp
[root@localhost ~]#systemctl enable tftp
[root@localhost ~]#netstat -tulnp | grep xinetd
备注:可以设置多个label。

HTTP服务器(也可以用NFS或FTP)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@localhost ~]#yum install -y httpd createrepo
[root@localhost ~]#mkdir /var/www/html/CentOS-7.2-x86_64
[root@localhost ~]#cp -a /mnt/* /var/www/html/CentOS-7.2-x86_64/
[root@localhost ~]#cat /var/www/html/CentOS-7.2-x86_64/CentOS-7.2-x86_64.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Install OS instead of upgrade
install
# Use network installation
url --url=http://192.168.153.11/CentOS-7.2-x86_64
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=eno16777736 --onboot=yes --ipv6=auto
network --hostname=localhost.localdomain
# Root password
rootpw --iscrypted $1$password$7ZK8mMeLGXxbNPeJEFJOU0
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --none --initlabel
%packages
@^minimal
@core
kexec-tools
vim
wget
httpd
lrzsz
net-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
selinux --disabled
reboot

备注1:
也可以用图形化配置生成ks文件,步骤如下:
安装Kickstart:

1
yum -y install system-config-kickstart

在桌面环境下配置Kickstart:

1
system-config-kickstart

备注2:
ks的配置文件中rootpw密码可以使用明文,也可以使用加密过的值。
比如明文密码是:123456,对应加密后的密码是:$1$password$7ZK8mMeLGXxbNPeJEFJOU0
那这个密码是怎么生成的呢,其实和生成linux操作系统的密码shadow一样,命令如下:
perl -e ‘print crypt(“123456”,q($1$password)),“\n”’
当使用特殊字符时,例如@$符时需要在前面加上\,例:@$,否则加密字符串会错误
其中123456为要给用户设置的密码,$1$password字符串是自定义字符串,shadow里一般用$1$后面跟8个字符这种格式。

1
2
3
4
5
[root@localhost ~]#createrepo -pdo /var/www/html/CentOS-7.2-x86_64/ /var/www/html/CentOS-7.2-x86_64/
[root@localhost ~]#createrepo -g `ls /var/www/html/CentOS-7.2-x86_64/repodata/*-comps.xml` /var/www/html/CentOS-7.2-x86_64/
[root@localhost ~]#systemctl start httpd.service
[root@localhost ~]#systemctl enable httpd.service
[root@localhost ~]#curl --head http://192.168.153.11/CentOS-7.2-x86_64/CentOS-7.2-x86_64.cfg #验证是否可以访问,可以则返回200

创建虚拟机,选择NAT网卡,有必要可以关闭vmnet8的dhcp功能。成功。