Tag Archives: Mac

LionでPostfix+Gmail

OSX LionにはPostfixがインストールされているんだけど、これを使ってgmail経由で送信する際に一筋縄では行かなかったのでメモ。

まず /etc/postfix/main.cf に以下を追記して、gmailの587番ポートに接続するよう設定する。

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_mechanism_filter = plain
smtp_tls_security_level = secure
smtp_tls_CApath = /etc/postfix/certs

次に /etc/postfix/sasl_passwd にgmailアカウントの情報を記述する(YOUR.ACCOUNTとYOUR_PASSWORD部分は自分のものに書き換える)。

[smtp.gmail.com]:587 YOUR.ACCOUNT@gmail.com:YOUR_PASSWORD

そしてpostmapでデータベースを作成し、元のファイルは削除する。

# postmap /etc/postfix/sasl_passwd
# rm /etc/postfix/sasl_passwd

次に、GmailのSSL証明書を取得する。下記がコマンドの出力結果(+注釈)だけど、 注釈の通り証明書の鍵部分を /etc/postfix/certs/gmail.pem と /etc/postfix/certs/equifax.pem に保存する。

$ openssl s_client -connect pop.gmail.com:995 -showcerts
CONNECTED(00000003)
depth=1 /C=US/O=Google Inc/CN=Google Internet Authority
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
### ここから
-----BEGIN CERTIFICATE-----
MIIDWjCCAsOgAwIBAgIKaNGwUQADAAAirzANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0xMTAyMTYwNDQwMzdaFw0xMjAyMTYwNDUwMzda
MGcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRYwFAYDVQQDEw1wb3Au
Z21haWwuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCc8H+gCR0/95Tb
Lkj7jdj0oXmfGzsSswdSjo6yWdcHpjv6cbaakHakclxBs47M8Gs3fJxuNqVMpt2Q
YorJuoBuVZjM59/rIeJwmOwSlzf1POxpEFUvm1ASAeBnBheBt0Fv+BCfI8DjZKgn
SvHCqQJfNgxpJBXOLbFVjBsPqF8w6wIDAQABo4IBLDCCASgwHQYDVR0OBBYEFHzY
GJFnJ+gmONoIX6cyTAEl9ePYMB8GA1UdIwQYMBaAFL/AMOv1QxE+Z7qekfv8atrj
axIkMFsGA1UdHwRUMFIwUKBOoEyGSmh0dHA6Ly93d3cuZ3N0YXRpYy5jb20vR29v
Z2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkuY3Js
MGYGCCsGAQUFBwEBBFowWDBWBggrBgEFBQcwAoZKaHR0cDovL3d3dy5nc3RhdGlj
LmNvbS9Hb29nbGVJbnRlcm5ldEF1dGhvcml0eS9Hb29nbGVJbnRlcm5ldEF1dGhv
cml0eS5jcnQwIQYJKwYBBAGCNxQCBBQeEgBXAGUAYgBTAGUAcgB2AGUAcjANBgkq
hkiG9w0BAQUFAAOBgQB0GTFAoMNxCFJ3aVMzvrZgCD9hG2Ee3Sx5GMQ0yDjcFvzS
ZIci9Gr18HMVBusIuFLw8TvBD7PEXtZLhh6hbj+Xdg9CIqlIjdqJFRixJU06xqKH
akIhNBDxy5ky3VugqlGdysbMjo/aXCFdl42GproXdUPH24Erljur885LklMk/g==
-----END CERTIFICATE-----
### ここまでを /etc/postfix/certs/gmail.pem に保存
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
### ここから
-----BEGIN CERTIFICATE-----
MIICsDCCAhmgAwIBAgIDC2dxMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDkwNjA4MjA0MzI3WhcNMTMwNjA3MTk0MzI3
WjBGMQswCQYDVQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZ
R29vZ2xlIEludGVybmV0IEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAye23pIucV+eEPkB9hPSP0XFjU5nneXQUr0SZMyCSjXvlKAy6rWxJfoNf
NFlOCnowzdDXxFdF7dWq1nMmzq0yE7jXDx07393cCDaob1FEm8rWIFJztyaHNWrb
qeXUWaUr/GcZOfqTGBhs3t0lig4zFEfC7wFQeeT9adGnwKziV28CAwEAAaOBozCB
oDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFL/AMOv1QxE+Z7qekfv8atrjaxIk
MB8GA1UdIwQYMBaAFEjmaPkr0rKV10fYIyAQTzOYkJ/UMBIGA1UdEwEB/wQIMAYB
Af8CAQAwOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20v
Y3Jscy9zZWN1cmVjYS5jcmwwDQYJKoZIhvcNAQEFBQADgYEAuIojxkiWsRF8YHde
BZqrocb6ghwYB8TrgbCoZutJqOkM0ymt9e8kTP3kS8p/XmOrmSfLnzYhLLkQYGfN
0rTw8Ktx5YtaiScRhKqOv5nwnQkhClIZmloJ0pC3+gz4fniisIWvXEyZ2VxVKfml
UUIuOss4jHg7y/j7lYe8vJD5UDI=
-----END CERTIFICATE-----
### ここまでを /etc/postfix/certs/equifax.pem に保存
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority
---
No client certificate CA names sent
---
SSL handshake has read 1714 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: 763AA8A1EF5D5DDDF4C2B21BFBFF07D9F823908254EB257FA06E9B90A64F7199
    Session-ID-ctx: 
    Master-Key: 903CDFFC9EE4A6ACDC636BE72F8A82AFE7E088DA74918789653DC25978D4123F9333E2C6DE8F42A913C9A9CFE66857A3
    Key-Arg   : None
    Start Time: 1323177726
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
+OK Gpop ready for requests from 113.197.147.115 o7pf55469179pbh.0

