Macの最近のブログ記事

ふと思い立ってMacにsshfsをインストールしてみた。
とりあえずMacportsで入れてみる。

sudo port install sshfs

なぜかこんなエラーが出て、インストールに失敗する

cp: invalid option -- X

僕は coreutils 入れてるので、cp はそっちを使ってるのですが、確かに /bin/cp だと -X オプションはあるけど、coreutils の方だとないですね。
というか、これぐらいちゃんと吸収しておいて欲しい。

しょうがないので、一旦 coreutils を外してインストールしてみることに。

sudo port deactivate coreutils
sudo port install macfuse

うまくいった^o^
coreutils を元に戻して、sshfs をインストールする。

sudo port activate coreutils
sudo port install sshfs

早速、sshfs を使ってみた。

sshfs example.jp mnt/example.jp

いやー、初めて使ってみたけど、これは便利!!(遅

http://www.divx.com/dff/index.php?lang=en&version=mac

とりあえずメールアドレス入力するだけでシリアルナンバーゲットできまっせ
急げー

Mac OS X 10.4にmecab 0.93をインストールしてみた。 そのままだとコンパイルエラーになるので次のようなパッチをあてて、無事コンパイル終了。

mecab-0.93-macosx-10.4.patch
diff -uNr mecab-0.93-org/configure mecab-0.93/configure
--- mecab-0.93-org/configure	2006-07-30 20:47:34.000000000 +0900
+++ mecab-0.93/configure	2006-12-28 07:34:03.000000000 +0900
@@ -23882,7 +23882,7 @@
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-ac_cv_lib_iconv_iconv_open=no
+ac_cv_lib_iconv_iconv_open=yes
 fi
 rm -f conftest.err conftest.$ac_objext \
       conftest$ac_exeext conftest.$ac_ext

参照:
MeCab 0.92 を Mac OS X 10.4 にインストールする

新しい Parallels Desktop がリリースされましたが、これがまじですげー。
Mac の中で Windows アプリが動く。
これは本当すごいっす。

こちらに動画があります。
Parallels Screencast

Terminal.app で Apple+c でコピーした時に改行も含めてコピーしてくれない。
いつもペースト先で手で改行を入れてるんだけど、どうにかならないものか。
不便でしょうがない。

Mac に Ruby on Rails をインストールしてみた。

Mac OS X 10.4 の Ruby には、詳しくは知らないが何やらバグがあるらしいのでソースコードからインストールする。

ruby をインストール

./configure --prefix=/opt/ruby --enable-pthread
make
sudo make install

$PATH を再設定

source ~/.zsh/.zlogin

rubygem をインストール

sudo ruby setup.rb

rails をインストール

sudo gem install rails --include-dependencies

ものの5分でインストール終了。 めっちゃ簡単。

さあて、何作るかな...

mac で html ヘルプを表示してくれる chmox をインストールしてみた。
ちゃんと日本語も問題なく表示してくれる。これは便利。

でも、なんか検索ができないっぽい。
検索ができないと不便だなぁ。
やっぱちょっと微妙。

Xcode 2.4.1が出ましたね。
早速インストールしてみたんだけど、gcc-3.3 でコンパイルできない問題は直ってない。
なんでやねん!!

やり方がまずいのかなぁ。

Mac OS X に Xcode を入れると gcc とかがインストールされるのですが、デフォルトで gcc-4.0 になってます。
世の中のアプリは、まだ gcc-4 でコンパイルできないので gcc-3 が通常後方互換性のためにインストールされて、Xcode には gcc-3.3 が入ってます。

しかし、この gcc-3.3 が全く使えない!!!!!!!!!!!!

試しに適当な C のファイルを作って gcc test.c とかしてみてください。

gcc-3.3: installation problem, cannot exec `cc1': No such file or directory

とか言われて怒られます。全く使えません。
単純なミスだと思うんだけど、かなり致命的な不具合じゃないですかね。
まだ修正バージョンは出てないようだ。

さてさて、どうするか...

Mac OS X のライブラリの形式は Mach-O という形式らしい。
Mach 由来の形式でしょうか。
Linux(他のUNIXも?) といろいろ違っていてちょっとしたカルチャーショックを受けてます。

/lib/ld.so がない

/lib/ld.so と言えば共有ライブラリをロードするためのライブラリですが、Mach-O では /lib/ld.so がありません。
当然 ldconfig もない。

ELF のバイナリは /lib/ld.so が共有ライブラリの検索を行うので、ライブラリへのリンクは絶対パスではなく soname(ライブラリのファイル名)で行われますが、Mach-O の場合は絶対パスでリンクされるようです。

Mac OS X では ldd コマンドはなく、otool -L が ldd に相当する機能を提供しているようです。
試しにさっきインストールした memcached がどのライブラリにリンクしてみるか調べてみました。

% otool -L /opt/memcached/bin/memcached
/opt/memcached/bin/memcached:
        /opt/libevent/lib/libevent-1.1b.1.dylib (compatibility version 2.0.0, current version 2.2.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 88.3.4)

確かに絶対パスでリンクされてる。

ちなみに Linux での出力はこんな感じ。

% ldd /opt/memcached/bin/memcached
        linux-gate.so.1 =>  (0x006c8000)
        libevent-1.1a.so.1 => /usr/lib/libevent-1.1a.so.1 (0x00111000)
        libc.so.6 => /lib/libc.so.6 (0x006e6000)
        /lib/ld-linux.so.2 (0x006c9000)

/lib/ld-linux.so.2 以外は全て soname になってる。

ライブラリのファイル名は libhoge.x.y.z.dylib

ELF 形式の場合はファイル名は libhoge.so.x.y.z の用にバージョン番号が .so の後にきますが、Mach-O の場合はバージョン番号の後に .dylib がきます。
なので、-lhoge.x.y.z のように特定のバージョンのライブラリにリンクすることができる。これは便利。

libhoge.so -> libhoge.x.y.z.so のようなシンボリックリンクを使ってしかコンパイル時にリンクするライブラリのバージョンを変更する事ができない ELF 形式と比べると柔軟に対応できますね。
もちろんリンクするライブラリのバージョンを毎回指定するわけではなく、通常は libhoge.dylib -> libhoge.x.y.z.dylib のシンボリックリンクがはられているので、-lhoge のようにバージョン番号を指定しなくてもリンクできるようになってます。

直接役に立つ場面は少なそうですが...

Mac のパッケージ管理には fink を使ってて、fink にないパッケージはソースからインストールするという方針でやってます。 memcached は fink で用意されてないのでインストールしてみました。

libeventをインストール

memcached をインストールしようとしたら libevent がないと言われたので、まずは libevent をインストール。

% ./configure --prefix=/opt/libevent
% make
% sudo make install

ソースからインストールするパッケージはすべて /opt/package にインストールするという方針でやってます。 こうしないと簡単にアンインストールできなくて、インストールしたソフトウェアの管理が簡単にできないので。

memcached のインストール

./configure を実行する前に /opt/libevent/lib を環境変数 LD_LIBRARY_PATH に /opt/libevent/include を環境変数 C_INCLUDE_PATH に通しておきます。 こうしないとインストールした libevent が見つからないのでコンパイルに失敗します。

% source ~/.zsh/.zlogin

環境変数はいつも自動で設定しているので、.zlogin を読み込み直すだけで OK。

% ./configure --prefix=/opt/memcached
% make
% sudo make install

インストール完了。 起動して問題ないか確認してみる。

% source ~/.zsh/.zlogin
% memcached

うまくいってるようだ。

launchd で自動起動の設定

Mac OS X 10.4 で導入されたらしい launchd を使ってみる。 ユーザ個別の設定は $HOME/Library/LaunchAgents に XML 形式のファイルを置くといいみたい。 man launchd.plist すると詳しい説明が出てきます。

memcached.plist を作る。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
        <key>Label</key>
        <string>memcached</string>
        <key>OnDemand</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
                <string>/opt/memcached/bin/memcached</string>
                <string>-m 32</string>
        </array>
</dict>
</plist>

launchd に登録する

% launchctl load -w Library/LaunchAgents/memcached.plist
% launchctl list
memcached
% ps x|grep memcached 
 6286  ??  Ss     0:00.07 /opt/memcached/bin/memcached -m 32

ちゃんと登録されて実行されている。

launchd への登録は別にコマンドで実行しなくてもログインしなおすと登録されるようです。

わからないこと

ログアウトしても memcached が実行されたままになってる。 例えばログアウトして他のユーザでログインした場合は memcached を起動しないようにしたいんだが、どうすればいいのかよくわからない。 まあ、どうせ自分でしか使わないのでこれでよしとする。

Mac OS X では xinetd の代わりに launchd を使うみたい。
設定ファイルは /System/Library/LaunchDaemons とかいろんな場所にに XML 形式で置いてある。
詳しくは man launchd で。

ローカルで named を動かそうと思っていろいろ調べてわかったのだが、named はデフォルトで起動しているみたいですね。

システム環境設定でデフォルトで参照する dns を 127.0.0.1 に変更する。
mac.local.bz2.jp のゾーンファイルをこんな感じにして、mac.local.bz2.jp のサブドメインなら何でも 127.0.0.1 が返ってくるようにした。

                IN      A               127.0.0.1
                IN      MX      10      @
*              IN      CNAME           @

こうしておくとローカルでいくらでも簡単にバーチャルドメインが切れるようになります。

僕の MacBook はキーボードが英語キーボードなんですが、ことえりで日本語入力に切り替えるショートカットが Ctrl+Shift+j になってて困ってました。
Ctrl キーが含まれるのが問題らしく、ターミナルで日本語入力に切り替えようとすると改行が入力されてしまいます。
これは不便だなと思ってましたが、解決方法を発見しました!!!!

Apple+Space で前回の入力モードに切り替える事ができます。
これなら Ctrl が含まれないので問題なく入力モードを切り替える事ができる。
どうせ入力モードは英字かひらがなのどちらかしか使わないので全然問題ありません。

ただログインしてから必ず一回はひらがなモードに手動で切り替える必要がありますが、これはしょうがないってことで。

ウェブページ

Powered by Movable Type 4.21-ja

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMacカテゴリに属しているものが含まれています。

前のカテゴリはLinuxです。

次のカテゴリはMovable Typeです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。