Posts Tagged: Mac


19
Jun 10

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してみる

$ git push origin push

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

$ 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」を設定すれば良い。


2
Jun 10

(挫折)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″が出た。どっかでエラーが出てるんだけど、今すぐにはちょっとわからない。


18
Mar 10

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)に接続することになる。


14
Nov 09

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に記述されている。


7
Sep 09

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

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

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

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

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


2
Sep 09

Snow Leopardをインストールした

Snow Leopardが届いたので早速クリーンインストールした。

そういえばファイルシステムの選択が無かったけど、それでもちゃんと大文字と小文字は区別してくれている。


25
Jul 09

SafariでCommand+KでGoogle検索

Firefoxのキーボードショートカットに慣れてるので、SafariでWeb検索をするためのキーボードショートカットCommand+Option+Fはいまいち使いづらい。

ググってみたところ、システム環境設定から変更できるらしいので、試したところ成功した!

手順は、

  1. システム環境設定のKeyboard & Mouseを開く
  2. Keyboard Shotcutsタブを開く
  3. 「+」ボタンで項目を追加する
  4. Application欄にSafari.appを選択
  5. Menu Titleに「Google Search…」を入力
  6. Keyboard Shortcutにフォーカスが当たっている状態でCommand+Kを入力
  7. Safariを再起動

凄いなー。


22
Jul 09

Mac上にgitの公開リポジトリを作る

git 1.6.3.3 on Mac OS X 10.5

以下の方法でとりあえず動く。ただし安全かどうかは保障できない。

git-coreのインストール

$ sudo port install git-core +gitweb # 一応gitwebも

リポジトリの置き場所を作る

ここでは/opt/local/var/git/repos以下にリポジトリを作ると仮定する。

$ sudo mkdir /opt/local/var/git/repos
$ cd /opt/local/var/git/repos

daemonを起動

$ sudo /opt/local/libexec/git-core/git-daemon --export-all --enable=receive-pack --base-path=/opt/local/var/git/repos

–base-pathでリポジトリの置き場所を指定する。–export-allと–enable=receive-packはまだよくわかってない。

リポジトリを作る

新規に空のリポジトリを作る場合は次を実行。

$ cd /opt/local/var/git/repos
$ sudo mkdir testrepos.git
$ cd testrepos.git
$ sudo git init --bare
$ sudo touch git-daemon-export-ok

どっかからクローンしてくる場合(例えば既存のローカルリポジトリ/path/to/cloned/reposを公開したい場合)には次を実行。こっちのがsudoをあまりしなくて済むので楽かも。

$ cd /opt/local/var/git/repos
$ sudo git clone --bare /path/to/cloned/repos ./testrepos.git
$ sudo touch git-daemon-export-ok
$ sudo touch testrepos.git/git-daemon-export-ok

どちらにせよ–bareが大事。

cloneしてみる

$ cd ~/tmp
$ git clone git://hostname/testrepos.git

ToDo

  • git-daemon-export-okってなに。
  • –export-allってなに。
  • –enable=receive-packってなに。
  • 今のとこroot権限でリポジトリが作成されてるんだけど、そこらへんどうなんだろう。
  • ネットワーク越しのローカルレポジトリから公開リポジトリを作るにはどうすればいいんだろう。
  • launchctlに登録したい。

参考資料


21
Jul 09

Growlでautospecの結果を表示

Growlの準備

  • Growlをインストール
  • インストーラと一緒に入っているExtra/growlnotify/install.shを実行する
  • autotest + growl で楽々テストを参考に、Growlが「受信される通知を聞く」、「リモートアプリケーション登録を許可」するように環境設定パネルから設定する。

gem類の準備

バージョンも併記した。

まずはgemの準備。

$sudo gem install ZenTest # 4.1.1
$sudo gem install redgreen # 1.2.2, autospecの結果をコンソールで赤と緑で塗り分けてくれる。Growlだけなら不要
$sudo gem install ruby-growl # 1.0.1

RSpecとRSpec on Railsのインストール。

