FreeBSD Daily Topics

2012年11月21日FreeBSD 9.1をMacBook Airにインストールする方法

install

How to install FreeBSD 9.1 into MacBook Air

FreeBSDデベロッパやユーザの多くの方がMacBook AirないしはMacBook Proを使うようになりました。国内外のカンファレンスや勉強会に参加すると、多くのユーザがMacBookを使っています。

これら環境ではVMware FusionやParallels Desktop for Mac、VirtualBoxなどの仮想環境にFreeBSDをインストールして使っているケースが多いように思います。しかし、仮想環境ではなくホスト環境としてFreeBSDがインストールされている方が都合がよいことがあります。MacBookを専用のアプライアンスとして特定の業務用にシステム構築する場合などです。

MacBookは起動の方法としてEFIを採用していますので、現在デフォルトで提供されているFreeBSDディストリビューションを手軽にホスト環境にインストールすることはできません。FreeBSDを起動できるようにするにはいくつかの方法がありますが、ここでは中でももっとも簡単な手順になると思われる方法を紹介します。

注:もし以降の手順を実施する場合、自己責任で実施してください。先頭のパーティションを潰してしまうとMac OS X Mountain Lionの再インストールができなくなりますし、データ領域を潰せばデータを失います。作業前にバックアップを実施しておくことを推奨します。
  1. 起動の戦略:EFIとBIOS、GTPとMBR

    MacBookはEFI/GTPでシステムを起動します。FreeBSDを起動しようとした場合、次の手順を踏む必要があります。

    HFS+パーティションにEFIの仕組みに則ったローダを配置し、そこからUFSでフォーマットされている別パーティションのFreeBSDのカーネールをシステムに読み込む処理をする

    ただし、最近のファームウェアは従来のMBRの仕組みからシステムを起動する機能も提供しています。ですので、次の方法でも起動できます。

    MBRの仕組みで起動するタイプのFreeBSDパーティションを用意して、そこから起動する

    ここでは後者の方法でFreeBSDをインストールおよび起動する方法を紹介します。

  2. 用意する機材

    ここでは次の機材を用意しました。Airモデルの中で最も廉価に入手できる11インチのMacBook Airと、USBメモリです。

    • APPLE MacBook Air 1.7GHz Core i5/11.6/4G/64GB MD223J/A
    • USBメモリ 4GB

    USBメモリにはFreeBSDのメモリスティック用インストールイメージを書きこんでおきます。たとえば、次のように書き込みます。ここではFreeBSD 9.1-RC3のインストールイメージを使っています。

    # dd if=FreeBSD-9.1-RC3-amd64-memstick.img of=/dev/da0 bs=1024x1024x10

    MacBook Air内蔵の無線LANチップはFreeBSDからは使えませんので、ネットワークを利用する場合はUSB NICも合わせて購入します。次の製品が利用できます。

    • PLANEX ギガビット対応 USB2.0用 LANアダプタ UE-1000T-G2
    • PLANEX 1000BASE-T Gigabit対応 USB LANアダプタ GU-1000T

  3. MacBook AIRにFreeBSDのパーティションを作成

    ディスクユーティリティを起動してパーティションを2つに分割します。ここではほぼ同じサイズで分割しています。

    画像
    画像
    画像

    上記スナップショットはすでにFreeBSDがインストールされたあとのものですが、2つ目のパーティションのタイプが「FreeBSD UFS」になっていることを確認できます。

  4. USBメモリからFreeBSDを起動

    USBメモリからFreeBSDを起動します。まず、alt/optionsキーを押しながらMacBookを起動します。次のように起動するディスクを選択する画面が表示されます。左から1つ目がMac OS X、2つ目がFreeBSD用に確保した領域です。

    画像

    ここで、先に用意したUSBメモリを差し込むと、次のようにUSBメモリが追加表示されます。これを選択してシステムを起動します。

    画像

    途中、Install / Shell / LiveCD のどれを実行すると聞かれるので LiveCD を選択します。

    画像

    LiveCD モードが起動したら root でログインします。パスワードはいりません。

    /dev/ada0p4がFreeBSD用に確保したパーティションになりますので、ここをbsdlabel(8)でBSDラベルとしてディスクパーティションを実施するとともに(-w⁠⁠、ブートストラップコードをディスクへ書き込みます(-B⁠⁠。ここで指定するパーティションを間違えると既存のデータやシステムが壊れますので注意してください。

    # bsdlabel -w /dev/ada0p4
    # bsdlabel -B /dev/ada0p4

    BSDラベルとして作成したことで/dev/ada0p4aが表示されますので、これをnewfs(8)でUFS2フォーマットします。Softupdatesを有効にするために-Uを、TRIMを利用するために-tを指定します。このモデル(MacBook Air 11inch 2012)のSSDはTRIMに対応しています。

    # newfs -U -t /dev/ada0p4a

    インストールする領域の準備ができましたので、作成した領域をマウントしてシステムを次のようにインストールします。

    # mount /dev/ada0p4a /mnt
    # cd /usr/freebsd-dist/
    # tar zxvf base.tzx -C /mnt
    # tar zxvf doc.tzx -C /mnt
    # tar zxvf games.tzx -C /mnt
    # tar zxvf kernel.tzx -C /mnt
    # tar zxvf lib32.tzx -C /mnt
    # tar zxvf ports.tzx -C /mnt
    # tar zxvf src.tzx -C /mnt

    sysinstall(8)やbsdinstall(8)、pc-sysinstall(8)やPC-BSDなどで実施するインストール作業というのは、基本的に上記3つの作業を実施しているだけです(パーティションを切る、フォーマットする、ファイルを展開する⁠⁠。この手順を知っておけば、インストーラを使わなくてもインストールできますし、任意のシステムを構築する場合に便利な方法ですので覚えておいた方がよいでしょう。

    システムが起動できるように/mnt/etc/fstabを次の内容で作成します。

    /dev/ada0p4a / ufs rw 1 1

    /mnt/etc/rc.confも必要最低限の設定で作っておきます。

    hostname="macbookair.bsdconsulting.co.jp"
    keymap="jp.106.kbd"
    powerd_enable="YES"

    ここではホスト名、日本語キーボード、powerd(8)だけ設定しています。電源をつながないで作業する場合、powerd(8)を有効にしておいた方が長い時間作業できます。

  5. rEFItをインストール

    このままではFreeBSDは起動しません。GTPとしてはパーティションが適切になっていますが、MBR部分にFreeBSDパーティションの情報が記載されていないためです。どの方法でMBR部分をアップデートしてもよいのですが、ここではrEFItを使います。Mac OS Xを起動して、rEFItをインストールします。

    この状態で alt/option を指定しながらMacBookを起動すると、Mac OS Xがインストールされた領域が rEFIt として認識されるようになります。確認したら一旦再起動します。

    画像

    表示されるrEFItの画面の下にパーティションを操作するためのアイコンが現れますので、これを選択します。選択するとGTPとMBRのデータに齟齬があるため、MBRのほうをアップデートするかどうか聞かれますので、ここでMBRをアップデートします。アップデートすると次のようにGTPとMBRが同じ内容になります。

    画像

    rEFItの選択画面にFreeBSDが表示されます。これでFreeBSDのインストールは完了です。

    画像

    rEFItの設定ファイルを変更すれば、起動時にFreeBSDが自動的に起動できるようにすることもできます。rEFItをアンインストールして alt/option キーで選択する方法だけにしてもよいでしょう。自分は問題発生時の原因特定を難しくする要素を極力減らしたいので、ここまできたらrEFItはアンインストールしています。rEFItのアンインストールはMac OS Xの/efi/と/Library/StartupItems/rEFItBlesser/を削除することで実施します。

  6. インストール後のパーティショニング状況

    gpart(8)でGTPを確認すると次のようになっています。

    # gpart show ada0
    =>       34  118489021  ada0  GPT  (56G)
             34          6        - free -  (3.0k)
             40     409600     1  efi  (200M)
         409640   56640624     2  apple-hfs  (27G)
       57050264    1269536     3  apple-boot  (619M)
       58319800   58720256     4  freebsd-ufs  (28G)
      117040056    1448999        - free -  (707M)
    #

    fdisk(8)でMBRを確認すると次のようになっています。

    # fdisk ada0
    ******* Working on device /dev/ada0 *******
    parameters extracted from in-core disklabel are:
    cylinders=117548 heads=16 sectors/track=63 (1008 blks/cyl)
    
    Figures below won't work with BIOS for partitions not in cyl 1
    parameters to be used for BIOS calculations are:
    cylinders=117548 heads=16 sectors/track=63 (1008 blks/cyl)
    
    Media sector size is 512
    Warning: BIOS sector numbering starts with sector 1
    Information from DOS bootblock is:
    The data for partition 1 is:
    sysid 238 (0xee),(EFI GPT)
        start 1, size 409639 (200 Meg), flag 0
    	beg: cyl 1023/ head 254/ sector 63;
    	end: cyl 1023/ head 254/ sector 63
    The data for partition 2 is:
    sysid 175 (0xaf),(HFS+)
        start 409640, size 56640624 (27656 Meg), flag 0
    	beg: cyl 1023/ head 254/ sector 63;
    	end: cyl 1023/ head 254/ sector 63
    The data for partition 3 is:
    sysid 171 (0xab),(unknown)
        start 57050264, size 1269536 (619 Meg), flag 0
    	beg: cyl 1023/ head 254/ sector 63;
    	end: cyl 1023/ head 254/ sector 63
    The data for partition 4 is:
    sysid 165 (0xa5),(FreeBSD/NetBSD/386BSD)
        start 58319800, size 58720256 (28672 Meg), flag 80 (active)
    	beg: cyl 1023/ head 254/ sector 63;
    	end: cyl 1023/ head 254/ sector 63
    #
  7. FreeBSD on MacBook Air、細かい設定とバッテリー残量の確認方法

    画像

    インストーラを使っていないので、ユーザの設定やタイムゾーンの設定、時刻の調整など、細かい設定が実施されていません。少なくともタイムゾーンと時刻は設定しておきます。タイムゾーンはtzsetup(8)コマンドで設定します。

    # tzsetup

    タイムゾーンをJSTに設定したらntpdateサービスを一回実行して時刻を調整します。

    # service ntpdate onestart

    MacBook Airのバッテリ残量は次のように確認できます。

    プロセッサの動作周波数は次のように確認できます。powerd(8)が機能していれば、CPU負荷がほとんどかかっていない段階ではこの値は100といった値になります。

    # sysctl hw.acpi.battery
    hw.acpi.battery.life: 100
    hw.acpi.battery.time: -1
    hw.acpi.battery.state: 0
    hw.acpi.battery.units: 1
    hw.acpi.battery.info_expire: 5
    #

    ボックス型の小型PC(Intel CPU、ATOM、ARM、MIPSなど、なんでもかまいません)にFreeBSDをインストールして、キーボードやポータブルVGA液晶などを組み合わせてアプライアンスとして利用する方法もあるのですが、この程度の価格帯であればMacBook Airを代替機として使用するというのは、今回システムをセットアップしてみてかなり実用的だと感じました。小型で扱いやすく、バッテリーを搭載しているため取り回しが容易です。ディスクがSSDであるため操作も軽快で、再起動すればMac OS Xも利用できるためかなり万能に利用できるという感触を得ました。

    固定的に設置して使用するアプライアンスに仕上げるのではなく、汎用的なツールとして扱う傾向が強いのであれば、MacBook Airを専用機に仕上げるのは有効な方法だと思います。

おすすめ記事

記事・ニュース一覧