PXE协议是Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存中执行,并显示出命令菜单,经过用户选择后,PXE client将放置在远端的操作系统安装文件下载到本地运行,无盘工作站就是通过PXE来启动的。
PXE协议的成功运行需要解决一下两个问题:
+ IP地址分配:可以用DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP client动态分配IP地址的协议,不过由于这里是给PXE client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。
+ 下载Linux内核和根文件系统:PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。
1. 工作原理
PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行在另外一台Linux Server上。Boostrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。PXE Client在工作过程中,需要三个二进制文件:bootstrap、Linux内核和Linux根文件系统。
Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
说明:
/tftpboot是tftp server的根目录
/tftpboot/pxelinux.0是Bootstrap文件,提供调用启动菜单的作用。
/pxeboot/initrd.img是内核引导文件
/pxeboot/vmlinux是压缩的Linux内核镜像
/tftpboot/*.msg是各个引导模块的菜单选项
2. 安装步骤
首先需要配置PXE安装的Server环境,在该服务器上,需要安装dhcp和tftp服务。
yum install -y dhcp tftp tftp-server nfs-utils httpd tcpdump
*关闭SELinux系统*:在使用tftp过程中,部分功能(tftp的文件下载)会被系统防护软件selinux屏蔽掉。在CentOS中SELinux默认是开启的,所以需要修改配置文件/etc/sysconfig/selinux
将SELinux关闭(需要重启系统,设置方可生效),将其中的SELINUX=enabled
改为SELINUX=disabled
。也可以通过setenforce 0
命令临时将SELinux关闭,但是系统重启后,SELinux依然随系统启动。
setenforce 0
sed -i "7s/enforcing/disabled/" /etc/selinux/config
cat /etc/selinux/config
*关闭系统防火墙*:执行命令如下:
service iptables stop && chkconfig iptables off
a. 配置tftp服务器
tftp服务器中存放着linux系统启动时的内核镜像和配置文件。这里只需要修改tftp-server的配置文件/etc/xinetd.d/tftp,将内容修改为:
cat > /etc/xinetd.d/tftp <<EOF
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -u nobody -s /tftpboot
disable = yes
per_source = 11
cps = 100 2
flags = IPv4
}
EOF
cat /etc/xinetd.d/tftp
创建tftp的根目录,然后把所需的文件都移动到该目录中。
mkdir /tftpboot
chmod 777 /tftpboot
启动tftp-server服务,并添加xinetd服务随系统启动:
service xinetd start
chkconfig xinetd on
查看系统中的tftp是否启动,使用命令netstat -a | grep tftp
。
b. 配置DHCP服务器
安装dhcp软件包之后,修改配置文件/etc/dhcp/dhcpd.conf
为以下内容:
cat > /etc/dhcp/dhcpd.conf <<EOF
ddns-update-style interim;
ignore client-updates;
authoritative;
allow booting;
allow bootp;
subnet 192.168.25.0 netmask 255.255.255.0 {
range 192.168.25.30 192.168.25.100;
option routers 192.168.25.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.25.1;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.25.1;
filename "/pxelinux.0";
host extra-host{
hardware ethernet 00:0c:29:c0:a7:99;
fixed-address 192.168.25.30;
}
}
EOF
cat /etc/dhcp/dhcpd.conf
配置文件带注释的版本:
ddns-update-style interim; /*dhcp支持的dns动态更新方式*/
ignore client-updates; /*忽略客户端DNS动态更新*/
authoritative; /*授权*/
allow booting; /*支持PXE启动*/
allow bootp; /*支持boottp*/
subnet 192.168.129.0 netmask 255.255.255.0 { /*作用域*/
range 192.168.129.30 192.168.129.78; /*ip地址段范围*/
option routers 192.168.129.1; /*网关*/
option subnet-mask 255.255.255.0; /*子网掩码*/
option domain-name-servers 203.103.24.68; /*DNS服务器的地址*/
default-lease-time 21600; /*租期,秒数*/
max-lease-time 43200; /*最大租期,秒数*/
next-server 192.168.129.22; /*TFTPServer的IP*/
filename "/pxelinux.0"; /*Bootstrap文件*/
}
默认情况下,dhcpd进程是以dhcp用户运行,可能出错,可以将/etc/init.d/dhcpd
文件中的进程用户和用户组修改为root。
sed -i "30s/user=dhcpd/user=root/" /etc/init.d/dhcpd
sed -i "31s/group=dhcpd/group=root/" /etc/init.d/dhcpd
head -n 31 /etc/init.d/dhcpd | tail -n2
查看dhcpd进程的运行情况可以查看\var\log\messages
文件。
一般需要将系统网卡的地址设置在dhcp设置的地址段中,才能够正常的启动dhcp服务。
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.25.1
NETMASK=255.255.255.0
EOF
cat /etc/sysconfig/network-scripts/ifcfg-eth0
启动dhcp服务,并设置其随系统启动:
service dhcpd start
chkconfig dhcpd on
c. 配置httpd服务
在服务器中针对httpd服务无需特殊配置,只需要将服务启动,并设置为随系统启动即可。
service httpd start
chkconfig httpd on
3. 针对CentOS和Ubuntu不同的场景使用不同的配置
a. CentOS安装配置过程
由于CentOS系统对PXE安装方法支持的不够完善,主要是需要单独下载pxelinux.0文件。这个文件没有包含在CentOS系统的安装镜像中。
#mkdir -p /tftpboot
#cp ~/pxelinux.0 /tftpboot
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
\cp -rfv /mnt/cdrom/images/pxeboot/initrd.img /tftpboot
\cp -rfv /mnt/cdrom/images/pxeboot/vmlinuz /tftpboot
\cp -rfv /mnt/cdrom/isolinux/*.msg /tftpboot
mkdir -pv /tftpboot/pxelinux.cfg
cat > /tftpboot/pxelinux.cfg/default << EOF
default
prompt 1
timeout 30
display boot.msg
label linux
kernel vmlinuz
append ks=http://192.168.25.1/centos/ks_centos.cfg initrd=initrd.img devfs=nomount ramdisk_size=9216
EOF
mkdir -pv /var/www/html/centos
cp -fv ~/ks_centos.cfg /var/www/html/centos
cp -rfv /mnt/cdrom/* /var/www/html/centos
注意:*.msg可以不拷,重点是initd.img和vmlinux,没有内核无法引导系统。pxelinux.0并不是任何linux发行商提供的,syslinux也不在提供该文件,可以从网上下载。
b. Ubuntu系统安装配置
Ubuntu系统对PXE安装方法的支持非常完善只需要将安装镜像中的部分文件拷贝到tftp和web目录中即可。
将install/netboot中的文件全部复制到tftpboot目录中。
添加httpd服务,在服务根目录创建ubuntu目录,将iso镜像中的文件都添加到ubuntu目录中。
#mkdir -pv /tftpboot
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
cp -rfv /mnt/cdrom/install/netboot/* /tftpboot
# later version than 12.04
sed -i '6s\append\append live-installer/net-image=http://192.168.25.1/ubuntu/install/filesystem.squashfs\' /tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg
sed -i '6s\append\append ks=http://192.168.25.1/ubuntu/ks_ubuntu.cfg\' /tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg
cat /tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg
# end of later version than 12.04
mkdir -pv /var/www/html/ubuntu
cp -rfv /mnt/cdrom/* /var/www/html/ubuntu
cp -fv ~/ks_ubuntu.cfg /var/www/html/ubuntu
ls -m /tftpboot /var/www/html/ubuntu
在选择安装镜像时选择enter mirror manual。分别填入192.168.25.1
和/ubuntu/
*应用扩展*
在使用PXE远程安装CentOS系统时,需要用到的软件安装包可以通过nfs文件共享服务进行传输。nfs的配置过程如下:
一般要首先把光盘挂载在系统上,并将光盘中的文件添加到nfs共享目录中。执行流程如下:
mkdir -p /mnt/cdrom
mount /dev/cdrom /mnt/cdrom
mkdir -pv /centos
cp -rf /mnt/cdrom/* /centos/
cat >> /etc/exports << EOF
/centos *(ro,sync)
EOF
exportfs -rv
启动nfs服务,并设置为随系统启动
service rpcbind restart
service nfs start
chkconfig nfs on
在安装CentOS系统的过程中,选择软件包来源时,填入的nfs服务器的参数包括IP地址(192.168.25.1),文件目录(/centos)和挂载权限(ro)。
KickStart是一种无人职守的安装方法。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的暗转过程中,当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,需要安装者手动参与。
在使用无人职守的方式安装系统时,只需要将使用system-config-kickstart
软件生成配置文件ks.cfg
即可。