c_rehashでエイリアスを作成。

# c_rehash /etc/postfix/certs

次に /etc/postfix/submit.cred を作成する。

# vim /etc/postfix/submit.cred

submitcred version 1
hostname|username|password

# chmod 600 /etc/postfix/submit.cred

以上で設定は終わったので、launchctlに登録する。

# vim /System/Library/LaunchDaemons/org.postfix.master.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>org.postfix.master</string>
  <key>OnDemand</key>
  <false/>
  <key>Program</key>
  <string>/usr/libexec/postfix/master</string>
  <key>ProgramArguments</key>
  <array>
    <string>master</string>
  </array>
  <key>QueueDirectories</key>
  <array>
    <string>/var/spool/postfix/maildrop</string>
  </array>
  <key>KeepAlive</key>
  <true/>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

# launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist
# launchctl load -w /System/Library/LaunchDaemons/org.postfix.master.plist

これでメールが送信できるようになったはずなので、mailコマンドで送信してみる。

$ date | mail -s "Hello" "test.to@example.com"

ログは /var/logs/mail.log に吐かれる。

$ tail -f /var/logs/mail.log

キューはmailqで確認。

$ mailq

キューに溜まっているメールが削除したければpostsuper -dを実行。

# postsuper -d ALL

certificate verification failed が出たら

上記のようにSSLの設定をしても、次のようなエラーが出るかもしれない(実際自分は出た)。

certificate verification failed for smtp.gmail.com[74.125.53.109]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
1DD8918C646A: Server certificate not trusted
certificate verification failed for smtp.gmail.com[74.125.53.108]:587: untrusted issuer /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
1DD8918C646A: to=<test.to@example.com>, relay=smtp.gmail.com[74.125.53.108]:587, delay=380, delays=363/0.07/17/0, dsn=4.7.5, status=deferred (Server certificate not trusted)

その場合は Fixing Postfix “certificate verification failed for gmail untrusted issuer” Error Message に書かれているEquifaxとThawteの2つの証明書をコピーしてくる。

