Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7693627
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类: LINUX

2006-02-27 17:12:18


想法提出:由于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连接) 
阅读(5541) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~