Subversion サーバ を CentOS 5.5 で。

Subversion サーバは昔も家にたてていたのですが、ローカルサーバを Atom 機にしてからまだインストールしていなかったので CentOS 5.5 上に改めて構築してみました。

すぐたつと思ったら、いろいろ罠があってはまったのでメモ代わりの投稿です。 結論から言うと思った通りにたてることができませんでした。。orz

とりあえず、CentOS 5.5 に subvesion と Apache + mod_dav_svn をインストール。 mod_dav_svn は新しいものを使いたかったので、rpmforge から 1.6 系をもってきています。

[root@localhost conf.d]# rpm -q httpd
httpd-2.2.3-43.el5.centos
[root@localhost conf.d]# rpm -q mod_dav_svn
mod_dav_svn-1.6.12-0.1.el5.rf

でもって、/etc/http/conf.d/subvesion.conf を以下のようにしました。 全権限を BASIC 認証にしたのと、DocumentRoot が Apache とかぶると問題がでるようなので、新しいポートで mod_dav をたてています。

<VirtualHost *:8082>
   <Location />
      DAV svn
      SVNParentPath /home/apache/svn
      SVNListParentPath on
      DavDepthInfinity on
      Order deny,allow
      Deny from all
      Allow from 127.0.0.1
      Allow from 192.168.0.0/24
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/apache/passwd/.htpasswd 
      Require valid-user
   </Location>
</VirtualHost>

DocumentRoot かぶりの問題は、mod_dav_svn の FAQ に記載がありました。

Webブラウザからリポジトリを見られるようにしているんだけど、’svn checkout’ が、「301 Moved Permanently」というエラーになる。何が悪いの?

解決策としては、リポジトリの<Location>を、通常の Web 共有として既に公開されている領域とオーバーラップしないようにするか、もしくはその中へ収めるべきだ。

ここがまず一発目にはまったポイントでした。。

さてディレクティブに SVNParentPath というのがありますが、これが親ディレクトリから subversion を使う設定です。 要はプロジェクトの作成の権限をユーザがもてることになります。

てなわけで、Eclipse の Subclipse (SVNKit) からプロジェクトの共有を発行すると…。

svn: can not read HTTP status line
 PROPFIND request failed on '/'

エラー。。 なじぇ。。

http status line が読めないということで、まず SVNKit のソースを疑ったのが間違いの始まり。。 org.tmatesoft.svn.core.internal.io.dav.http の自前パーサでやっているようだったので、バグっているのかと。。

で、いろいろいじっていると、なんと本気で PROPFIND メソッドで status line が返ってきていないことが発覚。。

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
PROPFIND / HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
Connection closed by foreign host.

いきなりぶったぎられています。。 おかしいなぁということで、SVNParentPath の下に svnadmin create test とかして svn リポジトリをつくってそこを対象に同じ事をしてみると…

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
PROPFIND /test HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
HTTP/1.1 207 Multi-Status
Date: Sat, 21 Aug 2010 01:51:23 GMT
Server: Apache/2.2.3 (CentOS)
Content-Length: 2306
Connection: close
Content-Type: text/xml; charset="utf-8"
 
<?xml version="1.0" encoding="utf-8"?>
(以下略)

ちゃんと返ってくる~。 なじぇ~。 権限?ということで OPTIONS を発行してみると、、

hiromasa@hiromasa-cube:~$ telnet 192.168.0.100 8082
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
OPTIONS / HTTP/1.1
Host: aaa
Authorization: Basic fjwi094j403fj49fj949
 
HTTP/1.1 200 OK
Date: Sat, 21 Aug 2010 01:43:25 GMT
Server: Apache/2.2.3 (CentOS)
DAV: 1,2
DAV: version-control,checkout,working-resource
DAV: merge,baseline,activity,version-controlled-collection
DAV: http://subversion.tigris.org/xmlns/dav/svn/depth
DAV: http://subversion.tigris.org/xmlns/dav/svn/log-revprops
DAV: http://subversion.tigris.org/xmlns/dav/svn/partial-replay
DAV: http://subversion.tigris.org/xmlns/dav/svn/mergeinfo
DAV: <http://apache.org/dav/propset/fs/1>
MS-Author-Via: DAV
Allow: OPTIONS,GET,HEAD,POST,DELETE,TRACE,PROPFIND,PROPPATCH,COPY,MOVE,LOCK,UNLOCK
Content-Length: 0
Connection: close
Content-Type: httpd/unix-directory
 
Connection closed by foreign host.

ちゃんと Allow されているっぽい。。 なぞぞーん。。

で、ふと Apache の error_log を PROPFIND したタイミングでみてみると、、

[Sat Aug 21 11:53:30 2010] [notice] child pid 3497 exit signal Segmentation fault (11)

 

[tegaki]きゅるきゅるるるるる…、ぼぼん![/tegaki]

セグってるし。。 どうりですぐ切断されるはずです。。

てなわけで Apache が悪いのか mod_dav_svn が悪いのか、組み合わせが悪いのかちょっと分かりませんが、これ以上はぼくの手におえなそうです。 まぁアプリ的な設定が悪いわけではなさそうなのが収穫。

