想法提出:由于PlanetLab机器都是使用光驱启动,但是由于机器在长期工作过程中,再加上光驱密封不严密,所以导致光盘和激光头上有静电灰,起初只是用清洁设备把光盘和激光头上的灰插干净就可以了,也有想过使用USB启动,但是HP的DL320不支持USB启动,还好支持PXE,所以只能把焦点放到网络启动上来了。
OK,下面开始介绍制作方法:
首先下载最新镜像,如果光驱里面是最新的镜像文件,直接使用也可以:
[root@bootserver ~] # wget
[root@bootserver ~] # bzip2 -d PlanetLab-BootCD-3.1.iso.gz
然后把镜像挂载到系统中:
[root@bootserver ~] # mkdir PlanetLab-BootCD
[root@bootserver ~] # mount -o loop PlanetLab-BootCD-3.1.iso PlanetLab-BootCD
把原系统的initrd.gz文件挂载到系统中:
[root@bootserver ~] # mkdir initrd_org
[root@bootserver ~] # gzip -dc PlanetLab-BootCD/isolinux/initrd.gz > initrd_org.img
[root@bootserver ~] # mount -o loop initrd_org.img initrd_org
解开后可以发现,initrd_org.img的大小是67M左右。
下面开始修改PlanetLab的启动脚本,以适用网络启动(原来是为CD准备的,所以要修改部分地方)
其实也就需要修改一个文件:/etc/rc.d/init.d/pl_sysint
下面是diff文件
----------------Begin----------------
--- pl_sysinit Mon Feb 27 17:00:28 2006
+++ pl_sysinit.new Mon Feb 27 16:58:29 2006
@@ -11,7 +11,7 @@
echo "pl_sysinit: finding cd to mount on /usr"
mounted=0
initrd_version=$(/bin/cat /pl_version)
-mkdir /usr
+#mkdir /usr
# so that * expands to empty string if there are no block
# devices
@@ -52,7 +52,7 @@
fi
echo "pl_sysinit: checking $device for /usr contents"
- /bin/mount -o ro -t nfs server:/newroot /usr 2>&1 > /dev/null
+# /bin/mount -o ro -t iso9660 /dev/$device /usr 2>&1 > /dev/null
if [ $? -eq 0 ]; then
# it mounted, but we should probably make sure its our boot cd
# this can be done by making sure the /pl_version file (on initrd)
@@ -61,7 +61,8 @@
if [ "$initrd_version" != "$cd_version" ]; then
# eh, wrong cd, keep trying
- /bin/umount /usr 2>&1 /dev/null
+# /bin/umount /usr 2>&1 /dev/null
+ sleep 1
else
echo "pl_sysinit: found cd and mounted on /usr"
mounted=1
----------------------------------------
从上面文件可以看出,我只是把mkdir /usr 和 mount cdrom的语句给注释了
在行65增加一个sleep 1,if条件后面不能没有任何语句呀,所以休息一秒吧。
OK,下面开始创建新的initrd.gz文件了:
[root@bootserver ~] # dd if=/dev/zero of=initrd_new.img bs=4096 count=50000
由于需要把CD上的所有文件都复制到initrd文件中,所以要增加initrd的大小。
创建文件系统:
[root@bootserver ~] # mkfs.ext2 initrd_new.img
[root@bootserver ~] # mkdir initrd_new
[root@bootserver ~] # mount -o loop initrd_new.img initrd_new
下面复制文件:
[root@bootserver ~] # cd initrd_org
[root@bootserver initrd_org] # tar cf ./ - | ( cd ../initrd_new; tar xvf - )
[root@bootserver ~] # cd ../PlanetLab-BootCD
[root@bootserver PlanetLab-BootCD] # mkdir ../initrd_new/usr
[root@bootserver PlanetLab-BootCD] # tar cf --exclude=./isolinux/initrd.gz --exclude=./dev ./ | ( cd ../inird_new/usr; tar xvf - )
[root@bootserver PlanetLab-BootCD] # cp isolinux/kernel ../
OK,initrd的文件就制作完毕。
[root@bootserver PlanetLab-BootCD] # cd ..
[root@bootserver ~] # umount initrd_new
[root@bootserver ~] # cat initrd_new.img | gzip > initrd.gz
OK,下面开始介绍配置BootServer了:
找个机器,系统安装dhcpd tftp-server,上(在syslinux包中有)下载pxelinux.0文件。
在dhcpd.conf文件中指明pxeboot的文件名
-----------------
filename "/pxelinux.0";
-----------------
把kernel initrd.gz(修改后的) pxelinux.0放到/tftproot目录下
[root@bootserver ~] # cd /tftproot
[root@bootserver tftproot] # mkdir pxelinux.cfg
[root@bootserver tftproot] # cd pxelinux.cfg
[root@bootserver pxelinux.cfg] # cat > default <<__ELM__
default PlanetLab
prompt 1
timeout 10
label PlanetLab
kernel vmlinuz_PlanetLab
APPEND vga=normal initrd=initrd.img_PlanetLab load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=231072 root=/dev/ram0 rw
__ELM__
OK,把dhcpd tftp-server启动起来就可以试试网络启动了,注意防火墙(至少允许UDP 67 & UDP 69连接)
阅读(5552) | 评论(1) | 转发(0) |