gitoriousをMacにインストールする

gitoriousは、githubクローンでなかなかよくできているのですが、いかんせんインストールがなかなか大変。
Macへのインストールにいたっては、ほとんど情報もなくそれなりに苦労したのでメモ。
この記事自体や設定ファイルなどを https://github.com/kmr/gitorious_mac_install にも置いてます。

ユーザの作成

gitユーザを作ります。
一般ユーザで普通にユーザ追加してください。
gitユーザでssh接続できるように、共有設定なども確認します。
gitユーザ環境周りの設定として以下のファイルを作成、記述します。

  • ~/.bashrc
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

.profile を .bashrc のシンボリックリンクとして作成しておきます。

git% ln -s /Users/git/.bash_profile .profile

ssh設定のディレクトリを作成して、そこに environment というファイルを作成します。

git% mkdir .ssh
git% chmod 700 .ssh
  • .ssh/environment
PATH=/Users/git/contents/gitorious/script:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/sbin:/bin:/sbin

パーミッションを変えておきます。

git% chmod 644 ~/.ssh/environment

sshd の設定


ssh経由のpushのためsshdの設定をします。

PermitUserEnvironment yes (コメントを削除し、yesに設定)

パッケージ群のインストール

必要なパッケージ群をインストールします。
自分は、macports を使っているのですが、最近はいろいろあるので適当に読み変えてください。
あと、rubyパッケージをrubygemsでインストールします。
gem系パッケージは、結構バージョンにうるさいので、エラーとかでバージョンが違うと言われたら素直にそのバージョンをインストールしてあげてください。

% sudo port -v install apache2 +openldap+preforkmpm
% sudo port -v install mysql5-server
% sudo port -v install pcre
% sudo port -v install oniguruma5
% sudo port -v install apg
% sudo port -v install libgeoip
% sudo port -v install libyaml
% sudo port -v install php5
% sudo port -v install phpmyadmin
% sudo port -v install memcached +umem
% sudo port load memcached
% sudo port -v install ImageMagick +graphviz+jbig+jpeg2+lqr+mpeg+perl+q32+rsvg+wmf
% sudo port -v install sphinx +mysql5
% sudo port -v install git-core
% sudo gem install -b --no-ri --no-rdoc bluecloth -V
% sudo gem install -b --no-ri --no-rdoc openid -V
% sudo gem install -b --no-ri --no-rdoc mime-types -V
% sudo gem install -b --no-ri --no-rdoc diff-lcs -V
% sudo gem install -b --no-ri --no-rdoc json -V
% sudo gem install -b --no-ri --no-rdoc ruby-mysql -V
% sudo gem install -b --no-ri --no-rdoc mysql -V
% sudo gem install -b --no-ri --no-rdoc rack -V
% sudo gem install -b --no-ri --no-rdoc ruby-hmac -V
% sudo gem install -b --no-ri --no-rdoc echoe -V
% sudo gem install -b --no-ri --no-rdoc daemons -V
% sudo gem install -b --no-ri --no-rdoc ruby-yadis
% sudo gem install -b --no-ri --no-rdoc hoe
% sudo gem install -b --no-ri --no-rdoc stompserver -V
% sudo gem install -b --no-ri --no-rdoc chronic -V
% sudo gem install -b --no-ri --no-rdoc rails -v '2.3.11' -V
% sudo gem install -b --no-ri --no-rdoc  rdiscount -V
% sudo gem install -b --no-ri --no-rdoc stomp -V
% sudo gem install -b --no-ri --no-rdoc geoip -v '0.8.9' -V
% sudo gem install -b --no-ri --no-rdoc bundler -V
% sudo gem install -b --no-ri --no-rdoc rmagick -V
% sudo gem install -b --no-ri --no-rdoc daemons -v '1.1.0' -V
% sudo gem install -b --no-ri --no-rdoc rubygems-update -v '1.3.6' -V
% sudo update_rubygems _1.3.6_

ActiveMQのインストール

ActiveMQは、ここから最新版をダウンロード、解凍インストールします。

http://activemq.apache.org/download.html

ここでは、/opt/local/activemq に解凍したとします。
以下のように設定ファイル、起動スクリプトを一部変更します。

