• 关于PXE无盘工作站系统的简介
PXE无盘工作站系统是指由一台或多台“系统服务器”和多台“PXE客户端(无盘工作站)”通过 交换机 相连组成的局域网系统。
(图1:无盘工作站系统部署拓扑图)
• 系统服务器:通过DHCP+TFTP+NFS服务向无盘工作站提供系统支持
DHCP服务: | 向PXE客户端分发IP地址、子网掩码、网关等,并指定启动引导文件所在服务器(TFTP服务器)的地址和PXE启动文件(pxelinux.0) |
TFTP服务: | 向PXE客户端传输PXE启动文件、PXE引导配置文件、linux内核vmlinuz,以及系统启动文件initrd.img |
NFS服务: | 向PXE客户端发布工作站的系统(整个根目录“/”的克隆);为了避免磁盘IO资源的冲突,建议将克隆的系统部署在存储服务器上 |
• PXE客户端:PXE客户端无需硬盘,但需要一块支持PXE启动的网卡,不过其他硬件比如主板、内存条、电源等,还是必须要的;将“网卡启动”设置为首选
(图2:PXE启动流程图)
• 部署之前,先要规划好系统服务器和无盘工作站的工作环境
• 系统环境
操作系统: | release 6.5 x86_64 |
防火墙: | 关闭iptables服务并禁止其开机自启;关闭selinux |
其他: | 配置好YUM仓库:禁用无用的开机自启服务(sshd服务和rpcbind服务不能禁用) |
• 软件环境
dhcp-4.1.1-49.P1.el6.centos.x86_64 | // 提供DHCP 服务;指定TFTP 地址及PXE 启动文件 |
tftp-server-0.49-7.el6.x86_64 | // 向无盘工作站传输系统启动文件等 |
nfs-utils-1.2.3-64.el6.x86_64 | // 共享发布工作站系统 |
syslinux-4.04-3.el6.x86_64 | // 提供引导程序"pxelinux.0" |
rpcbind-0.2.0-11.el6.x86_64 | // 为NFS 服务的依赖程序 |
dracut-004-388.el6.noarch | // 用来制作启动initrd 镜像 |
dracut-network-004-388.el6.noarch | // 依赖包,否则将导致PXE无法启动 |
• 网络环境
主机类别: | 主机名: | IP地址: | 子网掩码: | 网关/路由: |
系统服务器A | HostServerA | 192.168.8.8 | 255.255.255.0 | 192.168.8.254 |
系统服务器B | HostServerB | 192.168.8.9 | 255.255.255.0 | 192.168.8.254 |
无盘工作站 | WorkStation/WS100~200 | 192.168.8.100~200 | 255.255.255.0 | 192.168.8.254/不设置(禁止工作站联网) |
分别在“系统服务器A”和“系统服务器B”上进行下列所有操作:
• 开始进行安装部署了,首先,要克隆好工作站的系统模板
1. 创建工作站系统模板的存放目录(/nodiskos/workstation)和启动引导文件存放目录(/nodiskos/tftpboot)
1
2
3
|
mkdir
/nodiskos
//
系统模板+启动文件存放目录
mkdir
/nodiskos/tftpboot
//
工作站系统启动文件存放目录
mkdir
/nodiskos/workstation
//
工作站系统模板存放目录
|
2. 使用rsync 工具将整个"/"目录拷贝到/nodiskos/workstation 目录下,去除不需要的文件目录
1
|
rsync
-av --exclude=
'/proc'
--exclude=
'/sys'
--exclude=
'/tmp'
--exclude=
'/var/tmp'
--exclude=
'/etc/mtab'
--exclude=
'/nodiskos'
/*
/nodiskos/workstation
|
3. 重新创建被删掉的目录,还原系统模板的目录结构
1
2
|
cd
/nodiskos/workstation
mkdir
proc sys tmp var
/tmp
|
4.调整系统模板的设备挂载配置文件/nodiskos/workstation/etc/fstab:删除所有的本地存储设备挂载信息(如:/和/boot);添加系统模板的挂载信息。以“系统服务器A”为例(注意:系统服务器B的ip设置为192.168.8.9):
1
2
3
4
5
6
7
8
9
10
11
|
# /etc/fstab
# Created by anaconda on Fri Dec 25 10:58:41 2015
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
192.168.8.8:
/nodiskos/workstation
/ nfs defaults 0 0
tmpfs
/dev/shm
tmpfs defaults 0 0
devpts
/dev/pts
devpts gid=5,mode=620 0 0
sysfs
/sys
sysfs defaults 0 0
proc
/proc
proc defaults 0 0
|
5. 修改系统模板的主机名,如WorkStation
编辑配置文件/nodiskos/workstation/etc/sysconfig/network,将HOSTNAME=参数值修改为WorkStation
6. 最后,删除所有ifcfg-eth*网卡配置文件,只需保留ifcfg-lo
1
|
rm
-f
/nodiskos/workstation/etc/sysconfig/network-scripts/ifcfg-eth
*
|
7. 最后的最后,将整个工作站系统模板打包备份到系统服务器的/opt 目录下,以作备用(例如下面的第8 步,为单个/每个工作站创建独立的系统)
1
2
|
cd
/nodiskos
tar
-cvf
/opt/workstation
.
tar
workstation
|
8. 正如第7 步所述,可根据需求,为单个/每个工作站创建独立的系统。以WS100~110 为例:
1)将备份的系统模板解压下来,并批量分别拷贝到各自独立工作站的系统目录下
1
2
3
4
5
6
|
cd
/opt
for
i
in
$(
seq
-w 100 110)
>
do
>
tar
-xvf workstation.
tar
>
mv
workstation
/nodiskos/WS
$i
>
done
|
2)最后,还需要为每台独立的工作站调整fstab 的挂载信息、network 的主机名、hosts 的本地域名解析。可执行如下shell 脚本进行批量替换,需要赋予执行权限:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# 以WS100~110 为例
# 第一个for 循环是替换fstab 的挂载信息和主机名,其中:
# 第1 个sed 是替换/nodiskos/WS###/etc/fstab 的挂载信息
# 第2 个sed 是替换主机名
# 第3 个sed 是在hosts 文件中增加本机的域名解析
# 第二个for 循环是打印出替换后的结果,以便于检查是否替换正确
# 脚本内容如下:
#!/bin/bash
for
i
in
$(
seq
-w 100 110)
do
sed
-i
"/nodiskos/s/workstation/WS$i/g"
/nodiskos/WS
$i
/etc/fstab
sed
-i
"s/WorkStation/WS$i/g"
/nodiskos/WS
$i
/etc/sysconfig/network
sed
-i
"1a 192.168.8.$i WS$i"
/nodiskos/WS
$i
/etc/hosts
done
for
i
in
$(
seq
-w 100 110)
do
echo
-e
"fstab : \c"
&&
sed
-n
"/nodiskos/p"
/nodiskos/WS
$i
/etc/fstab
echo
-e
"network : \c"
&&
sed
-n
"/HOST/p"
/nodiskos/WS
$i
/etc/sysconfig/network
echo
-e
"hosts : \c"
&&
sed
-n
"/192.168/p"
/nodiskos/WS
$i
/etc/hosts
echo
-e
"\n"
done
|
• 接下来,准备好工作站启动引导需要的文件
1. 安装syslinux 和dracut 软件包
1
|
yum
install
syslinux dracut dracut-network
|
2. 拷贝PXE启动文件(由syslinux 程序提供)
1
|
cp
/usr/share/syslinux/pxelinux
.0
/nodiskos/tftpboot
|
3. 拷贝用linux内核文件vmlinuz
1
|
cp
/boot/vmlinuz-2
.6.32-431.el6.x86_64
/nodiskos/tftpboot
|
4. 创建用于系统启动 镜像文件initrd.img(先执行命令 uname -r 查看内核版本,如:2.6.32-431.el6.x86_64)
1
2
3
|
dracut initrd-2.6.32-431.el6.x86_64.img 2.6.32-431.el6.x86_64
chmod
644 initrd-2.6.32-431.el6.x86_64.img
mv
initrd-2.6.32-431.el6.x86_64.img
/nodiskos/tftpboot
|
5. 在/nodiskos/tftpboot/pxelinux.cfg/目录下创建默认的PXE引导配置文件"default"(也可为单个/每个工作站创建独立的引导配置文件,如WS100)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# prompt 0 表示工作站立即启动,1 表示工作站等待选择
# kernel 指定内核文件
# append 后面的加下划线的是一行内容,不能换行!!!
# append 附加参数值解释说明:
# initrd= 指定用于引导的initrd 镜像文件
# root= 指定工作站系统的nfs 路径(注意:“系统服务器B”设置成192.168.8.9)
# selinux= 设置selinux 开关,0 表示关闭,1 表示开启,默认为1
# rw 设置工作站系统为可读写
# nomodeset 这个参数是配合后面的vga=参数一起使用,设置分辨率
# vga= 这个参数值是设置分辨率,0x 表示十六进制,0314 表示800*600 16 位色;若无特殊需求,建议删除这2个参数
# 文件内容如下:
default auto
label auto
prompt 0
kernel vmlinuz-2.6.32-431.el6.x86_64
append initrd=initrd-2.6.32-431.el6.x86_64.img root=nfs:192.168.8.8:
/nodiskos/workstation
selinux=0 ip=dhcp rw nomodeset vga=0x0314
|
6. 若要为单个/每个工作站创建独立的引导配置文件,以WS100~110 为例:
1)引导配置文件的文件名为该工作站IP 地址的十六进制转换值。如WS100 的IP 地址为192.168.8.100,那么它的配置文件的文件名就是"C0A80864";对照关系如下:192→C0,168→A8,8→08,100→64。
2)文件内容可参照default,只需将append 下的root=参数值指定为对应的WS100 的nfs 路径,例如:root=nfs:192.168.8.8:/nodiskos/WS100,前提是/nodiskos/WS100 需要存在。
3)为了方便,可用如下shell 脚本,参照默认配置文件default,进行批量创建和修改:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 以WS100~110 为例
# for 循环的主体说明:
# 第1 行:printf 是将WS###的IP 地址转换成十六进制,并赋值给参数ws_name
# 第2 行:以default 文件为模板,以IP 地址的十六进制值为文件名,进行批量复制
# 第3 行:批量修改root=参数值指定的WS###的nfs 路径
# 第4 行:打印出替换后的结果,以便于检查是否替换正确
# 脚本内容如下:
#!/bin/bash
cd
/nodiskos/tftpboot/pxelinux
.cfg/
for
i
in
$(
seq
-w 100 110)
do
ws_name=$(
printf
"%02X"
192 168 8 $i)
cp
default $ws_name
sed
-i
"s/workstation/WS$i/g"
$ws_name
sed
-n
"/append/p"
$ws_name
done
|
7. 最后,/disklessboot/tftpboot 目录下应该有下列几个文件/目录:
initrd-2.6.32-431.el6.x86_64.img | // 用于引导的initrd 镜像文件 | (由第4 步创建) |
pxelinux.0 | // PXE 引导文件 | (由第2 步创建) |
pxelinux.cfg/default | // 默认的引导配置文件 | (由第5 步创建) |
pxelinux.cfg/C0A808## | // 定制的引导配置文件 | (由第6 步创建) |
vmlinuz-2.6.32-431.el6.x86_64 | // 用于引导的内核文件 | (由第3 步创建) |
• 配置DHCP服务
1. 安装DHCP 服务软件包
1
|
yum
install
dhcp
|
2. 编辑配置文件/etc/dhcp/dhcpd.conf
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
|
# dhcpd.conf 部分参数说明:
# default-lease-time // 指定确认租赁时长,单位为秒,-1 表示无限制
# max-lease-time // 指定最大租赁时长
# authritative // 拒绝不正确的IP 地址的要求
# subnet netmask {} // 设置dhcp 区域
# range // 提供动态分配IP 的范围;若所有工作站都是绑定的固定IP,可删除此配置
# option routers // 设置网关/路由器地址,多个地址用逗号隔开;若不想让客户端上网,可删除此配置
# domain-name-servers // 设置DNS,若不想让客户端上网,可删除此配置;多个地址用逗号隔开
# next-server // 告知工作站TFTP 服务器的地址,TFTP 服务提供启动引导(注意:“系统服务器B”设置成192.168.8.9)
# filename // 告知工作站PXE 引导程序名
# host XXX {} // 此处是根据工作站的MAC 地址绑定固定的IP 地址,前提是知道MAC 地址
# hardware ethernet // 工作站的MAC 地址,一定要小写
# fixed-address // 绑定固定的IP 地址,和range 的不会有冲突,优先以它为主
# 配置内容如下:
ddns-update-style none;
ignore client-updates;
default-lease-
time
-1;
max-lease-
time
-1;
authritative;
subnet 192.168.8.0 netmask 255.255.255.0 {
range 192.168.8.100 192.168.8.200;
option routers 192.168.8.254;
option domain-name-servers 114.114.114.114,202.96.209.5;
next-server 192.168.8.8;
filename
"pxelinux.0"
;
host WS100 {
hardware ethernet 12:34:56:78:ab:
cd
;
fixed-address 192.168.8.100;
}
host WS101 {
hardware ethernet 12:34:56:90:ab:00;
fixed-address 192.168.8.101;
}
}
|
3. 重启DHCP服务,且将DHCP服务设置成开机自启
1
2
3
|
service dhcpd restart
chkconfig dhcpd on
chkconfig |
grep
dhcpd
|
• 配置TFTP服务
1. 安装TFTP 服务软件包
1
|
yum
install
tftp-server
|
2. 编辑配置/etc/xinetd.d/tftp,只需更改如下2 处:
1
2
3
4
5
6
7
8
|
# and to start the installation process for some operating systems.
service tftp
{
...... ........
server_args = -s
/nodiskos/tftpboot
# 改成启动文件的存放目录
Disable = no
# 将yes 改成no,以激活此服务
...... ........
}
|
3. TFTP 服务是通过xinetd 工具管理的,因此需要通过xinetd 启动、停止、重启等
1
2
3
|
service xinetd restart
chkconfig xinetd on
chkconfig |
grep
xinetd
|
• 配置NFS服务
1. 安装NFS 服务软件包
1
|
yum
install
nfs-utils rpcbind
|
2. 编辑配置文件/etc/exports,添加如下内容:
1
2
3
4
5
6
7
8
9
10
|
# 这一行是配置默认的工作站系统目录
/nodiskos/workstation
192.168.8.0
/24
(rw,async,no_root_squash)
# 以下部分是为工作站发布独立的系统目录
/nodiskos/WS100
192.168.8.100(rw,async,no_root_squash)
/nodiskos/WS101
192.168.8.101(rw,async,no_root_squash)
/nodiskos/WS102
192.168.8.102(rw,async,no_root_squash)
/nodiskos/WS103
192.168.8.103(rw,async,no_root_squash)
/nodiskos/WS104
192.168.8.104(rw,async,no_root_squash)
...... ......
|
3. 若独立的工作站数量大,可用如下shell 脚本进行批量添加
1
2
3
4
5
6
7
8
|
#!/bin/bash<br>
echo
'/nodiskos/workstation 192.168.8.0/24(rw,async,no_root_squash)'
>
/etc/exports
for
i
in
$(
seq
-w 100 110)
do
sed
-i
"\$a \/nodiskos\/WS$i 192.168.8.$i(rw,async,no_root_squash)"
/etc/exports
done
cat
/etc/exports
|
4. 重启NFS服务,且将NFS服务设置成开机自启
1
2
3
|
service nfs restart
chkconfig nfs on
chkconfig |
grep
nfs
|
5. 至此,所有配置都已完成了。最后检查下DHCP、TFTP、NFS这3个服务是否都已启动,是否都已设置成开机自启
1
2
3
4
5
6
|
service dhcpd status
service xinetd status
service nfs status
chkconfig |
grep
dhcpd
chkconfig |
grep
xinetd
chkconfig |
grep
nfs
|
6. 最后的最后,将所有PXE客户端的启动项设置成首选网卡启动,然后就启动PXE客户端了!!!