Ninja: La ejecución del destino de instalación con privilegios de root rompe las invocaciones posteriores

Creado en 17 jul. 2017  ·  9Comentarios  ·  Fuente: ninja-build/ninja

Un "patrón común" para una biblioteca es ejecutar make y luego sudo make install . Esto funciona muy bien con CMake. Sin embargo, cuando se usa Ninja como sistema de construcción subyacente, sudo ninja install cambia el propietario de .ninja_log a root. Invocaciones posteriores de ninja que fallan con

 ninja: error: opening build log: Permission denied

Simplemente eliminar el archivo después parece estar bien, pero este no es el camino a seguir, ¿verdad? Cuando planteé este problema en CMake , una sugerencia fue que Ninja intentara escribir el archivo de registro con el propietario original si se ejecuta como root. ¿Qué piensas?

Comentario más útil

Hola,

¿Qué tal si verificamos si ya hay un archivo de registro, si lo hay, asegúrese de que los permisos sigan siendo los mismos, si no, simplemente cámbiele el nombre (y tome el uid y el gid del usuario en ejecución)?

Creé PR https://github.com/ninja-build/ninja/pull/1362 para ver cómo se ve en el código.

Todos 9 comentarios

Si tiene un objetivo ninja que construye cualquier cosa, "sudo ninja ..." construirá esas salidas intermedias como root, lo cual tampoco es deseable (los archivos tendrán el propietario incorrecto y ejecutarán el compilador como root).

Creo que sería mejor si los propios comandos de instalación usaran sudo. Es decir, el archivo de compilación se configuraría de manera que ninja install ejecutaría un comando que se parece a sudo cp ... .

Incluirlo en las reglas de instalación es desagradable: no todas las instalaciones deben realizarse como root y no todas las máquinas usan sudo.

Bien, quise decir que depende del generador.

Entonces, el desarrollador de CMake cree que esto debería ser resuelto por ninja, y tú crees que CMake debería resolverlo. Comprensible, y no tengo el conocimiento suficiente para dar una opinión, pero es poco probable que resuelva el problema.

¿Puede vincular al hilo de cmake relevante?

Está vinculado en la descripción: https://gitlab.kitware.com/cmake/cmake/issues/17073.

Hola,

¿Qué tal si verificamos si ya hay un archivo de registro, si lo hay, asegúrese de que los permisos sigan siendo los mismos, si no, simplemente cámbiele el nombre (y tome el uid y el gid del usuario en ejecución)?

Creé PR https://github.com/ninja-build/ninja/pull/1362 para ver cómo se ve en el código.

Enfrenté el mismo problema mientras construía las fuentes.
El problema es que algunas carpetas se crean con permiso de root y otras carpetas con otro permiso de nombre de usuario.
Para deshacerse de esto, cambie el permiso completo del código fuente a un solo usuario.
sudo chown -R nombre de usuario: nombre de usuario

El mismo problema aqui. Siempre tienes que hacer un sudo chown $USER:$USER .ninja_* después de sudo ninja install . Gracias a todos por investigar este problema. ¡Eres genial!

¿Fue útil esta página
0 / 5 - 0 calificaciones