本指南将一步步说明怎么在linux服务器上架设PXE功能,并提供不同版本Linux、Windows的安装以及WinPE的启动。服务器系统是Debian GNU/Linux 5.0
PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。 PXE可以引导多种操作系统,如:Windows 95/98/2000/xp/2003/vista/2008,linux等。
简单来说,PXE服务器就是DHCP服务器+TFTP服务器,现在开始:
一、Linux 软件的安装
1. 安装tftp
首先升级系统:
$sudo aptitude update
我们需要安装如下包netkit-inetd, tftpd-hpa, dhcp3-server, and lftp,于是我们运行:
$sudo aptitude install netkit-inetd tftpd-hpa dhcp3-server lftp
然后,我们运行
$sudo netstat -uap | grep tftp
看看有没有以下信息:
server1:~# netstat -uap | grep tftp
udp 0 0 *:tftp *:* 2242/inetd
server1:~#
如果你没有看到tftp,请打开/etc/inetd.conf,看配置是否如下:
$sudo vi /etc/inetd.conf
[...]
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /srv/tftpboot
[...]
然后重新启动
$sudo /etc/init.d/openbsd-inetd restart
然后在检查一下,应该没有问题了。
$sudo netstat -uap | grep tftp
2. 配置DHCP服务器
编辑/etc/dhcp3/dhcpd.conf:
$sudo cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf_orig
$sudo cat /dev/null > /etc/dhcp3/dhcpd.conf
$sudo vi /etc/dhcp3/dhcpd.conf
ddns-update-style none;
option domain-name "gmshi.org";
option domain-name-servers 192.168.1.6;
default-lease-time 1200;
max-lease-time 18000;
authoritative;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
range 192.168.1.43 192.168.1.199;
# for install debian & windows xp with PXE
filename "pxelinux.0";
host data {
hardware ethernet 00:30:18:C0:68:80;
fixed-address 192.168.1.6;
}
}
重新启动DHCP服务。
3. Set Up Debian Lenny Netboot (i386)
在ftp://debian.ustc.edu.cn/debian/dists/lenny/main/installer-i386/current/images/netboot/里面能找到网络启动的最基本文件。我们将它下载下来放到PXE服务器的文件夹/srv/tftp下面。
$cd /tmp
$sudo lftp -c "open ftp://debian.ustc.edu.cn/debian/dists/lenny/main/installer-i386/current/images; mirror netboot/"
$sudo mv netboot/* /srv/tftpboot
$sudo rm -fr netboot
PXE启动文件名就是pxelinux.0,最重要配置文件是pxelinux.cfg/default。有了这两个文件,就能启动起PXE服务。
现在我们来看看配置文件:
$sudo cat /srv/tftpboot/pxelinux.cfg/default
# D-I config version 1.0
include debian-installer/i386/boot-screens/menu.cfg
default debian-installer/i386/boot-screens/vesamenu.c32
prompt 0
timeout 0
4. 测试一下
我们任意启动一台电脑,在BIOS里面开启支持LAN启动。然后开机按F12,看到如下图片,表示基本的PXE系统安装成功。
5. 优化
下载下来的内容比较乱,需要做一些修改。
这个是服务器最后安排出来的文件夹结构。
/srvcd /tftpboot
|
+boot-scrern
+debian-i386
+fedora
+pxelinux.cfg
+tidvevm
+winpe_boot
+winxp-en
cat /srv/tftpboot/pxelinux.cfg/default
应该配置成如下形式:
menu hshift 8
menu width 59
menu title Installer boot menu
include boot-screens/stdmenu.cfg
include mystartup.sh
default local
label local
menu label ^Boot from local disk or CDROM.
menu default
localboot 0
label winxp-x86
menu label Install ^Windows XP
kernel winxp-en/bzImage
append z_path=//192.168.1.6/install z_user=srvuser z_pass=SrvUser initrd=winxp-en/initrd.gz --
label debian-i386-gui
menu label Install Debian ^i386 with GUI.
kernel debian-i386/gtk-linux
append video=vesa:ywrap,mtrr vga=788 initrd=debian-i386/gtk-initrd.gz --
label WinPE
menu label Install Win^PE with 134MB
kernel winpe_boot/startrom.0
label debian-amd64-gui
menu label Install Debian ^amd64 with GUI.
kernel debian-amd64/gtk-linux
append video=vesa:ywrap,mtrr vga=788 initrd=debian-amd64/gtk-initrd.gz --
label debian-i386
menu label Install Debian i^386.
kernel debian-i386/linux
append vga=normal initrd=debian-i386/initrd.gz --
label debian-amd64
menu label Install Debian amd^64.
kernel debian-amd64/linux
append vga=normal initrd=debian-amd64/initrd.gz --
label Fedora9-x86
menu label Install Fedora^9 i386.
kernel fedora/vmlinuz
append vga=normal initrd=fedora/initrd.img --
# this option can be added to the append line
# preseed/url=http://192.168.1.6:429/debian-lenny.cfg
default boot-screens/vesamenu.c32
prompt 0
timeout 300
按照如上配置重新分配文件夹和文件。
例如debian+i386
mv /srv/tftp/debian-installer/i386/linux /srv/tftp/debian-i386
mv /srv/tftp/debian-installer/i386/initrd.gz /srv/tftp/debian-i386
如此炮制能把各种版本的Linux安装最简包安装进来。
二、Linux版本的DVD版本安装
这里有两个问题。
1、XP、WinPE怎么装?
这个后续会介绍,咱不急,咱慢慢来。
2、都是最简包,剩下的几百M东西全从网络下载?
答案是肯定的,这需要一定的带宽,没带宽的,请不要这么玩。
当然,这里介绍一下硬盘安装。我们一般下载一张Fedora的DVD安装盘,然后再下载Grub4Dos就可以离线安装了,这样前期通过迅雷等多线程下载,后续安装会比较快。当然Ubuntu、Debian的安装改莫如此。
那么我们能不能用PXE代替Grub4Dos来进行DVD的安装呢?答案嘛,是模糊的。Fedora可以,剩下的Ubuntu、Debian不可以。
先介绍Fedora的DVD安装方法:
在/srv/tftpboot/fedora文件夹下面放入
vmlinuz、initrd.img
这两个文件来自于DVD安装包里面。
然后开机按F12启动后选择Fedora9-x86。在选择ISO文件地址,选择NFS dictory。
然后选择
Enable IPV4 Support
NFS host name 192.168.1.6
Fedora directory:/mnt/fedora
这样就如同本机插入了光驱一样安装Fedora了。
问题在于,Ubuntu、Debian的启动界面里面没有选择NFS安装项。应该是安装版的内核没有加入对NFS的支持。这个以后有空再弄吧!
既然Fedora需要NFS支持,现在将NFS配置简单提一下。
在/etc/init.d/目录下
新建mystartup.sh
添加
mount -o loop -t iso9660 /srv/install/os/linux-cd/Fedora-9-i386-DVD.iso /mnt/fedora9/
echo "Fedora9 ISO has been mount into /mnt/fedora9!"
然后将mystartup.sh加入开机自启动项,这样每次开机,Fedora的安装盘就装载进了/mnt/fedora9目录下。
顺便提一下Debian system cann't be mounted more than 8 iso image files as loop device,because there is only loop0-7 under /dev
这点需要修改内核模块才能将loop文件增加,据说能增加到64个。
在/etc/exports中添加
/mnt/fedora9 *(rw,sync,no_subtree_check)
在/srv/tftpboot/pxelinux.cfg/default中添加(之前已经提过,再次赘述一下。)
label Fedora9-x86
menu label Install Fedora^9 i386
kernel fedora/vmlinuz
append vga=normal initrd=fedora/initrd.img –
在/srv/tftpboot/目录下
#mkdir fedora
复制Fedora-9-i386-DVD.iso光盘中的initrd.img vmlinuz到目录下
三、WinPE的安装
1. 通过PXE启动PE需要这么几个文件:
1) startrom.0:这个文件从Windows 2003 SP1/SP2 光盘中startrom.n12改名而来,这个文件实际上也是一个符合pxe启动规范的启动文件,可以直接作为pxe服务器的启动文件来直接运行,当然,它也可以通过 pxelinux的kernel命令来运行。在Windows 2003 sp1/sp2的光盘中,还有一个startrom.com文件,它的作用跟startrom.n12是相同的,只是启动时需要按一个F12键才能继续,而startrom.n12则去掉了F12这个提示。
2) ntldr:这个文件是从Windows 2003 SP1/SP2光盘中的setupldr.exe改名而来,它的作用应该相当于从本地硬盘启动PE的setupldr.bin,但两者并不相同,但它决不是我们平常所使用的ntldr。这个文件必须放到TFTP服务器的根目录。
3) ntdetect.com:这个就是XP或2003所使用的c:/下的ntdetect.com。这个文件也必须放到TFTP服务器的根目录。
4) winnt.sif:这个是PE的启动配置文件(用来指定PE的系统目录及PE映像文件所在路径及启动选项)。这个文件也必须放到TFTP服务器的根 目录。通过pxe启动的PE支持3种映像文件格式,例如,ISO、IMG或者SDI。其实,SDI格式相当于IMG格式,只是SDI格式在IMG文件前加 了一个文件头。一般我们都使用ISO或IMG格式,但这两种格式的启动选项是有所不同的,ISO格式要在启动选项中增加一个/rdexportascd, 而SDI格式还要增加一个/rdoffset选项。下面是Winnt.sif的示例:
[SetupData]
BootDevice = "ramdisk(0)"
BootPath = "WXPE/SYSTEM32"
OsLoadOptions = "/minint /fastdetect /rdexportascd /rdpath=/winpe_boot/WINPE.ISO"
PXE启动PE的过程大致是(可能也不是很严谨):startrom.0(startrom.n12)获得执行后,在TFTP服务器根目录下寻找 ntldr(setupldr.exe),找到后加载ntldr并执行,而ntldr则在TFTP服务器的根目录下查找winnt.sif,根据 winnt.sif的内容从TFTP服务器上下载PE的映像文件并根据选项进行PE的加载,在PE的加载过程中会用到ntdetect.com来收集硬件信息。
这个过程我们需要比较了解,才能对我们以后的工作进行指导。
1、startrom.0怎么获得执行的?
这个比较显而易见。在pxelinux.cfg/default配置中,指定了内核的路径。如果用户在PXE界面中选择了WinPE,则startrom.0获得执行命令。
2、为什么startrom.0会自动到TFTP服务器根目录下寻找ntldr?
这个没有由我们的配置文件指定。在startrom.n12里面指定了内核调用的临时文件系统的名字是ntldr,如果你需要修改ntldr的名字,请记得修改startrom.n12里面的ntldr名字。
3、为什么ntldr会自动在TFTP服务器的根目录下查找winnt.sif
这个同样没有配置文件指定。在ntldr里面指定了PE的启动配置文件名字是winnt.sif。如果你需要修改winnt.sif的名字,请记得修改ntldr里面的winnt.sif名字。
2.多WinPE启动
这样我们就可以明确地肯定,我们能由PXE启动多个不同的WinPE镜像了。先由pxelinux.cfg/default指定不同路径下的WinPE内核镜像,然后由不同内核镜像指定不同名字的文件系统,再由不同的文件系统启动不同的*.sif配置文件,最后由配置文件启动不同的WinPE ISO文件。
在修改内核镜像与文件系统文件时,需要使用16进制编辑器,并保证指定的新文件名字与旧文件名字长度相同。
在winnt.sif文件中还要注意的就是BootPath选项,默认它指向"/I386/SYSTEM32"目录,但老毛桃的PE将I386目录修改成了 WXPE,那么这里要作对应的修改,同时还要修改ntldr文件,将其中所有的I386替换为WXPE。只是修改winnt.sif是没有用的。
3.几点注意事项
1) NTLDR
大写,不然报错:TFTP failed。
2) ntdetect.com
小写,不然报错:NTDETECT failed。
3) winnt.sif
小写,不让报错:winnt.sif missingls。
4) ISO文件的来源
比如说老毛桃的WinPE,里面的ISO直接放到TFTP服务器的文件夹下面加载,会报错TXTSETUP.SIF missing。其实需要将老矛头ISO里面的/MINIPE/WINPE.IS_取出来(通过UltraISO),然后解压(WinRAR),得到新的WINPE.ISO,这个才是可以加载的ISO。当然这个ISO只有最基本的功能,你可以自己将需要的功能添加进去。