XCode 4.3.2のインストールにkextcacheのエラーで失敗した問題の解消

XCode 4.3.2をインストールしようとしたところ、エラーがでて止まった。ログをみろ、というので確認すると、最下部で下記のようなエラーで止まっていた。

Mar 27 08:12:45 macbook installd[14462]: kextcache: sony_prs.kext does not declare a kernel dependency; using com.apple.kernel.6.0.
Mar 27 08:12:45 macbook installd[14462]: kextcache: JMicronATA.kext does not declare a kernel dependency; using com.apple.kernel.6.0.
Mar 27 08:12:45 macbook installd[14462]: kextcache: com.apple.iokit.IONetworkingFamily.kext is invalid; can't resolve dependencies.
Mar 27 08:12:45 macbook installd[14462]: kextcache: //System/Library/Extensions/com.apple.iokit.IONetworkingFamily.kext - missing load info or dependencies array in applier function.
Mar 27 08:12:45 macbook installd[14462]: kextcache: Can't resolve dependencies amongst kexts for prelinked kernel.
Mar 27 08:12:45 macbook installd[14462]: kextcache: Failed to generate prelinked kernel.
Mar 27 08:12:45 macbook installd[14462]: kextcache: Child process /usr/sbin/kextcache[18455] exited with status 71.
Mar 27 08:12:45 macbook installd[14462]: kextcache: Error 71 rebuilding /System/Library/Caches/com.apple.kext.caches/Startup/kernelcache.
Mar 27 08:12:45 macbook installd[14462]: PackageKit: Install Failed: Error Domain=PKInstallErrorDomain Code=121 "An error occurred while updating system extension information." UserInfo=0x109f4e940 {NSLocalizedDescription=An error occurred while updating system extension information., arguments=(
	    "-update-volume",
	    "/",
	    "-Installer"
	), NSUnderlyingError=0x109f90120 "The operation couldn’t be completed. (kextcache error 71.)"} {
	    NSLocalizedDescription = "An error occurred while updating system extension information.";
	    NSUnderlyingError = "Error Domain=kextcache Code=71 \"The operation couldn\U2019t be completed. (kextcache error 71.)\"";
	    arguments =     (
	        "-update-volume",
	        "/",
	        "-Installer"
	    );
	}

最下部をみると kextcache error 71 でとまっている。kextcacheのログの最後の方をみると

Mar 27 08:12:45 macbook installd[14462]: kextcache: com.apple.iokit.IONetworkingFamily.kext is invalid; can't resolve dependencies.

となっている。どうやら com.apple.iokit.IONetworkingFamily.kext がおかしいらしい。ちょっと検索してみたけど、これがなんなのかよく分からなかった。/System/Library/Extensionsの中を確認すると、これは同ディレクトリ内の IONetworkingFamily.kext へのシンボリックリンクだった。

cd /System/Library/Extensions
ls -la com.apple.iokit.IONetworkingFamily.kext
lrwxr-xr-x 1 root wheel 50 4 17 2009 com.apple.iokit.IONetworkingFamily.kext -> /System/Library/Extensions/IONetworkingFamily.kext

そこで、思い切ってcom.apple.iokit.IONetworkingFamily.kext を削除。

sudo rm com.apple.iokit.IONetworkingFamily.kext

これでもう一度試してみると無事インストールできた。

とりあえず、これで問題は起きていないから、余計なゴミが残っていただけ、と勝手に思ってる。まあ、無事インストールできて、その後も問題は起きていないからそれでいいや。

OS X (Lion)へのrvmでのrubyインストール時にopenssl_missing.cでconflictingがでて失敗する問題の解消

OS X でrvmを利用してrubyの様々なバージョンをいれるのがとても簡単で便利。

基本的には

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)

とやるだけで勝手にrvmをインストールしてくれる。

その後、

rvm install 1.9.3

などとしてrubyの好きなバージョンをインストールするのだけど、このときにエラーがでた。

Error running 'make ', please read /Users/---/.rvm/log/ruby-1.9.3-p125/make.log
There has been an error while running make. Halting the installation.

このmake.logファイルをみてみるとこんな感じのエラーがでていた。

openssl_missing.h:123: error: conflicting types for 'BN_rand_range'
/opt/local/include/openssl/bn.h:411: error: previous declaration of
'BN_rand_range' was here
openssl_missing.h:124: error: conflicting types for
'BN_pseudo_rand_range'
/opt/local/include/openssl/bn.h:412: error: previous declaration of
'BN_pseudo_rand_range' was here
make[1]: *** [openssl_missing.o] Error 1

別途OpenVPNなどを入れたりしているのだけど、そのタイミングか何かで既にこれらのファイルがあったのかもしれない。

とりあえず、といことでこの/opt/local/include/openssl/bn.hを

sudo vim /opt/local/include/openssl/bn.h

として開き、411行目と412行目をコメントアウト

/*
int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
*/

これでもう一度

rvm install 1.9.3

としたら無事インストールできた。

念のため、 /opt/local/include/openssl/bn.h のコメントアウトした箇所も元に戻しておいた。

ちなみに /usr/include/openssl/bn.h にも同じファイルがあったが、こっちはrvm での rubyコンパイル時に使っていないようで何もしなくて大丈夫だった。

新しいiPad(第3世代)、メモリは1G

先日新しいiPadが発表されて、発売も明後日に迫ってますが、メモリが1GBであることが確定しました。だいぶ前から1Gという噂はありましたが、ベトナムで既に開封されてベンチマークが取られています。

こちらが開封の動画

そしてベンチマークがこちら

その他のベンチマークもこちらにあります。

iPadについてはスペックなどはほとんど意識したことがなく、アプリ開発者が快適に動くよう努力してくれるので(そうでないとダウンロードしてもらえない)あまり気にしてはいなかったけど、メモリが増えれば開発者としてもできることも増えるし、Safariのキャッシュも増えるだろうしバックグラウンドアプリの寿命も伸びるだろうからやっぱり嬉しい。