12月 08
2011

今日は、Lion君にbazaarを入れてみたのです。MacPortsを使っても良いのですが、bazaarのレポジトリサーバを上げるとなると、apacheまでインストールされてしまいます。
今回は、Lion君の純正で入っているApacheやPythonを使いたいと思います。

まずは、http://wiki.bazaar.canonical.com/MacOSXDownloads からbazaar本体を持ってこようと思いますが、何とも悲しい注意があります。

Note: to use Bazaar in OS X Lion (10.7), you should change the default version of Python to 2.6 :

なに!? Lionにデフォルトで入っているPythonは2.7ですよ!
わざわざ2.6にバージョンを下げて使えと。。。すでにPythonにせっせと入れたモジュールが使えないじゃないか。

ここは、Python 2.7の環境で使ってやる! だって、既にApacheでPythonは2.7で動かしてるもん!!

ということで、ソースコードからインストールします。

Lion君はデフォルトでeasy_installが入っているので非常に簡単です。Pythonへのモジュールのインストールはこれを使います。
まずは、bazaarではCythonが必要なようなので、こいつからやっつけます。

wget http://cython.org/release/Cython-0.15.1.tar.gz
tar zxvf Cython-0.15.1.tar.gz
cd Cython-0.15.1
sudo python setup.py install

では、御本体のbazaarをいよいよインストール。

wget http://launchpad.net/bzr/2.5/2.5b3/+download/bzr-2.5b3.tar.gz
tar zxvf bzr-2.5b3.tar.gz
cd bzr-2.5b3
sudo python setup.py install

これで、bzrコマンドが使えるようになります。
bzrtoolを入れておくと色々役に立つので入れておきましょう。

wget http://launchpad.net/bzrtools/trunk/2.3.0/+download/bzrtools-2.3.0.tar.gz
tar zxvf bzrtools-2.3.0.tar.gz
cd bzrtools
sudo python setup.py install

ここからが、本番。

レポジトリサーバを立ち上げるためにApacheに色々登録しなければなりません。
その設定は、google君に聞けば教えてくれると思います。でも、それでも起動できない人はたぶんFastCGIでつまずいているのだと思います。

他のサイトの説明だと、bzr-smart.fcgiとか用意すればOKだと書かれているところが多いのですが、だいたいがこのbzr-smart.fcgiファイルで使っているfcgiモジュールの事が記載されていません。良く書いてあっても、

http://svn.saddi.com/py-lib/trunk/fcgi.py

からこのモジュールを持ってこい。でも、このサイトすでにありません。実は、WSGIのモジュール関連をまとめてflup.orgに引っ越されています。

ということで、flupモジュールをインストールすればOK

sudo easy_install flup

これで、すべてのモジュールがそろいました。bazaarのレポジトリサーバを立ち上げて、堪能してください。

あ、言い遅れましたが、私はレポジトリサーバはsvn派で、クライアント側でbzrを使っていたりします。(^_^)

11月 16
2011

サーバでJenkinsを使ってCIを行っているのですが、ちょっとした実験するときに自分のMac上で動かしてみたいと思い、jenkins-ci.org からネイティブパッケージ(Mac用インストーラ)を持ってきてインストールしてみました。

今回利用したJenkinsのバージョンは ver. 1.439 です。

インストーラを、ダブルクリック!

終了したら、http://localhost:8080/ をブラウザでアクセスすればOK!

