¿Cómo ejecuto Homebrew como root?

Hace años, podías salirte con la tuya ejecutando brewcomo root simplemente haciendo brewroot, pero eliminaron esa función. Entonces, en Homebrew 1.1.6, solía editar /usr/local/Homebrew/Library/Homebrew/brew.shpara eliminar la verificación de raíz (la que decía que era "extremadamente peligrosa") para poder ejecutar brewcomo raíz.

La versión más nueva de Homebrew todavía funciona con eso, pero sigue revirtiendo el brew.sharchivo cada vez que lo ejecuto brew, incluso si lo ejecuto chmod 500. Podría escribir un script para cambiarlo y luego ejecutarlo brewautomáticamente, pero no estoy seguro de si esto siempre funcionará y no quiero correr riesgos. ¿Alguien ha encontrado un método diferente para ejecutar Homebrew como root?

Por curiosidad, ¿por qué quieres ejecutar brewcomo root? Además, ¿ sudono es suficiente para sus propósitos?
@Allan sudolo ejecuta como root y me da el mismo error "extremadamente peligroso". Quiero ejecutar como root porque, de lo contrario, tiene problemas para instalar ciertos paquetes, especialmente si algo no se instaló a través de Homebrew (por ejemplo, a través de pip). He ido por ese camino muchas veces. Además, no funciona correctamente para múltiples usuarios sin soluciones extrañas a menos que instale todo como root.
$ su -> $ preparar lo que quieras ?
Construir un paquete de software como tal rootes arriesgado. Incluso al compilar un paquete sin un administrador de paquetes, compilaría el paquete como un usuario sin privilegios (usted mismo) y luego instalaría el paquete como rootcon sudo. Los administradores de paquetes, como Fink y MacPorts, se compilan con sus propios usuarios sin privilegios y luego se instalan como root. Homebrew no tiene tal mecanismo.
@fd0 Comprensible, pero estoy dispuesto a correr el riesgo; pueden hacer prácticamente la misma cantidad de daño sin root en mi computadora personal de todos modos. Pero, ¿por qué Homebrew no se instala simplemente con la raíz como lo hacen los demás? Su enfoque actual de instalar archivos del sistema como un usuario específico ha arruinado mis permisos muchas veces.
@StrawHara Si hago eso, detecta que se está ejecutando como root y se detiene.
Hmm, no veo el problema de mi parte en el que el brew.sharchivo se revierte después de modificarlo y luego ejecutar un brewcomando. Entonces puedo correr sudo brew whatevery brew whateveren tándem muy bien. Mi brew --versionsalida es así: Homebrew 1.2.1-98-g803f9cbf7b-dirty Homebrew/homebrew-core (git revision d3d6; last commit 2017-05-28)FYI, modifiqué mi brew.sharchivo para comentar todas las líneas en la check-run-command-as-rootfunción y coloqué una sola returndeclaración en la parte superior de la función.
@GDP2 Actualicé a Homebrew 1.2.1 (aunque el mío no está "sucio" por alguna razón) e hice lo que sugeriste, y puedo ejecutar sudo brew ...varias veces, pero "actualiza" homebrew si yo sudo brew install ...y sobrescribe el truco, por lo que vuelve al viejo problema.
También intenté git cometiendo mi cambio en /usr/local/Homebrew, sin suerte. ¿Tal vez pueda hacer que SIP bloquee el archivo brew.sh para escritura, incluso para root? :D
@sudo Hmm, eso es muy extraño. Intenté hacer un brew instally continuó sin problemas, es decir, no se brew.shmodificó y se instaló bien (nota al margen posiblemente no relacionada: primero tuve que export HOMEBREW_NO_SANDBOX=truehacerlo para que la instalación se completara correctamente). Antes de proteger el archivo con SIP, puede probar sudo chflags schg /usr/local/Homebrew/Library/Homebrew/brew.shcon lo chmod 500que hizo. Eso, según man chflags, "establecerá el indicador inmutable del sistema (solo superusuario)".
Para aclarar mi último comentario: hice un brew installbajo sudo -sy continuó sin problemas.
Sí, sé que esto es viejo. A SO probablemente no le gustaría un duplicado. Así que aquí está mi apéndice. Entiendo completamente la necesidad de una instalación no root... pero parece exagerado no permitir que root ejecute "brew leaves --installed-on-request", que es simplemente una consulta para averiguar qué está instalado. Incluso eso falla con el mismo error. Tengo un script destinado a documentar todos los productos instalados (PECL, APT, BREW PIP) y para algunos de estos (APT) se requiere root. Si la raíz está prohibida para la elaboración de cerveza, entonces no veo una forma limpia de ejecutar todo esto en un solo script. ¿Consejo? (Se utiliza en una variedad de sistemas).
@Dennis Idk si esto te ayuda, pero MacPorts simplemente se ejecuta como root. Ya no uso cerveza.
Gracias @StrawHara. Elegí homebrew después de investigar los instaladores disponibles, solo instalé a regañadientes porque parecía que no tenía más remedio que usar algún producto de instalación alternativo (no nativo). (Una nueva capa de indirección, por así decirlo). Ahora parece que MacPorts está cumpliendo ese papel. La próxima semana, tal vez algo más. Parece que tenemos que estar en la cima de nuestros juegos para mantener el software funcionando, y la confiabilidad está por la ventana. Me opongo a abandonar el barco por la solución del momento. Sin embargo, valoro y aprecio su respuesta; Puede que no tenga más remedio que hacer esto.

