¿Debería un administrador de paquetes modificar su archivo .bashrc?

9

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.

David Cowden
fuente
77
¿Puedes hacer que algo se comporte mejor, eliminando la dependencia de la variable de entorno (por ejemplo, usando un archivo de configuración)? .bashrcCreo que eso sería preferible a empaquetar hacks o hackear con ellos .
Claro, pero digamos para el propósito de esta pregunta que modificar la aplicación no es una opción.
David Cowden
1
¿Qué pasa si el usuario no se está ejecutando bash? Hay muchos shells alternativos disponibles con una amplia variedad de archivos de inicio. Sugiero seriamente encontrar alguna solución alternativa aquí.
Julio
10
Así que escribe un envoltorio a su alrededor. Vea, por ejemplo, tomcatque 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.
Julio
1
@ Realidad lo sé. La propuesta de Jules ya ha sido sugerida. Estoy siendo gracioso, burlándome de la lógica circular involucrada para argumentar primero que debería tener una solución agnóstica de shell y luego proceder a sugerir que use un script de shell como solución. Es una broma (;
David Cowden

Respuestas:

18

¿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?

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/profiley /etc/csh.cshrcrespectivamente. (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/profilelectura de todos los archivos /etc/profile.d/*.sh.

Blrfl
fuente
1
Históricamente, rcen un script, el nombre deriva de CTSSruncom (Run Commands), pero desde entonces ha ampliado su alcance para incluir otros significados.
Jeffrey Hantin
1
@JeffreyHantin: Touché. Remoto.
Blrfl
1
Odio seguir escogiendo, pero profile.dno está integrado en bash, es un gancho que comúnmente se proporciona (generalmente la base de la distribución) /etc/profile. ;)
Jeffrey Hantin
1
@JeffreyHantin: Cierto, aunque no se criticará mi uso de la palabra "Unixy". :-)
Blrfl
14

Es no aceptables para modificar de un usuario /homeestructura desde el gestor de paquetes a menos que la modificación es el punto entero.

Los principales enfoques para esto son:

  • Notifique al usuario que necesita configurarlo.
  • Suministro predeterminado, por lo que no es necesario
  • Empaquete una secuencia de comandos de inicio que establezca los valores adecuadamente
  • (Si la distribución lo admite) Suelte un archivo exportando la variable de entorno dentro /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.
Daenyth
fuente
7

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.

R Sahu
fuente
También he considerado esta idea. El proyecto es joven y llegará al punto en que esto no debería ser necesario.
David Cowden
@ GlenH7 Actualicé mi respuesta. Esperemos que la respuesta actualizada sea más de la respuesta que está buscando.
R Sahu
@ GlenH7: Esta pregunta es esencialmente un problema XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem , donde la necesidad de variables de entorno es el verdadero problema a resolver.
cuál es
Además, la sugerencia de esta respuesta para crear un script de envoltura es la única respuesta que funcionará para todos los shells.
cuál es
1
@MattThomason esa comprensión es lo que me impulsó a hacer la pregunta (;
David Cowden,
5

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 .bashrcy, de lo contrario, dar instrucciones sobre cómo deberían hacerlo ellos mismos.

Kilian Foth
fuente
Gracias por el consejo. Nunca antes había escrito un paquete público y solo quiero asegurarme de no hacer algo tabú.
David Cowden
Así es como el SDK de Google Cloud maneja esto hoy. Le pregunta si desea modificar sus archivos de inicio.
jmq
1

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).

pjc50
fuente
0

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 .bashrcarchivo del usuario ; en su lugar, debe agregar un script a /etc/profile.d .

Idan Arye
fuente