最近、研究室用にgitリポジトリとgitブラウザが欲しいと思ってGitPrepを導入した。
正直総合力で見てはGithubには劣るけど、逆にあそこまで大掛かりじゃなくシンプルなものが欲しい人にとっては向いてると思う。 けどまぁ最近出来たてのプロダクトってこともあっていくつかはまったことがあるのでここに書いておく。
ちなみに、GitPrepはPerl製GitHubクローンで、この記事はPerlやlocal::lib1、Carton2、Plenv3などが大体わかってる前提で書いてる。でもわからなくても雰囲気でなんとかなる。
あ、ちなみに作業環境としてはCentOS6.3になる。perlはplenvで個別に入れたperl5.18。
install
基本的にはREADME通りにやれば良いんだけど、git clone
してきて、plackup
すれば良いと思ったらそうでも無いらしくて困った。
なんていうか、初心者も手軽に使えるようにしてる分、煩雑になってる部分もあると思う。
んじゃまぁとりあえず、と思ってcarton install
すると、確かにlocal/lib/perl5
にモジュールが入るんだけど、それが@INC
に入ってないし、carton exec
しても実行スクリプトがなんかラップされてるからうまく効かない。
仕方ないから素直に./setup.sh
を叩くわけだけど、最初はうまくいったけど、後述するアップデート後になんかうまく動かなくなった。
から、結局
$ rm -rf GITPREPDIR/extlib/lib/perl5
$ mv GITPREPDIR/local/lib/perl5 GITPREPDIR/extlib/lib/
して、cartonで入れたモジュールを強引に使うようにした。
ひとまずこれで
$ gitprep
すれば動くようになった。
daemontools
supervisor
も使ってみたかったけど、ここはdaemontools
にした。
daemontools自体のインストールはココとかが参考になる。 で、ともかくデーモン化して運用したいわけだけど、daemontools久しぶりに設定したせいですごいハマってた。 具体的には、daemontoolsでデーモン化するにはフォアグラウンドのプロセスじゃなきゃだめなこと忘れてた。
幸いにも、実行スクリプトであるgitprep
(これは実際にはhypnotoad
のラップ)にもフォアグラウンドオプションがありそれをつけることで解決。
ついでに書いたrunスクリプトを貼っておく。
update
revision:a80b1a7209
あたりからREADMEがマークダウンに対応したのでgitprepをアップデートした。ドキュメントを見る限り、そのまま置き換えたりアップデートしても大丈夫そうなのでそうした。
$ git pull
するとやはり特に不自由なくgitprepが最新になった。
しかし、これでさらに捗るぞと思って改めてブラウザからリポジトリにアクセスしたらエラーが出てしまった。こういうときはログを見るに限る。
$ less GITPREPDIR/log/production.log
もちろんtail -f
でもいいけど、ともかくログをみるとText::Markdown
モジュールが無くて死んでるっぽいので再度./setup.sh
を動かすことに。
しかしなんだか謎のエラーを吐いてモジュールがインストールできない。もちろんインストール先は必ずしもextlib
以下じゃなくてもいいんだけど、ここまで来たらうまいことまとめたい。
そこで#installの項にも書いたけどcarton install
してそれをmv
することで解決した。
Basic Auth
GitPrepを導入した理由に、プライベートで決められた人だけに公開できるgitリポジトリが欲しいっていうのがあったので認証をかけたかったんだけど、このGitPrep、サインインなどのシステムはあるもののリポジトリそのものを見えなくしたり、cloneを防いだりする機構は現在無いみたい。
そこでnginx
4側でベーシック認証をかけることにした。
基本的には
auth_basic "hoge";
auth_basic_user_file "/path/to/file";
を書くだけでnginxではベーシック認証がかかるみたい。だもんで
$ mkdir -p /usr/local/nginx/htpasswd
$ htpasswd -nb user pass > /usr/local/nginx/htpasswd/gitprep
とでもして、上gistの中のでのファイルパスに指定するだけ。
nginxのconfの書き方自体は適当にググって欲しい。とりあえず自分はprefixを/usr/local/nginx
にしてたり、general.conf
に共通設定をまとめたりしてる。
あと当然gitprepはリバースプロキシで動いてるからその設定が最下部のブロックになる。
以上
つらつらとGitPrep導入にあたって何をしたか書いてみたけど思ったより長くなってしまった。 あまり調べずに結構適当に書いてしまったので、もしかしたらもっとうまい方法やそもそもやり方がおかしい部分もあるかもしれない。
実際他にもよくわかってないところや不具合なんかもあるんだけど、それはまた別にまとめるとする。