PXE(Preboot eXecution Environment ) 是由 Intel 设计的协议,它可以使计算机通过网络启动。协议分为 client 和 server 两端, PXE client 在网卡的 ROM 中,当计算机引导时, BIOS 把 PXE client 调入内存执行,并显示出命令菜单,经用户选择后, PXE client 将放置在远端的操作系统通过网络下载到本地运行。
DHCP(Dynamic Host Configuration Protocol, 动态主机配置协议 )
TFTP(Trivial File Transfer Protocol, 简单文件传输协议 )
区别于光盘安装和本地磁盘的模式,安装介质位于网络上。常见的网络安装方式有 NFS image 、 FTP 、 HTTP 等。如下图:
从 RHEL 的某个版本 开始支持 , 其主要目的是为了减少安装过程中的人机交互,提高安装效率。
使用这种方法,只需事先定义好一个配置文件(通常存放在安装服务器上),安装程序从该文件中读取安装配置,自动化安装。
样例见linux 的/root/anaconda-ks.cfg 文件
以下软件除 PXE 外,其它均可在 RHRL5 发行版光盘镜像中找到。
可以使用 yum 安装。如:
# yum install dhcp
PXE
dhcp
tftp-server
tftp (客户端,非必须,对tftp-server 的验证和排错方便点)
Syslinux (安装过程需要用到其中名为pxelinux.0 的文件)
这两个软件非必须,但 system-config-kickstart 依赖于 pykickstat
理论上所有linux 发行版都能通过这种方式来安装,细微差异应该能在各发行版的手册中找到。
至少要安装其中的一种软件,不然就没法网络安装了。
带有 PXE 支持 ,可以从网络启动
无特殊要求
交换机——客户机与服务器在连接在一个交换机上,能接受对方的广播包
客户机的BIOS 设置为从网络启动
客户机从DHCP 服务器获取IP 地址
客户机从DHCP 服务器指定的TFTP 加载引导镜像
根据TFTP 服务器中的配置文件开始自动化安装。如果配置文件给的信息太少,将会进入交互的安装模式。交互安装模式中,可以选择安装介质在网络上的位置及访问方式。
M ount 光盘镜像文件
# mkdir -p /media/owlinux36
# mount -t iso9660 /root/OWLinux-3.6-U1.iso /media/owlinux36 -o loop
验证是否mount 成功
# cd /media/owlinux36 && ls
编辑配置文件
# vi /etc/xinetd.d/tftp
# 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 { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /tftpboot per_source = 11 cps = 100 2 flags = IPv4 } |
启动tftp 服务
# chkconfig tftp on
# service xinetd re start
验证tftp 服务
查看tftp 是否在网络上侦听
# netstat --listen | grep tftp
在 linux 或 windows 的命令行模式下运行 tftp 命令并下载 /tftpboot 里面的文件 , 以测试 tftp 服务是否正常。
# 在 /tftpboot 中新建一个文件
# touch /tftpboot/file4test
# linux 下命令
# tftp 192.168.95.1 -c get file4test
# windows 下命令
# tftp 192.168.95.1 get file4test
编辑配置文件
# vi /etc/dhcpd.conf
增加 红色 的配置项
修改 红色 和 蓝色 的配置项
注释掉 黄色 的配置项(在自动安装 linux 系统时,如果长时间(约 10 分钟)停留在“ Determining host name and domain”, 可以把这些项注释掉。)
ddns-update-style interim; ignore client-updates; # allow boot from network use PXE subnet 192.168.95.0 netmask 255.255.255.0 { # --- default gateway option routers 192.168.95.1; option subnet-mask 255.255.255.0; option nis-domain "alrise.org"; option domain-name "alrise.org"; option domain-name-servers 192.168.95.1; option time-offset -18000; # Eastern Standard Time # option ntp-servers 192.168.1.1; # option netbios-name-servers 192.168.1.1; # --- Selects point-to-point node (default is hybrid). Don't change this unless # -- you understand Netbios very well # option netbios-node-type 2; range dynamic-bootp 192.168.95.192 192.168.95.254; default-lease-time 21600; max-lease-time 43200; # next-server is the tftp server. next-server 192.168.95.1; filename "pxelinux.0"; # we want the nameserver to appear at a fixed address host ns { next-server marvin.redhat.com; hardware ethernet 12:34:56:78:AB:CD; fixed-address 207.175.42.254; } } |
启动dhcpd 服务
#chkconfig dhcpd on
#service dhcpd restart
验证dhcpd 服务
# tail -f /var/log/messages
# more /var/lib/dhcpd/dhcpd.leases
复制 /usr/lib/syslinux 下的 pxelinux.0 这个文件到 tftp 服务器的根目录下
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot
在该目录下创建 pxelinux.cfg 目录。 复制 i mages/pxeboot 目录下的 initrd.img 和 vmlinux 复制到 tftp 服务器的根目录下 ,
# mkdir /tftpboot / pxelinux.cfg
进入 mount 的光盘的目录
# cd /media/owlinux36
# cp images/pxeboot/{initrd.img,vmlinuz} /tftpboot
将 isolinux 目录中的 isolinux.cfg 文件复制到 /tftpboot/pxelinux.cfg 目录中,然后将该文件重命名为 default
# cp isolinux/isolinux.cfg /tftpboot/ pxelinux.cfg/default
将 isolinux 目录下的所有扩展名为 .msg 的文件复制到 /tftpboot 下
# cp isolinux/*.msg /tftpboot
这两种服务的配置各位应该是轻车熟路了,不再多说,按照最简原则来做。
以FTP 服务器的配置为例:
先前我们已将安装镜像mount 到/media/owlinux ,
现在只需修改默认ftp 用户的主目录到/media/owlinux 就可以了
# usermod -d /media/owlinux ftp
# chconfig vsftpd on
# service vsftpd restart
在浏览器中输入ftp://192.168.95.1 ,看看有没有文件列表
等等,怎么还是手动安装呢?不是可以自动化安装的吗?
是的,到目前为止,我们一直都是做的手动的操作——安装程序、修改配置、复制文件,连喝杯茶的时间都没有。
那么,就先喝杯茶吧!
顺便看看 linux 的安装画面。
从网络启动
这里的选项在 /tftpboot/ pxelinux.cfg/default 中定义了的(源文件是发行版光盘镜像里的 isolinux/isolinux. c fg )
Next……next…… 选择安装介质,就是开篇的那幅图了。
选择从 FTP 安装,这里还是要我们来输入 FTP 站点名、目录之类的。在这里站点填 192.168.95.1 ,目录填 / ,按下 OK ,就会进行下一步的安装了。
完全的手动安装。
休息好了吗?
开始配置自动安装吧!
为什么还要规划呢?不过是装几台服务器。
可是,如果我们要装几十台或者更多的服务器呢?或者你有些机器装RHEL ,有些装SLES ,有些装CentOS…… 还有两台要装Fedora !稍微有一点差错,我们就不得不重装每台机器。
客户机获取到IP 地址之后,会到TFTP 服务器的/tftpboot/pxelinux.cfg 目录下寻找配置文件。
某台机器的 MAC 地址是 `88:99:AA:BB:CC:DD` ,获取到的 IP 为 192.0.2.91 (对应的 16 进制数是 C000025B ),那么它会按照下面的顺序去查找它的配置文件:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/C000025B
/tftpboot/pxelinux.cfg/C000025
/tftpboot/pxelinux.cfg/C00002
/tftpboot/pxelinux.cfg/C0000
/tftpboot/pxelinux.cfg/C000
/tftpboot/pxelinux.cfg/C00
/tftpboot/pxelinux.cfg/C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
可以看到它的顺序是先查找有没有和它的 MAC 地址对应的配置文件,然后是 IP 地址,再到某个可能是它的子网,最后就是 default 了
那么,就很好分配了,例如:
192.0.2.0/24 这个网段的机器都装 SLES ,那么就修改对应的配置文件 /tftpboot/pxelinux.cfg/C00002 ;
192.168.95.240/28 这个网段的机器都装 RHEL ,那么就修改对应的配置文件 /tftpboot/pxelinux.cfg/C0A85FF ;
这些配置文件可以复制 default 再略作修改 :
# cp /tftpboot/pxelinux.cfg/default /tftpboot/pxelinux.cfg/C00002
# vi /tftpboot/pxelinux.cfg/C00002
根据上面的原理好好计算一下如何划分子网吧,然后编辑DHCP 服务器的配置文件
# vi /etc/dhcpd.conf
如果要用到多个TFTP 服务器,记得修改next-server 这个参数的值。
根据上面的原理和服务器的规模,就可以大概计算出来了。DHCP 服务器一两台足够了。TFTP 的性能不太好,大约每80 台客户机就需要一台TFTP 服务器。文件服务器的数量根据安装镜像的大小及客户机数量计算吧,要保证每台客户机有足够的带宽。
下面是一个 Linux 发行版的配置文件, 红色 的配置项是我增加的,在实际环境中请删除。
default text
prompt 1
# 600 (单位位置,这个时间大于 6 秒小于 6 分钟)之内没有选择安装模式,就自动加载上面 default 定义的那个模式 text
timeout 600
serial 0 9600 0
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label serial
kernel vmlinuz
append initrd=initrd.img text ramdisk_size=8192 ks=cdrom:ks.cfg console=ttyS0,9600n8
label linux
kernel vmlinuz
append initrd=initrd.img ramdisk_size=8192 ks=cdrom:ks.cfg console=tty0
label i586
kernel vmlzi586
append initrd=initi586.img ramdisk_size=8192 ks=cdrom:ks.cfg console=tty0
label text
kernel vmlinuz
# 这里配置的是客户机从哪里获取自动安装的配置(ks 是kickstart 的简写),如果ks.cfg 在FTP 服务器 192.168.95.1 的根目录,那么将 cdrom:ks. c fg 替换成 ftp://192.168.95.1/ ks.cfg
append initrd=initrd.img text ramdisk_size=8192 ks= cdrom:ks.cfg console=tty0
label expert
kernel vmlinuz
append expert initrd=initrd.img ramdisk_size=8192 console=tty0
label lowres
kernel vmlinuz
append initrd=initrd.img lowres ramdisk_size=8192 console=tty0
label local
localboot 1
label memtest86
kernel memtest
append -
使用RHEL 的kickstart 工具生成配置文件
# system-config-kickstart
打开的程序界面如下:
不过有一个问题是读取某些Linux 的ks.cfg 文件时总会出错,而且这里配置的“分区信息”无法写入ks.cfg 中。
以下是ks.cfg 的部分配置,可以和/root/anaconda-ks.cfg 比较一下:
install
# 这里配置安装文件的位置,cdrom 为光驱,从网络安装就修改成如下格式
# url --url http://192.168.95.1/release 等等
url --url ftp://192.168.95.1/
lang en
langsupport --default=en en_US.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_CN.UTF-8 zh_SG.UTF-8 zh_TW.UTF-8
keyboard us
#Do not configure XWindows
skipx
network --device eth0 --bootproto static --ip 192.168.95.75 --netmask 255.255.255.0 --gateway 192.168.95.1 --nameserver=192.168.95.1 --hostname OWLinux.alrise.org
rootpw --iscrypted $1$5WB1itub$rIvx/ZrB9tRUm7bWj3vGz/
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone Asia/Shanghai
# 引导装载程序选项
bootloader --location=mbr #--append="console=ttyS0,9600n8"
# 删除所有现存磁盘分区
clearpart --all
# 新分区表
part /boot --fstype ext3 --size=100
part swap --size=1024
part / --fstype ext3 --size=100 --grow
# 安装完成后重新启动
reboot
根据 /tftpboot/pxelinux.cfg/ 下配置文件中 ks.cfg 的路径,把生成的 ks.cfg 文件保存到这个路径。
所有的配置都完成了?
泡上一杯茶,再好好检查一下配置吧!
我得去启动每台机器来开始自动化安装了。
什么?还要自己去启动每台机器来安装?这也叫自动化?
……
如果服务器配置了IPMI 模块,启动机器这一步就可以省了,前提是机器都接通电源,插上网线。
什么?接电源和插网线也想自动化?