大学时代曾经一度在 Linux 和 Windows 之间挣扎徘徊,直到后来开始用
Mac,几乎是瞬间就觉得各种满意。好用的命令行加上好用的
UI,基本上不能奢求更多了。不过近年来感觉 Mac OS X
好像在某些奇怪的路上越走越远,特别是在命令行的兼容性方面经常出各种各样的事情。比如之前某次由于一个奇怪的原因需要手工恢复一部分
dotfile 配置文件,于是直接用 cp 命令从 Time Machine
的备份里把一堆文件复制过来,结果系统各种 run
不起来,后来发现好像是奇怪的权限问题,总而言之似乎是 OS X 在 shell
的基础权限之外又做了其他的权限,而 cp
不知道这些东西,所以拷贝过来的东西也用不了。由于我也不是 sys
admin,对这些东西也不感兴趣,最后就用 Finder
比较麻烦地重新拷贝了一遍才好了。
不过今天要 fix 的是这个叫做 System
Integrity Protection (SIP) 的东西,又叫
rootless,总之就是保护系统了。听上去感觉很有用的样子,似乎确实也很有用,不过刚出来的时候好像导致
homebrew 出了很多问题,然后最近由于
DYLD_LIBRARY_PATH 的问题终于忍无可忍决定要把它 disable
掉。
对 Linux 编程熟悉的同学应该都知道
LD_LIBRARY_PATH,就是可以设置一些搜寻动态链接库的路径,通常安装一些第三方的库,如果不是直接安装到系统的
/usr/lib 之类的路径下面去(比如没有 root
权限,或者不想污染系统)的话,就可以把任意的路径加到
LD_LIBRARY_PATH
里去,让其他的程序还是可以找得到这个第三方库的 shared library。而
DYLD_LIBRARY_PATH 就是 OS X 的 LD_LIBRARY_PATH
对应物(好像直接用 LD_LIBRARY_PATH 也可以)。
然后现在 SIP 为了“安全起见”,把 LD_LIBRARY_PATH 和所有
DYLD_
开头的环境变量全部禁用了。症状就是一个程序在启动一个子进程的时候,是会继承父进程的环境变量的,但是环境变量里的这几个项会被系统给屏蔽掉。我也不知道为什么这个会破坏系统安全,但是确实这样之后带来各种各样的麻烦,比如在
iPython 里要是用到 CUDA 的库之类的,就会找不到 shared library。如果想用
lldb 去调试一个依赖于一些第三方动态库的程序,或者用
Makefile 来启动一些
tests,也会发现找不到这些动态链接库。之前找到一个临时的解决办法是先用
otool -L 来列出你编译出来的程序依赖于哪些未 resolve
的动态链接库,比如这样的:
your-program-file
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
@rpath/libcudart.7.5.dylib (compatibility version 0.0.0, current version 7.5.20)
@rpath/libcublas.7.5.dylib (compatibility version 0.0.0, current version 7.5.20)
@rpath/libcurand.7.5.dylib (compatibility version 0.0.0, current version 7.5.20)
这些 @rpath 就是未 resolve 的,然后用
install_name_tool 把这些 @rpath
换成你知道的绝对路径,比如:
install_name_tool -change @rpath/libcudart.7.5.dylib \
/usr/local/cuda/lib/libcudart.7.5.dylib your-program-file
当然每次重新编译过之后都又得 fix 一遍。非常麻烦,后来我发现可以直接把 SIP disable 掉,方法如下:
- 重启系统,按住
Command+R,在出现的界面里选Utilities>Terminal。 - 在出现的终端里输入
csrutil disable。 - 正常重启系统。
然后就一了百了了!不过没有了 SIP,也许系统不够安全了呢?不过要是系统真的不够安全还有办法就是换系统!特别是现在 Windows 都开始直接支持运行 Linux 的 binary 了,说不定几年之内“码农友好”的操作系统的局面会逐渐开阔起来呢!拭目以待咯。
Comments
现在想用 XtraFinder 也是需要 disable SIP 的。
学长太厉害,向你学习!
居然还有这种坑,Orz。想换linux了。
前来膜拜
Hi, pluskid 君,打扰了。觉得您的 Blog theme 很清爽,我想把它移植到 hexo 上,不知方便不方便?当然,诸如手绘图和背景图会去掉换成第三方的,theme 名也会用 pluskid 来命名....
没问题的哈,你随便改。
感谢!
这两天看了你写的SVM系列的文章,写得很不错,顺便逛了下你的其它文章,佩服你的经历!!!膜拜!!!
那个Ubuntu On Windows啊…… 我跟你说,就是辣鸡……
最后我选择hyper-v跑一个arch然后shell登上去……
还没尝试过,怎么个垃圾法啊?
硬件相关系统调用支持不完整=-= 大概是跑不了要GPU的东西……不知道有没有人成功. 文件系统有点迷(强行用NTFS的那套理论). 可能资源占用上稍稍好那么一点吧. 至于图形界面, X那架构居然立功了... 不过没有实际意义啦/\
如果只从开发工具角度来说macOS不见得比linux好用,但是如果平衡工作和日常使用的话mac就更胜一筹。比如:macOS是唯一一个既能写代码又能同时上qq的系统。
恩,在 G 大概 99% 的用户配置是 Linux 台机加 Macbook 笔记本。