...
<transportConnectors>
  <!--
  元々以下のエントリ
  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616"/>
  -->
  <transportConnector name="localhost" uri="tcp://127.0.0.1:61616"/>
</transportConnectors>

スクリプトの頭に以下のエントリを追加します。
これは Java関係の環境変数を設定するためです。

# Setup JAVA
. /opt/local/.java_env

上で読み込んでる .java_env を作成します。

  • /opt/local/.java_env
# Setting Java environment
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
export PATH=${JAVA_HOME}/bin:${ANT_HOME}/bin:${MAVEN_HOME}/bin:${PATH}


あと、ActiveMQ実行ユーザをgitユーザと同じように作っておきます。

MySQLの設定

MySQLにgitorious用のDBとユーザを作成します。
gitorious公式のセットアップではrootユーザを使うように書いてありますが、変えた方がいいです。

% mysql -u root -p
rootユーザのパスワード入力
mysql> create database redmine character set utf8;
mysql> create user 'gitorious(変えてもいい)'@'localhost' identified by '適当なパスワード';
mysql> grant all privileges on gitorious.* to 'gitorious'@'localhost';
mysql> quit;

gitorious本体の設定

gitorious本体をチェックアウトしていろいろ設定します。
この辺から、いろいろエラーが発生したり苦労するかもしれません。


まず、gitorious のリポジトリから gitorious のコードをクローンしてきます。
/opt/local/gitorious にインストールすることにします。

% git clone git://gitorious.org/gitorious/mainline.git gitorious
% cp -pr gitorious /opt/local/
% sudo chown -R apache:staff /opt/local/gitorious
% sudo chown -R git:staff /opt/local/gitorious/script
% sudo chmod 777 /opt/local/gitorious/log
% sudo chmod 777 /opt/local/gitorious/tmp/pids
% sudo mkdir /Users/git/git-repos
% sudo chown /Users/git/git-repos
% sudo mkdir -p /Users/git/tmp/tarballs-work
% sudo mkdir -p /Users/git/tmp/tarballs-cache
% sudo chown -R /Users/git/tmp

chown でオーナ指定している apache:staff は、Apache の起動ユーザなので、各環境の設定に合わせて変えてください。


いくつかの設定ファイルを自分の環境、使い方に合わせて設定します。
設定するファイルは、/opt/local/gitorious/config以下にあるサンプルファイルをコピーして使います。

% cd /opt/local/gitorious/config
% sudo cp -p broker.example.yml broker.yml
% sudo cp -p gitorious.sample.yml gitorious.yml
% sudo cp -p database.sample.yml database.yml


以下でランダム文字列を設定する必要がありますので、事前に以下のコマンドを実行して出力される文字列をコピーしておきます。
改行は削除して1行にしてください。

% apg -m 64
uvnu.....
.....non_
  • /opt/local/gitorious/config/gitorious.yml
production: 
  # The session secret key (`apg -m 64` is always useful for this kinda stuff)
  cookie_secret: uvnu.....non_ (上で作ったやつ)
  
  # The path where git repositories are stored. The actual (bare) repositories resides
  # in repository_base_path/#{project.slug}/#{repository.name}.git/:
  repository_base_path: "/Users/git/git-repos"

  # Stuff that's in the html <head>. custom stats javascript code etc
  extra_html_head_data: 
  
  # System message that will appear on all pages if present
  system_message: 
  
  # Port the ./script/gitorious script should use:
  gitorious_client_port: 80

  # Host the ./script/gitorious script should use:
  gitorious_client_host: github.example.com (このgitoriousを運用するサーバのDNS登録名) 

  # Host which is serving the gitorious app, eg "gitorious.org"
  gitorious_host: github.example.com (このgitoriousを運用するサーバのDNS登録名) 

  # User which is running git daemon
  gitorious_user: git

  # Email address to the support for the Gitorious server
  gitorious_support_email: gitorious@example.com (サポートメールアドレス)

  # Email spam on server errors to:
  exception_notification_emails:  

  # Mangle visible e-mail addresses (spam protection)
  mangle_email_addresses: true

  # Enable or Disable Public Mode (true) or Private Mode (false)
  public_mode: false (これをfalseにすると新規ユーザ追加できなくなる)

  # Define your locale
  locale: en

  # Where should we store generated tarballs?
  # (should be readable by webserver, since we tell it to send the file using X-Sendfile)
  archive_cache_dir: "/Users/git/tmp/tarballs-cache"
  # Which directory should we work in when we generate tarballs, before moving 
  # them to the above dir?
  archive_work_dir: "/Users/git/tmp/tarballs-work"

  # is it only site admins who can create new projects?
  only_site_admins_can_create_projects: false
  
  # Should we hide HTTP clone urls?
  hide_http_clone_urls: false

  # Use SSL? Requires web server configuration. Recommended for security. Forces the use of
  # HTTPS on login page and all pages while user is logged in
  use_ssl: true

  # Is this gitorious.org? Read: should we have a very flashy homepage?
  is_gitorious_dot_org: false

  # Pick a default license
  #default_license: GNU Affero General Public License (AGPLv3)
  • database.yml