ruby script/plugin install git://github.com/dchelimsky/rspec.git -r 'refs/tags/1.2.7' # 1.2.7
ruby script/plugin install git://github.com/dchelimsky/rspec-rails.git -r 'refs/tags/1.2.7.1' # 1.2.7.1
ruby script/generate rspec

画像を拝借

cd ~
curl http://blog.internautdesign.com/files/rails_fail.png > .rails_fail.png
curl http://blog.internautdesign.com/files/rails_ok.png > .rails_ok.png

moroさんが勉強会で使ってたチェックとバツマークのが欲しいんだけど、どこにあるんだろう?

~/.autotestの編集

ZenTestをインストールしたときについてくる設定ファイルのひな形をコピー。 x.x.xはインストールしたZenTestのバージョンで、ここでは4.1.1。

$ cp /Library/Ruby/Gems/1.8/gems/ZenTest-x.x.x/example_dot_autotest.rb ~/.autotest
$ chmod 644 ~/.autotest

以下のように設定する


# -*- ruby -*-

# require 'autotest/autoupdate'
# require 'autotest/once'
# require 'autotest/rcov'
# require 'autotest/restart'
# require 'autotest/timestamp'

# Autotest::AutoUpdate.sleep_time = o
# Autotest::AutoUpdate.update_cmd = o
# Autotest::RCov.command = o
# Autotest::RCov.pattern = o

ok_img = "~/.rails_ok.png"
ng_img = "~/.rails_fail.png"

module Autotest::Growl
  def self.growl title, msg, img=ok_image, pri=0, sticky=""
    msg += " at #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}"
    # autotestは使わないので、-nで指定するアプリケーション名はautospecで良いと思う
    # -Hで通知先のGrowlのあるホスト名を指定する
    system "growlnotify -n autospec -H localhost --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}"
  end

  Autotest.add_hook :ran_command do |at|
    results = at.results.last
    examples = results[/(\d+)\s+examples?/].to_i  # テストの総数
    failures = results[/(\d+)\s+failures?/].to_i  # 失敗の数
    errors = results[/(\d+)\s+errors?/].to_i # エラーの数
    if examples >= 0
      if failures > 0 || errors > 0
        growl "Tests Failed", "#{examples} examples, #{failures} failures, and #{errors} errors", ng_img, 2
      else
        growl "Tests Passed", "#{examples} examples, #{failures} failures, and #{errors} errors", ok_img, -2
      end
    else
      growl "Tests Errored", "errors", ng_img, 2
    end
  end
end

実行

$ cd RAILS_ROOT
$ autospec

備考

いくつかサイトを巡って試行錯誤を繰り返したけど、とりあえず以上の作業のみで動作している。結構古い情報もあるみたいだし、autotestとautospecでは~/.autotestでテストの結果を拾う処理に差異があるのでご注意を。

ところでgrowlnotifyでは-Hオプションで通知先のGrowlのホスト名を指定しているけど、うまくやれば,別サーバ上で作業しているときのテスト結果をローカルのGrowlに通知なんてこともできるのかな?ちょっと余裕があるときにでも試してみたい。

参考サイト

変更履歴

2009-08-19

  • 30行目の行末からカンマ(,)を削除。
  • RSpec/Rspec on Railsのインストール時にバージョン指定を追記(これがないとtrunkをインストールしてしまう)。

2010-02-13

  • 成功.失敗時の画像ファイル名を変数で指定するように修正

26
Jun 09

MacBook Proを買った

もう1週間前のことだけど、新型のMacBook Proを買った。 15インチの2.66GHzのやつ。型番は…MB985J/A。

やっとIntel Macに移行してGoogle Chromeを起動したら、Dock内でのバウンドなしで起動して驚いた。Core2 Duoなためかコンパイルも早いし、TimeMachineもあって環境の再構築は容易に進んだ。いいね、新型。

というわけでPowerBook G4があまったので、こっちはサーバにしてみようかと思う。会社からSSHでテスト環境として利用できたらいいなぁとか、いろいろ考えていたり。あんまり意味は無いかもしれないけど、それも勉強&お楽しみってことで。

いやしかし新型はいいなぁ。