¿Cómo recrear /usr/local con SIP/modo sin raíz en El Capitan?

Con el modo sin raíz habilitado (también conocido como Protección de integridad del sistema), resulta que puede eliminarlo /usr/localpero no puede volver a crearlo:

$ sudo rm -rf /usr/local
$ sudo mkdir /usr/local
mkdir: /usr/local: Operation not permitted

¿Cómo (re) crear /usr/localo cualquier carpeta de este tipo?

Respuestas (2)

/usr/localse puede volver a crear y escribir en El Capitan desde el 21 de octubre de 2015 cuando Apple lanzó la /System/Library/Sandbox/Compatibility.bundleversión 12 en la actualización de software 031-40358 parcheando 10.11 y 10.11.1, y se instaló como parte de la actualización 10.11.2, combo 10.11.2 actualización y 10.11.2 instalaciones limpias. No necesita hacer nada especial a menos que no haya actualizado a la última versión de punto de El Capitan.

Un sistema parcheado tendrá un paquete de compatibilidad mayor o igual a 12 y mostrará

iMac-TMP:~ joe$ grep /usr/local /System/Library/Sandbox/rootless.conf 
*               /usr/local
iMac-TMP:~ joe$ grep /usr/local /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths
/usr/local
iMac-TMP:~ joe$ defaults read /System/Library/Sandbox/Compatibility.bundle/Contents/Info.plist CFBundleVersion
12.0
iMac-TMP:~ joe$

Un sistema sin parches tendrá un paquete de compatibilidad inferior a 12.0 y no tendrá la /usr/localentrada en /System/Library/Sandbox/Compatibility.bundle/Contents/Resources/paths.

La forma más sencilla y segura es:

  • reiniciar en recuperación ( CMD+ R)
  • iniciar la Utilidad de disco
  • en el menú, seleccione Macintosh HDy Desbloquear si está encriptado; de lo contrario , Montar
  • una vez Macintosh HDque esté montado, cierre la Utilidad de Discos
  • iniciar una Terminal desde el menú de la Utilidad de Discos

Ahora ejecute los siguientes comandos:

  mkdir "/Volumes/Macintosh HD/usr/local"
  chflags norestricted "/Volumes/Macintosh HD/usr/local"
  ls -lOd "/Volumes/Macintosh HD/usr/local"
  drwxr-xr-x  2 root  wheel  - 68 17 Mar 09:24 /Volumes/Macintosh HD/usr/local
  exit

O, como un simple comando:

  mkdir "/Volumes/Macintosh HD/usr/local"; chflags norestricted "/Volumes/Macintosh HD/usr/local"; ls -lOd "/Volumes/Macintosh HD/usr/local"; drwxr-xr-x  2 root  wheel  - 68 17 Mar 09:24 /Volumes/Macintosh HD/usr/local; exit

Finalmente, salga de Terminal y reinicie OS X.

Referencias: