gitolite authorized_keys から呼ばれる gitolite-shell のパス変更

Solaris で稼働させている gitolite のバックアップを Linux にとり、緊急時はバックアップ側の Linux でも gitolite を使える環境を作った。ホームディレクトリのパスは、Solaris は /export/home/gitolite, Linux は /home/gitolite。authorized_keys から呼び出される gitolite-shell は $HOME/gitolite/src/gitolite-shell にある。つまり、Solaris の authorized_keys を Linux に持ってくるとつじつまが合わなくなる。この差異を埋めるため、以下の変更を施した。

  • Solaris 側ディレクトリ構成概要
/export/home/gitolite (gitoliteアカウントホームディレクトリ)
  + .ssh/
  + bin/
  + gitolite/ (git clone http://github.com/sitaramc/gitolite.git したもの)
  + repositories/

等を Linux 側 (/home/gitolite) に rsync でバックアップしている。

  • .ssh/authorized_keys のコマンドパス修正

Solaris 側 .ssh/authorized_keys を vi で開いて s:#/export/home/gitolite/##g を実行。つまり、gitolite-shell は $HOME/gitolite/src/gitolite-shell にあるので、これをホームディレクトリかの相対パスに書き換える。

  • gitolite/src/triggers/post-compile/ssh-authkeys 修正

新規に鍵登録されたときの、authorized_keys に記述されるコマンドを上記のようにするため、gitolite/src/triggers/post-compile/ssh-authkeys を以下のとおりに変更

--- backup/gitolite/src/triggers/post-compile/ssh-authkeys      2012年  5月 14日 (月)
+++ gitolite/src/triggers/post-compile/ssh-authkeys     2012年  9月 27日 (木)
@@ -22,6 +22,7 @@
 my $akfile       = "$ENV{HOME}/.ssh/authorized_keys";
 my $glshell      = $rc{GL_BINDIR} . "/gitolite-shell";
 my $auth_options = auth_options();
+my $glshell_from_home  = substr($glshell, length($ENV{HOME}) + 1);
 
 sanity();
 
@@ -130,6 +131,6 @@
         return '';
     }
     chomp(@line);
-    return "command=\"$glshell $user\",$auth_options $line[0]";
+    return "command=\"$glshell_from_home $user\",$auth_options $line[0]";
 }

端末から clone/pull できていればOK. Solaris 側と Linux 側でパスを合わせておけば何も問題無かったとおもう。