2009年10月14日水曜日

第10回 ブータブルなリカバリディスクの作成

前回ではFlashアーカイブをDVDに焼いただけであり、これだけでは、インストール作業を途中まで行わなくてはならずtar、cpio、ufsdump、ufsrestoreコマンドを使用して、バックアップを取って、リストアすることと大差は無い。このためブータブルなリカバリDVDを作成して、DVDからのブートとFlashアーカイブの復元を組み合わせた、Windowsでいうところの「Acronis True Image」「Norton Ghost」といったバックアップソフト並みに一連のリカバリ作業を自動化すれば、煩わしい手作業から開放されるのだ。

簡単に言えば、ブータブルなリカバリDVDはSolariaインストールディスクにあるプログラムとFlashアーカイブというデータを組み合わせたものである。ここで言うプログラムとは、PCの電源を入れるとBIOSが起動して、DVDからブートローダーが読み込まれ、ブートローダーはインストールミニルート(以降ミニルート)と呼ばれるインストールに必要な最小限のOSを起動する、ミニルートはインストーラを起動する、インストーラ(特にJumpStart と呼ばれる自動インストーラ)はFlashアーカイブの内容をディスクに書き込む、・・・といった連鎖によってリカバリ作業を実行していくものを指す。

  1. ブータブルなリカバリDVDの作成
    1. rootユーザーで入り、以下のようにブータブルなリカバリDVDを作成する。

    2. Oracleの停止
    3. Oracleを停止する

      # /etc/init.d/dbora stop

    4. Flashアーカイブの作成
    5. 前回と同じようにFlashアーカイブを作成するが、最終的にはDVDにブートイメージを含めるで、1段階層を深くして/dvdimage以下に作成する。なおここが起点であり、DVDがマウントされたときの先頭ディレクトリになるところである。

      # mkdir -p /dvdimage/flash
      # flarcreate -n solaris_oracle_initial -c /dvdimage/flash/soi.flar

    6. インストールディスクのコピー
    7. インストールディスクから不要部を除いて、ハードディスクにコピーする。不要部とはインストーラと、それを実行するための必要環境以外のソフトウェアのことである、インストールディスクに入ったSolasisシステムをインストールするのではなく、Flashアーカイブに入ったSolasisシステムをインストールするので、出来る限り不要部は除外するほうが望ましく、空いた分だけ大きなFlashアーカイブが入ることになる。Solasisのインストールシステムは./Solaris_10以下に入っている。ただし/Solaris_10/Misc以下にはJumpStartのサンプルが入っているので、この部分だけはコピーしておく。

      ドライブにインストールディスクを入れて、インストールディスク全体を「Solaris_10/Misc」以外の「Solaris_10」ディレクリを除外して「cpio」コマンドによってコピーする。

      DVDイメージの展開先を「/dvdimage」とした、コピー元の「/cdrom/cdrom0」はドライブが一台の場合、メディアを入れると通常はここにオートマウントされる。最初のコピーは.「/Solaris_10以外」にフィルター、次のコピーは「Solaris_10/Miscのみ」のフィルターをかけてコピーする。

      # cd /cdrom/cdrom0
      # find . -depth -print|grep -v ./Solaris_10|cpio -pdm /dvdimage
      # find Solaris_10/Misc -depth -print|cpio -pdm /dvdimage

    8. ミニルートの展開
    9. ミニルートはRAMディスクに展開されてから、実行される、このため決められた形式があるので、操作には専用コマンドを用いる。すなわち、root_archiveコマンドにunpackオプションを使用してインストールディスクの「boot/x86.miniroot」を「/dvdimage/miniroot」以下に展開する。以上でインストールディスクから必要なものはコピーしたので、ホームディレクトリに戻り、インストールディスクを取り出す。

      # mkdir -p /dvdimage/miniroot
      # /boot/solaris/bin/root_archive unpack /cdrom/cdrom0/boot/x86.miniroot /dvdimage/miniroot
      # cd
      # eject cdrom

    10. sysidcfgの作成
    11. 「sysidcfg」は手動インストールの場合に入力する値をプロファイル化したものである。配置するディレクトリに移動して、元を(空リンクのシンボリックリンクになっている)を保存する。次にrootのシャドウパスワード(下記では“abcdefghijklm”と記す)を求めておいて、「sysidcfg」を新規作成する。

      # cd /dvdimage/miniroot/etc
      # mv sysidcfg sysidcfg.org
      # cat /etc/shadow|grep root
      root:abcdefghijklm:6445::::::
      # vi sysidcfg

      先に求めたrootのシャドウパスワードをroot_passwordの右辺に入れて、下記のように「sysidcfg」を作成する。なお、root_password以外の項目は手動インストールで設定した値と同じである。

      name_service=none
      network_interface=rtls0{dhcp protocol_ipv6=no}
      root_password=abcdefghijklm
      security_policy=none
      system_locale=ja
      timezone=Asia/Tokyo
      timeserver=localhost
      nfs4_domain=dynamic

    12. profindの修正
    13. インストレーションスクリプト「profind」はインストラーが参照するプロファイルがある場所をマウントする。ただしそれを行っている箇所が条件文によって通過しないので、無条件に通過してマウントするように修正する。

      # cd /dvdimage/miniroot/usr/sbin/install.d
      # cp -p profind profind.org
      # vi profind

      「201G」で201行目に飛び、下記のように修正する。

      if [ -f /tmp/.preinstall ]; then
          ↓
      if [ true ]; then

    14. install-solarisの修正
    15. 「第2回 Solaris 10 5/09(10/08)のインストール」の「BIOS(Basic Input/OutputSystem)の設定」で述べたように、CD-ROMの自動排出の指定は無効なオプションなので、同稿のようなBIOSの対策を取らないと、手動排出しない限り気がつかないままに、リカバリを繰り返し、そこから脱出できない。そこで下記のようにインストールスクリプトを修正して、リブートの直前になったらビープ音を鳴らしてユーザに注意を促し、ユーザはリブートのころを見計らって、DVDからブートが始まる前に、即座にメディアを取り出すようにする。

      インストーラの実体は「install-solaris」というシュルスクリプトである。それの処理の最後でリブートをしている直前に、ビープ音を鳴らす処理を付け加える、 (100秒間繰り返すようになっているが、短すぎる、あるいは長すぎる場合は100の数値を変更する。) 

      # cd /dvdimage/miniroot/sbin
      # cp -p install-solaris install-solaris.org
      # vi install-solaris

      920行目の「reboot」の前に下記の網伏せ部分を追加する、修正したら「:wq!」で強制書き込みをして終了する。

      if ["$ESTATUS" -eq 0 ] ; then
          i=0
          while [ $i -lt 100 ];do
            tput bel
            sleep 1
            i=`expr $i + 1`
          done
          reboot
      elif ["$ESTATUS" -eq 1 ] ; then
          echo `gettext "Solarisinstallation program completed."`
      else
          echo `gettext "Solarisinstallation program exited."`
      fi

    16. ミニルートの圧縮
    17. 以上でミニルートの編集が終わったので、今度はroot_archiveコマンドを使用してunpackとは逆にpackオプションを使用して「/dvdimage/miniroot」以下を「boot/x86.miniroot」に圧縮する。これで、ミニルートは完成したので。ミニルートからカレントディレクトリを移動して削除する。

      # /boot/solaris/bin/root_archive pack /dvdimage/boot/x86.miniroot /dvdimage/miniroot
      # cd
      # rm -r /dvdimage/miniroot

    18. GRUBメニューの編集
    19. GRUBの画面で表示されるメニューから、installオプションによってJumpStartが実行されるように編集する。

      # cd /dvdimage/boot/grub
      # cp -p menu.lst menu.lst.org
      # vi menu.lst

      下記の網伏せ部分を追加したら「:wq!」で強制書き込みをして終了する。

      default=0
      timeout=60
      title Solaris10 Jumpstart
          kernel /boot/multiboot kernel/unix - install -B install_media=cdrom
          module /boot/x86.miniroot

    20. rulesファイルの編集
    21. rules ファイルを作成する、書式は次のとおりでカラムはスペースで区切る、省略するカラムには「-」を入れる。

          [Rule keyword][Rule Value] [Begin script] [Profile] [Finish script]

      「/.install_config」へ移動する、ここは特に「JumpStartディレクトリ」になる所である。「rules」ファイルがチェックを受けて合格すると「rules.ok」という名前に変更されるので、これを「rules」ファイルの前回分として保存して、rules ファイルを編集する。

      # cd /dvdimage/.install_config
      # mv rules.ok rules.ok.org
      # vi rules

      サンプルは/dvdimage/Solaris_10/Misc/jumpstart_sample/rulesであるが、ファイルの内容は下記の1行だけでよいので新規作成する。内容は「any -」で特定は無し、「-」で開始スクリプトは「x86-begin」、プロファイルは「any_machine」を使用、「-」で終了スクリプトは無し、と設定した。

      any - x86-begin any_machine -

    22. profileの作成
    23. サンプルは/dvdimage/Solaris_10/Misc/jumpstart_sample/any_machineであるが、これも流用できるところがほとんど無いのでviを起動して新規作成する。

      # vi any_machine

      下記の追加を行う。

      # profile keywords  profile values
      #---------------- -------------------
      install_type flash_install
      archive_location local_file /cdrom/flash/soi.flar
      partitioning explicit
      filesys    any  free /
      filesys    any   4096 swap

      設定した定義内容は下記のとおり。

      install_type flash_install  …  フラッシュアーカイブによる上書きインストール
      archive_location local_file /cdrom/flash/soi.flar  …  フラッシュアーカイブのパスネーム
      partitioning explicit  …  パーティションをfilesysによって指定
      filesys    any  free /  …  スワップを割当てた残りを全部
      filesys    any   4096 swap  …  スワップサイズは4096M バイト

    24. 開始スクリプトの作成
    25. 開始スクリプトは下記のとおりサンプルをコピーして、そのまま使用する。

      cp -p /dvdimage/Solaris_10/Misc/jumpstart_sample/x86-begin .

    26. profileのチェック
    27. カレントディレクトリのrules ファイルをチェックして、rules.okを作成する。

      # /dvdimage/Solaris_10/Misc/jumpstart_sample/check
      Validating rules...
      Validating profile profile...
      The custom JumpStart configuration is ok.

    28. DVDイメージファイルの作成
    29. /dvdimage以下を「mkisofs」コマンドによってDVDディスクイメージに変換する。ISO9660(CD-ROM の標準ファイルシステム)を拡張してEl Toritoによってブート可能にして、Rock Ridge (ロックリッジ)によってUNIX 系ファイルシステムのアクセス権、シンボリックリンク、ファイル名、ディレクトリ階層をサポートする。使用するオプションは下記のとおりである。

      # cd /dvdimage
      # mkisofs -o /dvdimage/flash/soi.iso -b boot/grub/stage2_eltorito -c .catalog -no-emul-boot -boot-load-size 4 -boot-info-table -relaxed-filenames -N -L -l -r -J -d -D -V SOL_10_1008_X86_JUMPSTART .

      使用したオプションは下記のとおりである。

      -o /dvdimage/flash/soi.iso  …  作成するイメージのパスネーム
      -b boot/grub/stage2_eltorito  …  ブートローダーに「stage2_eltorito」を使用
      -c .catalog  …  ブートカタログに「.catalog」を使用(相対パス)
      -no-emul-boot  …  非エミュレーションモード、stage2_eltoritoをそのまま実行
      -boot-load-size 4  …  4セクタ(512バイト) ロードする
      -boot-info-table  …  ブートファイルの指定位置ににブート情報テーブルを挿入する
      -relaxed-filenames  …  ファイル名に小文字を除く全ての7ビットASCII文字を含む
      -N  …  バージョン番号を除外
      -L  …  ドットファイル名を許可
      -l  …  ファイル名を31文字まで許可
      -r  …  RockRidge拡張形式
      -J  …  Jolietディレクトリレコード
      -d  …  ファイル名末尾のドットを除外
      -D  …  深いディレクトリ階層の再配置をしない

      El Torito(エル・トリート)とは

      このメキシコ料理のレストランの名前を冠したものは、CD-ROMブートに関する仕様(「“El Torito” Bootable CD-ROM Format Specification Version 1.0」)である。仕様の内容をかいつまみ説明すると、CD-ROMの16セクタ目の「Primary Volume Descriptor」に続き17セクタ目に、「Boot Record Volume Descriptor」がある、そこには「Boot catalog」へ絶対のアドレスが入っているので、「Boot catalog」へジャンプする。「Boot catalog」からやはり「Boot Image」への絶対のアドレスが入っているので、「Boot Image」へジャンプする。「Boot Image」の内容をメモリにロードして実行する。

    30. DVDに書き込み
    31. ドライブにDVDのリライタブルメディアを入れて、初期化が済んでいない場合は、「cdrw」コマンドに「-b」オプションを使用して初期化する(通常は「fast」、初期化できない場合は「all」によって時間がかかるが全体を初期化する)。次に「-b」オプションを使用してイメージファイルを書き込む。

      (# cdrw -b fast)
      # cdrw -i /dvdimage/flash/soi.iso

    32. ワークエリアの消去
    33. イメージファイルが無事書き込まれたら、下記のとおり使用したディレクトリ以下のファイルを削除して、終わり。

      # rm -r /flash

  2. リカバリ
    1. リブート
    2. ドライブにDVDを入れたまま、DVDからリブートするとリカバリが始まる。

      # init 6

    3. リブート後の処理
    4. Flashアーカイブからのリカバリが終了すると、「第3回Oracle インストールの前準備」で設定した下記の情報が飛んでしまうので、リブート後に再設定を行う。

      • ホスト名を設定する
      • ログホストを定義する
注Solaris 10 3/05
今回の内容はブート形式が違うため、適応外である。

0 件のコメント:

コメントを投稿