# MySQL (default setup).  Versions 4.1 and 5.0 are recommended.
#
# Install the MySQL driver:
#   gem install mysql
# On MacOS X:
#   gem install mysql -- --include=/usr/local/lib
# On Windows:
#   gem install mysql
#       Choose the win32 build.
#       Install MySQL and put its /bin directory on your path.
#
# And be sure to use new-style password hashing:
#   http://dev.mysql.com/doc/refman/5.0/en/old-client.html
production:
  adapter: mysql
  database: gitorious
  username: gitorious 
  password: MySQLの設定で指定したgitoriousユーザのパスワード
  host: localhost
  encoding: utf8
  • broker.yml

そのままでOK。


bundlerを使って不足パッケージチェック、インストールします。
ここで、バージョンが違うというエラーが出たら、指定されたバージョンのgemパッケージをインストールしてください。

% cd /opt/local/gitorious
% sudo bundle install


最後に、データベースを初期化、管理者ユーザの作成など。

git% rake db:create RAILS_ENV=production 
git% rake db:setup RAILS_ENV=production
git% rake ultrasphinx:bootstrap RAILS_ENV=production 
git% RAILS_ENV=production script/create_admin
管理者ユーザのe-mailとパスワードを聞かれるので入力
git% crontab -e
* * * * * . ~/.bashrc && /opt/local/gitorious && rake ultrasphinx:index RAILS_ENV=production

Apacheの設定

まずは、passengerモジュールをインストール。
今回は、macportsでインストールしたApacheを使うので、オプションを指定します。

# sudo /opt/local/bin/passenger-install-apache2-module --apxs2-path /opt/local/apache2/bin/apxs --apr-config-path /opt/local/bin/apr-1-config


Apacheは、VirtualHostを作成します。
つまり専用のサーバ名を与えます。
当然、この名前で名前解決できる必要があります。

LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /opt/local/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /opt/local/bin/ruby

<VirtualHost *:80>
  ServerName github.example.com (gitorious.ymlのgitorious_hostと合わせる)
  DocumentRoot /opt/local/gitorious/public

  <Directory "/opt/local/gitorious/public" >
    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerName github.example.com (gitorious.ymlのgitorious_hostと合わせる)
  DocumentRoot /opt/local/gitorious/public

  ServerAdmin admin@example.com
  ErrorLog "/opt/local/apache2/logs/error_log"
  TransferLog "/opt/local/apache2/logs/access_log"
  SSLEngine on
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  SSLCertificateFile "/opt/local/apache2/conf/github.example.com.cert.pem" (SSLサーバ鍵についてはググればいっぱい出てきます)
  SSLCertificateKeyFile "/opt/local/apache2/conf/github.example.com.key.pem"

  BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
  CustomLog "/opt/local/apache2/logs/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

  <Directory "/opt/local/gitorious/public" >
    Order deny,allow
    Allow from all
  </Directory>
</VirtualHost>

自動起動設定

自動起動の設定方法はいろいろありますが、個人的に一番分かりやすいmacports系デーモンのまねで設定します。
起動スクリプトなどは、/opt/local/etc/LaunchDaemon 以下の作成します。
スクリプトは、github に置いておきますので参考にしてください。