とりあえず SVNParent に直アクセスするのはあきらめて、プロジェクトできるたびに svnadmin create する運用にしたいとおもいます。 Eclipse にリポジトリいっぱい登録しなきゃいけないのがいたいですが、しょうがない。。

無事 Eclipse や TortoiseSVN からもみることができるようになりました。

snv01

ほいでもって、Redmine からも接続。 🙂

svn02

Eclipse の mylyn から Redmine につなげば、チケットとくくりつくようなことも可能なはずです。 もうちょっとやってみるデス。

Fastladder を mod_rails にインストール

昨日 Redmine を入れるために Ruby / Ruby on Rails の環境を、Cent OS 5.5 のローカルサーバにつくりました。

というわけで、今日はさらにそこに Fastladder Open Source を入れてみます。 なかなか手ごわかったですが、なんとか動いたようです。 🙂

Fastladder はサーバインストール型の RSS リーダです。

Fastladder Open Source / Free Download

オープンソース版「Fastladder」は、サーバインストール型のRSSリーダーです。法人で管理しているサーバや、個人でお持ちのPCなどにインストールして使用できますので、イントラのRSSも読むことができます。

以前から Gregarius をインストールして使っていたのですが、ちょっと遅い、、ということで Fastladder。 こちらも前からやってみたかったのですが、 Rails の環境が用意できなかったので断念していました。

[tegaki]とりあえず動いた! の図。 :)[/tegaki]

fastladder01

まぁ ASP 版とほとんどいっしょなので ASP つかえって話ですが、やっぱりデータがこちらのおなかにあるのは、いろいろ使い勝手がいいのでローカルサーバで動かすことにしています。

さて、CentOS 5.5 へのインストールですが、Ruby とかライブラリとかの関係でなかなか動かすのが大変でした。。 覚えている限りでひっかかったところを、書いていきます。

とりあえず、作業した環境

[root@localhost ~]# cat /etc/httpd/conf.d/passenger.conf 
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.2.15
PassengerRuby /usr/bin/ruby
 
[root@localhost ~]# ruby -v
ruby 1.8.5 (2006-08-25) [i386-linux]
[root@localhost ~]# gem -v
1.3.1

まず必要となる Freeimage ライブラリは、コンパイルしていれました。 make; make install して ldconfig すれば入ると思います。

rfeedfinder については、hpricot が依存するのですが、0.8 系だとエラーになるようなので、0.7 系を入れています。

gem install hpricot --version 0.7

これで、Fastladder の INSTALL.txt はクリアできると思います。

で次に、Rails アプリケーションの設定。 せっかく、昨日 Postgres 入れたのでこちらを使うようにしました。

[hiromasa@localhost config]$ cat /opt/fastladder/config/database.yml
production:
  adapter: postgresql
  database: fastladderdb
  username: fastladder
  password: パスワード
  host: localhost
  encoding: utf8

でもって、ポスグレに DB とユーザ追加。

   1: sudo -u postgres createuser -U postgres -dEeP
   2: sudo -u postgres createdb -e -U postgres -O fastladder fastladderdb "For Fastladder"

httpd.conf に Rails アプリを追加。

<VirtualHost *:80>
   ServerName localhost.localdomain
   DocumentRoot /var/www/html
   RailsBaseURI /redmine
   <Directory /var/www/html>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>
 
<VirtualHost *:8081>
   ServerName localhost.localdomain
   DocumentRoot /opt/fastladder/public 
   <Directory /opt/fastladder/public>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>

上が Redmine 用で下の 8081 が Fastladder です。 *:80 のほうに RailsBaseURI に /fastladder を追加でいけるはずだったのですが、Fastladder にアクセスするとコンテキストパス(?) が無視されて / にすっとばされてしまうので、しょうがなくポートを分けました。

config.action_controller.relative_url_root の設定を config/environment.rb にしてみたりもしたのですが、だめそう。。 Fastladder がパスを固定でもっちゃってるのかもしれません。(フレームワーク使っているのにあるかなぁという疑問はありつつ)

で、これでアクセスで動くと思いきやまだまだ苦難が。(笑)

log/production.log を tail して動かしていくといいかもです。

まず、Rails のバージョンが新しいせいなのか、フレームワークのファイル名の命名規則が変わっていてコントローラでおちちゃいます。

app/controllers/application.rb をapp/controllers/application_controller.rb にリネームする方向で。

次に、rfeedfinder.rb が引数がおかしいだかで落ちますので、/usr/lib/ruby/gems/1.8/gems/rfeedfinder-0.9.13/lib/rfeedfinder.rb の、

#data = Rfeedfinder.open_doc(fulluri, options)
data = Rfeedfinder.open_doc(fulluri)

2引数になっている、open_doc を 1引数にパッチ。

それから、lib/string_utils.rb で strip_tags() が no such method とかいわれて落ちるので、

class String
  # for strip_tags
  #include ActionView::Helpers::TextHelper
  include ActionView::Helpers::SanitizeHelper
  extend ActionView::Helpers::SanitizeHelper::ClassMethods

