« 2011年7月 | トップページ | 2011年9月 »

2011年8月

2011年8月13日 (土)

ubuntu 11.04 on mac mini

せっかく買った mac mini server で他の linux も試してみようと思い,ubuntu 11.04 server をインストールしてみた。ただ,ubuntu は 10.04 と同じく 11.04 でも dom0 としては使えないようだった。

 

インストール

  1. ubuntu のホームページから,11.04 server の CD イメージ(ubuntu-11.04-server-amd64.iso)をダウンロード。
  2. UNetbootinで,「ディスクイメージ」で上記の iso イメージを選択して,usb メモリを作成する。
  3. その usb を mac mini にさして起動すると,rEFIt のメニューに usb ドライブのアイコンがついたペンギンが現れるので,それを選択。
  4. unetbootin の起動メニューが出るので「install」を選択。(「default」だと CD-ROM が見つからないといわれて起動しない)
  5. ubuntu 11.04 のカーネルは 2.6.38 なので,ドライバ追加は必要ない。
  6. configure keyboard では自動検出に<いいえ>を選んで,Japan → Japan と選択。
  7. ubuntu では1台目のハードディスクが sda,2台目が sdb,起動した usb が sdc として認識された。sda の空き領域に ubuntu 用の ext3 を確保してインストールを継続する。
  8. grub のインストールでは,ubuntu をインストールしたパーティションを入力するが,後述する理由により,ここでインストールした grub が読まれることはない。
  9. インストールが終了したら再起動。
  10. rEFIt のメニューが出たら Start Partitioning Tool を選択。「May I update the MBR as printed above? [y/N]」に y で答える。そのあと再起動。
  11. しかし,今度は MBR に今インストールしたパーティションは加わらない。MBR を見てみると,squeeze をインストールしたときに加わった Linux が最後になっている。
    1. EFI Protective
    2. Mac OS X Boot
    3. Mac OS X HFS+
    4. Linux
    
    MBR では 4つしか起動パーティションを設定できないので,前に squeeze をインストールした時点で,これ以上起動パーティションを増やせない。rEFIt のペンギンは2匹になるが,どちらを選択しても squeeze の grub が呼ばれる。したがって,squeeze の grub を使って,ubuntu を起動するように設定する必要がある。

grub 設定

  1. まずはインストール済みの squeeze で立ち上げる。
  2. インストールした ubuntu を /mnt にマウントして,/mnt/boot/grub/grub.cfg の起動オプションを変更する。後で update-grub をしたとき,ここが読まれて起動オプションが squeeze 側の grub.cfg に反映される。起動オプションの quiet,splash,vt.handoff=7 のすべてを削除する。
  3. squeeze で update-grub コマンドを入力すると,インストールされた os を自動的に検出して起動メニュー(/boot/grub/grub.cfg)を作ってくれる。
    $ sudo update-grub
    Generating grub.cfg ...
    Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64
    Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64
    Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64
    Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64
    Found linux image: /boot/vmlinuz-2.6.32-5-amd64
    Found initrd image: /boot/initrd.img-2.6.32-5-amd64
    Found Mac OS X on /dev/sda2
    Found Ubuntu 8.04.4 LTS (8.04) on /dev/sda6
    Found Ubuntu 11.04 (11.04) on /dev/sda7
    Found Ubuntu 8.04.4 LTS (8.04) on /dev/sdb2
    Found Ubuntu 8.04.4 LTS (8.04) on /dev/sdb3
    Found Ubuntu 8.04.4 LTS (8.04) on /dev/sdb5
    done
    
  4. update-grub では xen の domU も grub.cfg に登録されてしまう(上記の Ubuntu 8.04)。手動で後から /boot/grub/grub.cfg の該当項目を削除しても良いが,/etc/grub.d/30_os-prober を変更して Ubuntu 8.04 を無視するようにもできる。

    /etc/grub.d/30_os-prober

    linux)
      LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
      prepare_boot_cache=
    
      for LINUX in ${LINUXPROBED} ; do
        LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
        LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
        LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
        LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
        LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
        LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"
    
        if [ -z "${LLABEL}" ] ; then
          continue  # ignores xen domain U
          LLABEL="${LONGNAME}"
        fi
    
    xen の domU では linux-boot-prober が LLABEL を "" で返すのを利用して,上記の場所に continue の1行を加えて domU を無視する。update-grub を実行すると,Found ... は表示されるが,grub.cfg には xen domU は追加されなくなる。

