Git, Gitサーバー、gitosisとsshにしてみたよ

プライベートなgitサーバーを立てたいのだけど、git:// とかではなく、ssh:// でやりたいなーと思いまして。

なのでgit-daemonは使わず、gitosisを使ってみたいと思います。
つまり、公開鍵だけもらってユーザー毎にアクセス権限管理とかしたいわけです。

個人的用途なのにアクセス権限とか・・どういうことなの・・・

webのインターフェイスは今のところ考えていません。

“%”がリモートサーバーで“$”がローカルPCのプロンプトです。

サーバーにyumからインストールしてgitosisの初期設定をします。

% yum update git
% yum install gitosis
% useradd git
% passwd git
% cd /home/git
% sudo -H -u git gitosis-init < id_dsa.pub
Initialized empty Git repository in ./
Reinitialized existing Git repository in ./
% ls -la
gitosis/
.gitosis.conf
repositories/
.ssh/
&#91;/sourcecode&#93;

自分のPCでgitosis-adminをgit cloneします。
&#91;sourcecode language='bash'&#93;
$ git clone ssh://git@example.com/gitosis-admin.git
$ cd gitosis-admin
$ ls
gitosis.conf keydir
&#91;/sourcecode&#93;

リポジトリ管理者を追加します。基本的に自分だけ。複数ユーザを設定できます。必要なものは公開鍵で、これをpushすることになります。
&#91;sourcecode language='bash'&#93;
$ vi gitosis.conf
&#91;gitosis&#93;

&#91;group gitosis-admin&#93;
writable = gitosis-admin
members = runeleaf fuga

$ cp id_rsa_fuga.pub keydir/fuga.pub
$ git add .
$ git ci -m 'add admin'
$ git push
&#91;/sourcecode&#93;
うまいことhooks/post-updateで.sshに公開鍵を追加しているんですね。

個人で使うリポジトリを追加してみます。
&#91;sourcecode language='bash'&#93;
$ vi gitosis.conf
&#91;group fuga&#93;
writable = foo/bar/baz
members = fuga

$ git add .
$ git ci -m 'add private repo'
$ git push
&#91;/sourcecode&#93;

自分のPCで試しに作ってpushしてみます。
&#91;sourcecode language='bash'&#93;
$ cd ../
$ mkdir my-repo
$ cd my-repo
$ git init
$ cat > README
test
$ git add .
$ git ci -m 'init'
# gitosis.confにwritable(foo/bar/baz)を追加しておく
$ git remote add origin ssh://git@example.com/foo/bar/baz.git
$ git push origin master

ここまでやれば大体良かったのですが、gitサーバー自身にgit cloneしようしてもうまい事できなかったので(なんかもっと良い方法がありそうだけど)、自分自身でも同じようにgit cloneしたりpushしたりできるようにしてみます。

ようはローカルでしか使わない鍵をつくっただけ。

% ssh-keygen -P "" -t dsa -f id_dsa_local
% mv id_dsa_local .ssh/
% vi .ssh/config
Host example.com
  User git
  Hostname localhost
  IdentityFile ~/.ssh/id_dsa_local

作成した公開鍵、id_dsa_local.pubの内容をコピーするかローカルマシンにダウンロードして追加。

$ cd gitosis-admin
$ cp ~/id_dsa_local.pub keydir/local.pub
$ vi gitosis.conf
[group fuga]
writable = foo/bar/baz test/lib
members = fuga local
$ git add .
$ git ci -a -m 'add local'
$ git push origin master

これでgitサーバー自身にログインしてローカルマシンと同じようにcloneしたりpushしたり。

% git ssh://git@example.com/test/lib.git test-lib
% cd test-lib
% touch test.txt
% git add .
% git ci -a -m 'add test.txt'
% git push

こんなんでいいのかなぁ・・

自分しか使わないし、いいよね。

iPhone, 実機転送で詰まったところをメモ

今更感のある。

基本的に、iPhone Developer ProgramのPortalにあるHow Toの通りにやれば出来るのですが、最後のビルドでこけたのでー。

XcodeのオーガナイザーからProvisioningを追加するのですが、これDeviceのところのProvisioningの+ボタンから追加するだけではダメらしく、IPHONE DEVELOPMENTのProvisioning Profileにファイルをドラッグ&ドロップすると追加できるのです。

こうしておくとコード署名IDのところで証明書を選択できて、「ビルドして実行」した時に証明書エラーが出なくなり実機で動かす事が出来るのでした。

というかAndroidアプリも調べねばー

モバイル系のアプリは作るの楽しいんだよね!