2014年6月27日金曜日

SONY VAIOを追悼してVAIO type PでOSX86の夢を見た話。

ソニーのPC事業売却に伴って、早期退職者の数字がニュースになっていました。

ソニーは26日、パソコン事業「VAIO(バイオ)」の売却に伴い、約420人の従業員が退職することを明らかにした。同事業に携わる約1100人のうち、約4割が離職する。退職者の内訳は長野県安曇野市にある工場従業員が約300人、ソニー本体が約120人。

7月1日に投資ファンドの日本産業パートナーズとソニーが立ち上げる新会社「VAIO」に約240人が移る。残りの約440人はソニーのグループ会社などへ配置転換する。

ぼくもリーマンショック後に、IBMを部門閉鎖によって早期退職した経験があります。ソニーの技術者たちも苦渋の決断だったでしょう。また、彼らの中にはぼくのIBM時代の同僚も多く含まれています。よい職場に恵まれることをささやかながらお祈り申し上げます。

さて、バイオ株式会社の新生『VAIO』が今後どうなるかはさておいて、VAIO Pro 11の英字キーボードモデルを買おう買おうと思っているうちに事業売却が発表され、あっという間にソニーストアでのBTO発注ができなくなってしまい、購入の機会を逃してしまいました。

MacBook Pro 15 Retinaは持ち歩きたくない、しかし中国人経営のぼくの職場は〝Windows XP 超級Ultimate SpeedSTARS SP3版本〟などという謎の中国語版Windows XP(※中国ですから、当然ながら海賊版かつ不正改造版です!)が入ったPCがごろごろ転がっているだけで、まともなWindows 7以降やMac OS XのPCが存在しません。

なので、いっそもう開き直って中古のVAIO type P VGN-P61S (Windows XP, メモリ1GB, SSD 32GB, カメラレス構成)を買ってきて、OSX86の夢でも見ながらソニー製VAIOを追悼することにしました。

なぜVAIO type Pなのか? なぜOSX86なのか? ──これに関しては、ロマンであるとしか言いようがありません。小さくて軽いPCであってほしい、Atom Z500系でLinuxだとちょっと地獄っぽい、*BSDでも同じっぽい、そもそも*BSD系譜のOS Xなら普段から使っているので蓄積された豊富なナレッジが活かせる、そんなところです。過去にはNokia Booklet 3Gでの経験(※関連エントリ)もあります。

VAIO type P(※以降、『VAIO P』と表記)は、プロセッサにIntel Atom Z500シリーズを搭載した古き良き〝ネットブック〟のカテゴリに含まれるPCです。悪評高い統合型GPU『GMA 500』を含む、Intel US15Wプラットフォームです。

最近のAtomと違って32ビットプロセッサであり、Mac OS XはSnow Leopard 10.6.3から徐々に64ビット化を推し進めているため、前提条件としてはSnow Leopard 10.6.2以前のインストールイメージが必要です。

また、それなりに実用的な環境とするにはたくさんの制約があって、10.6.7以上へアップデートするとCPUタスクが占有されがちで重く、10.6.5以上ではスリープ(ACPI S3)が使えず、VAIO Pにおいては10.6.4がスリープもできてフレームバッファも効き、それほど環境を書き換えずとも実用とできる最新の環境となります。ただし、10.6.4では当該のカーネル拡張(kext)を導入しても画面輝度を変更することはできず、これをやりたい場合は10.6.2以下である必要があります。こちらはフレームバッファが効きません。現実的には10.6.2か10.6.4か、どちらかを選択することになります。

大枠としては、以下のInsanely Mac フォーラムにまとまっています。

2009年に開始されたスレッドであり、ここで議論されたことよりもアップデートされている箇所も存在します。以下は、2014年現在としてできるよりベターな方策について述べています。

インストールメディアの作成