# vim /etc/postfix/certs/equifax.pem

-----BEGIN CERTIFICATE-----
MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
70+sB3c4
-----END CERTIFICATE-----

# vim /etc/postfix/certs/thawte.pem

-----BEGIN CERTIFICATE-----
MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT
DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs
dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE
AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl
ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT
AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU
VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2
aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ
cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2
aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh
Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/
qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm
SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf
8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t
UCemDaYj+bvLpgcUQg==
-----END CERTIFICATE-----

もう一度c_rehashでエイリアスを作成してpostfixを再起動する。

# c_rehash /etc/postfix/certs
# launchctl unload -w /System/Library/LaunchDaemons/org.postfix.master.plist
# launchctl load -w /System/Library/LaunchDaemons/org.postfix.master.plist

equifax.pemは前述の通り最新の情報で作成したけど、なぜか内容が異なっている。でもこれで動いている。Thawteはもう使えなくなったというから使われないはずだし…。ちょっとよくわかっていない。

参考


Macでpkill

homebrewでproctoolsをインストールする。

$ brew install proctools

LaunchAgentsで標準出力・エラー出力を設定する

LaunchAgentsで起動しているデーモン等で標準出力・エラー出力先を指定するには、StandardOutPathとStandardErrorPathを設定する。

例えばmemcachedでは次のようにする(ちなみにhomebrewでインストールした)。

vi ~/Library/LaunchAgents/com.danga.memcached.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.danga.memcached</string>
  <key>KeepAlive</key>
  <true/>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/memcached</string>
    <string>-l</string>
    <string>127.0.0.1</string>
    <string>-vv</string><!-- エラーや警告、コマンド等を出力するオプション -->
  </array>
  <key>StandardOutPath</key>
  <string>/usr/local/var/log/memcached.log</string>
  <key>StandardErrorPath</key>
  <string>/usr/local/var/log/memcached.log</string>
  <key>RunAtLoad</key>
  <true/>
  <key>WorkingDirectory</key>
  <string>/usr/local</string>
</dict>
</plist>
launchctl unload ~/Library/LaunchAgents/com.danga.memcached.plist
launchctl load ~/Library/LaunchAgents/com.danga.memcached.plist

memcachedの場合は-vvもしくは-vオプションも必要なので要注意。


MechanizeをMac OSXにインストール

MechanizeはNokogiriに依存しており、Nokogiriはlibxml2とlibxsltに依存している。 libxml2はhomebrewで提供されているのでそれを利用し、libxsltはソースから入れる。

$ brew install libxml2 # libxml2 v2.7.7
$ wget ftp://xmlsoft.org/libxml2/libxslt-1.1.26.tar.gz
$ tar zxf libxslt-1.1.26.tar.gz
$ cd libxslt-1.1.26
$ ./configure --prefix=/usr/local/Cellar/libxslt/1.1.26 --with-libxml-prefix=/usr/local/Cellar/libxml2/2.7.7
$ make
$ make install
$ gem install nokogiri -- --with-xslt-dir=/usr/local/Cellar/libxslt/1.1.26
$ gem install mechanize

nokogiriのインストール方法についてはNokogiriのチュートリアルが詳しい。


MacBook Airの11.6インチを購入

10/22にApple Store渋谷店で購入した。

13インチと悩んだあげく、(1)既に持っているMacBook Proの15インチと差別化がはかりやすく、(2)ハードディスク容量的に不安が少ない、(3)予想以上に画面が広く感じる、の3点で11インチの128GBを選んだ(64GBの11インチの在庫がなかったというのもある)。

