Guardar variable desde initramfs (en el momento del arranque)

Guardar variable desde initramfs (en el momento del arranque)

¿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/environmentun 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_processestá el nombre dado dentro __initde 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/environmentun 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.

información relacionada