インストールメディアを作成するには、すでに動作しているMac OS Xが必要です。これはリアルMacでも仮想マシンでも何でもいいですが、WindowsやLinux/*NIXで作成できるかどうかはしりません。KIAIでどうにかできるのではないかとは思います。

10.6当時のMac OSはアップグレードが有償かつメディア提供だったこともあり(※『Mac App Store』は10.6.6からの搭載)、Snow Leopard 10.6のリテイルパッケージはたくさん持っているので(※ライセンスの話に関しては、OSX86のお約束として〝夢〟であるとします)、『ディスクユーティリティ』でそのディスクイメージをGUIDパーティション(GPT)構成のUSBメモリへ〝復元〟します。8GB以上のUSBメモリなら大丈夫だと思います。

このUSBメモリはそのままではブートローダの仕組みが違うPCと互換性がなく、Apple純正のMacでしか起動できないので、小細工を仕掛けてPCでもブートできるようにします。これには『Chamaleon』というEFIブートローダを使います。

今回はChameleon 2.0-RC4を使用していますが、もっと新しいものでもいいかもしれません(未検証です)。また、のちの手順で入れ替える〝boot〟ファイルがChameleon 2.0ベースのものですので、あまりにも新しいと逆に具合が悪そうです。

加えて、VAIO Pで動作させるためのドライバが必要です。必要なファイルは以下から取得できる『vaiop20091014.tar.bz2』です。ぼくの場合は英字キーボードモデルなので『vaiop20091014(us).tar.bz2』です。同一作者による、これより新しいファイルは(少なくともtype Pでは)正しく動作しませんでした。

Chameleonとドライバのどちらをも解凍して、ターミナルからインストールしましょう。まずは、USBメモリのマウントポイントを確認しましょう。

$ df

ずらずらっと以下のような表示がされると思います。

Filesystem 512-blocks Used Available Capacity iused ifree %iused Mounted on
(略)
/dev/disk2s2 14991280 13095704 1895576 88% 1636961 236947 87% /Volumes/Mac OS X Install DVD
(略)

これを〝/dev/disk[A]s[B] (略) /Volumes/[C]〟として、以下では読み替えてください。ブートローダを書き込み、インストーラに必要なドライバを導入します。

$ cd Chameleon-2.0-RC4-r684-bin/i386/
$ sudo -s
(パスワード入力)
# fdisk -f ./boot0 -u -y /dev/rdisk[A]
# dd if=./boot1h of=/dev/rdisk[A]s[B]
# cp ./boot /Volumes/[C]/
# cd ../vaiop20091014/
# cp ./DSDT.aml /Volumes/[C] /
# cp -r ./Extra /Volumes/[C]/

この状態で、VAIO PでUSBメモリからOS Xインストーラを起動できるようになっています( 起動ドライブとしてUSBメモリを明示的に指定する場合は、VAIOロゴ画面で[F8]キー)。起動しない場合は、ディスクユーティリティからUSBメモリの〝アクセス権の修復〟などを試してみてください。

Mac OS Xのインストール

USBメモリから起動させてしばらくするとGUIが立ち上がり、言語を選択したあとインストール画面が表示されると思います。Windowsだとこのあとにウィザードを進めるとパーティション構成をすることができるらしいのですが、Mac OSは違います。上部の「ユーティリティ」メニューから「ディスクユーティリティ」を選んでください。

筆者の場合は、VAIO Pの内蔵ドライブをGUIDパーティション構成にしてMac OS拡張フォーマットの1パーティションにしました。これだとアグレッシブに初期導入のWindowsはリカバリパーティションごと消されますので、そのへんは適宜バックアップなどを作ってください。

パーティションが作成できたら、ディスクユーティリティを終了するとインストール画面に戻ります。[カスタマイズ...]を押して不要なパッケージを削るなどしてもいいですし、そのままでも大丈夫です。[インストール]で導入が開始されます。だいたい30分くらいかかります。

インストールの最後に〝失敗〟するかもしれません。この場合は、再起動してもう一度USBメモリから起動させ、ディスクユーティリティの「パーティション」タブでMac OSを導入したパーティションのサイズを(右下のスライダなどで)ちょっと調整してみたりしてください。これでブート周りのファイルが正しく設定され、ディスクのアクセス権も修復されるので起動できるようになると思います。

Mac OS Xの初期構成

上記でMac OSのインストール自体は完了していますが、内蔵ディスクにはブートローダが導入されていません。ひとまずUSBメモリから起動させてプログレスバーが動いている間に何かキーを押すと、インストーラの右側に内蔵ディスクが見えると思います。こちらをカーソルで選択して[Enter]で、内蔵ディスクから起動することができます。

今のところ何もいじっていない環境なので、素直に起動するはずです。初期設定を進めてデスクトップを表示させてください。このあとドライバをインストールするまで、USBメモリを含む外部データへのアクセス経路がWi-Fiしかないため、Wi-Fiの設定は必ず行ってください。

起動したら、まずSafariを起動して上述したChameleonとvaiop20091014の2ファイルをダウンロードします。解凍して、ターミナルからインストールします。

先ほどと同じように、dfで今度は内蔵ディスクの / のマウントポイントを確認してください。たとえば〝/dev/rdisk1s2 (中略) /〟だったら、また同じように〝/dev/rdisk[A]s[B] (中略) [C]〟と読み替えます。ただし、基本的に今回の[C]は / なので入力する必要はないと思います。

GPT構成のディスクでは、EFIの拡張ファームウェア向けに小さい隠しパーティションが確保されています。Mac OS Xはこの領域を使用しないので、ここにブートローダを導入します。以下のようにして、このパーティションを確認できます。

$ diskutil list

/dev/disk0
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *500.3 GB disk0
1: EFI EFI 209.7 MB disk0s1
2: Apple_HFS Macintosh HD 499.4 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk2
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *8.0 GB disk2
1: EFI EFI 209.7 MB disk2s1
2: Apple_HFS Mac OS X Install DVD 7.7 GB disk2s2

TYPEが〝EFI〟になっている200MBくらいの領域がそれです。以下のようにしてマウントさせましょう。

$ sudo -s
(パスワード入力)
# mkdir /Volumes/EFI
# mount_hfs /dev/disk0s1 /Volumes/EFI

もしもマウントしようとしてエラーが出た場合は、まずはパーティションのチェックを。

# fsck_hfs /dev/disk0s1

これでマウントを再試行するとうまく行くと思います。

よく紹介される、ChameleonをMac OS Xのパーティションに導入する方法と違って、ファイルを配置する場所が異なります。具体的には、bootやDSDTパッチなどはEFIパーティションへ、カーネル拡張をアーカイブしたファイルであるExtensions.mkextはMac OS Xのパーティションへ、となります。要するに、ブートローダが読むファイルはEFI側ですが、Mac OS Xが必要とするファイルはMac OS側にないと読めません。

$ cd Chameleon-2.0-RC4-r684-bin/i386/
$ sudo -s
(パスワード入力)
# fdisk -f ./boot0 -u -y /dev/rdisk[A]
# dd if=./boot1h of=/dev/rdisk[A]s[B]
# cp ./boot /Volumes/????/
# cd ../vaiop20091014/
# cp ./DSDT.aml /Volumes/????/
# cp -r ./Extra /Volumes/????/

さて、Extraフォルダ内に配置したカーネル拡張はいくつかアップデートしたほうが具合がいいと思います。

以下のコマンドで、入れ替えたカーネル拡張をアーカイブし直してくれます。

# sh /Extra/extra.sh

また、デフォルトのsmbios.plistのメモリ周波数などの一部定義がおかしいので、これを修正するとよいでしょう。具体的には、以下の値が正しいです。

<key>SMexternalclock</key>
<string>133</string>
<key>SMmaximalclock</key>
<string>1333</string>
<key>SMmemtype</key>
<string>19</string>
<key>SMmemspeed</key>
<string>533</string>

最後に、『ディスクユーティリティ』を起動して(起動方法は、control-spaceのSpotlightからでも「アプリケーション」→「ユーティリティ」からでも何でもいいです)、内蔵ディスクのアクセス権の修復を行ってください。終わったら再起動すると、USBメモリを抜いていても起動できるようになっているはずです。

Mac OS Xのアップデート

Mac OS X 10.6でそのまま使うのはちょっと忍びないので、アップデートします。32ビット版のMac OS Xの最終版は10.6.2なので、後述するドライバの入れ替えの際にちょっとでも新しいものがいいという場合は、10.6.2へアップデートしてから10.6.4などへアップデートするといいと思います。今回はそのまま10.6.4へアップデートしています。

そのまま10.6.4へアップデートした際に起動不能となるドライバと同じファイル名のものをバックアップします。

よくAtom用のカーネルパッチを適用すべきとあるのですが、これは実はVAIOPEnablerが処理してくれるので(少なくともVAIO Pに限っては)必要ありません。

SleepEnablerを10.6.4対応のものへ入れ替える必要があります。

Chameleonの boot を差し替える必要があるので、以下のリンク先ファイル内のものへ差し替えてください。

About the Macが表示できないときは、以下のスレッドを参考にどうぞ。

よくあるソフトウェア的な制限事項

VAIO Pのグラフィックアダプタである『GMA500』では、それ専用のドライバがないためにMac OS Xのアクセラレーション機構であるQuartz Extreme/Core Image (QE/CI)を動作させることができません。このため、QE/CIに依存するソフトウェアを動作させることが不可能です。具体的には、Apple製ソフトウェアであればたとえば『Keynote』などが動かないことでしょう。また、OS標準機能ではスクリーンショットなども撮れないはずです。

GoogleのWebブラウザ『Chrome』も、Chrome 32以降で動かなくなってしまいました。これは、オープンソース版である『Chromium』の下記 Rev.225273のバイナリを使うと回避できるかも知れません(設定からハードウェアアクセラレーションの利用をOFFにしてください)。古いWebブラウザの利用には、セキュリティリスクが伴うことを念のためお忘れなく。

そもそものMac OS X 10.6が非サポートとなっているアプリケーションもたくさんあります。Adobe CSなども、必要であれば導入するバージョンをよく検討する必要があるでしょう。快適な〝夢〟を見るためには、ある程度は旧来のソフトウェア資産があることが重要だと思います。

Homebrewを使うために

開発用途に使うことを考えると、パッケージマネージャが欲しくなります。Mac OSのソレは事実上『MacPorts』か『Homebrew』のどちらかとなりますが、より現代的なのは後者です。

ただし、HomebrewはXcode 3.2.6以降に依存しており、Xcode 3.2.6はMac OS X 10.6.8以降向けです。Mac OS X 10.6.4ではXcode 3.2.2が最終版ですが、この版では動きません。また、Snow Leopardはサポートが終了したOSであることから、2014年現在ではそのままだといくつか不都合が生じます。以下に対策したインストール方法をまとめます。

Xcode for Snow Leopardのダウンロード

Apple Developer サイトのダウンロードセクションから『Xcode 3.2.6 and iOS SDK 4.3 for SnowLeopard』をダウンロードします。下記で〝xcode 3.2〟などと検索すると見つかると思います。

ファイル名としては〝xcode_3.2.6_and_ios_sdk_4.3.dmg〟となります。残念ながら、iOS SDKの付属しない単体バージョンは用意されていません。

Xcode インストールの前準備

Xcode 3.2.6をMac OS X 10.6.4へインストールしようとすると、OSバージョンが適合しないためにインストールできません。OS 10.6.6以降が必要です。このチェックをごまかすために、ひとつplistを編集して対策します。

/System/Library/CoreServices/SystemVersion.plist を編集して、バージョン情報をそれっぽく編集すればOKです。この部分はインストール後に元に戻してください。

また、2014年現在ではインストーラが使用する一部パッケージ(iPhoneSystemComponents.pkgなど)に施された署名の期限が切れているため、インストール中にエラーが発生して作業が中断されます。

これには、インストール時に日時を2010年かそれより前に設定して対処します。インストールが終了したら現在の日時へ戻して大丈夫です。

Xcodeのインストール

ここまで行うと、Xcodeのインストールが行える状態になっています。念のため、ターミナルから以下のようにしてインストールしてください(依存関係のチェックが省かれます)。

$ COMMAND_LINE_INSTALL=1 open "/Volumes/????/Xcode and iOS SDK.mpkg"

選択肢から、iOS SDKは除外しても大丈夫でしょう(HomebrewはXcodeをあくまでもコマンドラインツールとしてしか使いません)。

多少時間がかかりますが、上述の対策を行っていれば正常にインストールが完了すると思います。

このあたりで、先ほど書き換えた SystemVersion.plist を正しいものへ戻しておくことをお勧めします(戻しておかないと以降の運用で何らかの問題が生じる場合があります)。

Homebrewのインストール

ここまで来るとHomebrewがインストール可能となります。ターミナルから以下のようにしてインストールします。

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

この作業が正しく完了すれば、以下を行うことでHomebrewによるパッケージ管理が可能となります。

Homebrewの事後設定

まず、Homebrewが正しく導入できているかを確認します。以下のコマンドを実行して〝Your system is ready to brew.〟が表示されない場合は、表示されたメッセージを参考にするなりWeb検索するなりして対策してください。

$ brew doctor

上記が正しく行えた場合は、まずgitをインストールします。

$ brew install git

gitが正しく導入されたら、brew updateを行ってください。

$ brew update

これでHomebrewが利用可能となりました。あとはお好きなパッケージを導入して環境構築してください。