Azure DevOpsのSelf-Hosted Agentとして、ローカルネットワークのCentOS 7.9 を追加するときのメモです。
基本的な手順
公式ドキュメントの Self-hosted Linux agents に従えばよい、はず。
引っかかりどころ
Must not run with sudo
エラー と Failed to create CoreCLR 0x80004005
エラー
-
原因
dotnetのdiagnosticsログ? で名前付きパイプを作成しようとしているらしく、
その権限が不足している -
解決策
恥を忍んでroot
で実行する。
何が起こったか
基本的にLinuxのサービスの実行時の権限はroot以外のユーザが推奨されているので、例えば azdevops
ユーザを作成して
以下のようにやればよい。はずだった。
sudo -u azdevops ./config.sh
もし sudo
を使用せずに、または 一般ユーザが sudo
で root
に権限を昇格して ./config.sh
を実行すると、
Must not run with sudo
というエラーが出てセットアップが終了する。
そこで上記のコマンドでやる必要があるのだが、次は Failed to create CoreCLR
エラーが出てしまう。
この時のエラー番号は 0x80004005
である。
これはDotnetのエラーであるのだが、というか、これはdotnetのエラーである、ということがわかるのは
.NET を使用しているユーザぐらいではないか?
もし、ほかの言語の開発者、あるいは単にLinuxに詳しいだけではエラーの内容がわからない。
たいていの場合問題となるSELinux(/var/log/audit/audit.log
)には
エラーは記録されていないし、もちろんjournalにも記録されていないからである。
となれば権限不足であろう。エラーの内容から何かしらを作成できていないことはcreate
の文字列でわかるわけで、
問題は何を作成しようとしたかである。
端的に言うと、dotnetのdiagnosticsログ? で名前付きパイプを作成しようとしているらしく、
その権限が不足しているようである
以下、githubのissueにも指摘がある
@mskadu At startup, CoreCLR tries to create named pipes for debugging and profiling of the process in /tmp/. It could be that the pipe creation fails intermittently when pwsh gets started so frequently.
Can you please try disabling CoreCLR diagnostics by setting the environment variable export COMPlus_EnableDiagnostics=0 (as instructed here), and then try running your repro step again to see if that helps?