で、数日間使ってみての感想だけど、

  • 持ち運びの良さは最高
  • ちょっとプログラミングする程度なら十分画面が広く見やすい
  • ディスプレイの映り込みがないので見やすい(Proもこうなってほしい)
  • 電池のことは特に気にしてない(アダプタを外して3時間ぐらいは余裕でもつ)
  • キーボードの感覚はProとほとんど変わらない(ESCが若干押しづらい?)
  • 光学ドライブが無いことはそこまで気にならない
  • デザインがシンプルでかっこいい(大好き)
  • メモリは2GBだけど、テキストベースの軽い作業ばかりなので気にならない(一応SkypeとEchofonとFirefoxとChromeは裏で常時起動してるけど)

という感じ。買ってすごく満足している。まさに愛機。

というわけで興味のある人はとりあえず店舗で触ってみるといいと思う。触ると「なにこれ!?」ってなるから。

メインにするにはさすがに作業領域が狭いけど、でも手軽にいつでも触っていたい感が強いので、ほんとうにおすすめ。


gitリポジトリを立ててSSHで利用

以前daemonを起動してリポジトリ立てる方法について書いたけど、今回はgitのリポジトリを立てる(SSH経由) を参考にSSH経由でできるようにやってみた。

リポジトリを置くサーバのホスト名はexampleとする。

ユーザの追加

リポジトリを操作するためのgitユーザをexampleサーバに追加する。 Mac OS 10.6の場合、ユーザは dsclで追加 する。

このときシェルにgit-shell(MacPortsで入れたなら /opt/local/bin/git-shell にある)を設定する。こうすることでpush,pullのみを受け付けるようになる。

リポジトリの作成

example:/Users/gitディレクトリ配下にリポジトリを集約するreposディレクトリを作成し、今回はprojectというリポジトリを作成してみる(末尾に.gitを付けるのは慣習?)。

% cd /Users/git
% sudo -u git mkdir repos
% sudo -u git mkdir repos/project.git
% cd repos/project.git
% sudo -u git git init --bare

鍵を追加

gitユーザにSSHでログインするための鍵を追加する。

% cat ~/.ssh/id_rsa.pub > /Users/git/.ssh/authorized_keys

cloneしてみる

$ git clone git@example:repos/project.git
$ cd project

pushしてみる

masterブランチでのコミット内容をorigin(サーバ側)に適用する。

$ git push origin master

ただこのときに次のようなエラーがでるかもしれない。

$ git push -v origin master
Pushing to git@example:repos/project.git
To git@example:repos/project.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@example:repos/project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

原因はよくわかってないのであれだけど、とりあえず-fオプションをつけて再度実行すればちゃんとpushされている。

おまけ:Redmineでリポジトリを閲覧

プロジェクトの設定画面で「リポジトリ」タブを選択し、「バージョン管理システム」にgit、「Path to .git directory」に「/Users/git/repos/project.git」を設定すれば良い。


(挫折)NSPreferredMailCharset on Snow Leopard

NSPreferredMailCharset on LeopardをSnow Leopardに対応させようとしたけど、ちょっと挫折した。

やったことをとりあえずメモっておく:

  • method_impをmethod_(set|get)Implementationに書き換える
  • Info.plistのSupportedPluginCompatibilityUUIDsに、Mail.appとMessage.frameworkのInfo.plistに書かれているPluginCompatibilityUUIDsを列挙する
  • ビルド対象のアーキテクチャを32bit/64bit対応のUniversalに設定する

Console.appを見ながら作業したのでここまでは合ってるはずなんだけど、ここで”Domain=NSCocoaErrorDomain Code=3588″が出た。どっかでエラーが出てるんだけど、今すぐにはちょっとわからない。


CassandraをSnow Leopardで動かす

CassandraをSnow Leopardで動かす方法。

Javaの設定

~/.zshrcに次の記述を追加する。

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH

Cassandraのインストール

まずディレクトリを掘る。

1つはログ用ディレクトリ。

mkdir -p /var/log/cassandra
touch /var/log/cassandra/system.log
chown -R `whoami` /var/log/cassandra

2つ目はデータ用ディレクトリ。デフォルトらしい。

mkdir -p /var/lib/cassandra
chown -R `whoami` /var/lib/cassandra

