CORESERVERにGitPrepをインストールするも失敗

経緯

現在契約しているCORESERVERに GitPrep (GitHubクローン)をインストールして使用しようとしましたが、結局うまくいかなかったという報告です。

インストール操作

Gitのインストール

CORESERVERにはgitがインストールされていないため、まずそこから始めました。

git-2.6.2(現時点での最新版)のソースコードをダウンロードし、以下のようにインストールしました。

tar xzf git-2.6.2.tar.gz
cd git-2.6.2
make configure
./configure --prefix=$HOME/local
make
make install

その後、.bashrcに

export PATH=$HOME/local/bin:$PATH

の行を追加してパスを通しました。

GitPrepのインストールおよび設定

以下の順にインストールおよび設定を行いました。

  1. ソースコード(当時の最新版であるバージョン1.10)をダウンロードし、ホームページの内容に従ってインストール
  2. gitprep.my.confを作成し、インストールされたgitの場所などを適切に指定
  3. http://arat.xyz/gitprep/gitprep.cgi にアクセスし、adminユーザーおよび一般ユーザーを作成

ここまでは正しく動作しました。

一般ユーザーでログインした後に、「Initialize this repository with a README」にチェックを入れて新規レポジトリを作成しようとすると、「Internal error」が表示されてしまいレポジトリの作成に失敗してしまいました。

原因の究明

経過をGitPrepの作者である木本さんに連絡するなどして原因を明らかにしようとしました。

現時点で分ったことは以下の通りです。

  1. 新規レポジトリ作成時にgit pushを行うが、 CGIプログラムとして動かした場合にエラーが出る。
    • サーバにSSH接続してコマンドラインから同じことを行ってもエラーは出ずに正しく動作する。
    • CGIプログラムではなく、localhost:10020でアクセスして使用する方法では何の問題もなく使用できる。
  2. かなりの試行錯誤の結果、簡単なシェルスクリプト(CGI)を書いて、 webから実行してエラーメッセージを表示させたところ、 git push時に以下のエラーが出ました(ちなみにCGIプログラムをコマンドラインから直接実行するとエラーは出ませんでした)。
error: cannot create thread: Cannot allocate memory
fatal: send-pack: unable to fork off sideband demultiplexer
error: cannot create thread: Cannot allocate memory
fatal: bad object 13f4ebbd6ef5a638511e543e16b0ebc544695403

つまり、 CGIプログラムでgit pushを実行させた際に新たなスレッドが作成されないのが原因のようです。 Apacheの設定が関係しているのかもしれません。

これ以上は自分での解決は無理と判断したので、これまでの内容をCORESERVERのサポートに伝えました。ただし、Apacheの設定を変更するなどの処置が必要になるかもしれないため解決は難しいかもしれません。

現在はさくらレンタルサーバのスタンダード(無料お試し)上で動かしているため、問題なく動作しています。 CORESERVERのサポートからの回答次第ではさくらレンタルサーバに完全移行することも考えています。

Vine Linux 6.3でgitを私的rpmパッケージ化

経緯

Emacs-24.5でMELPAからmagitをインストールして使用しています。

しかし、いつの頃からか.gitフォルダが存在していても認識されなくなりした。

調べてみるとログには以下のように書かれていました。

Also note that starting with the ‘2.1.0’ release, Magit requires at least Emacs ‘24.4’ and Git ‘1.9.4’. You should make sure you have at least these releases installed before updating Magit. And if you connect to remote hosts using Tramp, then you should also make sure to install a recent enough Git version on these hosts.

そこで Vine Linux 6.3のgitのバージョンを調べてみると

$ rpm -qa | grep git
git-1.7.4.2-1vl6.x86_64

とやはり対応していませんでした。

gitのビルド

ソースコードからのビルド

そこでソースコードからビルドしました。今回インストールしたgitのバージョンは2.5.3です。

ソースコードは GitHub からダウンロードしました。

tar xzf git-2.5.3.tar.gz
cd git-2.5.3
make prefix=/usr/local all
sudo make prefix=/usr/local install

で/usr/local以下にインストールされます。

この状態でmagitをアップグレードすると動作するようになりました。

私的パッケージ化

せっかくなのでrpmパッケージ化しました。本来のパッケージと名前を区別するために my_git としています。

からダウンロードできます。

/usr/local以下にインストールされるため、本来のパッケージに含まれるファイルを上書きすることはありません。