Salvar variável do initramfs (no momento da inicialização)

Salvar variável do initramfs (no momento da inicialização)

Como posso salvar variáveis ​​de ambiente no momento da inicialização, antes que o sistema de arquivos real tenha sido montado?

Eu sei que existe, /etc/environmentmas dentro do initramfs esse arquivo ainda não está acessível. Também pensei em escrever um arquivo para armazenar o valor, mas quando esse arquivo sai do sistema, ele é substituído após a montagem do sistema de arquivos real.

Ps: Só quero armazenar a variável para depois, não para lê-la na hora do boot

EDITAR APÓS A RESPOSTA

Aproximadamente:

  • Crie um módulo do kernel (encontre ajudaaquie) nomeadomod.ko
  • Certifique-se de que o módulo seja utilizável durante o tempo de inicialização (incluindo-o dentro da imagem do kernel com initramfs-tools ou encontrando-o no sistema de arquivos)
  • Adicione as seguintes linhas ao seu script

Se você não incluiu o módulo na imagem do kernel

insmod /path/to/mod.ko

Mais diretamente

echo "env_var=value" > /proc/name_of_your_process

onde name_of_your_processestá o nome dado dentro do __initseu módulo (ao fazer entry = proc_create("name_of_your_process",0777,NULL,&my_fops);)

Mais tarde, durante o processo de inicialização em um script

cat /proc/name_of_your_process
>> env_var=value
rmmod mod.ko

Responder1

Bem, a herança de ambiente regular (basta exportá-la...) funcionaria em teoria, mas... o problema é que, seja qual for o seuinitramfsestá começando provavelmente limpará o ambiente de propósito, já que isso geralmente é feito para garantir que nada de estranho esteja acontecendo. Deixar as variáveis ​​de ambiente sem verificação pode ser um risco à segurança.

Eu sei que existe, /etc/environmentmas dentro do initramfs esse arquivo ainda não está acessível.

A parte divertida sobreinitramfsé que você pode fazer o que quiser. A única limitação é a sua imaginação.

Você pode tornar o arquivo totalmente acessível. Montar, modificar, desmontar. Ou se você estiver usando um sistema de arquivos tradicional - sem somas de verificação - você pode até modificá-losemmontar qualquer coisa (ou pelo menos não no modo leitura-gravação). O mesmo truque que o GRUB usa para grubenv.

Se você não quiser mexer no sistema de arquivos ou no armazenamento físico em geral, você pode configurar um disco RAM ou tmpfs ou dispositivo de loop ou ... existem inúmeras maneiras de o initramfs deixar algo para trás (geralmente você precisa fazer um esforço para limpar).

Responder2

Quando o initramfs limpa todos os arquivos que executaswitch_rootque excluirá todos os arquivos, EXCETO as pastas: /proc, /dev, /sys e /run. Pode ser possível criar um arquivo especial em uma dessas pastas, mas há truques envolvidos.

Ver:É possível criar um diretório e arquivo dentro de/proc/sys?

Sua opção mais fácil, é claro, é apenas adicionar um script para gravar a variável no sistema de arquivos depois que o sistema de arquivos raiz for carregado, mas antes da execução do init. Isso iria para o "fundo local". Existe algum motivo para você não poder fazer isso?

Responder3

É simples. Dê uma olhada no fstab. Em seguida, monte o dispositivo raiz e grave sua variável em um arquivo no dispositivo raiz montado. Aprendi isso com o kdump.

informação relacionada