カーネルパニックを起こさない方法(2013-08-28)
OS再インストールに伴い再びML上にXcode 3を入れる機会が巡ってきた。
やはりカーネルパニックで強制シャットダウンは気持ちのいいものではないので、調べてみたらKPを回避してインストールする方法を見つけた。素敵過ぎる。
Xcode 3.2.6のDMGをマウントし、中身を丸ごとターミナル経由でコピーする(Finderだと不可視項目をコピー出来ない)。
cp -R /Volumes/Xcode\ and\ iOS\ SDK/ ~/Desktop/Xcode
インストールスクリプトを編集し、カーネルパニックの原因となるパッケージをインストールされないようにする。
- ~/Desktop/Xcode/Xcode and iOS SDK.mpkg/Contents/iPhoneSDKSL.dist
【145行目付近】
function isDevToolsCompatible()
{
if ( system.env.COMMAND_LINE_INSTALL == 1 ) { return true; }
if( system.compareVersions(my.target.systemVersion.ProductVersion, '10.6.6') >= 0 && system.compareVersions(my.target.systemVersion.ProductVersion, '10.7') < 0 ) {
return true;
}
return false;
}
↓
function isDevToolsCompatible()
{
return true;
}
--------
【182行目を削除】
<line choice="XcodeExtrasHIDDEN"/>
↓
(削除)
--------
【425〜433行目を削除】
<choice
id="XcodeExtrasHIDDEN"
customLocation = '/'
customLocationAllowAlternateVolumes = 'YES'
start_visible='false'
>
<pkg-ref id="com.apple.pkg.Xcode_MacOSX10.6_Extras"/>
</choice>
↓
(削除)
--------
【528〜529行目を削除】
<pkg-ref id="com.apple.pkg.Xcode_MacOSX10.6_Extras" auth='root'>file:../Packages/Xcode_MacOSX10.6_Extras.pkg</pkg-ref>
↓
(削除)
--------
【650行目を削除】
<pkg-ref id='com.apple.pkg.Xcode_MacOSX10.6_Extras' installKBytes='14742'/>
↓
(削除)
コピーしたXcode and iOS SDK.mpkgを実行する。「“Xcode and iOS SDK”を開くには、インストーラを終了してから再度開く必要があります。」と出るので、そのまま[OK]を押す。インストーラを32ビット版で開き直してるらしい。
「証明書切れ〜」と言われるが、気にせず[続ける]押下。インストールパッケージの選択画面まで進める。
インストールパッケージの選択でSystem Toolsのチェックを外す。さもないとCHUDのカーネル拡張が悪さをしてカーネルパニックになる。UNIX Developmentを選んだ場合、後ほど対応が必要。iOS SDKは古過ぎて開発には使えないので入れる必要もないだろう。その他のオプションはご自由に。
途中で「iTunesを終了せよ」的なダイアログが出てきた場合、iTunesを終了すると共にアクティビティモニタから「iTunes Helper」も終了させる。
/Developer/usr/bin の中の壊れているシンボリックリンクを修正。……といっても、それらしきものは見つからなかったのでスルー。
インストールオプションでUNIX Developmentを選択し、かつXcode 4のCommand Line Toolsを既にインストールしていた場合、Command Line Toolsを再インストールする。UNIX Developmentで置き換わってしまったため。
インストールが終わったら、/Developer/PlatformsにMacOSX.platformディレクトリだけが存在している事を確認。他のplatformがあったらtmpディレクトリを作りその中に移動する。さもないとInterface Builderが起動しない。
インストール完了!
以前の方法
OS X v10.8にXcode 3.2.6を強制インストールしようとすると、途中で突然Macがブラックアウトし再起動中に再び落ちるという、お顔真っ青ループに陥る。
Xcode 3に含まれるカーネル拡張が悪さをしてるので、当該kextを削除してやればおkという訳で、作業の覚書。といってもここの手順に従うだけ。
先述したが、インストール中に問答無用で落ちるので、他のアプリなどが動いていない状態で実行した方が良い。あと自己責任で。消してるkextから想像するに、プロファイラ系のツールが使えなくなるかもしれない(激しく未確認→やはりプロファイラが使えなくなっていた)。
復旧スクリプトを準備する
fsck -fy
mount -uw /
rm -rf /System/Library/Extensions/AppleProfileFamily.kext
rm -rf /System/Library/Extensions/CHUD*.kext
(2013-04-03追記) スクリプトファイルを作ったら chmod +x /path/to/repair-script で実行属性を付ける。
Xcode 3のDMGをマウントし、ターミナルを開いてインストーラを起動する
cd "/Volumes/Xcode and iOS SDK"
COMMAND_LINE_INSTALL=1 open "Xcode and iOS SDK.mpkg"
iOS SDKは除いてXcodeをインストールする。さもないとInterface Builderが使えなくなる。
インストール終盤でカーネルパニックで落ちるが、気持ちを落ち着かせながら電源断。
シングルユーザーモードでブート(⌘+Sを押しながら起動)し、準備してある復旧スクリプトを実行&再起動。スクリプトを使わずに手打ちでも当然おk
/path/to/repair-script
reboot
以上で、無事Macが立ち上がるようになり、Xcode 3も使えるようになる。あぼーんしてたらごめんなさい。
どうでもいいけど、Xcode 4って使いづらくないっすか。どーも1ウィンドウに全てを押しこむインタフェースは好きじゃない。
デバッガが使いにくくて死にそう。“3が付く”某ゲーム機のデバッガを彷彿とさせる使いにくさ。
参考サイト
[…] ここ […]