これらのスクリプトMac起動時に起動するよう設定します。

% sudo ln -s /opt/local/etc/LaunchDaemon/org.macports.activemq.plist /Library/LaunchDaemons/org.macports.activemq.plist
% sudo ln -s /opt/local/etc/LaunchDaemon/org.macports.stompserver.plist /Library/LaunchDaemons/org.macports.stompserver.plist
% sudo ln -s /opt/local/etc/LaunchDaemon/org.macports.git-daemon.plist /Library/LaunchDaemons/org.macports.git-daemon.plist
% sudo ln -s /opt/local/etc/LaunchDaemon/org.macports.git-poller.plist /Library/LaunchDaemons/org.macports.git-poller.plist
% sudo ln -s /opt/local/etc/LaunchDaemon/org.macports.git-ultrasphinx.plist /Library/LaunchDaemons/org.macports.git-ultrasphinx.plist

% sudo launchctl load -w /Library/LaunchDaemons/org.macports.activemq.plist
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.stompserver.plist
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.git-daemon.plist
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.git-poller.plist
% sudo launchctl load -w /Library/LaunchDaemons/org.macports.git-ultrasphinx.plist


これで、https://github.example.com/ にアクセスして管理者ユーザでログインしたり、ユーザ登録したり、プロジェクト、リポジトリ作ったり、push、pullしたりして問題なければOK。


途中、うまく動かなくて『あーもー』となってメモ取るの忘れた部分もあるかもしれませんが、その時はコメントか github のメモ修正してください。

iPad2を買った

白いiPad2を買いました。
iPadです。
初代ももちろん買おうかすごく悩みましたが、こいつはカメラあった方が面白いと思っていたので2まで我慢しました。
予想どおり全面、背面付いてビデオチャットなどが可能になりました。
素晴しい。


まだ2日ほどしか使ってないのですが、感想としてはやはり電車などで立ったまま持つには重い。
正直立ちっぱで片手に持って、というスタイルでは使えません。
まあ、これは想定していたし仕方ないかな。
逆に座った状態で使うのなら、特に問題なかったです。
今日も電車の中や飛行機で本を読んでましたが、10インチ画面なら膝に置いても十分読める文字サイズ出るので疲れず読めました。
これはなかなかいいですね。


ただ、やはり長時間読むにはテカテカしすぎできついですね。
少しでも抑えるためアンチグレアのフィルタ付けました。
多少まし。


速度に関しては初代でもそれなりにストレスレスだったと思うので、2でも全く問題なさそう。
今のところ待たされたり、ストレスを感じることはありませんね。
とてもパワフル。
テキスト書きとかならこれで十分というのもわかります。
Webでちょっと書かれていたDSのBluetoothキーボードでも買って、外で本読み、メモをやってみようかな。


まずは、主に本読み端末なのですが、ソフトはGoodReader使ってます。
余白部分を切りとる機能なんてあって相変らず素晴しい出来です。
昔から付いてるWebDAVサーバ接続機能で、家のライブラリにもサクっと接続できて素晴しい。


とりあえず3Gプリペ版を買ったけど、普段はb-mobileの無線ルータで使います。
まあ、これで十分です。


まだまだいろんなことに使えるはずなんで、いろいろ試してみたいと思います。
あ、例のあと風呂ブタ
あれの出来がすごいよいです。
1枚買っておくのが吉。

エリア ピコピコ 88 に行ってきた

うちから徒歩5分の場所にあるバーで、1年に4回だけ開催されるイベントエリア ピコピコ 88にようやく行ってきました。
これまでも何度か Ust とかで聴いてたんですが、なかなか会場に行くタイミングができず今回お初。
岡山から来た最長距離参加の方がいらっしゃいましたが、自分最短距離参加かも。


会社入りたてのころは、この手のイベントはよく行ってて、半日ぶっとおしでも大丈夫だったけどさすがに年なので、半分ぐらいから参加。
丁度、ZUNTATAのCOSIOさんのターンでした。

  • COSIO(@COSIOTONE)

