O que é 'run-init', na verdade?

4

Há um script init no ramdisk inicial durante o processo de bootint. Na última operação, diz que:

# Chain to real filesystem
exec run-init ${rootmnt} ${init} "$@" ${recovery:+--startup-event=recovery} <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1
panic "Could not execute run-init."

Eu pesquiso todos os scripts no conteúdo do ramdisk e não consigo encontrar nenhum nome de arquivo ou nome de função como esse. O que é o run-init na verdade?

    
por naive231 10.03.2016 / 04:51

3 respostas

4

run-init é um executável binário, ele reside em / usr / lib / klibc / bin / run-init e no seu initramfs e é fornecido pelo pacote klibc-utils no Ubuntu. Não é um script, então você não pode dar uma olhada diretamente nele, você pode verificar seu código fonte rodando apt source klibc-utils ou navegando pelo repositório upstream em link .

Portanto, a função principal está em run-init.c , mas é apenas um wrapper para run_init function, que mora aqui em runinitlib.c

run_init faz muito trabalho:

  1. Salta para o novo sistema de arquivos raiz
  2. Verifica se este é o novo sistema de arquivos raiz
  3. Verifica se está no initramfs
  4. Limpa todo o diretório (por que desperdiçar a RAM?)
  5. Monta o novo sistema de arquivos raiz
  6. e executa o init no novo sistema de arquivos raiz

Eu acredito que seria muito complicado fazer todo esse trabalho por um script, por causa das dependências, mas o arquivo executável binário pode facilitar bastante.

    
por rth 30.04.2017 / 08:27
1

De acordo com dpkg-query , faz parte do pacote klibc-utils . Algumas escavações no código-fonte mostram uma chamada para execv para iniciar o processo init no sistema de arquivos real. Se isso falhar, run-init retornará, disparando assim o panic na última linha.

    
por Drew McGowen 02.08.2016 / 16:11
0

Ubuntu 14.04LTS Na pasta vazia, crie o arquivo [get-it.sh]

#!/bin/sh

cp /boot/initrd* initrd.cpio.gz
mkdir initrd
cd initrd
zcat ../initrd.cpio.gz | cpio -di
find | grep run-init
cd ..

e execute: bash get-it.sh

arquivo run-init estará em ./bin/run-init

Você também pode obter o initrd a partir do cd de instalação

    
por Sergey Kovalev 17.06.2016 / 10:02

Tags