環境
- macOS Montery
- Homebrew 3.3.4
背景
久々にbrew upgrade
した際に、Error: Permission denied @ apply2files...
が発生したので、その対処法を備忘録として記す。
terminal
$ brew upgrade
==> Upgrading X outdated packages:
:
:
==> Upgrading node
:
:
Error: Permission denied @ apply2files - /usr/local/share/systemtap/tapset/node.stp
対処法
まずは問題のファイルの権限を確認。
terminal
$ cd /usr/local/share/systemtap/tapset/node.stp
$ ls -l
total 0
drwxr-xr-x X root wheel XX XX XX XX:XX .
drwxr-xr-x X root wheel XX XX XX XX:XX ..
lrwxr-xr-x X user_name wheel XX XX XX XX:XX node.stp -> ../../../Cellar/node/XX.X.X/share/systemtap/tapset/node.stp
問題のファイルnode.stp
の所有グループwheel
に属しているユーザーを確認。
terminal
$ dscl . -read /Groups/wheel
AppleMetaNodeLocation: /Local/Default
GeneratedUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
GroupMembers: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
GroupMembership: root
Password: *
PrimaryGroupID: 0
RealName:
System Group
RecordName: wheel
RecordType: dsRecTypeStandard:Groups
もしくは
terminal
$ dscacheutil -q group -a name wheel
name: wheel
password: *
gid: 0
users: root
これで、brew upgrade
を実行したユーザーがwheel
に属していないことが今回のエラーの原因と判明。
ここで、root
ユーザでbrew upgrade
を実行したくなるが、他のファイルも含めて権限がおかしなことになるため、Homebrewとしては推奨されていない。却下。
そして、chown
で所有グループを変更することも、権限がおかしなことになるのでおすすめしない。
今回は、wheel
グループにbrew upgrade
を実行したいユーザーを追加することで対応することとした。
※ 個人用PCなら自身を追加すればよいので気にすることはないが、共有PCなら誰を追加するか注意が必要。
terminal
$ sudo dscl . -append /Groups/wheel GroupMembership user_name
wheel
グループにuser_name
が追加されたことを確認。
terminal
$ dscl . -read /Groups/wheel
AppleMetaNodeLocation: /Local/Default
GeneratedUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
GroupMembers: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
GroupMembership: root user_name
Password: *
PrimaryGroupID: 0
RealName:
System Group
RecordName: wheel
RecordType: dsRecTypeStandard:Groups
もしくは
terminal
$ dscacheutil -q group -a name wheel
name: wheel
password: *
gid: 0
users: root user_name
追加できたので、brew upgrade
を実行。
terminal
$ brew upgrade
エラーもなくなり、更新完了。めでたしめでたし。