環境
- macOS Montery
- Homebrew 3.3.4
背景
久々にbrew upgradeした際に、Error: Permission denied @ apply2files...が発生したので、その対処法を備忘録として記す。
$ brew upgrade
==> Upgrading X outdated packages:
:
:
==> Upgrading node
:
:
Error: Permission denied @ apply2files - /usr/local/share/systemtap/tapset/node.stp
対処法
まずは問題のファイルの権限を確認。
$ 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に属しているユーザーを確認。
$ 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
もしくは
$ 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なら誰を追加するか注意が必要。
$ sudo dscl . -append /Groups/wheel GroupMembership user_name
wheelグループにuser_nameが追加されたことを確認。
$ 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
もしくは
$ dscacheutil -q group -a name wheel
name: wheel
password: *
gid: 0
users: root user_name
追加できたので、brew upgradeを実行。
$ brew upgrade
エラーもなくなり、更新完了。めでたしめでたし。