Homebrewをルートとして実行するにはどうすればよいですか?


11

数年前は、brewrootに変更するだけでrootとして実行できましたbrewが、彼らはその機能を削除しました。そのため、Homebrew 1.1.6では/usr/local/Homebrew/Library/Homebrew/brew.sh、ルートチェック(「非常に危険」だと言われたもの)を削除するために編集していたのでbrew、ルートとして実行できました。

Homebrewの新しいバージョンはそれでも動作しbrew.shますがbrew、実行しても毎回ファイルを元に戻し続けますchmod 500。スクリプトを作成して変更してからbrew自動的に実行することもできますが、これが常に機能するかどうかはわかりませんし、チャンスを逃したくありません。Homebrewをルートとして実行する別の方法を見つけた人はいますか?


3
好奇心から、なぜbrewルートとして実行したいのですか?また、sudoあなたの目的には十分ではありませんか?
アラン

2
@Allan sudoはこれをrootとして実行し、同じ「非常に危険な」エラーを表示します。特にHomebrewを介して(例:を介してpip)インストールされていない場合、特定のパッケージのインストールに問題があるため、rootとして実行したいと思います。私はそのルートを何度も行きました。さらに、すべてをルートとしてインストールしない限り、奇妙な回避策がなければ複数のユーザーに対して適切に動作しません。
sudo

$ su-> $ whatyouyouwant brew?
StrawHara

1
rootリスクのあるソフトウェアパッケージの構築。でも、パッケージマネージャなしでパッケージをビルド、あなたがして、パッケージをインストールする非特権ユーザー(自分自身)としてパッケージをビルドするだろうrootsudo。FinkやMacPortsなどのパッケージマネージャーは、どちらも独自の非特権ユーザーでビルドし、としてインストールしrootます。Homebrewにはそのようなメカニズムはありません。
fd0

1
うーん、brew.shファイルを修正してからbrewコマンドを実行した後、ファイルが元に戻されるという問題は私の側にはありません。だから私は走ることができsudo brew whateverbrew whatever、タンデムでうまくいく。私のbrew --version出力はこのようです:Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28) FYI、私は私の変更brew.shのすべての行コメントアウトするファイルをcheck-run-command-as-root機能を単一の配置returnの代わりに、関数の先頭に声明を。
GDP2

回答:


2

スクリプトを変更した後、brew.shで不変フラグを設定してみてください。

chflags uchg /usr/local/Homebrew/Library/Homebrew/brew.sh

私はテストしていません。一般的なルールとして、私は開発者に私に頼まないアプリケーションにルートを与えません。


私もジェイソンに同意します。彼らが醸造をルートとして実行しないと言う理由があります。主に彼らが開発者であり、私は彼らのソフトウェアで彼らを信頼します。また、前回チェックしたmacportsとは異なり、brewはroot権限を必要としないか、必要としませんので、何かを台無しにした場合、おそらくシステム全体を困らせることはありません。すべてがユーザーアカウントに含まれており、sudoをいじる必要はありません。
user9950573

1
動作確認済み、ありがとう。最初の更新を試みるには時間がかかりますが、後でsudo brew install通常どおりに実行されます。
sudo

1
Macにインストールするパッケージでシステムを混乱させて使用不能にすることはあまりありません。とにかく、30分以内にシステムを復元できます。上記のコメントで説明したように、ユーザーのクリーンアップははるかに困難であり、システム全体にインストールしない限り、多くのことは正しく機能しません。
須藤

1

典型的なユーザーはこれをすべきではありませんが、あなたは典型的ではありませんか?

2つの問題:

  1. ルートを停止することはできません。ルートの使用を主張する場合、ルートはbrew.sh何があっても上書きできます。

  2. 止めることはできませんbrew、結局、あなたはランニングについて話しているのbrewです。

それで私達はそれで働きます。エイリアスを設定して、コピーしてbrew.sh実行しbrewます。

alias brew='cp /<modified>/brew.sh /<actuall>/brew.sh; /usr/local/bin/brew'

(システムに合わせてパスを修正してください)。

これで、必要なことは次のとおりです。

sudo brew <arguments>

(rootになり、コピーしてからbrew.shbrew引数を指定してrootとして実行します。その後、brew上書きされbrew.sh、もう一度やり直す準備が整います)

注:sudoエイリアスに入れることもできますが、毎回パスワードの入力を求められるので、この方法のほうが快適です。

通常、セキュリティのため、シェルスクリプトのルートにsetuidchmod u+s)を使用することはできません。Perlには、suidperlインストールしてユーザー特権を昇格させることができる別のプログラムがありますが、そのような解決策は簡単な答えには少し深いものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.