Jon*_*ler 6 c macos osx-elcapitan
对不起,有一些必要的背景 - 您可以尝试跳到问题标题.
从远古时代开始(无论如何,在上一个千年的某个地方),我创建了目录,例如/usr/gnu和/usr/gcc保存自定义编译的GNU软件,与系统目录中的任何内容分开.这对我来说非常适用于各种基于Unix的系统,包括自2002年以来的Mac OS X(Jaguar,10.2).(不使用的一个原因/usr/local是IT管理部门维护它,并且它总是包含过时的代码 - 例如,它在大约5年前就已经可以使用Perl 4.使用其他名称可以避免与它们一起使用.)
在Mac OS X 10.11 El Capitan中,Apple推出了SIP(系统完整性保护)系统(描述了El Capitan的"无根"功能,真的是"Ask Different").这意味着我不能创建诸如/usr/gnu或之类的目录/usr/gcc,即使它们与Apple所拥有的任何内容脱节.
我发现之前在这些目录中的软件已被隔离在这些目录中(其中UUID在您的机器上会有所不同,我可能有两个因为将El Capitan放到这台机器上是一个多步操作 - 一个单独的长和无聊的故事):
$ ls -1 /Library/SystemMigration/History/
Migration-7D74B534-AA54-4A4A-8DCC-A5C2F28E1A39
Migration-9C0FE7A4-3445-4BD6-A512-35464EECCBC3
$
Run Code Online (Sandbox Code Playgroud)
然后在以下子目录中QuarantineRoot:
$ ls /Library/SystemMigration/History/Migration-9C0FE7A4-3445-4BD6-A512-35464EECCBC3/QuarantineRoot/usr:
gcc gnu32 gnu64
$
Run Code Online (Sandbox Code Playgroud)
但是,二进制文件是使用GCC和各种库编译的,因此它们目前不运行.例如:
$ otool -L bison
bison:
/usr/gnu64/lib/libintl.8.dylib (compatibility version 10.0.0, current version 10.1.0)
/usr/gnu64/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.1.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 744.18.0)
/usr/gcc/v4.7.1/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
$ ./bison
dyld: Library not loaded: /usr/gnu64/lib/libintl.8.dylib
Referenced from: /Library/SystemMigration/History/Migration-9C0FE7A4-3445-4BD6-A512-35464EECCBC3/QuarantineRoot/usr/gnu64/bin/./bison
Reason: image not found
Trace/BPT trap: 5
$
Run Code Online (Sandbox Code Playgroud)
据我所知,我甚至不能创建符号链接/usr这样gcc或gnu64点其他地方(甚至不是以root权限运行).这是我用过在MachineA上创建软件的技术之一,备用空间/work1用于另一台备用空间的MachineB /work5; 符号链接/usr允许代码进入/work1/gcc或者/work5/gcc只要/usr/gcc指向实际安装文件的位置它就能正常工作.因此,这个SIP系统似乎杀死了几十年来成功使用的所有机制,这些机制基于能够创建至少某种类型的目录条目/usr.
后备位置是"重新编译软件 - 避免/usr作为安装位置".随着时间的推移,我计划使用/opt/gcc而/opt/gnu64不是等效的/usr.我甚至考虑在我的主目录下使用空间,即使我不愿意; 它是'系统'软件.
但是,我已经编译了很多软件,包括GCC的多个版本(从4.4.2到5.2.0),这将是一个令人讨厌的重新编译.事实上,我将不得不放弃旧版本的GCC,我不经常使用它,但是当我需要它们时它们很有用.
哦,我对GNU Tar的配置脚本(1.28和1.26)有问题.它测试它可以创建的目录树的深度,然后无法清理.既不是rm也rmdir不能清理,即使我cd从层次结构到底部.即使剩下大量空间,它也会出现"磁盘空间不足"错误.我可以使用Finder将层次结构移动到废纸篓.但Finder也无法删除它们.Bash有一个tizzy因为它无法解决当前目录的问题.这有点痛苦!所以重新编译和重新安装一些软件并不是一件容易的事.我甚至可能最终使用其他人编译的东西(MacPorts,HomeBrew等),但我希望能够编译自己的东西.我收到错误'操作无法完成,因为项目"confdir-14B ---"正在使用中"; 重启可能是有序的,但我不相信它会解决这个问题.