Respuestas (2)

Después de realizar su cambio en el script, intente configurar el indicador inmutable en brew.sh.

chflags uchg /usr/local/Homebrew/Library/Homebrew/brew.sh

no he probado Como regla general, no doy root a las aplicaciones cuyos desarrolladores me ruegan que no lo haga.

También estoy de acuerdo con Jason. Hay una razón por la que dicen que no se debe ejecutar brew como root. Principalmente porque son los desarrolladores y les confiaré su software. Además, a diferencia de macports, que la última vez que revisé todavía requiere eso, brew no necesita ni quiere permisos de root, por lo que si arruina algo, lo más probable es que no estropee todo el sistema. Todo está contenido en su cuenta de usuario y no hay necesidad de jugar con sudo.
Funcionando confirmado, gracias. Lleva algún tiempo intentar actualizar la primera vez, pero luego se sudo brew installejecuta normalmente.
No hay mucho que estropear y hacer que un sistema quede inutilizable con los paquetes que instalaría en una Mac. De todos modos, puedo restaurar mi sistema en 30 minutos. Limpiar mi usuario es mucho más difícil, y muchas cosas directamente no funcionan a menos que se instalen en todo el sistema, como explico en los comentarios anteriores.

Los usuarios típicos no deberían hacer esto, pero usted no es típico, ¿verdad?

Dos problemas:

  1. No puedes dejar de rootear. Si insiste en usar la raíz, la raíz puede sobrescribir brew.shsin importar qué.

  2. No puedes parar brew, después de todo, estás hablando de correr brew.

Así que trabajaremos con eso. Configuremos un alias para copiar y brew.shluego ejecutar brew.

alias brew='cp /<modified>/brew.sh /<actuall>/brew.sh; /usr/local/bin/brew'

(Fije las rutas para que coincidan con su sistema).

Ahora todo lo que necesitas hacer es:

sudo brew <arguments>

(Se convertirá en root, copiará brew.sh, luego se ejecutará brewcomo root con argumentos, luego brewse sobrescribirá brew.shy estará listo para hacerlo todo de nuevo)

Nota: sudotambién puede ingresar el alias, pero de esta manera se siente mejor porque se le pedirá una contraseña cada vez.

Por lo general, no puede usar setuid( chmod u+s) para rootear en scripts de shell, por seguridad. Perl tiene un programa separado suidperlque podría instalarse y podría escalar los privilegios del usuario, pero tales soluciones son un poco profundas para una respuesta rápida.