(´;ω;`)

缘起

在收拾 mac 上的环境配置信息的时候,我发现之前我用安装包安装了 nodejs v12 ,而现在运行 code-server 的 nodejs 版本为v15

把一堆东西删掉之后,重新用 Homebrew 安装 nodejs,报错如下

1
2
Error: Could not symlink share/systemtap/tapset/node.stp
/usr/local/share/systemtap/tapset is not writable.

解决

首先是一些基本信息

1
2
3
4
$ ls -al /usr/local/share/systemtap/
drwxr-xr-x 3 root wheel 102 Oct 23 18:06 .
drwxrwxr-x 15 root wheel 510 Oct 24 20:24 ..
drwxr-xr-x 2 root wheel 68 Oct 24 20:17 tapset

tapset 目录的所有者是 root,所有组是 wheel,原始读写权限是 755

网上提供了很多种解决办法,毕竟这只是一个权限问题。不过为了把对系统的影响降到最小,我选择把自己加入 wheel 用户组并修改组的读写权限后执行安装,然后再恢复回来,而不是直接修改目录的所有者

  1. 将自己(所用的用户)加入 wheel 组

    1
    $ sudo dscl . -append /Group/wheel GroupMembership [username]

    和其他Unix-like系统不同,macOS 的用户(组)管理使用 dscl 命令

    username 可以使用 whoami 命令查询

  2. 利用 root 权限(sudo 执行命令)修改所有组的读写权限

    1
    $ sudo chmod -R 775 /usr/local/share/systemtap/
  3. 执行 brew link node

  4. 将自己从所有组删除

    1
    $ sudo dscl . -delete /Group/wheel GroupMembership [username]
  5. 恢复文件夹的原始读写权限

    1
    $ sudo chmod -R 755 /usr/local/share/systemtap/

把这些执行完问题就解决了,不过我后来才发现,其实我([username])本来就在wheel用户组里,上面的步骤中只要执行第 2、3、5 步即可

Reference

Trouble install node.js with homebrew - Stack Overflow

mac下通过dscl命令对用户/用户组进行增删改查操作