Estoy escribiendo un paquete para algo que requiere que se establezca una variable de entorno para ejecutarse correctamente. ¿Debería el paso de instalación de un administrador de paquetes modificar el entorno de un usuario, o simplemente pedirle al usuario que lo haga por sí mismo? Mi intuición sería la última, pero puedo ver argumentos para la primera.
installer
environment
package-managers
David Cowden
fuente
fuente
.bashrc
Creo que eso sería preferible a empaquetar hacks o hackear con ellos .bash
? Hay muchos shells alternativos disponibles con una amplia variedad de archivos de inicio. Sugiero seriamente encontrar alguna solución alternativa aquí.tomcat
que necesita varias variables de entorno para funcionar correctamente; todos están configurados por un script de inicio que se ejecuta en lugar de ejecutar su binario directamente.Respuestas:
Ninguno. Los instaladores de paquetes nunca deben tocar nada en un directorio de inicio para una cuenta que el paquete no posee. Los paquetes también deben configurarse para que, si están instalados, se puedan usar sin ningún esfuerzo especial por parte del usuario. (Hay casos excepcionales en los que no desea hacer esto, pero son pocos y distantes entre sí).
Los entornos Unixy tienen un lugar para colocar los archivos de configuración que se leen cada vez que un usuario inicia un shell de inicio de sesión. Para los shells Bourne y C, puede insertar su configuración en
/etc/profile
y/etc/csh.cshrc
respectivamente. (No olvide eliminarlo cuando desinstale).Muchos sistemas también admiten hacer esto usando archivos individuales, lo que facilita agregar y eliminar bits de configuración sin tener que colocar texto en algún lugar arbitrario en un archivo. (También le brinda todos los beneficios de control y responsabilidad que obtiene de un administrador de paquetes). Algunas distribuciones configurarán la
/etc/profile
lectura de todos los archivos/etc/profile.d/*.sh
.fuente
rc
en un script, el nombre deriva de CTSSruncom
(Run Commands), pero desde entonces ha ampliado su alcance para incluir otros significados.profile.d
no está integrado en bash, es un gancho que comúnmente se proporciona (generalmente la base de la distribución)/etc/profile
. ;)Es no aceptables para modificar de un usuario
/home
estructura desde el gestor de paquetes a menos que la modificación es el punto entero.Los principales enfoques para esto son:
/etc/profile.d
. En algunos sistemas Linux, todos los scripts en este directorio provienen de la configuración de shell predeterminada, por lo que puede configurar la variable allí de forma segura.fuente
Pregunta ¿Debería el paso de instalación de un administrador de paquetes modificar el entorno de un usuario?
Respuesta No. Es una mala idea modificar los datos de un usuario, en este caso el archivo .bashrc. Los datos del usuario deben ser considerados sagrados por un administrador de paquetes?
Pregunta ¿Debería el paso de instalación de un administrador de paquetes simplemente solicitar al usuario que lo haga por sí mismo?
Respuesta Esta es una solución mucho más sabrosa pero aún no es ideal.
Creo que debería crear un script de shell envoltorio donde pueda establecer las variables de entorno necesarias y ejecutar el ejecutable después de eso.
fuente
Te estás perdiendo el bosque por los árboles. Obviamente, es más conveniente realizar el cambio de entorno para el usuario, pero también es más arriesgado y algo invasivo. Debería combinar lo mejor de ambos mundos preguntándole al usuario si el instalador debería modificar sus opciones
.bashrc
y, de lo contrario, dar instrucciones sobre cómo deberían hacerlo ellos mismos.fuente
Estás asumiendo que "usuario" es singular. ¿Qué sucede si tengo miles de usuarios en este sistema?
Asume que incluso puede encontrar el directorio de inicio del usuario. Si los usuarios se administran a través de, por ejemplo, LDAP, es posible que ni siquiera se le permita obtener una lista de todos los usuarios válidos. Los directorios de inicio pueden no estar en / home; pueden montarse dinámicamente desde la red. El directorio de inicio del usuario puede estar encriptado y la clave inaccesible mientras no haya iniciado sesión.
No hay forma de hacer esto de manera confiable en todas las situaciones posibles. Utilice el mecanismo de la distribución para establecer variables de entorno para los usuarios cuando inician sesión o generan shells. Si eso no funciona, escriba un contenedor. (El contenedor también puede ser un binario si es necesario, para abordar el argumento en los comentarios).
fuente
Establecer una variable global en un paquete es aceptable si es una definida por su propio proyecto (¡y eso significa que el nombre del proyecto es parte del nombre de la variable!). Incluso entonces, no debe tocar el
.bashrc
archivo del usuario ; en su lugar, debe agregar un script a /etc/profile.d .fuente