GRUB install


usb-vmknoppix


<< GRUB install >>


まだダウンロードしていない場合は、ダウンロードします

   vmknoppixのダウンロード

1.vmknoppix のcloopマウント

   $ echo "ディレクトリの作成"; \
      test -d /media/iso || sudo mkdir /media/iso; \
      test -d /media/sda1 || sudo mkdir /media/sda1; \
      \
      echo "[cloop]マウントと[sda1]マウント"; \
      sudo mount -o loop ~/knoppix_v5.3.1CD_20080326_xen3.2.1-20080519.iso /media/iso; \
      mount | grep sda1 || sudo mount /dev/sda1 /media/sda1

2.必要なファイルのコピー(normal kernel)での起動用のファイルを使用します
   後で必要になった時のため、boot以下をすべてコピーします
   他にISOをコピーするので、「/boot/VMK」というディレクトリを作成してコピーします

   $ echo "起動用ディレクトリの作成と起動ファイルのコピー"; \
      sudo mkdir -p /media/sda1/boot/VMK; \
      sudo cp -pr /media/iso/boot/* /media/sda1/boot/VMK

3.変更箇所の確認

   言語は「us/en」があるので、「ja」に変換します

   $ sed s/"lang=en\|lang=us"/"lang=ja bootfrom="/g /media/sda1/boot/VMK/grub/menu.lst | \
      sed s/" "/"\n"/g | grep "lang" | sort | uniq
   lang=ja

   「/boot」を「/boot/VMK」に置き換えます

   $ sed s/" "/"\n"/g /media/sda1/boot/VMK/grub/menu.lst | \
      sed s/"\/boot\/"/"\/boot\/VMK\/"/g | grep "/boot" | sort | uniq
   /boot/VMK/inetboot/linux
   /boot/VMK/inetboot/minirt.gz
   /boot/VMK/isolinux/bitvisor.elf
   /boot/VMK/isolinux/gpxe.krn
   /boot/VMK/isolinux/linux
   /boot/VMK/isolinux/minirt.gz
   /boot/VMK/xen/miniroot-xen.gz
   /boot/VMK/xen/vmlinuz-2.6.18.8-xen
   /boot/VMK/xen/xen-3.2.1.gz

   bootfromのマニュアルを確認します

   $ echo "[bootfrom]"; grep -A 2 "bootfrom" /media/iso/KNOPPIX/knoppix-cheatcodes.txt
   [bootfrom]
   knoppix bootfrom=/dev/hda1 Access Image then boot from previously
   copied CD-Image (enables booting from
   NTFS / ReiserFS) ***)
   knoppix bootfrom=/dev/hda1/KNX.iso Access image, boot from ISO-Image. ***)
   knoppix knoppix_dir=KNOPPIX Directory to search for on the CD.
   knoppix knoppix_name=KNOPPIX Cloop-File to search for on the CD.
   --
   KNOPPIX.iso on /dev/hda1 you can access it as: bootfrom=/dev/hda1/K*.iso,
   but if there are several, you need to make clear, which one you want.
   (Feature added by Fabian Franz.)

文字制限は256文字です。

「lang=ja」の後に「bootfrom=/dev/sda4/VMK.iso」を追加し、runlevelを2に変更します

   $ echo "bootfrom=/dev/sda4/VMK.iso VMK/ 2" | wc -c
   34
   $ let x=256-34;echo $x
   224

最大コマンド数を確認します

$ for list in $(grep "^kernel" /media/sda1/boot/VMK/grub/menu.lst);do \
     if [ "$list" == "kernel" ]; \
     then \
       echo $n;n="1"; \
     else \
       let n="$n"+1; \
     fi; \
   done | sort -nr | head -1
   16

最大のコマンド文字数を確認します

   $ for list in $(grep "^kernel" /media/sda1/boot/VMK/grub/menu.lst); \
   do \
     if [ "$list" == "kernel" ];then \
       echo $m;m="0"; \
     else let m=$m+$(echo "$list" | wc -c); \
     fi; \
   done | sort -nr | head -1
   211

cmdlineに読み込まれない分を確認します

   $ grep "^kernel" /media/sda1/boot/VMK/grub/menu.lst | \
   sed s/"kernel"//g | awk '{print $1}' | \
   for list in `xargs` ; \
     do echo "$list" | wc -c; \
   done | sort -nr | uniq
   28
   24
   23
   21

「root (hd0,0)」を追加します

4.実際に変更を行います

   $ sudo sh -c 'sed s/"^kernel"/"root (hd0,0)\nkernel"/g /media/sda1/boot/VMK/grub/menu.lst | \
      sed s/"lang=us\|lang=en"/"lang=ja bootfrom=\/dev\/sda4\/VMK.iso"/g | \
      sed s/"\/boot\/"/"\/boot\/VMK\/"/g | \
      sed s/"^kernel.*$"/"& 2"/g > /media/sda1/boot/VMK/grub/menu.lst.custom '

追加した後の最大文字数を確認します

   $ for list in $(grep "^kernel" /media/sda1/boot/VMK/grub/menu.lst.custom); \
     do \
       if [ "$list" == "kernel" ];then \
         echo $m;m="0"; \
       else let m=$m+$(echo "$list" | wc -c); \
       fi; \
     done | sort -nr | head -1
   244

他にも「VGA=」を変更する場合は以下の表を参考にします

$ let a=0x307;let b=0x319;let c=0x31A d=0x31B; \
   echo "$a : $b : $c : $d"
   775 : 793 : 794 : 795

                  :  640x480     :  800x600    :  1024x768   :  1280x1024
256( 8bit)   : 769(0x301) : 771(0x303) : 773(0x305) :  0x307
32K(15bit) : 784(0x310) : 787(0x313) : 790(0x316) :  0x319
64K(16bit) : 785(0x311) : 788(0x314) : 791(0x317) :  0x31A
16M(24bit) : 786(0x312) : 789(0x315) : 792(0x318) :  0x31B

例)
   $ sudo sh -c 'sed s/"vga=791"/"vga=785"/ /media/sda1/boot/VMK/grub/menu.lst.custom \
     > /media/sda1/boot/VMK/grub/menu.lst.vga785'

5.menu.lstをmenu.lst.orgに変更
   menu.lst.customをmenu.lstに変更します

   $ SRC="/media/sda1/boot/VMK/grub"; \
     sudo mv ${SRC}/menu.lst ${SRC}/menu.lst.org && \
     sudo mv ${SRC}/menu.lst.custom ${SRC}/menu.lst

   $ echo "sda4のマウントディレクトリの確認"; \
     test -d /media/sda4 || sudo mkdir /media/sda4; \
     echo "sda4のマウント"; \
     mount | grep sda4 || sudo mount /dev/sda4 /media/sda4; \

6.knoppix_v5.3.1CD_20080326_xen3.2.1-20080519.isoをsda4ディレクトリにコピーします

   $ SRC="knoppix_v5.3.1CD_20080326_xen3.2.1-20080519.iso"; \
     sudo cp -p ${SRC} /media/sda4; \
     sudo mv /media/sda4/${SRC} /media/sda4/VMK.iso && \
     sudo ln -s /media/sda4/VMK.iso /media/sda4/${SRC}

7.grubをインストールします

   $ sudo mount -o remount,dev,rw /dev/sda1; \
     sudo grub-install --root-directory=/media/sda1 /dev/sda


起動時のdevice.mapにマッピングされたデバイスを確認します

   $ cat /media/sda1/boot/grub/device.map
   (fd0) /dev/fd0
   (hd0) /dev/hda
   (hd1) /dev/sda
   (hd2) /dev/sdb


menu.lstをインストールされたgrubディレクトリにコピーします

   $ sudo cp -p /media/sda1/boot/VMK/grub/menu.lst /media/sda1/boot/grub/

8.MBRを確認します(最終確認)

   $ echo "[MBR stage1]"; \
     sudo dd if=/dev/sda bs=512 count=1 2> /dev/null | od -tx1 -N 446; \
     echo "[Partition]"; \
     sudo dd if=/dev/sda bs=512 count=1 2> /dev/null | od -tx1 -j 446 -N 64; \
     echo "[boot signiture]"; \
     sudo dd if=/dev/sda bs=512 count=1 2> /dev/null | od -tx1 -j 510 -N 2

stage1 にも正常にインストールされたことが確認できます

   $ sudo dd if=/dev/sda bs=512 count=1 2> /dev/null | \
     od -tx1 -N 446 | head -1 | cut -b 9-
   eb 48 90 00 00 00 00 00 00 00 00 00 00 00 00 00

お決まりのjmpコマンドからはじまっています

   $ sudo dd if=/dev/sda bs=512 count=1 > a.out; \
     sudo objdump -D -m i386 -b binary -EL a.out | head -8 | tail -2
  0:  eb 48        jmp  0x4a
  2:  90             nop


9.ddコマンドで/dev/sda2にVMknoppixをコピーします

   $ dd if=/media/sda4/VMK.iso of=/dev/sda2 bs=512k


10.PC再起動
   usb-vmknoppix(VMK.iso)を使って確認します

戻る

TOP