昔ははまりまくっていたZUNTATAですが、古参メンバーが離れていったり、TAITOがゲームを昔ほどリリースしなくなってしまったこともあり、最近はあまり聴いていませんでした。
でも、このパフォーマンスを見て、世代は変われどカッコイイサウンドを生み出し続けてるんだな、と気づかされました。
今回は、CDがリリースされたこともありスペースインベーダー インフィニティジーンからいろいろ。
この手のイベントにはぴったりなんで、フロアもすごい盛り上がりました。
エクストリームの Invader GIRL! をきっちり入れてくれたのはうれしい。
パフォーマンスには、Liveを使っていたみたいですね。
自分も Live 持ってるけど、最近遊んでないなあ。

J99さんの曲も、昔からまりまくりなわけですが。
今回は実験的ということで、前半洋ゲーしばり。
しかも、この手のクラブイベントに難易度高い選曲しまくり。
UOとかディアブロとかリネとか、めっちゃ難易度高いって!
自分はあの辺の曲もすごい好きなんで楽しめましたけど。
フロアがまったりモードになって、J99さんも焦ったと思う。
後半戦は、東方とかリッジとかテンション高いの出しまくりでしっかりノれましたヨ。

  • WAN (@Nachtgreif)

iM@Sしばり。
でもファミソン8bitしばりでしっかりピコピコでした。
ファミソン8bit聴いたことなかったんだけど、これはなかなか面白いですなあ。
iM@S曲とナムコの昔の作品の曲がうまいことMixされていてすごい楽しい。
ワルキューレの伝説とかすごい好きなので、iM@S曲に混ざって聞こえてきたときは超もりあがった。
イベント後さっそく近くのTSUTAYAでレンタルしてきた。w

  • いたずら黒うずめ

この方の選曲は、実は一番ツボったかも。
シューティング中心のセットで古いのから新しめの作品まで。
ASOとかどんだけ昔のやつやねん。
自分でも、まだ不良の溜り場だったゲーセンで小学校かそこらの時代ですよ。
やあ、いいですねー。

  • 渡部恭久/Yack. (@Feldherrn)

私が知っていたころのYack.さんからずいぶん風貌が変わっていた。w
なんかキャラが教授っぽい。
仕込んできたということでしたが、すごいカッコイイ繋ぎでめっちゃ盛り上がり。
前半は、昔のタイトー曲中心。
自分にはおなじみですごいツボった。
最後のギャルゲ曲は、わからんかった。。。
後半はフロアにコスプレも居た旋光の輪舞中心。
センコロってこんな人気あったんだ。
センコロの曲は、いわゆるYack.節ってやつで、聴いててすごい気持ちいい。
そして、お約束のふるうつ牛乳〜の合唱が。
フロアのテンションが最高でした。
いやあ、Yack.さんのパフォーマンスってZUNTATA時代のライブ以来だったんで、すごい久々。
良かった。


この手のイベントは、ほんと数年ぶりだと思うけど、やっぱ楽しい。
そして、ゲーム音楽で楽しめる人達がまだこんなにいるってのはうれしいですね。


次回のゲストDJは、真打登場的な感じでめが師匠(@shinji_hosoe)ですよ。
これは、また行かないとなー。
そして、AYAさんの口から信じられない発表が。
6/25に、同会場であの sampling masters 全員集合するライヴイベントを開催。
ありそうでなかったサンマス全員参加イベント。
これははずせねー。


今回で、フロア的には最大人数っぽいので、1年に一回ぐらいもう少し大きな箱でやってもいいかも。
ゲーム音楽好き、レトロゲー好きはぜひ。

MacのバックアップをNASに作るTip

ふと思いたって今迄サーバとして使っているMacbookに刺していた外付けディスクを、Airmac ExtremeのUSBに刺してサーバ落としてもメインのマシンとかからアクセスできるようにしました。
ついでなんで、バックアップに使っているディスクもAirmacに繋いだのですが、どうもアクセス権とかのバックアップまでされない。
それは困るなあと思っていたのですが、最終的にディスクイメージを作ってそれをマウントして使う方法で解決しました。


