ALMiniumを使って構築したMercurialにpushしようとしたら一筋縄ではいかなかった件【追記有り】
追記
以下、場当たり的な対応を行っていたためよろしくない設定方法です。正しい方法はこちらの「ALMiniumを使って構築したMercurialにpushしようとしたら一筋縄でいけた件。【ちゃんと本家のFAQ読んでませんでした。。orz】」の記事に記載しています。
Redmineで成果物の管理ってどうやるの?
先日にALMinium環境を構築してから色々と弄っています。そろそろRedmineに成果物を登録したいなと思ったのでALMiniumを使って構築した環境のMercurialにローカルのリポジトリをPushする事にしました。
どこにPushすればいいんだ?
備忘録のため新規にプロジェクトを作って流れをなぞってみます。
ALMiniumを使って構築されたRedmineでプロジェクトを新規作成する時にSCMを選択できる項目があると思います。まずそこで"Mercurial"を指定しましょう。いいですか? Mercurial*1 ですよ。
無事にプロジェクトが作成できたら設定 -> リポジトリとクリックしていきましょう。これでリポジトリのパスが表示されます。hgコマンドを使ってリポジトリにアクセスする場合は"リポジトリのパス"を使用します。なお、その下に記載されているアドレスはHTTPアクセス用です。
さっそくローカルで作成してたリポジトリをサーバにpushしよう
#クライアント側作業 oxdb$ hg push ssh://oxdb@sl62//var/opt/alminium/hg/prohoge ssh://oxdb@sl62//var/opt/alminium/hg/prohoge への反映中 oxdb@sl62's password: 遠隔ホスト: Not trusting file /var/opt/alminium/hg/prohoge/.hg/hgrc from untrusted user apache, group apache 遠隔ホスト: Not trusting file /var/opt/alminium/hg/prohoge/.hg/hgrc from untrusted user apache, group apache 変更点を探索中 遠隔ホスト: abort: could not lock repository /var/opt/alminium/hg/prohoge: Permission denied 中止: 未知の応答: 空文字列
はい。
やっぱりそう簡単にはいきませんか。見た感じでは2種類のエラーが出ているようですね。
- Not trusting file
- Permission denied
"Not trusting file"とは
どうやらこのエラーは警告のようです。例えこの警告が出たとしても処理は進みます。
この警告は貴方はこのリポジトリのオーナーでもなければ*2 Mercurialとしても管理してないユーザ、つまり信用できないリポジトリだよと教えてくれているようです。
この警告を消すためにはそのリポジトリは信用できるよとMercurialに教えてあげればいいんです。なのでリポジトリのオーナー名をhgrcファイル*3 に設定をしてやればOKです。
# サーバー側作業 # リポジトリのオーナー確認 [root@sl62 prohoge]# ls -la 合計 12 drwxr-xr-x 3 apache apache 4096 4月 8 18:01 2012 . drwxr-xr-x. 8 apache apache 4096 4月 8 18:01 2012 .. drwxr-xr-x 3 prohoge prohoge 4096 4月 8 19:06 2012 .hg # hgrcの[trusted]配下にユーザー名とグループ名を記述 [root@sl62 prohoge]# cat /etc/mercurial/hgrc [trusted] users = prohoge groups = prohoge
Permission denied
よくある事ですよね。Redmineから作成したリポジトリのオーナーはapacheユーザとなっています。これでは書き込み権限がないのも当たり前ですのでパーミッションを変更してしまいましょう。*4
今後複数の人がアクセスする事を想定してリポジトリ管理用のアカウントを作成してしまいましょう。プロジェクト名はPROJECT HOGEなのでユーザ名はprohogeとします。
# サーバ側作業 [root@sl62 prohoge]# adduser prohoge [root@sl62 prohoge]# passwd prohoge ユーザー prohoge のパスワードを変更。 新しいパスワード: 新しいパスワードを再入力してください: passwd: 全ての認証トークンが正しく更新できました。
リポジトリの.hg配下を全てprohogeユーザがオーナーとなるように変更します。
# サーバー側作業 [root@sl62 prohoge]# ls -la 合計 12 drwxr-xr-x 3 apache apache 4096 4月 8 18:01 2012 . drwxr-xr-x. 8 apache apache 4096 4月 8 18:01 2012 .. drwxr-xr-x 3 apache apache 4096 4月 8 20:41 2012 .hg [root@sl62 prohoge]# chown -R prohoge:prohoge .hg/ [root@sl62 prohoge]# ls -la 合計 12 drwxr-xr-x 3 apache apache 4096 4月 8 18:01 2012 . drwxr-xr-x. 8 apache apache 4096 4月 8 18:01 2012 .. drwxr-xr-x 3 prohoge prohoge 4096 4月 8 20:41 2012 .hg
これでクライアント側からのpushに対して警告もエラーも出なくなります。
# クライアント側作業 oxdb$ hg push ssh://prohoge@sl62//var/opt/alminium/hg/prohoge ssh://prohoge@sl62//var/opt/alminium/hg/prohoge への反映中 prohoge@sl62's password: 変更点を探索中 遠隔ホスト: adding changesets 遠隔ホスト: adding manifests 遠隔ホスト: adding file changes 遠隔ホスト: added 1 changesets with 1 changes to 1 files
これでやっとRedmineで成果物の管理も出来ます。
間違い探し
そうそう。違いに気づきますか?
# push失敗時 oxdb$ hg push ssh://prohoge@sl62/var/opt/alminium/hg/prohoge ssh://prohoge@sl62/var/opt/alminium/hg/prohoge への反映中 prohoge@sl62's password: 遠隔ホスト: abort: There is no Mercurial repository here (.hg not found)! 中止: 遠隔ホストの応答が不適切!
# push成功時 oxdb$ hg push ssh://prohoge@sl62//var/opt/alminium/hg/prohoge ssh://prohoge@sl62//var/opt/alminium/hg/prohoge への反映中 prohoge@sl62's password: 変更点を探索中 遠隔ホスト: adding changesets 遠隔ホスト: adding manifests 遠隔ホスト: adding file changes 遠隔ホスト: added 1 changesets with 1 changes to 1 files
分からないという方、これならどうでしょうか。
ssh://prohoge@sl62/ ssh://prohoge@sl62//
ネットワーク経由でリポジトリをアクセスする場合、/(シングルスラッシュ)だとユーザーのホームからの相対パスとして認識をするそうです。なので//(ダブルスラッシュ)を入力する事で絶対パスとなってリポジトリにアクセスできます。