今回はコンパイル済みバイナリを落としてそれを使う。

tar xf apache-cassandra-0.5.1-bin.tar.gz
mv apache-cassandra-0.5.1-bin /usr/local
ln -s /usr/local/apache-cassandra-0.5.1-bin /usr/local/cassandra

サーバを立ち上げる。

/usr/local/cassandra/bin/cassandra

デフォルトではシングルモードで動作し、8888番ポートを使用する。 詳細な設定はconf/storage-conf.xmlに記述する。

クライアントはbin/cassandra-cliを使用する。

/usr/local/cassandra/bin/cassandra-cli -host localhost -port 8888
/usr/local/cassandra/bin/cassandra-cli -host localhost -port 9160

対話形式で起動し、helpコマンドでヘルプを見ることができる。

プロセスの実行権限所有者とかログの書き込み権限とか

参考にしたサイトではどこもログやデータディレクトリの所有者が端末の利用者に設定されていてちょっと気持ち悪かった(whoamiの部分)。

なので、試しに_cassandraユーザを作って次のことをやってみた。

  • 各ディレクトリの所有者を_cassandraユーザに設定
  • サーバを_cassandraユーザで起動(sudo -u _cassandra /usr/local/cassandra/bin/cassandra
  • cassandra-cliを上と同様に起動(ユーザはwhoami

そしたら、サーバを起動したところまではうまくいったけど、クライアントを起動する際に/var/log/cassandra/system.logに書き込み権限が無いとエラーが出た。 そこに書き込むのはサーバのプロセス所有者である_cassandraなのに…。

そこで、今度はcassandra-cliもサーバと同じように_cassandraユーザで起動してみたら、ホームディレクトリに作られるクライアントの履歴ファイルの書き込み権限が無いと怒られた。これは確かにその通りだよね、という感じ。

なので、最終手段として_cassandraグループを作って次のことをやってみた。

  • _cassandraグループに_cassandraユーザとwhoamiを追加する
  • ログディレクトリとデータディレクトリ、実行ファイルの所有グループを_cassandraグループに設定する
  • ログディレクトリとデータディレクトリの所有グループに書き込み権限を与える
  • サーバを_cassandraユーザで起動
  • cassandra-cliは今まで通り普通に起動(ユーザはwhoami

そしたら、問題なくサーバに接続できた。 ログファイルはクライアントのユーザ権限で書き込みにいっているのかも?なんか変な気がするけど。

参考文献

追記1: クライアントの接続先ポート

cassandraサーバを起動したときに8888と出てるからそっちに接続するのかと思ったら、どうやら違うらしい。 「列指向データベースCassandraにPythonで接続する」によると、conf/storage-conf.xmlに記述しているThriftPortに指定している値(デフォルトでは9160)に接続することになる。


launchctlでlocate

locateを使うにはupdatedbが必要で、適宜更新するためにもcronで定時に更新したりするらしい。

ただSnow Leopard(Tiger以降?)だとupdatedbがデフォルトでパスの通った場所にない。探してみると、/usr/libexec/locate.updatedb というちょっと変な場所にある。

そこで、こいつを実行せずにlocateを実行してみると、どうやら定期的な更新とかはlaunchctlでそこらへんはうまくやってくれるかのようなメッセージが出てくる。そいつにしたがって以下を実行してみると、確かにlocateが使えるようになる。

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist

DBの更新スケジュールは/System/Library/LaunchDaemons/com.apple.locate.plistに記述されている。


macportsでzlibのインストールに失敗

macportsでzlib 1.2.3をインストールしようとしたら、

~$ sudo port -f install zlib
--->  Computing dependencies for zlib
--->  Cleaning zlib

で終わってしまい、先に進まなかった。

そこで、Snow Leopard導入記録その1 MacPort関連簡易メモを参考に+universalをつけてインストールしてみたところ、問題なくインストールされた。