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?
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!
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.