みーのぺーじ

みーが趣味でやっているPCやソフトウェアについて.Python, Javascript, Processing, Unityなど.

Chameleon ユーザーガイド

このページは "Chameleon Users Guide" (https://sites.google.com/site/linkforage/snowleo/chameleon-users-guide) の意訳にみーの注釈を加えたものです。

Chameleon 2.0 ユーザーガイド

特徴

  • HDD, DVD, USBデバイスなど、ほとんどのメディアから複数のOSを起動する
  • OSに変更を加えることなく、通常の状態で ("vanilla") インストール
  • パッチを当てたDSDTをサポート
  • AppleソフトウェアRAIDのようなGUID/GPT+MBRのハイブリッドディスクとMBRのディクスをサポート
  • GUIおよびCUI

Chameleonはオープンソースのソフトウェアです。したがって正当な権利のもと、サードパーティによって幾つかの修正版がリリースされています。修正版では、滅多に発生しないバグが修正され、タイムリーな機能が追加され、機能が拡張されています。これらのプロジェクトによって、より多くのユーザーがよりよいHackintosh を楽しんでいます。

多くのサードパーティはバイナリを公開していますが、ソースコードを公開していません。もしかするとライセンスを読んでいないのか、はたまた一行も修正していないのかもしれませんが、ソースコードを公開する必要があります。修正版プロジェクトはオリジナルと同じライセンスにする必要があるのです。謝辞は、正式なクレジットとRELEASE OFSOURCEに記載されています。Chameleonのソースコードを使用したプロジェクトを見たエンドユーザーは、ソースコードを公開するよう要請するべきで、このようなプロジェクトはバイナリを公開してはいけないのです。

Chameleonとは?

Chameleonはブートローダです。BIOSがコンピュータを起動した直後にロードし、起動するOSを探そうとします。ChameleonはWindows, Mac OS X, Linux,FreeBSDなど、多くのOSを起動することができますが、そもそもChameleonはApple製のハードウェアではないPCにMac OS Xをインストールする時に使用されます。ChameleonはAppleのboot-132の修正版としてDavid Elliot"s(dfe)によって開発されています。Chameleonは幾つかのローダーから構成されます。

  • boot & cdboot : 2段階目のbooterです。Chameleonのバイナリであり、cdbootはDVDをブートするためのものです。
  • boot0 : アクティブなパーティションを検索し、MBRまたはGUID/MBRハイブリッドのパーティションブーターをロードします。
  • chain0 : 別のbooterによってロードされ、別のbooterを起動します。
  • boot1h : 2段階目のbooterをロードする、HFS+用パーティションブーターです。
  • boot1f32 : MBRのディスクにあるFAT32用パーティションブーターです。
  • boot1he : 拡張セクター用パーティションブーターです。
  • boot1hp : 拡張boot1hローダーを検索するHFS+用パーティションブーターです。

【みーの注釈】

つまり、起動の順番は、BIOS -> -> boot0 (stage0) -> boot1h (stage1) -> boot (stage2) -> kernel (Mac OS X) となるわけです。

Chameleonの仕組み

アクセス可能なメディアをスキャンし、起動ができるOSのリストを取得します。HFS+パーティション上のMac OSXを起動する場合は、EFIエミュレータという、BIOSの代わりとなりものが作成されます。次にカーネルエクステンション(kext)やDSDT、デバイス情報など、追加のデータをロードし、カーネルとOSに引き渡します。

ChameleonはどのPCでもMac OS Xを起動できるのか

Chameleonは非常に多くのPCでMac OSXを起動することができますが、難易度と成功率はさまざまです。例えば、Apple製のコンピュータのマザーボードに類似しているマザーボードの方が、そうでないものに比べてよりサポートされています。Macにある機能が備わっていないパーツを使用する場合、個別のオーディオ、イーサネットチップなどに対応したカーネルエクステンションなど、追加のソフトウェアが必要になります。グラフィックカードのようなパーツは、サードパーティのサポートがあまりありません。したがってサポートされている既存の製品を必要とします。AMDのCPUを使用する場合も、解決すべき障害があります。

設定

com.apple.Boot.plistというファイルでChameleonの挙動を設定します。そしてkext(カーネルエクステンション)・DSDT.aml・smbios.plist・com.apple.Boot.plistの4つでMac OSXの起動方法を変更することができます。kextのみが必須で、残りは任意です。

Chameleonは以下のディレクトリから設定を取得します。

  • Extraフォルダ
    • Extra (OSを含まないパーティションの "boot" と同じディレクトリ。例えば/Volumes/EFI/Extra)
    • /Extra (起動するMac OS Xのルートディレクトリ)
    • 上記のディレクトリのラムディスク(Ramdisk)にロードされたPreboot.dmgのExtraフォルダ
  • kext (スタンドアロンの.kextとキャッシュされた.mkextの両方) は、以下の場所からロードされます。
    • Extra/Extensions ("boot" ファイルと同じパーティション。例えば/Volumes/EFI/Extra/Extensions)
    • Extra/10.x/Extensions (OSのバージョン用の上記のフォルダ)
    • /Extra/Extensions (起動するMac OS Xのルートディレクトリ)
    • /System/Library/Extensions (ここの変更にはkextのキャッシュのリビルドが必要)
    • 上記のディレクトリのラムディスク(Ramdisk)にロードされたPreboot.dmgのExtra/Exensions
    • 注意:頑固なkextは/System/Library/Extensionsでしか動作しないことがあります。

これらのディレクトリにあるcom.apple.Boot.plist, smbios.plist &DSDT.amlの中から1つだけが使用されますが、Chameleon 2.0 RC3からはkextは上記のディレクトリのいずれのExtensionsフォルダーまたはバージョン固有のフォルダに保存してもロードされます。つまり、Extra/10.5/Extensions と Extra/10.6/Extensions のそれぞれにMac OS Xのメジャーバージョンに特化したkextを入れることができるわけです。

ファイルを入れるディレクトリは1つに統一した方がよいです。

smbios.plist

少しのパラメータを記述した単純なテキストファイルです。この情報はシステムプロファイラの情報に反映されます。このファイルは "property list" と呼ばれる拡張XMLフォーマットで、拡張子を見れば分かるように、plist とも呼ばれます。

DSDT.aml

このファイルはヒトが読めるものではありませんが、マザーボートとその機能・特長を記述したものです。可読性のある擬似プログラミングファイルDSDT.dst はIntelのCLIツールであるiaslを用いてコンパイルされます。ChameleonはMac OSXのカーネルにこのファイルを提示します。このファイルを修正することでコンピュータはより安定となりますが、適切にコーディングされていない場合は不安定になります。オーディオチップを動作させるのに数行修正するだけでよいこともありますが、but support can also come inthe form of a kernel extension, so it can be a matter of preference.

com.apple.Boot.plist

Chameleonの設定ファイルです。多くの設定はこのファイルにkey::stringフォームを追加することで変更可能です。カーネルもこのファイルからいくつかの設定を受け取ります。例えば32bitか64bitか、などです。システムに特有の特徴も、Chameleonがカーネルに提示するEFItreeにデバイスプロパティを追加してください。これらのデバイスプロパティはグラフィックカード・オーディオ・LANなどをEFIがどのようにセットアップするかをエミュレートします。"EFI strings"のガイドを検索してください。オリジナルのファイルは/Library/Preferences/SystemConfiguration/com.apple.Boot.plistにありますので、初期の状態に戻すことができます。

kernel extensions

Chameleonはブートの間に上記の補足ファイルをカーネルに提示し、実行中もアクティブの状態を保ちます。上記の補足ファイルによってLANチップなど追加のパーツが動作するようにOSのサポートを拡張します。しかし場合によってはサポートが不完全だったり、Appleの部品を無効化して問題を引き起こすこともあります。例えばCPUパワーマネジメントが挙げられます。KextはMac OSXには1つのファイルとして提示されますが、実態はネストされたフォルダ構造です。このようなファイルがカーネルと動作するには、OSBundleRequired::Rootキーを内蔵のplistに追加します。これらの追加のkextはExtra/Extensionsフォルダに存在します(ディレクトリについては前述)。

注意:kextのキャッシュを使ってExtensions.mkextをビルドすることはもう必要ありませんが、サポートはされています。

com.apple.Boot.plist

【みーの注釈】

このセクションはhttp://legacy.tonymacx86.com/wiki/index.php/Org.chameleon.Boot.plist の方が詳しいので、こちらを参照してください。また、com.apple.Boot.plist は最新のChameleonではorg.chameleon.Boot.plist という名前です。

詳細な起動オプションを指定するChameleonコマンドライン

ChameleonがGUI(グラフィック)モードで起動された場合、いずれかのキーを押すことで、画面の下部に表示されるコマンドライン入力欄にテキストを入力することができるようになります。カーネル設定キーやハードウェア設定キーのほとんどは、コマンドラインに入力するだけで動作します。スペースを含むキーを入力する際は、ダブルクオーテーションで囲む必要があります。例えば以下のように入力します。

arch=i386 -v 
mach_kernel rd=disk0s1 -v "Graphics Mode"="1920x1200x32" 
USBBusFix=yes rd=uuid boot-uuid=1EAA1BE6-A4CB-35EB-A418-92609A4C730B 

Chameleon 2 のブートCDの作成

ChameleonからブートCDを作成することができ、ブートCDとは、リテール版Mac OS X インストールDVDを起動するためのCDのことです。HDDにChameleonをインストールするには "boot" ファイルを使用します。CDROMからブートする場合は、Chameleonを "chboot" ファイルを使用してインストールする必要があります。"chboot" は少し拡張されており、DVDをブートすることもできます。

はじめにデスクトップに "booter" という名前のフォルダを作成し、その中に "Extra" というフォルダを作成します。ターミナルで以下のコマンドを実行します。

mkdir -p ~/Desktop/booter/Extra 

Chameleonの "i386" フォルダにある "cdboot" ファイルを、 "booter" フォルダにコピーします。

com.apple.Boot.plist と DSDT.aml と smbios.plist を booter/Extra フォルダに作成するかコピーします。コンピュータが正常に動作するよう、これらのファイルを修正します。

com.apple.Boot.plist を開いて、以下のキーを追加します。

<key>Rescan</key> 
<string>Yes</string> 
<key>Instant Menu</key> 
<string>Yes</string> 

(いくつかのマザーボードでは、arch=i386 カーネルフラグを追加し、32bitモードで起動した方がよいかもしれません。)

ターミナルを開いて、以下のコマンドを実行し、15MBのPreboot.dmgを作成します。

hdiutil create -size 15m -fs HFS+ -volname Preboot -layout MBRSPUD -attach ~/Desktop/booter/Extra/Preboot.dmg 
mkdir -p /Volumes/Preboot/Extra/Extensions 

kextはPreboot.dmgの中のExtra/Extensionsフォルダーにコピーされます。kext内のInfo.plistに、Root string valueが記述されたOSBundleRequiredキーがあることを確認してください。

デスクトップでRrebootボリュームをアンマウントします。(右クリック->取り出し)

ターミナルにて以下のコマンドを実行し、ブートCDを作成します。

hdiutil makehybrid -o ~/Desktop/Boot.iso ~/Desktop/booter/ -iso -hfs -eltorito-boot ~/Desktop/booter/cdboot -no-emul-boot -hfs-volume-name "BootCD" 

DVDかCDにBoot.isoディスクイメージを焼きます。

【みーの注釈】

DSDTや特別なkextを含んだブートCDを作成する必要がある場合は上記の手順に従ったらよいですが、その必要がない場合は、chameleon.osx86.huにある "Bootable ISO image, installer and binaries" をダウンロードして、isoファイルをCDに焼くほうが簡単です。また、このisoファイルの中身を参考にすれば、上記の手順がより分かりやすくなると思います。

http://chameleon.osx86.hu/articles/chameleon-21-latest-version-download-links-updated

Chameleon 2 のブートCDの使い方

再起動し、BIOSの設定でCD/DVDからブートするよう設定されていることを確認します。すでにインストールされているMac OS X を起動する場合は、そのパーティションを選択してEnterキーを押します。Mac OS XのインストールDVDを起動する場合は、以下の手順に従います。

ChameleonのGUIが表示されたら、ChameleonのブートCDを取り出し、リテール版Mac OS XインストールDVDを挿入します。DVDがスキャンされるまで数秒待ちます。F5キーを押して、光学ドライブを再スキャンします。"Mac OS X インストール DVD"のアイコンと名前が表示されたら、選択し、Enterキーを押してDVDをブートします。

もし問題が発生したら、詳細のログを表示すると(-v verbose mode)、問題の解決に役立ちます。起動するドライブを選択してから、下矢印キーを押して "Boot in verbose mode" を選択するか、-v オプションを指定し、Enterを押して起動します。

HDDにChameleonを簡単にインストールする方法 (RAIDなし)

インストールするドライブとパーティションを決めます。その際、以下のコマンドをターミナルで実行することで、デバイスとその識別子(identifier)が分かります。

diskutil list 

Chameleonのバイナリがあるディレクトリへと移動します。デスクトップにあるのなら、以下のコマンドを実行します。

cd ~/Desktop/Chameleon-2*/i386 

0段階目のboot0ローダーをインストール先のHDDにインストールします。(xはHDD番号、yはパーティション番号です。上記diskutilコマンドを実行して調べます)

sudo fdisk -f boot0 -u -y /dev/rdiskX 

1段階目のboot1hローダーをインストール先のボリュームにインストールします。

sudo dd if=boot1h of=/dev/rdiskXsY 

Chameleonの "boot" ファイルをインストール先にコピーします。

sudo cp boot /dest/path 

ターミナルのウインドウにインストール先のデバイスをドラッグ・アンド・ドロップすると便利です。この作業で重要なのは、すべてのファイルが同じHDDに存在し、boot1hとbootファイルが同じボリュームのHDDトップレベルに保存されていることです。例えば、以下のコマンドでbootファイルをルートパーティションにコピーすることができます。

sudo cp boot / 

HDDの隠しRFIパーティションにChameleonをインストールする方法 (RAIDなし)

【みーの注釈】

このセクションはみーは今のところ興味がないので訳していません。必要な方は原文を参照してください。

AppleソフトウェアRAIDにChameleonをインストールする方法

AppleソフトウェアRAIDを作成します。ストライピングでもミラーリングでもよいです。作成したRAID上にMac OS Xをインストールします。以下のコマンドを実行し、RAIDがどのHDDのどのパーティションを使用しているのかを決定します。

diskutil list 

例えば以下のような情報だとします。

/dev/disk0 
#:                      TYPE NAME         SIZE         IDENTIFIER 
0:     GUID_partition_scheme             *931.5 Gi     disk0 
1:                       EFI              200.0 Mi     disk0s1 
2:                Apple_RAID              931.3 Gi     disk0s2 
3:                Apple_Boot Boot OSX     128.0 Mi     disk0s3 
/dev/disk1 
#:                      TYPE NAME         SIZE         IDENTIFIER 
0:     GUID_partition_scheme             *931.5 Gi     disk1 
1:                       EFI              200.0 Mi     disk1s1 
2:                Apple_RAID              931.3 Gi     disk1s2 
3:                Apple_Boot Boot OSX     128.0 Mi     disk1s3

Mac OS XはRAIDを構成するHDDの最後に小さな補助パーティションを作成します。ここではdiskXs3とEFI パーティションのことです。

以下のコマンドを実行して、RAIDを構成するHDDそれぞれに0段階目のboot0ローダーをインストールします。

sudo fdisk -f boot0 -u -y /dev/rdisk0 
sudo fdisk -f boot0 -u -y /dev/rdisk1 

RAIDを構成する補助パーティションのブートセクターそれぞれに1段階目のboot1hローダーをインストールします。

sudo dd if=boot1h of=/dev/rdisk0s3 
sudo dd if=boot1h of=/dev/rdisk1s3 

Chameleon本体である "boot" ファイルを、RAIDを構成するHDDの補助パーティションにインストールします。

diskutil mount disk0s3 
cp boot /Volumes/Boot\ OSX
diskutil unmount disk0s3 
diskutil mount disk1s3 
cp boot /Volumes/Boot\ OSX 
diskutil unmount disk1s3 

ディスクユーティリティを開き、RAIDを選択してウインドウの最上部の左にある "情報" アイコンをクリックします。UUID (Universal Unique Identifier) という項目を見つけ、16進コードをコピーします。このUUIDをcom.apple.Boot.plistのカーネルフラグに以下のようにして追加します。

"Boot OSX" パーティションをマウントします。ここでは2つドライブがあるので、2つともそれぞれマウントします。

diskutil mount disk0s3
diskutil mount disk1s3 

com.apple.Boot.plist を開いて、UUIDを追加します。

<key>Kernel Flags</key> 
<string>rd=uuid boot-uuid=1EAA1BE6-A4CB-35EB-A418-92609A4C730B</string> 

もしも"Boot OSX" パーティションにcom.apple.Boot.plistやExtraフォルダーがない場合は、オリジナルのファイルが/Library/Preferences/SystemConfiguration/com.apple.Boot.plist にあるので、これをコピーするか、新しく作成します。

注意:AppleソフトウェアRAIDはサポートされていますが、BIOSのRAIDはサポート外です。

2012.12.2