对于绝大部分机器来说,目前都集成了PXE BOOT功能,开机按F12即可从网卡启动,部分8139的网卡可能是SHIFT+F10来进入PXE BOOT的设置菜单来管理这项功能。关于PXE BOOT的原理,在上一篇文章中已经讲过。http://coolerfeng.blog.51cto.com/blog/133059/48801
本文所实现的功能,在windows平台下有大量的第三方开发的软件可以实现,别人开发的软件始终难以完全满足我们自己的需求,因此,我们可以利用LINUX平台自己DIY一个同样功能的工具出来。
下面说一下安装过程。LINUX下需要安装TFTP,DHCP,SAMBA服务。dhcp和samba可以用RPM安装,但是rpm安装的tftp-server有一些bug,因此我们要用源码安装tftp-server
从http://www.kernel.org/pub/software/network/tftp/下载tftp-server的最新源码,然后打上patch,(http://oss.netfarm.it/guides/ris-linux-0.3.tar.gz)
#wget http://www.kernel.org/pub/software/network/tftp/tftp-hpa-0.48.tar.gz
#wget http://oss.netfarm.it/guides/ris-linux-0.3.tar.gz
#tar zxvf tftp-hpa-0.48.tar.gz
#tar zxvf ris-linux-0.3.tar.gz
# cd tftp-hpa-0.48
#patch -p1 < ../ris-linux-0.3/patches/tftp-hpa-filecase.diff
#./configure --prefix=/usr/local/tftp
#make
#make install
# mkdir /tftpboot
接下来修改
# vi /etc/xinetd.d/tftp
| =============+==========+===========+============+============ service tftp { disable = no (默认是yes,这里改成no,启用它) socket_type = dgram protocol = udp wait = yes user = root server = /usr/local/tftp/sbin/in.tftpd//改成源码编译安装生成的启动文件 server_args = -v -m /tftpboot/rules -s /tftpboot //-s 表示用/tftpboot作为tftp目录的根目录. -v打开日志在/var/log/messages便于调试, -m 指定重定向规则 per_source = 11 cps = 100 2 flags = IPv4 } |
vi /tftpboot/rules
| ri ^[a-z]: # Remove "drive letters" rg \\ / # Convert backslashes to slashes rg \# @ # Convert hash marks to @ signs rg /../ /..no../ # Convert /../ to /..no../ rg A a rg B b rg C c rg D d rg E e rg F f rg G g rg H h rg I i rg J j rg K k rg L l rg M m rg N n rg O o rg P p rg Q q rg R r rg S s rg T t rg U u rg V v rg W w rg X x rg Y y rg Z z r ^/(.*) \1 |
建立rules的原因是因为tftp对大小写敏感,而windows下文件不分大小写,linux下文件分大小写,为了统一,用这规则把所有的大写字母转换为小写字母。
接下来配置DHCP server
# vi /etc/dhcpd.conf
| =============+==========+===========+============+============ ddns-update-style interim; ignore client-updates; default-lease-time 21600; max-lease-time 43200; authourtative; next-server 192.168.1.103; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option subnet-mask 255.255.255.0; range 192.168.1.1 192.168.1.100; default-lease-time 21600; max-lease-time 43200; filename "/pxelinux.0"; option domain-name-servers 202.106.0.20; } |
# cp /usr/lib/syslinux/pxelinux.0 /tftpboot
下面创建菜单
#mkdir /tftpboot/pxelinux.cfg
#vi /tftpboot/pxelinux.cfg/default
| default menu prompt 0 timeout 60 menu title PXELINUX ADVANCED MENU SYSTEM MENU WIDTH 80 MENU MARGIN 10 MENU ROWS 12 MENU TABMSGROW 18 MENU CMDLINEROW 19 MENU ENDROW 24 MENU TIMEOUTROW 20 MENU BACKGROUND syslinux.jpg label local menu label Boot From Local Disk LOCALBOOT 0 label knoppix kernel images/knoppix/knoppix append ramdisk_size=100000 init=/sbin/init lang=cn apm=power-off vga=791 splash=silent initrd=images/knoppix/knoppix.gz nfsdir=192.168.1.251:/opt/inst/knoppix nomce quiet BOOT_IMAGE=knoppix label rhel4-i386 menu label RHEL 4 AS U4 i386 nfs(192.168.1.251:/opt/inst/r4) kernel images/redhat/vmlinuz-rhel4-i386 append initrd=images/redhat/initrd-rhel4-i386.img devfs=nomount ramdisk_size=9216 text label rhel4-x86_64 menu label RHEL 4 AS U4 x86_64 nfs(192.168.1.251:/opt/inst/r4-64) kernel images/redhat/vmlinuz-rhel4-x86_64 append ks=nfs:192.168.1.240:/opt/inst/ks/ks4-x86_64 initrd=images/redhat/initrd-rhel4-x86_64.img devfs=nomount ramdisk_size=9216 label rhel5-i386 menu label RHEL 5 i386 nfs(192.168.1.251:/opt/inst/r5) kernel images/redhat/vmlinuz-rhel5-i386 append ks=nfs:192.168.1.240:/opt/inst/ks/ks5 images=images/redhat/vmlinuz-rhel5-i386 initrd=images/redhat/initrd-rhel5-i386.img devfs=nomount ramdisk_size=9216 label rhel5-x86_64 menu label RHEL 5 x86_64 nfs(192.168.1.251:/opt/inst/r5-64) kernel images/redhat/vmlinuz-rhel5-x86_64 append ks=nfs:192.168.1.240:/opt/inst/ks/ks5-x86_64 images=images/redhat/vmlinuz-rhel5-x86_64 initrd=images/redhat/initrd-rhel5-x86_64.img devfs=nomount ramdisk_size=9216 label clonezilla menu label Boot a clonezilla kernel images/clonezilla/vmlinuz append initrd=images/clonezilla/initrd.gz boot=casper netboot nfsroot=192.168.1.240:/opt/inst/clonezilla label ping menu label Boot ping kernel images/ping/kernel append vga=normal devfs=nomount pxe ramdisk_size=33000 load_ramdisk=1 init=/linuxrc prompt_ramdisk=0 initrd=images/ping/initrd.gz root=/dev/ram0 rw noacpi noapm pci=noacpi lba acpi=off apm=off nfsroot=192.168.1.240:/opt/inst/ping label floppy menu label Boot a DOS 7.0 floppy disk with ghost2003 kernel images/floppy/memdisk append initrd=images/floppy/fd.img label ghost83 menu label Boot Ghost8.3 kernel images/ghost83/memdisk append initrd=images/ghost83/ghost83.img label win2k3 menu label Windows 2003 pxe install kernel w2k3.0 LABEL winpe menu label WindowsPE with Office kernel winpe.0 label menu menu hide kernel vesamenu.c32 |
有了菜单,但每个菜单依然不能用,我们还要去定义每一个项目
由于时间关系。。。敬请期待续集。。。。。。。。。
