Estoy trabajando en un dispositivo integrado que ejecuta Yocto Poky como distribución.
El producto final tendrá varias aplicaciones que se inician con SysVinit
. Sólo hay un root
usuario.
Tengo algunos scripts, tanto en /etc/init.d
como /etc/profile.d
que agregan algunas variables de entorno que necesitan nuestras aplicaciones. El problema al que me enfrento es que, si ejecuto la aplicación "a mano" (por lo que tengo un shell interactivo), se ejecutan bien, ya que los scripts /etc/profile.d/
se obtuvieron, pero cuando se ejecutan SysVinit
, no pueden encontrar el entorno poblado (obviamente ). Estamos usando sh
como caparazón.
Leí sobre diferentes archivos como .bashrc
y .profile
algunas variables como ENV
y BASH_ENV
. Intenté definir mis variables allí, pero sin suerte. Una pequeña solución que encontré fue iniciar mi aplicación principal en un shell de inicio de sesión (desde SysVinit
):
2:12345:once:/bin/sh -lc /usr/bin/my_app
Entonces mis preguntas son:
- ¿Cómo puedo configurar el entorno durante el arranque (también conocido como sin iniciar sesión) o dejar que
SysVinit
lo haga de una manera agradable? - Las exportaciones realizadas en
/etc/init.d
scripts no se propagan a mi entorno en absoluto; eso se debe a que esos scripts se ejecutan en un subshell y no se originan en el actual (eso requerirá iniciar sesión dos). Supongo, entonces, ¿cómo puedo exportar variables desde allí? - ¿Es mi solución una solución válida?
Respuesta1
- ¿Cómo puedo configurar el entorno durante el arranque (es decir, sin iniciar sesión) o dejar que SysVinit lo haga de una manera agradable?
Durante el arranque, el entorno está limpio (no se inicializa el jet). Necesita poner variables env a través de comandos source
o (si su servicio es un script) o inicializarlo en el programa (es decir, mediante un archivo de configuración)..
sh
Pequeño ejemplo de encabezado de script de servicio:
#!/bin/bash
[ -f /etc/profile.d/needed.sh ] && . /etc/profile.d/needed.sh
. . .
- Las exportaciones realizadas en los scripts /etc/init.d no se propagan a mi entorno en absoluto, eso se debe a que esos scripts se ejecutan en un subshell y no se originan en el actual (para eso será necesario iniciar sesión dos veces), supongo, entonces, ¿cómo puedo ¿Exporto variables desde allí?
source
sus variables de entorno para subshells o llame a comandos con la variable de entorno especificada.
Pequeño ejemplo de encabezado de script de servicio:
#!/bin/bash
. . .
$(BASH_ENV=/etc/profile.d/needed.sh command)
$(ENV_VAR1=value1 command)
. . .
- ¿Es mi solución una solución válida?
Si es trabajo, es un camino sucio para el servicio. Ver 1. y 2.