やることは簡単で、スパースバンドルという形式のディスクイメージを作って、そいつをマウントして使うだけ。
スパースバンドルは、ディスクユーティリティの 新規 > 空のディスクイメージ で作成します。
こんな感じ。

ポイントは、パーティションをハードディスク、イメージフォーマットをスパースバンドル・ディスクイメージにした上で、サイズにバックアップに使うディスクのサイズ以下を指定すること。
ディスクのサイズは後で変更できるので、とりあえずバックアップ対象より少し多めにしておく、とかでも大丈夫。
また、ここで1Tと設定したからといって実際に1Tのディスクイメージファイルが作成されるわけではなく、最初は数十から数百メガのファイルで、ディスクイメージ内にデータが書きこまれるにつれサイズが大きくなっていきます。
要するに、最初は、1Tの容量のハードディスクですよ、という情報が入ったファイルが作成されるだけです。
サイズの変更は、作成したディスクイメージをマウントしていない状態で、ディスクユーティリティの イメージのサイズを変更 によってサイズ拡張、その後ディスクイメージをマウント(実行するとマウントされます)して、パーティションのタブを選んでパーティション拡張してあげればOK。
簡単。


こうして作成したディスクイメージをバックアップに使う外付けドライブに移動して、マウント、バックアップ先ディスクとして使えば普通のローカルドライブとして使えてアクセス権なども問題なくバックアップされます。
あまり知られていないけど、結構便利です。

TwitterクローンのStatusNetを使ってみた

バックアップの完了イベントとかBuildの完了イベントとかを通知する汎用的な手段が欲しいなあ、と思っていて、普通に考えるとIRCということで会社で採用しようとしたのですが、思いの他IRC文化がなく、なかなか浸透させれずにいました。
それで別の手段を考えたわけですが、まあWebならみんなさすがに使えるでしょ、ということでTwitterクローンに通知する作戦に変更。
Twitterクローンで結構良さげなStatusNetというのを構築してみました。
その辺のメモ。
うちはユーザデータベースをLDAPで持っていて、そちらで認証させたかったのですが、思いのほか情報が少なかったのでまとめてみました。


Ubuntu へのインストールケースで書きますが、他のディストリビューションでもほとんど苦労しないと思います。

まず、関連パッケージのインストール。

# sudo apt-get install mysql-server mysql-client
# sudo apt-get install apache2
# sudo apt-get install php5 libapache2-mod-php5 php5-cli \
 php5-common php5-curl php5-gd php5-ldap php5-tidy \
 php5-xmlrpc php5-suhosin php5-memcache php5-mysql \
 php5-dbg php-apc php-mail-mime php-mail-mimedecode
# sudo apt-get install prosody
# sudo apt-get install memcached

次に、StatusNetのアーカイヴをApacheで公開可能なディレクトリに解凍します。
ここでは、/var/www/statusnet に解凍したとします。
オーナは、Apacheユーザにしておきましょう。


解凍したアーカイヴの直下に、config.php.sample というのがあると思います。
これが設定ファイルのサンプルですが、ごちゃごちゃしてるので使いません。
同じ直下に config.php というファイルを作成し、以下のように設定します。

<?php
if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }

// 基本的な設定

$config['site']['name'] = 'サイトの名前(necotter)';

$config['site']['server'] = 'サイトを運営するサーバ(example.com)';
$config['site']['path'] = 'サイトのパス(necotter)'; 
$config['site']['fancy'] = true;

$config['db']['database'] = 'mysqli://statusnet:パスワード(necopass)@localhost/statusnet';
$config['db']['type'] = 'mysql';

$config['mail']['check_domain'] = false;
$config['mail']['notifyfrom'] = '通知メールのFrom(Necoadmin <admin@example.com>)';
$config['mail']['domain'] = 'メールアドレス生成に使うドメイン(example.com)';
$config['mail']['backend'] = 'sendmail';
$config['mail']['params'] = array(
                              'sendmail_path' => '/usr/sbin/sendmail',
                            );