2011年8月 6日 (土)

サーバ速度比較

  • ORCA (xen domU) で 7月分のレセプト処理にかかった時間を測定してみた。
  • Core 2 duo マシンはだいたいクロックに応じた処理速度だった。
  • Core i7 マシン(mac mini)はクロックが低いのに Core 2 duo マシンより大分早かった。

 

CPU OS データチェック レセプト作成
C2D E4500 @2.20GHz Ubuntu 8.04 + xen 3.2 3' 08" 4' 44"
C2D E6550 @2.33GHz Debian squeeze + xen 4.0.1 2' 56" 4' 18"
C2D E7200 @2.53GHz Ubuntu 8.04 + xen 3.2 2' 42" 3' 54"
Core i7 2635QM @2.0GHz Debian squeeze + xen 4.0.1 2' 04" 3' 03"

2011年8月 5日 (金)

debian squeeze on mac mini

自宅サーバー(C2D E6550 2.33GHz)を mac mini server (mid 2011: Core i7 quad core 2.0GHz) に置き換えようというもくろみで1台購入した。自宅サーバーは,debian squeeze を xen の dom0 として,サーバは domU 上に構築してある。つまり,mac mini に squeeze さえインストールできれば,移行は簡単である。
 

mac mini のパーティション切り直し

  1. ここの記載を参考に,usb の起動ディスクを作る。
  2. option キーを押しながら起動し,起動ドライブとして usb を選択する。(Recovery HD から起動すると,起動ディスクのパーティション変更ができない)
  3. ディスクユーティリティーで HD のパーティションを追加する。とりあえず,Mac OS X の領域を半分にして,残りを FAT にしておいた。
  4. パーティションを切り直すと当然フォーマットされてしまうものだと思ってシステムを再インストールしたが(数時間かかった),パーティション切り直してもデータは残っているようだった。よく見たら,パーティション編集画面に「パーティションサイズは変更されますが,パーティションは消去されません」と表示されていた。

mac mini で rEFIt をインストール

  1. rEFIt Project のホームページからダウンロード,パッケージをインストール。2回再起動する。
  2. 2回目の再起動から,rEFIt のブートメニューが出るようになる。新しく作ったパーティションは,グレーのアイコンで表示される。
  3. rEFIt の設定ファイルは /efi/refit/refit.conf。自動起動までの時間は timeout で設定。#legacyfirst のコメントをとると,linux から自動起動されるようになる。

ether ドライバのコンパイル

squeeze のカーネルは 2.6.32 である。mac mini の ether controller である Broadcom BCM57765 は,カーネル 2.6.35 からのサポートなので,自分でコンパイルしてドライバを用意する必要がある。

  1. Broadcom のホームページから,ドライバのソースコード(linux-3.116j.zip)をとってくる。
  2. ダウンロードしたソースコードを,現在動いている squeeze マシンに持って行って解凍する。zip ファイルの中の奥の方に入っている tg3-3.116j.tar.gz をさらに解凍すると,ソース(ライセンスは GPL)が出てくる。
  3. squeeze マシンで,コンパイルできるように,header ファイル等をインストール。
    # aptitude install linux-headers-2.6.32-5-amd64
    # aptitude install linux-headers-2.6.32-5-xen-amd64
    # aptitude install build-essential
    
  4. 解凍したフォルダに入って,make する。まずは amd64 用コンパイル。
    # make KVER=2.6.32-5-amd64
    
    無事終了したら,tg3.ko を amd64 用ドライバとして保存する。
    ダウンロード tg3.ko (1014.9K)
  5. 次に xen-amd64 用コンパイル。
    # make clean
    # make KVER=2.6.32-5-xen-amd64
    
    これも無事終了したら,tg3.ko を xen-amd64 用ドライバとして保存する。
    ダウンロード tg3.ko (1016.0K)
  6. カーネルの 2.6.32-* の * が変わったら,その都度コンパイルしなおしが必要となりそう。

