Ninja: ルート権限でインストールターゲットを実行すると、後続の呼び出しが中断されます

作成日 2017年07月17日  ·  9コメント  ·  ソース: ninja-build/ninja

ライブラリの「一般的なパターン」は、 makeを実行してから、 sudo make installです。 これはCMakeでうまく機能します。 ただし、基盤となるビルドシステムとしてNinjaを使用する場合、 sudo ninja install.ninja_logの所有者をrootに変更します。 その後のninja呼び出しは、失敗するよりも

 ninja: error: opening build log: Permission denied

後でファイルを削除するだけでも問題ないようですが、これは方法ではありませんよね? 私がCMakeでこの

最も参考になるコメント

こんにちは、

ログファイルがすでに存在するかどうかを確認し、存在する場合は、アクセス許可が同じままであることを確認します。存在しない場合は、名前を変更します(実行中のユーザーのuidとgidを取得します)。

PR https://github.com/ninja-build/ninja/pull/1362を作成して、コードでどのように表示されるかを確認しました。

全てのコメント9件

何かをビルドする忍者ターゲットがある場合、「sudo ninja ...」はそれらの中間出力をルートとしてビルドしますが、これも望ましくありません(ファイルの所有者が間違っており、コンパイラーがルートとして実行されます)。

インストールコマンド自体がsudoを使用したほうがよいと思います。 つまり、ビルドファイルは、 ninja installsudo cp ...ようなコマンドを実行するように構成されます。

それをインストールルールに入れるのは厄介です。すべてのインストールがrootとして行われるべきではなく、すべてのマシンがsudoを使用するわけではありません。

そうです、私はそれがジェネレーター次第だということを意味しました。

したがって、CMakeの開発者は、これは忍者が解決する必要があると考えており、CMakeが解決する必要があると考えています。 理解でき、意見を述べるのに十分な知識はありませんが、問題を解決する可能性は低いです。

関連するcmakeスレッドにリンクできますか?

説明でリンクされています: https

こんにちは、

ログファイルがすでに存在するかどうかを確認し、存在する場合は、アクセス許可が同じままであることを確認します。存在しない場合は、名前を変更します(実行中のユーザーのuidとgidを取得します)。

PR https://github.com/ninja-build/ninja/pull/1362を作成して、コードでどのように表示されるかを確認しました。

ソースを構築しているときに同じ問題に直面しました。
問題は、一部のフォルダーがroot権限で作成され、他のフォルダーが他のユーザー名権限で作成されていることです。
これを取り除くには、ソースコードの完全な権限をシングルユーザーに変更します。
sudo chown -Rユーザー名:ユーザー名

ここでも同じ問題があります。 必ずしなければならないsudo chown $USER:$USER .ninja_*の後にsudo ninja install 。 この問題を調査していただき、ありがとうございます。 あなたは素晴らしいです!

このページは役に立ちましたか?
0 / 5 - 0 評価