// LDAPの設定
addPlugin('apacheAuthentication',
   array('provider_name'=>'LDAPの名前、なんでもいい(necodap)',
         'authoritative'=>'ture',
         'autoregistration'=>'false',
         'domain'=>'ドメイン(example.com)',
         'email_changeable'=>'false',
         'password_changeable'=>'false',
         'password_encoding'=>'ssha',
         'host'=>'LDAPサーバホスト(localhost)',
         'port'=>'LDAPサーバのポート(389)',
         'starttls'=>'false', // LDAPS使うならここはtrue
         'binddn'=>'管理者ユーザのDN(cn=admin,dc=example,dc=com)',
         'bindpw'=>'管理者ユーザのパスワード(necopass)',
         'basedn'=>'ユーザのベースDN(ou=People,dc=example,dc=com',
         'scope'=>'sub',
         'attributes'=>array(
           'username'=>'ユーザIDに使うLDAP属性(uid)',
           'nickname'=>'ニックネームに使うLDAP属性(uid)',
           'email'=>'メールアドレスに使うLDAP属性(mail)', 
           'fullname'=>'フルネームに使うLDAP属性(cn)')
    ));


続いて、Apache の設定です。
ちょっと変なのですが、Apache側でLDAPで認証させてそれをもってStatusNet側の認証も通すのですが、StatusNet側ではフルネームなどのアカウント情報を改めてLDAPから取得します。
StatusNet側の認証をLDAPで直接やるプラグインもあるのですが、どう設定してもうまく動いてくれなかったので、こんな方法をとってます。

  • /etc/apache2/site-avairable/necotter
Alias /necotter /var/www/necotter
<Directory "/var/www/necotter">
  # funcyURLの設定
  RewriteEngine On

  # NOTE: change this to your actual StatusNet base URL path,
  # minus the domain part:
  #
  #   http://example.com/        => /
  #   http://example.com/mublog/ => /mublog/
  #
  RewriteBase /necotter/

  ## Uncomment these if having trouble with API authentication
  ## when PHP is running in CGI or FastCGI mode.
  #
  #RewriteCond %{HTTP:Authorization} ^(.*)
  #RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule (.*) index.php?p=$1 [L,QSA]

  <FilesMatch "\.(ini)">
    Order allow,deny
  </FilesMatch>

  # LDAPの設定
  AuthType Basic
  AuthName "necotter"
  AuthBasicProvider ldap
  AuthLDAPURL ldap://localhost/dc=example,dc=com?uid
  Require valid-user
</Directory>

次にMySQLデータベース。
ユーザとデータベースだけ作っておきます。

# mysql -u root -p
mysql> create database statusnet;
mysql> grant all privileges on statusnet.* to statusnet@localhost identified by 'necopass';
mysql> quit;

この時点で一度 Apache を起動して StatusNet 上の設定の場合 http://example.com/necotter/ にアクセスして、問題なく画面が表示されることを確認しておきます。
実は、画面を確認することが目的ではなくて、データベースを初期化することが目的なのですが。


画面が問題なく表示させたら、再び mysql に接続して、データベースのスキーマを少し変更します。
これは、メールアドレスの重複を許すためのチートです。
StatusNetでは、メールアドレスが必須なのですが、Botを作り始めると同じメアドを使いたくなるので。
そういうことしないのであればこの操作はいりません。

# mysql -u statusnet -p
mysql> alter table user drop index email;
mysql> quit;

以上でおわりです。
これで、Twitterと同じような MicroBlog が立ちあがります。
APITwitterとほぼ同じなので、Botはほぼ同じ実装で機能させれます。


なかなかよくできていて、企業内の限られた人数で運用するにはぴったりと思います。

Macをメディアサーバ化するPlexのススメ

英語blogに以前書いたのですが、MacのFrontRowの強化版のようなアプリにPlexというものがあります。
iTunesのライブラリや、ディレクトリから音楽ファイルやらムービーファイルを検出してライブラリ化して見ることができます。
メニュー構成とかがとてもカッコよくて、それだけでも使いたくなります。
更に、プラグインを追加することによって、Youtubeなど、様々なネット動画サービスに接続できるようになり機能的にも FrontRow よりずっと優れています。
こんな感じでずらっと。