squeeze インストール用 usb メモリ作成

  1. UNetbootinをダウンロードし,Debian : Stable_NetInstall_x64 で usb メモリを作成する。
  2. その usb メモリに,debian ホームページから squeeze の net install CD の iso イメージを持ってきてコピーする。
  3. さらに tg3.ko もコピーする。/amd64/tg3.ko,/xen-amd64/tg3.ko 等としておく。

いよいよ squeeze インストール

  1. usb メモリをさして mac mini を起動して,メニューのペンギンを選択。
  2. UnetBootin の画面が出て,その後 debian インストーラーが立ち上がる
  3. 言語選択画面がでたら,おもむろに option-F2 を押してコンソールに入る。
  4. 起動した usb をマウントして,ether ドライバを読み込む。
    # mount -t vfat /dev/sda1 /mnt
    # insmod /mnt/amd64/tg3.ko
    # umount /mnt
    
  5. option-F1 でインストーラーに戻ってインストールを続ける。
  6. パーティショニングでは,起動した usb が sda,1台目の HD が sdb,2台目が sdc となっている。1台目の HD に FAT で作っておいたパーティションを削除して,ext3 と swap を作り直す。
  7. 例によって,「サーバに X は入れない主義」で最小限インストール。grub インストール直前までインストールを続ける。
  8. grub の設定では MBR にブートローダをインストールしますか?と聞かれるが,ここは<いいえ>とする。MBR はインストール終了後に rEFIt の gptsync で作成することになる。
  9. ブートローダをインストールするパーティションを聞かれるので,squeeze をインストールしたパーティションを指定する。今回の場合は /dev/sdb4 であった。これにより,rEFIt → squeeze パーティションの grub 起動という起動パターンとなる。
  10. インストールが終了したら,usb メモリを抜いて再起動。
  11. rEFIt にペンギンが出るが,まずは,Start Partitioning Tool を選択。
  12. EFI では MBR ではなく,GPT でディスクを管理している。GPT には今インストールした squeeze が見えているはずである。しかし,MBR の方は使ってないので,MBR には記載されていない。そこで,
    May I update the MBR as printed above? [y/N] 
    
    に y と答えて,GPT と MBR を一致させる。
  13. 作業を終了して,再起動する。(再起動必須)
  14. 再起動後,おもむろにペンギンを選択すると,見慣れた grub が起動する。

ether ドライバのインストール

インストール時に insmod したドライバを,恒常的に利用するように設定する。

  1. ドライバをインストールするディレクトリを作成,tg3.ko を入れた usb メモリをマウントしてコピーする。コピー後,depmod して再起動。これでネットワークが使えるようになる。
    # mkdir /lib/modules/2.6.32-5-amd64/updates
    # mount -t vfat /dev/sdc1 /mnt
    # cp /mnt/amd64/tg3.ko /lib/modules/2.6.32-5-amd64/updates/
    # depmod -a
    # reboot
    

xen のインストール

  1. xen をインストール
  2. リブート後に,grub で XEN 4.0 を選んでしまうと,まだネットワークドライバが入っていないので起動できない。まずは Linux 2.6.32-5-xen-amd64 の方を選択して起動。
    $ uname -a
    Linux debian 2.6.32-5-xen-amd64 #1 SMP Tue Jun 14 12:46:30 UTC 2011 x86_64 GNU/Linux
    
  3. xen 用の tg3.ko を /lib/modules/2.6.32-5-xem-amd64/updates を作ってコピー,depmod して再起動。grub で xen カーネルを選択して起動,これでやっと xen の dom0 として立ち上がる。

xen domU の移行

  1. dom0 さえ動いてしまえば,あとは parted で2台目のハードディスクにパーティションを作り,mkfs.ext3 でフォーマット,マウントして rsync で --numeric-ids をつけてコピー,/xen/*.cfg ファイルを環境に合わせて変更して移行完了。

自宅サーバマシンが,ものすごく小さくなった(体積にして約50分の1)。これなら,何台あっても置き場所には困らないなと思った。(そんなに何台も買えないけど)

« 2011年7月 | トップページ | 2011年9月 »