一般的系统安装方法是通过U盘,光盘,本机安装,方便个人使用,而在没有U盘,无光驱无软驱时或者是在实验室等要安装大量电脑时就显得费劲了。这时候通过网卡安装系统就很有必要了。
先介绍基本原理有利于之后的测试安装,下图是从网上拉下来的,可以帮助理解安装的框架。
什么是PXE
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client
在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。 PXE协议的成功运行需要解决以下两个问题: 既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置;
通过什么协议下载Linux内核和根文件系统
对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。 至于第二个问题,在PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。 这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程。
工作过程
PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
测试环境
VMware Workstation10 下运行的CentOS6.5作为安装服务器。
将要在虚拟机下安装的系统也是CentOS6.5
步骤
一、#mkdir /nfsroot 用于存放iso镜像文件,镜像可自行下载 wget http://mirrors.163.com/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-bin-DVD1.iso
二、安装服务器的配置
安装服务器只有一块NAT方式的网卡、通过VMware虚拟DHCP分配IP地址。
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:5D:B7:17
inet addr:192.168.153.128 Bcast:192.168.153.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe5d:b717/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3137 errors:0 dropped:0 overruns:0 frame:0
TX packets:3747 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1092166 (1.0 MiB) TX bytes:699662 (683.2 KiB)
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:0c:29:5d:b7:17
IPV6INIT=yes
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
UUID="d81c71dc-782b-47ce-9cb1-fb3a1a07bf0d"
USERCTL=no
PEERDNS=yes
安装dhcp服务:
#yum install dhcp
修改配置文件:
#vi /etc/dhcp/dhcp.conf
添加如下内容:
ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
class "pxeclients"{
match if substring(option vendor-class-identifier,0,9) = "PXEClient";
filename "CentOS/pxelinux.0";
next-server 192.168.153.128; #服务器IP地址
}
subnet 192.168.153.0 netmask 255.255.255.0 {
option routers 192.168.153.1;
option subnet-mask 255.255.255.0;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.153.100 192.168.153.200; #通过dhcp给客户机分配的地址域
default-lease-time 216000;
max-lease-time 432000;
}
#service dhcpd start
如果启动失败,可以看一下系统日志,查找原因
# cat /var/log/messages
安装tftp服务器:
#yum install tftp-server
修改tftp服务器的配置, 将disable= yes改为disable=no
tftp服务器的根目录为/var/lib/tftpboot,yum安装时会自动创建
#vi /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
per_source = 11
cps = 100 2
flags = IPv4
}
启动xinetd服务
# service rpcbind start
Starting rpcbind: [ OK ]
关闭iptables服务:
# service iptables stop
可以新建一个空的虚拟机不设置光盘启动,测试是否自动启动PXE安装了。下图可看到虚拟机已经从DHCP服务器获取IP地址
安装nfs服务器:
#yum install nfs-utils
配置nfs目录
# vi/etc/exports
/nfsroot *(rw,wdelay,crossmnt,insecure,root_squash,no_subtree_check,fsid=0)
使配置生效
#exportfs -a
# exportfs -v
/nfsroot <world>(rw,wdelay,crossmnt,insecure,root_squash,no_subtree_check,fsid=0)
启动nfs服务,
# service nfs start
如果出现错误提示,可能使rpcbind服务未启动,要先启动rpcbind服务。
# service rpcbind start
Starting rpcbind: [ OK ]
# chkconfig rpcbind on
# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
在/var/lib/tftpboot目录中配置PXE启动需要的文件:
1) 创建目录/var/lib/tftpboot/CentOS,CentOS和/etc/dhcp/dhcpd.conf一致
2) 创建目录/var/lib/tftpboot/CentOS/pxelinux.cfg
2) 把安装光盘isolinux/isolinux.cfg复制并重命名为/var/lib/tftpboot/CentOS/pxelinux.cfg/default
下载http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-5.10.tar.gz, 解压
将syslinux-5.10/目录下面的几个文件复制到/var/lib/tftpboot/CentOS目录下
syslinux-5.10/bios/core/pxelinux.0
syslinux-5.10/com32/elflink/ldlinux/ldlinux.c32
syslinux-5.10/com32/lib/libcom32.c32
syslinux-5.10/com32/libutil/libutil.c32
syslinux-5.10/com32/menu/vesamenu.c32
syslinux-5.10/com32/mboot/mboot.c32
从安装光盘复制文件到/var/lib/tftpboot/目录
cp /mnt/isolinux/initrd.img /mnt/isolinux/vmlinuz /mnt/isolinux/splash.jpg /var/lib/tftpboot/CentOS/
将安装光盘里的images目录复制到nfs目录下
# cp -pr /mnt/images/ /nfsroot/
将CentOS的镜像文件复制到nfs目录下,安装系统时会自动查找这个iso文件,不必指定文件名。
#cp CentOS-6.5-x86_64-bin-DVD1.iso /nfsroot/
开启空虚拟机安装系统时
提示错误:vesamenu.c32: Not a COM32R image
修改syslinux引导出错,提示vesamenu.c32 NOT a COM32R IMAGE,
此时虽然通过输入linux命令,可以引导启动linux维护系统。
但是要进windows维护系统就不知道怎么办了。
据说是高版本的syslinux不支持低版本的菜单文件。
网上找了一个低版本的VESAMENU.C32文件,替换掉原文件即可。
pxelinux.0 下载链接: http://download.csdn.net/detail/ncjobs2dick/8173137
vesamenu.c32 下载链接:http://download.csdn.net/detail/ncjobs2dick/8173123
之后就是正常的系统安装了。
参考网址:
http://www.chinaunix.net/old_jh/4/281547.html
http://blog.sina.com.cn/s/blog_71d9aee40101pc0r.html
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-netboot-pxe-config.html