About Digital

i wanna be a bot...

GitPrep導入してみた

Posted in  Git, Perl, Tech | Comments

最近、研究室用にgitリポジトリとgitブラウザが欲しいと思ってGitPrepを導入した。

正直総合力で見てはGithubには劣るけど、逆にあそこまで大掛かりじゃなくシンプルなものが欲しい人にとっては向いてると思う。 けどまぁ最近出来たてのプロダクトってこともあっていくつかはまったことがあるのでここに書いておく。

ちなみに、GitPrepはPerl製GitHubクローンで、この記事はPerllocal::lib1Carton2Plenv3などが大体わかってる前提で書いてる。でもわからなくても雰囲気でなんとかなる。

あ、ちなみに作業環境としては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を防いだりする機構は現在無いみたい。

そこでnginx4側でベーシック認証をかけることにした。

基本的には

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導入にあたって何をしたか書いてみたけど思ったより長くなってしまった。 あまり調べずに結構適当に書いてしまったので、もしかしたらもっとうまい方法やそもそもやり方がおかしい部分もあるかもしれない。

実際他にもよくわかってないところや不具合なんかもあるんだけど、それはまた別にまとめるとする。


  1. perlでモジュールを任意の場所にインストール・使用するモジュール。参考URL

  2. perlでwebアプリごとにモジュールをインストール・管理するモジュール。参考URL

  3. perl自体を簡単にインストール・管理するツール。参考URL

  4. webサーバ。なんかモダンだってことで最近はApacheより使うかも。参考URL

Comments