opamp_sando's blog

クソザコが割りと適当なことを書くためにある備忘録です。あとたまに普通の日記も書きます

ArchLinuxでmercurial-serverを動かす

ということでArchLinuxでmercurial-serverを動かすよ。 で、まず先に参考資料を示しておくよ。 その後早速とりかかるよ。

参考サイト

Mercurial, mercurialでgitosisみたいなことができるmercurial-serverを入れた

http://dev.lshift.net/paul/mercurial-server/docbook.html

基本的な流れははじめの資料を参考にし、詳細なことについては正式のドキュメントを参考にしている。

AURを利用したmercurial-serverのインストール

AURを使ってmercurial-serverをインストールするよ。yaourtを使うとこんな感じ

$ sudo yaourt -S mercurial-server

で、これをするとhgユーザーが作られたりいろんなところにmercurial-serverのディレクトリが生成される。

管理者のkeyを登録する

ssh-keygenなりでsshキーを作る。

$ ssh-keygen

と。 で、生成されたpublic keyを以下のようにしてコピーする。

$ sudo cp id_rsa.pub /etc/mercurial-server/keys/root/admin.pub

これでおk。念のためパーミッションを変更しておく。

$ sudo chmod 644 /etc/mercurial-server/keys/root/admin.pub

ドキュメントによるとmercurial-serverには2種類のユーザーがいて、1つはrootで1つは一般ユーザー。で、rootはkeys/root以下に鍵を保存し一般ユーザーはkey/users以下に保存するようになっっている。 あと初期ではrootはリポジトリの作成、読み込み、書き込みの権限があり一般ユーザーは作成以外のすべての権限がある。

hginitを走らせ...ない?

上の参考記事によるとhgユーザーでhginitを走らせるとあるが、走らせてみると謎のエラーがでてくる。 で、それを無視してあとの作業に進んだ結果普通にできた。ので、多分走らせなくても大丈夫だと思われる。(そもそも走らせたあとに出てくるらしいrepos/hgadminはすでに生成されている)

心配なら念のため走らせても問題はない。

※ /usr/share/mercurial-server以下にhginitはあるよ。

refresh-authを走らせる

これはちゃんと走らせる必要がある。hgユーザーで走らせるので次のような感じになる。

$ sudo -u hg /usr/share/mercurial-server/refresh-auth

これでおk。

access.confの設定について

とりあえず、書き方は(あってるかわからないけど)次の様な感じと思う。 例えば/etc/mercurial-serverに初めから書き込まれてるaccess.confは

init user=root/**
deny repo=hgadmin
write user=users/**

という内容だが、initはドキュメントによると(リポジトリの)追加、読み込み、書き込みに関するパーミッション。これに登録されるとこの3つの権限を有することができる。 で、上の1行

init user=root/**

だけど、これはkeys/root以下に登録されてるすべてのキーに対してinitの権限を認める という意味だと思う。(keys/root以下ということはadmin.pubなんかが対象になるわけかな) で、ここでは"user="というふうにして設定しているのでユーザー単位で権限を付与している。 上記のように"repo="を使うことでリポジトリを指定したりすることも可能だと思う。

指定方法は同様ということで、他の権限については"read"だと読み込みを許可。 で、間違えそうなのが"write"でこれは書き込みと読み込みを許可。 denyはいまいちピンと来ないが、ドキュメントの直訳では"すべての要求を拒否する"という感じらしい。

とりあえずこんな感じかな。

実際にためしてみるよ

とりあえず、OSX Lionからリポジトリを作ってコミットしてみようかな。 まずは、上で生成したsshキーをローカル(Mac側)に持ってきて$HOME/.ssh/configを設定したりして実際にhg使用時に参照されるように設定する。(やり方はここでは書かない) 終わったら実際にhogeリポジトリ作ってREADME追加してcommit -> pushしてみる。

$ mkdir hoge
$ cd hoge
$ hg init

これでOSX上にリポジトリが作られる。

$ hg clone . ssh://hg@server.com/hoge

を実行する。注意点としてはhg@を忘れないことと、末尾にリポジトリ名(ここではhoge)をつけること。 で、これでおk サーバーにリポジトリが作られる。

続いてREADMEを作って、commit -> pushしてみる。

$ echo "This is test repository" > README

してREADME生成

$ hg commit -m "First commit" 
$ hg push ssh://hg@server.com/hoge

して、終わり。 無事pushできれば成功。

試しにcloneしてちゃんとpushできてるか確認してみるとか

$ hg clone ssh://hoge@server.com/hoge

で、cloneしてみてみるとちゃんとREADMEがあるはず。

リポジトリ消去(できればしないほうがいい?)

ドキュメントにも乗ってないので正直かなり無理やりなやり方だが、リポジトリはhgユーザーのホームディレクトリ以下のrepos以下に保存される。 それを直接手動で消す(おそらく推奨されない)

以下がそのPATH

/var/lib/mercurial-server/repos

ここ以下にhogeなら

/var/lib/mercurial-server/repos/hoge

という具合に作られる。これをrmなりなんなりで消す。

ユーザーの追加とその権限について

では、実際に運用する場合を考えると数名くらいはユーザーを作って運用したりする。 するとユーザーごとの権限なんかももうちょっとまじめに考えないといけなくなる。

そこで、登場するのがhgadminリポジトリ

hgadminは多分rootでないとcloneできないのでrootでcloneする。

$ hg clone ssh://hg@server.com/hgadmin

まずはユーザーを追加する。今回はssh-keygenでhguser_rsaという名前(ファイル名)の鍵を作ったとする。まずはroot同様に公開キーを登録する必要があるため公開キーをcloneしたhgadmin以下のkeys/users以下にいれる。(おそらく初期ではディレクトリが無いのでmkdirする)

$ cp ~/.ssh/hguser_rsa.pub hgadmin/keys/users

という感じ。 また、/etc/mercurial-server/keysにも追加したが、同様にhgadmin/keys/root以下にrootの鍵を追加しておく。

$ cp admin.pub hgadmin/keys/root/admin.pub

という感じ。(この作業は始めに必ずしておく)

で、続いてaccess.confを設定する。 また、ここでのaccess.confはrootユーザーも含めて記述する。例えば次のような感じ

init user=root/** 
deny repo=hgadmin 
write user=users/**

で、commitしてpushする。

$ hg commit -m "commit" &&hg push

で成功したらおk。

で、ここで注意すべきことは、このままではhgadmin/access.confは適応されない。 そこで、設定に誤りがないことを確認した上で/etc/mercurial-serverを削除する。 設定に誤りがあった場合、サーバーにログインしてhgユーザーでhgadminを直接いじるという作業が必要になるので、上記の設定で問題ないことを確認した上で

$ sudo rm -fr /etc/mercurial-server

として削除する。 これでmercurial-serverはhgadmin/access.confを読み込むようになりhgadmin経由でユーザーの追加や権限の変更が可能になる。

※ /etc/mercurial-serverを削除する手法はちゃんとドキュメントにある手法なのでこれが正式なやりかた。不安なら削除ではなく移動などしてバックアップを取っておくといいかも。

終わりに

とりあえず、以上でひと通りの作業が終了。 これで多分リモートでhgリポジトリを作ることができる。sshも使えるので便利。 macならsshキーは一回入力してキーストアに保存すればもう2度目以降は入力しなくていいから、単にhg pushでpushできてしまうのはいいところ。

Linuxとかだとsshキーをその都度聞かれる。(macみたくする方法を知っている方がいれば教えてほしいです)

Windowsは....知らん。

ということでこんな感じ。

Firefox ブラウザ無料ダウンロード