しばらく更新がなかったのですが、今年に入ってアップデートがあり少し問題があった品質面でもかなり安定してきました。
この間 MacbookPro を買って空いた Macbook を、メディアサーバとして再構築しDVI-HDMI変換ケーブルでTVに接続しています。
前からメディアサーバは立てていましたが、ずっと昔の Mac だったので、不安定でちょっと使いづらかったのですが、これでようやく安定しました。


オススメの使い方は、音楽はPlexが勝手に認識してくれるiTunesライブラリをそのまま使う、ムービーはディレクトリ指定してスキャナで取り込むパターンです。
自分は、ムービーもiTunesライブラリとして取り込んでいるので、iTunesライブラリとして認識してくれることを期待したのですが、どうもダメっぽいです。
ということで、ディレクトリ指定でiTunesライブラリのMoviesフォルダを取り込むのですが、単なるムービーとして取り込むとアニメのシリーズとか関係なくフラットにメニューに並ぶようになってしまいます。
丁度、FrontRowと同じ状態で、数が多いとちょっとサーチするのキツい。
それを回避しようと思うと、TV Showsとして取り込む手段があります。
TV Showsは、シリーズとかをメニューとして整理してくれて、階層的に作品を管理できるようになります。
ただ、Plex標準のTV Showsのスキャナだと、iTunesのムービーの設定のうち『ビデオ』に該当する番組情報とか埋めてないと認識してくれません。しかも、シーズン番号とかエピソード番号とか入れてないと無視されます。
自分は、そもそも番組情報を入れず、音楽ファイルと同様の情報しか入れていません。
iTunesのムービーの設定のうち『情報』に該当するやつですね。
これ。

これじゃそのまま使えねー、ということでスキャナを書きました。
ソースはこんな感じ。
これを、~/Library/Application Support/Plex Media Server/Scanners/Series/Simple Series Scanner.py に保存しておいてやると、Plex Media Server のツールである Plex Media Manager のライブラリ追加で Media scanner として Simple Series Scanner が使えるようになります。
こいつを選択して、Section type に、TV Shows、Primary metadata agent に Personal Media Shows あたりを選択しておいてやると、上で書いたiTunesのムービーの設定のうち『情報』を元に、アルバム情報とかからシリーズ構成を作成してくれるはずです。
また、エピソード番号にあたるトラック番号とかが入力されていなくても、適当な番号でごまかして取り込みます。


こんな感じで、アルバムで整理され、

ドリルダウンすると、ちゃんと同じアルバムのムービーが並びます。

ちょっと適当な整理だけど、自分には十分使いやすくなりました。


Plexは、マジオススメなんで、ぜひ使ってみて。

MacBook Pro early 2011 を買いました

そういや地震ですっかり飛んでいましたが、メインのMacBookを買い替えたのでした。
今まで使っていたものは、おおよそ3年ものでメモリも4Gまでということで、丁度いい時期かなと思い。


ここ数年はずっとメインマシンをノートにしていて、不自由したことはないのですがこの間まで使っていた13インチはちょっと外でコード書いたりするには画面がちっちゃいと感じていました。
自分はそんなに長距離持ち運ぶということがないので、重さより作業のしやすさを取ろうということで再び15インチに戻しました。


というわけで買ったのは、こんな構成。

MBP 15.4/CTO
2.2GHz Quad-core Intel Core i7
4GB 1333MHz DDR3 SDRAM - 2x2GB (これは購入後8Gにリプレースした)
256GB Solid State Drive
8x Double-Layer SuperDrive
MBP 15"HR Antiglare WS Display
Mini DisplayPort-DVI Adapter
No iWork preinstalled
No Final Cut Express preinstd
No Aperture Preinstalled
No Logic Express Preinstalled
No FileMaker Preinstalled
No MSO preinstalled
US Keyboard/Users Guide-JPA
Country Kit-JPN

OS自体の起動、アプリの起動、Android エミュの起動などがすごく速くなって、ストレスはほぼなし。
AdobeCS5とか以外は、ほぼDockで1ポップ以内で起動します。
これは、CPUよりはSSDの威力なんだろうなあ。
素晴しい。
ビデオメモリも1Gなので、動画編集なんかもサクサクいけるはず。


とりあえず3年はがんばってくれると信じている。