のはずですが、おかしい (^_^;
Winstone Servlet Containerさんが、コンテナがないよ。ってエラーを返してきます。

ここは、素直に/var/log/system.log を見てみます。

java.io.FileNotFoundException: /Users/Shared/Jenkins/Home/war/META-INF/MANIFEST.MF (No such file or directory)

なるほど、例外が出てます。
たしかに、こんなファイルは無いですし、ディレクトリもありません。
では、自動起動用のplistを見てみます。

more /Library/LaunchDaemons/org.jenkins-ci.plist

ユーザがデーモン(daemon)さんで起動するようになってますね。
起動スクリプトの /Library/Application Support/Jenkins/jenkins-runner.sh は、問題なさそうです。
では、ファイルがないなら作成できなかっただけかな。と、思い、、、

ls -l /Users/Shares

あれれ、Jenkinsディレクトリが

drwxr-xr-x 2 root wheel 102 11 15 19:09 Jenkins

rootさんの所有になってますね。
daemonさんで起動されるのにパミッションが無いです。

sudo chown daemon /Users/Shares/Jenkins

として、オーナーをdaemonさんに変更します。
Jenkinsさんを再起動しましょう。

sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist

よしよし、これでhttp://localhost:8080/ で見慣れたJenkinsさんが現れてくれました。

でも、この対応ってあんまりよろしくないんですよね。
たとえば、Gitなんかを使うときに認証鍵とかを使う場面が多々あるのですが、daemonさんのHOMEは、/var/rootなので、/Users/Shares/Jenkins/HOMEに鍵をおいてもそのままじゃだめなんですよね。dscl コマンドでちゃんとユーザ設定しないと競合しちゃいます。ま、今回はこれでいいか。。。

これって、インストーラのバグなのかな? 私の環境だけなのか。
同じ症状の方がいらっしゃったら教えてください。バグ報告します。

追記:jenkins-ci.orgのBug Trackerにも同じ事象の方がいらっしゃいました。明らかBugですかね。

5月 07
2010

Snow Leopardの標準PHPにgettext拡張を追加しようと思います。

Snow Leopardには、もちろん標準でPHPがインストールされています。
それに、Snow LeopardになってからGDやiconv等は標準で入っています。随分使い安くなりました。
でも、いまだにgettextは標準でPHPに入っていません。

そうなると、普通はMacPortなどを使ってインストールするのですが、PHPでgettextを使うだけで、ものすごく沢山のport(パッケージ)がインストールされてしまいます。これもなんだかですね。。。。

そこで、さっくりとgettextとそのPHPのextensionだけをインストールできれば楽ちん(?)ですし、時間もさほどかからないと思って作業したので、そのメモです。いつものように Your Own Risk です。(^_^)

前提として、XCodeはインストールしておいてください。お約束です。

1.お好きなところに作業ディレクトリを作成してください。

mkdir -p /tmp/hoge
cd /tmp/hoge

2. gettextソースコードを取ってきてコンパイルです。

curl -O ftp://ftp.gnu.org/gnu/gettext/gettext-0.17.tar.gz
tar xzpf gettext-0.17.tar.gz
cd /tmp/hoge/gettext-0.17/gettext-runtime
./configure
sudo make

3. gettextのインストールです。

sudo make install

これにて、gettextがインストールされました。次は、gettextのPHP Extensionを作りましょう。

4. Darwinのオフィシャルサイトから自分が使っている標準PHPと同じバーンのソースを取ってコンパイル・インストールです。私の環境はMacOS X 10.6.3で、PHPは5.3.1 でした。

cd /tmp/hoge
curl -O http://www.opensource.apple.com/source/apache_mod_php/apache_mod_php-53.1.1/php-5.3.1.tar.bz2
tar xjf php-5.3.1.tar.bz2
cd /tmp/hoge/php-5.3.1/ext/gettext
sudo phpize
./configure
sudo make
sudo make install

さあ、これでMacOS Xの標準PHPで利用できるgettext Extensionがインストールされました。sudo make installしたときに、どのディレクトリにライブラリをインストールしたか表示されると思います。私の環境では、/usr/lib/php/extensions/no-debug-non-zts-20090626/gettext.soにインストールされております。

さてさて、ここからが重要。(^_^)
gettextの拡張モジュールをPHPが認識出るようにphp.iniを変更します。

5. PHPとgettextの融合

viが使えると話は早いのですが。。。。とりあえずテキストエディタで /etc/php.iniを編集します。もしかすると、/etc/php.iniファイルがないかもしれません。その時には焦らず、/etc/php.ini.defaultとか、/etc/php.ini.orgとかからコピーしてください。

まずは、/etc/php.ini ファイルの適当な行に

extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/gettext.so

を1行追加します。私の場合は 953行あたりに入れました。コメントアウトされたextensionの定義がずらずら並んでいるの箇所があるのでわかると思います。

以上で終了です。

本当にgettextが組み込まれたか確認するには、定番の

<?php
phpinfo();
  ?>

ファイルをApache経由のcgiで表示させれば確認できると思います。

4月 29
2010

私の友人が、私が以前にハマってしまった事で悩んでいたので、結構あるんだなと思いメモしておきます。

MacOS Xは外付けHDD(USBやFireWire)を繋げると自動的にマウントしてくれます。
ま、これは普通と言えば普通なんだけど。。。

でも、MacOS Xの場合、このときのmountでnoownersのオプションがデフォルトで付いてしまいます。
これは、これで外付けは信用しないというポリシーはわかるのですが、外付けディスクをデーモンなどに安全に触らせるとなると、やっかいです。

そこで、登場するのが vsdbutil です。

外付けディスクがマウントされたところで、

sudo /usr/sbin/vsdbutil -a /Volumes/hoge

これで、noownersのオプションが外れてマウントされているはずです。
mountコマンド叩くとわかります。

4月 25
2010

なにげに、SCPluginのホームページを覗いてみたら。。。
Snow Leopard に対応しただって? (^_^)

なになに、、、

But still, no contextual menu or badging.

コンテキストメニューで動かない?!

おまけに、アイコンでの表記を出来ないのか。。。orz

でも、対応しているので、インストールして見ました。(^_^)

http://scplugin.tigris.org/からダウンロードしてきていつものインストーラでインストールします。
でも、コンテキストメニューに対応してないので、マウス右クリックしてもメニューは相変わらずインストール前と同じ。。。そこで、Snow Leopardは、ちょっとゴニョゴニョして、使えるようにします。

まず、
SCPluginUIDaemonをバックグランドで起動しておきたいので、ログイン項目に登録しておきます。
手順は、/Library/Contextual Menu Items/SCFinderPlugin.plugin/Contents/Resources/S​CPluginUIDaemon をシステム環境設定のアカウントにある、ログイン項目にこのファイルを追加するだけです。
でも、SCFinderPlugin.pluginはフォルダで見るとPluginファイルになっているので、その下のファイル等を指定することが出来ません。そこで、、、、ファインダーであらかじめ​SCPluginUIDaemonを表示して起きましょう。SCFinderPlugin.plugin以下のファイルは「パッケージの内容を表示」でその下のフォルダの内容が見えます。
ログイン項目を”+”で追加するときにファイルを指定しますが、その時にファインダーで表示しておいた SCPluginUIDaemon ファイルをドラッグ・アンド・ドロップでファイルチョーザーに落としてやります。

これで、SCPluginUIDaemonの自動起動の設定は完了。

最後に、アプリケーションのフォルダにインストールされた SCToolbarButtonをファインダのツールバーに、これまたドラッグ・アンド・ドロップして、登録します。
あの”S”マークのアイコンがファインダーのすべてのウィンドウのツールバーに表示されましたよね。(^_^)

そのアイコンをクリックした見てください。(^_^)

つまり、、、コンテキストメニューの代わりに、ツールバーにメニューを置きました。という、手に出たようです。;p

これが正式な対応なのかな。。。。(^_^;

SCPlugin.tiff

4月 08
2010

Mac OS X Snow Leopard (もちろんMac OS X Serverじゃないよ) に MacOSforgeで公開されている Darwin Calendar Serverをインストールしたので、ここにメモをしておこうと思います。

いやー、なかなか情報が転がって無くて、./run コマンドと格闘しましたが、ビール片手に一通り機能を確認できましたので、この手順で大丈夫でしょう。

このメモは./runコマンドでテスト的にサーバを動作して検証するものではなく、/usr/local/bin/ や、/Systtem/Library/Frameworks/Python.framework/配下や/Library/Python配下へのインストールをしますので慎重に自己責任でお願いします。

1.まずは、モノを取ってきます。

最新のリリースは2.4のようです。もうすぐ3.0が出そうですね。
ということで、好きな自分のディレクトリで、

svn co http://svn.calendarserver.org/repository/calendarserver/CalendarServer/tags/release/CalendarServer-2.4

として、チェックアウトします。

2. runコマンドで必要なモノのPythonモジュールを取ってきて確認です。

CalendarServer-2.4のディレクトリに移動してrunコマンドを探してください。

$ ./run -s

これで、必要な構成やファイルを自動的に取得して、コンパイル等も行われます。
この辺は、情報はいろんなサイトが紹介しているので大丈夫だと思います。

$ ./run

これで、テスト的に動作させてちゃんと動くかテストできます。
このあたりも他のサイトが参考になるともいます。

3. さて、いよいよ実環境へのインストールです。

まず、いったん/tmp/dstディレクトリに実行ファイルや定義ファイルなど環境に合わせた形に吐き出します。
以下のコマンドはsuでrootになるか、sudoコマンドで実行してください。

# ./run -i /tmp/dst

/tmp/dstを見てもらうと、なるほど、こんなファイルが環境にインストールされるんだとわかると思います。
つまり、/tmp/dstディレクトリの内容を/ に配置すれば良いわけです。

いよいよ、/に配置しましょう。

# cd /tmp/dst
# pax -pe -rw . /

これで、Calendar Serverのデーモンが /usr/loca/bin/caldavd を使って起動できます。
しかし、環境によってはシンボリックリンクを張らなければならないかもしれません。
  エラーファイルを見ればすぐにわかると思いますが、私の環境では

can’t open file ‘/usr/share/caldavd/bin/twistd’: [Errno 2] No such file or directory

なんて、表示され。。。おいおい。。。

# ln -s /usr/local/bin /usr/share/caldavd/bin

と、してやりました。(もしかして、./run -I で上手くいくのかも。。。)

4. Launchdによる自動起動の設定

svnでチェックアウトしてきた中のCalendarServer-2.4/contrib/launchd/calendarserver.plistファイルを適当に編集します。もちろん、/Library/LaunchDaemons/ へコピーしておきます。

ここで、ProgramArgumentsの引数(array)にcaldavdのディレクトリを変更するのと、caldavdの設定ファイルを指定するように記載してください。この、設定ファイルcaldavd.plist自身に中身は各自の環境に合わせてください。

<key>ProgramArguments</key>
    <array>
    <string>/usr/local/bin/caldavd</string>
    <string>-X</string>
    <string>-R</string>
    <string>caldav_kqueue</string>
    <string>-f</string>
    <string>/System/Library/Frameworks/Python.framework/Versions/2.6/caldavd/caldavd.plist</string>
    </array>

後は、LanuchDaemonに自動起動をお願いします。

# launchctl load -w /Library/LaunchDaemons/calendarserver.plist

最後に、私がはまった事を。。。といっても常識なのかもしれませんが。。。

uidが4文字以下だとアカウントを認識してくれないんです。orz
__uids__のファイルシステムを使う仕様なのかもしれませんが。。。uidの先頭2文字で第階層のディレクトリ名、2,3文字目で第2階層のディレクトリ名をつかってディレクトリの木構造を使うなんて。。。やはり、Kerberos使うべきだった。。。(^_^;