it-swarm-ja.com

SVNのポストコミットフックでコマンドを実行しようとすると、パーミッションの問題が発生します

解決できないような鈍い問題があります。

私は何をしようとしていますか?

post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass --submit-as=admin -p --target-groups=reviewers

ユーザーとしてログインしているbashからこれを試してみると、すべて問題ありません。レビューの投稿、公開など==>すべての権限やその他の設定はOKです。

SVNのコミット後フックからこれを試すとどうなりますか?

リソースはコミットされますが、svn操作がハングします-実際には、コミット後のフックは終了しません。

問題は何に絞り込まれていますか?

post-reviewは、post-commitフックを実行しているユーザー(この場合はwww-data Apacheのユーザー)として実行されます。つまりコマンドをwww-dataとして実行すると:

Sudo -u www-data post-review --repository-url=http://xxx.xxx.xxx.xxx/svn/testRepo2 --revision-range=6:7 --server=http://reviews.example.test/ --username=reviewposter --password=mydullpass! --submit-as=admin -p --target-groups=reviewers -d

次のようになります(レビュー後のコマンドの-dパラメーターに注意してください-DEBUG):

RBTools 0.4.1
Home = /home/borislav
Password for 'www-data':

これは、パスワードが入力されるのを待ってハングする場所です。コミット操作は終了できず、そのまま残ります。私はすでにこれについてみんなと話し合った この投稿のReviewBoardのグーグルグループ

一方、デバッグ出力で同じコマンドを実行すると、myuserとして次のようになります。

RBTools 0.4.1
Home = /home/borislav
HTTP GETting api/
HTTP GETting http://reviews.example.test/api/info/
Using the new web API
TTP GETting http://reviews.example.test/api/repositories/
HTTP GETting http://reviews.example.test/api/repositories/1/
HTTP GETting http://reviews.example.test/api/repositories/1/info/
HTTP GETting http://reviews.example.test/api/repositories/2/
HTTP GETting http://reviews.example.test/api/repositories/2/info/
HTTP GETting http://reviews.example.test/api/repositories/3/
HTTP GETting http://reviews.example.test/api/repositories/3/info/
HTTP GETting http://reviews.example.test/api/repositories/4/
HTTP GETting http://reviews.example.test/api/repositories/4/info/
Attempting to create review request on http://xxx.xxx.xxx.xxx/svn/testRepo2 for None
Submitting the review request as admin
HTTP POSTing to http://reviews.example.test/api/review-requests/: {'submit_as': 'admin', 'repository': 'http://xxx.xxx.xxx.xxx/svn/testRepo2'}
Review request created
Attempting to set field 'target_groups' to 'reviewers' for review request '22'
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'target_groups': 'reviewers'}
Uploading diff, size: 2316
HTTP POSTing to http://reviews.example.test/api/review-requests/22/diffs/: {'basedir': '/'}
Publishing
HTTP PUTting to http://reviews.example.test/api/review-requests/22/draft/: {'public': 1}
Review request #22 posted.

http://reviews.example.test/r/22/

ですから、実際には投稿/公開などのすべてが機能します。

ReveiwBoardの開発者の1人は、 "文字列" Password for '' "を表示しません。したがって、これはまったく別のものから来ています。"

なんらかの実行許可だと思います。 Ubuntu Serverで実行する必要があるので、Debianを考えてください。

Ubuntuの「ルートログインなし」パラダイムに何らかの関係があるのだろうかと思っていました。

SVNサーバーはUbuntuサーバーでホストされているため、別のLinuxディストリビューションを試したことはありません。これは実際にはオプションではありません。

あなたはチェックすることができます 私が持っていたこの議論 ReviewBoardのゴーグルグループでみんなと一緒に。 レビュー後 バイナリは次の場所にあります:/usr/local/bin/post-review

www-dataの権限を追加して、sudoersファイルでpost-reviewを実行できるようにしましたが、うまくいきませんでした。

どのような解決策を思いつくことができますか?

よろしくお願いします、Borislav。

6
Borislav Sabev

パスワードプロンプトは、実際にはポストレビューからではなく、svnから来ています。事後レビューでは、svnバイナリを呼び出して、リポジトリから変更を取得します。

すでに認証されており、svnが認証情報を保存しているため、パスワードプロンプトはユーザーとして表示されません。 www-dataユーザーとしてこれをまだ行っていないため、svnはパスワードを要求します。

これを修正する最も簡単な方法は、www-dataユーザーとしてsuし、リポジトリに対して認証することです。これにより、資格情報がキャッシュされます。

3
Alan Shutko