Вопрос Что такое `run-init`?


Есть init скрипт в исходном ramdisk во время процесса загрузки. На последней операции он говорит, что:

# 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."

Я просматриваю все сценарии в содержимом ramdisk и не могу найти имени файла или имени функции, как это. Что такое run-init на самом деле?


4
2018-03-10 03:51


происхождения


видеть это: linux.die.net/man/8/run_init - Mostafa Ahangarha
Я уже на этой ссылке. Но он говорит, что сценарий (я думаю) находится в SELinux, я не могу найти его в Ubuntu. Где это? Или это не существует в Ubuntu? - naive231
для меня это в /usr/lib/klibc/bin/run-init, использование locate run-init чтобы найти его в вашей системе. - Mostafa Ahangarha
Хорошо, я тоже нашел. Но panic следующая строка после exec run-init..., означает ли это, что поток или управляющее право будет перенесено в $ {rootmnt}? Если не так, мы будем разбиваться panic? - naive231


ответы:


run-init является бинарным исполняемым файлом, он живет в / usr / lib / klibc / bin / run-init и в ваших инициативах и обеспечивается klibc-utils пакет в Ubuntu. Это не сценарий, поэтому вы не можете напрямую заглянуть внутрь, вы можете проверить его исходный код за счет запуска apt source klibc-utils или просмотра репозитория вверх по https://git.kernel.org/cgit/libs/klibc/klibc.git,

Таким образом, основная функция вводного init.c , но это всего лишь оболочка для run_init функции, которая живет здесь runinitlib.c

run_init делает много работы:

  1. Он переходит в новую корневую файловую систему
  2. Проверяет, что это новая корневая файловая система
  3. Проверяет, работает ли он на initramfs
  4. Очищает всю директорию (зачем тратить ОЗУ?)
  5. Устанавливает новую корневую файловую систему
  6. и запускает init в новой корневой файловой системе

Я считаю, было бы очень сложно выполнять всю эту работу скриптом из-за зависимостей, но бинарный исполняемый файл может сделать это очень легко.


4
2018-04-30 06:27





В соответствии с dpkg-query это часть klibc-utils пакет. Некоторые копания в исходном коде показывают вызов execv для запуска процесса init в реальной файловой системе. Если это не удастся, run-init вернется, тем самым вызывая panic на последней строке.


1
2017-08-02 14:11





Ubuntu 14.04LTS В пустой папке создайте файл [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 ..

и запустите его: bash get-it.sh

файл run-init будет находиться в ./bin/run-init

Также вы можете получить initrd с установочного компакт-диска


0
2018-06-17 08:02