web-dev-qa-db-ja.com

マルチユーザーMacOS SierraセットアップでHomebrewを使用する方法

私は2人のエンジニアの間で共有されているMacを持っています。両方とも別々のユーザーアカウントを持っています。両方ともbrew updatebrew install...を時々実行する必要があります。

/usr/local must be writable!のようなエラーを発生させずにこれを設定するにはどうすればよいですか?

ええ、私はUserAがbrewを使用するたびに/usr/localのパーミッションを引き継ぐことができます(そしてUserBと同じ)が、それは多くの不必要なトラブルのようです。

32
Jon Gunter

Hombrewはパッケージを/usr/localにインストールします。インストールするパッケージの多くを壊さずにそれについてできることは何もありません。次のように、すべてのユーザーに読み取りおよび書き込み権限を追加します。

Sudo chmod -R +rw /usr/local

これはシステムフォルダであるため、すべてのユーザーが同じbrewインストールを共有することに注意してください。 1人のユーザーは削除他のユーザーがインストールしたパッケージなどを実行できます。したがって、問題を回避するために調整してください。

11
Harald Nordgren

グループのアクセス許可をadminまたは両方のユーザーが属する別のグループに変更することもできます。

chgrp -R admin /usr/local
chmod -R g+w /usr/local

元のソース: https://Gist.github.com/jaibeee/9a4ea6aa9d428bc77925

UPDATE:

MacOS High Sierraでは、/usr/localの所有者、グループ、または権限を変更できません。そのため、サブフォルダーのグループと権限を変更する必要があります。

chgrp -R admin /usr/local/*
chmod -R g+w /usr/local/*

[〜#〜] update [〜#〜]2018年9月、High Sierra 10.13.6

  1. 抽出接頭辞のパスを決定します。 homebrewの操作に関連するファイルを保存するために使用されるパス
  2. brewへのアクセスが必要なシステム上のすべてのユーザーがadminグループに属していることを確認します
  3. オプション管理グループにユーザーを追加ユーザーがbrewへのアクセスを必要とする場合

    Sudoコマンドを使用するにはアクセス/特権が必要です

  4. adminグループが再帰的に所有するように、brewプレフィックスパスを設定します
  5. adminグループに属するすべてのユーザーが再帰的に書き込み可能になるように、brewプレフィックスパスを設定します。
  6. 醸造プレフィックスの権限を確認します
  7. 醸造????

echo $(brew --prefix)
echo $(groups $(whoami))
Sudo dseditgroup -o edit -a $(whoami) -t user admin
Sudo chgrp -R admin $(brew --prefix) 
Sudo chmod -R g+rwX $(brew --prefix)
ls -lah $(brew --prefix)
61
user4815162342

MacOS Mojave 10.14のHacky回避策ソリューション

これは ser4815162342 の回答を編集したもので、そのままでは機能しませんでした。

  1. [システム環境設定]で[ユーザーとグループ]に移動し、左下隅のロック記号をクリックしてユーザー/グループ作成のロックを解除し、brew-usergroupという新しいグループを作成します。 brewを使用するすべてのユーザーをグループに追加します(ドイツのmacOSの添付のスクリーンショットのように)。

enter image description here

  1. ターミナルで、これを行います:

    echo $(brew --prefix)
    echo $(groups $(whoami))
    Sudo dseditgroup -o edit -a $(whoami) -t user brew-usergroup
    Sudo chgrp -R brew-usergroup $(brew --prefix)/*
    Sudo chmod -R g+rwX $(brew --prefix)/*
    ls -lah $(brew --prefix)
    

    これは、(他の回答のように)brewフォルダーの権限を変更しないことに注意してください。brewフォルダーのサブフォルダー/ファイルを変更します。 brew installはエラーなく正常に動作するようになりました。

7
Sliq

上記は正常に機能しますが、新しいファイルにこれらのアクセス許可を自動的に継承させる場合は、継承されるACLを設定します(それ以外の場合は、ボトルを注ぐユーザーのみが削除できます)。ここでこれを行う方法のヒントが見つかりました: https://Gist.github.com/nelstrom/498864

rootを1回実行する(グループ「admin」のすべてのユーザーがアクセスできると仮定):

cd /usr/local
chmod -R +a "group:admin allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" *
chgrp -R admin *
chmod -R g+rwX *
ls -lae .

-e on lsはACLを示します。

5
DrPsychick

アクセス許可またはSudoをハッキングしようとするすべての答えは間違っています。 Sudoを使用せず、ユーザーアカウント間で単一のbrewインストールを共有しないでください。

正しい答えは、マシン上で「通常」のbrewインストールを1つだけ使用し、他のすべてのユーザーにはbrewのローカルバージョンをインストールすることです。これを行うには、ユーザーが所有するディレクトリにtarballを展開し、PATHの先頭にそのbinディレクトリを含めます。または、2つのソースリポジトリのgitチェックアウトを実行することもできます。

Gitアプローチでは、 homebrew-core および brew が必要です。

これらを確認するためにユーザーのホームディレクトリを任意に選択します。

cd $ HOME; git clone [email protected]:Homebrew/homebrew-core.git; git clone [email protected]:Homebrew/brew.git

次に、新しいbrew binディレクトリを優先するようにPATHを変更します。

export PATH = $ HOME/brew/bin:$ PATH

これは新規インストールであるため、目的のbrewパッケージをすべて再度インストールする必要があります。

2
jerryb

最善の解決策は、sudoersレコードを追加して、非特権ユーザー「joe」が管理ユーザーとして「brew」関連コマンドを実行できるようにすることです。

/etc/sudoers.d/joeに次の内容のファイルを作成します。

joe ALL=(administrator) NOPASSWD: /usr/local/bin/brew

その後、次のようにbrewを実行できます。

Sudo -Hu administrator brew install <smth>
1
Sergey Papyan