extend の行を追加します。

たしか以上で動いたはずです。 いろいろやっていたらログとばしてしまいました。。

あ、あと RSS の URL のバリデータがきつかったのでとばしました。 なんか Google のバリデータだったような気がします。 どこだったか失念(笑) 必要ならログにでますので、コメントアウトすればいいと思います。

RoR はおろか Ruby もよくわかっていないでやっていますので、変なことしていたらすいません。

あとは、クローラを init.d で自動起動するようにすればいいと思います。 動いてしまえば順調。 いい感じですぞ。

最近、WordPress 関係でお会いする方が増えて、RSS の整理が追い付いてなかったのですが、これでうまくできそうです。 懸案ひとつ解決で、すっきりです。 🙂

プロジェクト管理アプリケーション Redmine

気になっていました、プロジェクト管理アプリケーション Redmine を入れてみました。

実は shiroica さんが以前から使われているようだったので、それを見てすぐに試してみたかったのですが Ruby & RoR が使える環境がぱっと用意できなくて断念していました。 先日、うちのローカルサーバを Atom 機に変えた際に、CentOS 5.5 になりましたので晴れて こちらで試してみました。 🙂

Redmine – Wikipedia

RedmineRuby on Railsで開発されている、Webベースのプロジェクト管理ソフトウェアである。 また、RedmineはオープンソースGPLで配布されており、その設計はTracに影響を受けている。

Redmineはプログラミング言語Ruby本体の開発を始めとして、さまざまな企業やプロジェクトでの導入が報告されている。[1]

WordPress をやられているかたは、WordPress Trac を想像してもらえれば、どんなもんか分かりやすいですね。 あちらは、Trac というのを使っています。

てなわけで、とりあえず CentOS 5.5 への Redmine インストールから。 ほぼこちらのサイトを参考にしてやらせていただきました。 ありがとうございます!。

サクっとly.com – サクッとCentOS 5.4にRedmine + Passenger環境をインストール

約1年前にサクッとCentOS 5.3にRedmine + Passenger環境をインストールを書きましたが、ちょうどインストールし直す機会があったので若干の変更をしながら書き直してみました。

解説では Ruby と RubyGems をソースから入れていますが、ぼくは rpm を使って入れてみました。 使った Redmine は 1.0.0 の RC です。

rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/i386/epel-release-5-3.noarch.rpm
yum install -y ruby ruby-irb ruby-libs ruby-rdoc ruby-ri
yum install -y rubygems --enablerepo=epel

あと、DB を作成する部分で rack のバージョンが異なるというエラー (1.1.0 と 1.0.1 で 1.0.1 を要求された)がでたような気がするので、1.0.1 を入れています。

sudo gem install rack --version '~> 1.0.1'

ぐらいです。 gem で時間が結構かかりましたが、あとは詳しい解説のおかげで滞りなくインストールすることができました。 🙂

さて、Redmine は Web ベースのアプリケーションですが、Redmine-Mylyn Connector というのをいれると Eclipse から GUI 接続できるようになります。 こちらにも挑戦。

SourceForge.net: Installation – redmin-mylyncon

Use the update-site (currently Eclipse 3.4 and higher only) http://redmin-mylyncon.sourceforge.net/update-site/nightly/

クライアント(Eclipse)側と、サーバ(Redmine)側の両方にプラグインを入れます。 でもって、Redmine をリスタートすれば準備完了です。

まずは Web インターフェース。 すっきりしていてなかなかいい感じです。

redmine01

チケットをカレンダーにだしてくれるのが、良いですね。

でもって、Eclipse の Mylyn 経由からの接続の図。

redmine02 

redmine04

こんな感じで Eclipse GUI から表示できます。 ただっ、

[tegaki]なぜか更新できない~[/tegaki]

ということで、どーもサーバに対してチケットの新規登録・更新がききません。。 新規登録では unknow error と画面にでています。 細かいログがどこかにでているといいのですが。 ちょっと継続調査です。

ただ、読み込みについてはうまく動きますのでちゃんと Eclipse に変更通知が来ます。 🙂

redmine03

かわゆすですね。

Eclipse の GUI からも上のボタンをぽちっとおすと、インターナルブラウザで Web の画面見れますので更新はこちらからできます。 まぁコンテキスト付与とかできないので、SVN 連携とかちょっと手作業になってしまいますが、まぁまぁとりあえずタスクの通知と閲覧ができるだけでも十分です。

お仕事でもこの手のたまに使いますが、メーカ製なので製品名はあげないでおきますが、あれとかあれとかはなかなか使いづらい。。 エクセルのほうが良かったくらいにして(笑)

というわけで、次回自分たちメインでやるプロジェクトで使ってみようか、というのもあって Redmine をお試し。 ファイル管理とか Wiki も使え、使いようによってライトにもヘビーにも転べそうですので、良いと感じました。

ぼくらは、開発中は1日中 Eclipse 起動しっぱなしなので、通知が行ったり画面一覧したりできるのも便利です。 この手のは手軽に活用し始めてなんぼだと思うのです。

とりあえず、検証に家で少し動かしてみたいと思います。 🙂