FreeBSD VMでhg操作が中断されたように見える:wcacheはrootが所有しています

FreeBSD VMでhg操作が中断されたように見える:wcacheはrootが所有しています

FreeBSD 11.2-RELEASE-p14ビルドサーバーをヘッドレス仮想マシンとして実行するために仮想マシンを使用しています。 ssh -Yを介してターミナルセッションに入りました。

Mercurial バージョン 5.1.1 を使用しています。

hg操作を実行すると、しばしば次の形式のエラーメッセージが表示されます。

中止:権限が拒否されました: '/stg/cgrandits/rel-unicorn/Release/unicorn/chroot/tsc/sources/devel/.hg/wcache/.manifestfulltextcache-14uv9W~'

リポジトリはchroot環境にあります。これが要因になりますか?

後でファイルを確認してみると、ファイルはまったく存在しません。

タスクは実際には常に成功していましたが、この動作によりバージョン管理を中心に構築されたスクリプトや自動化が中断されました。

この問題の原因と解決策を知っている人はいますか?

答え1

問題は、.hg/wcache フォルダがルート所有であることです。

だから振り返ってみると、次のようなものがやや明らかに見えます。

エラーメッセージに「権限が拒否されました」と記載されている場合は、そのフォルダの権限を確認してください。この場合、ルートが所有します。私は解決できます

[.hg]$ sudo chown cgrandits wcache

ここで、cgrandits は私のユーザー ID です。明らかに、この修正を実行するにはsudo機能が必要ですが、最初にこの状態に達したビルドオートメーションスクリプトを実行するにはsudo機能が必要です。

chroot環境を設定し、したがってrootとして実行する必要があるビルドオートメーションスクリプト(完全に理解していないことを認めています)を使用していたため、この問題が発生しました。時々、これらのビルドオートメーションスクリプトはMercurialコマンドを実行します。 rootでビルドオートメーションスクリプトを実行しているときにwcacheフォルダが存在しない場合は、wcacheフォルダが作成されます。しかし、所有者はルートです。。ただし、wcacheフォルダがすでに存在する場合、hgジョブはそれを使用します。現状のまま。したがって、この問題が発生するかどうかは、コマンドラインに直接提供されるhgコマンドの履歴順序と特定のビルドオートメーションスクリプトの実行によって異なります。

関連情報