¿Cómo puedo guardar las variables de entorno en el momento del arranque antes de que se haya montado el sistema de archivos real?
Sé que hay /etc/environment
un archivo dentro de initramfs que aún no es accesible. También pensé en escribir un archivo para almacenar el valor, pero cuando ese archivo sale del sistema, se anula después de montar el sistema de archivos real.
Ps: solo quiero almacenar la variable para más tarde, no leerla en el momento del arranque
EDITAR DESPUES DE RESPONDER
Aproximadamente :
- Cree un módulo de kernel (busque ayudaaquíyallá) nombradomod.ko
- Asegúrese de que el módulo se pueda utilizar durante el arranque (incluyéndolo dentro de la imagen del kernel con initramfs-tools o buscándolo dentro del sistema de archivos)
- Agregue las siguientes líneas a su script
Si no ha incluido el módulo en la imagen del kernel
insmod /path/to/mod.ko
De lo contrario directamente
echo "env_var=value" > /proc/name_of_your_process
¿Dónde name_of_your_process
está el nombre dado dentro __init
de su módulo (al hacer entry = proc_create("name_of_your_process",0777,NULL,&my_fops);
)?
Luego, más tarde durante el proceso de inicio en un script
cat /proc/name_of_your_process
>> env_var=value
rmmod mod.ko
Respuesta1
Bueno, la herencia normal del entorno (simplemente exportarlo...) funcionaría en teoría, pero... el problema es que, sea cual sea tuinitramfsEstá comenzando probablemente limpiará el ambiente a propósito, ya que esto generalmente se hace para asegurarse de que no esté sucediendo nada extraño. Dejar que las variables de entorno no se controlen puede ser un peligro para la seguridad.
Sé que hay
/etc/environment
un archivo dentro de initramfs que aún no es accesible.
La parte divertida sobreinitramfses que puedes hacer lo que quieras. La unica limitacion es tu imaginacion.
Puede hacer que el archivo sea totalmente accesible. Montar, modificar, desmontar. O si está utilizando un sistema de archivos tradicional, sin sumas de comprobación, incluso puede modificarlo.sinmontando cualquier cosa (o al menos no en modo lectura-escritura). El mismo truco que utiliza GRUB para grubenv
.
Si no quiere meterse con el sistema de archivos o el almacenamiento físico en general, puede configurar un disco ram o tmpfs o un dispositivo de bucle o... hay innumerables formas para que initramfs deje algo atrás (normalmente hay que hacer una esfuerzo por limpiar).
Respuesta2
Cuando initramfs limpia todos los archivos que ejecutaraíz_interruptorlo que eliminará todos los archivos EXCEPTO las carpetas: /proc, /dev, /sys y /run. Es posible que se pueda crear un archivo especial en una de esas carpetas, pero esto implica algún truco.
Ver:¿Es posible crear un directorio y un archivo dentro de /proc/sys?
Su opción más sencilla, por supuesto, es simplemente agregar un script para escribir la variable en el sistema de archivos después de que se haya cargado el sistema de archivos raíz pero antes de ejecutar init. Esto iría en el "fondo local"carpeta. ¿Hay alguna razón por la que no puedas hacer esto?
Respuesta3
Es sencillo. Eche un vistazo a fstab. Luego monte el dispositivo raíz y escriba su variable en un archivo en el dispositivo raíz montado. Aprendí esto de kdump.