LINUX.ORG.RU

initramfs. No init found.


0

0

Собираю initramfs для одной домашней машинки, не могу победить одну проблему. Итак, есть ЭВМ, в ней sda — обычный IDE'шный диск, на нём корневая ФС, все необходимые драйверы в ядре (не модулями), ОС нормально загружается без всяких initramfs, всё работает.

Хочу сделать initramfs который будет делать fsck, короче не важно, хочу initramfs. Делаю по

http://en.gentoo-wiki.com/wiki/Initramfs

Создал директории bin, dev, lib, прочие, написал init на bash'е, #!/bin/bash в начале не забыл. Сделать init исполняемым не забыл, bash в bin положил, библиотеки в lib положил (как сами библиотеки, а так и symlink'и на них). Скопировать (cp -a) в dev устройсва console, null, sda, sda1, sda2 не забыл. Упаковал всё в cpio.gz, положил в /boot. В ядре поддержка initramfs включена. Создал в grub/menu.lst пункт с указанием моего ядра и initrd.

Но при запуске всё равно жалуется, что не находит /init, предлагает указать опцию init=. Пробовал, не помогает. Вопрос, что я забыл? Что сделать чтобы заработало?

Ещё меня смущает, что при загрузке не видно сообщения о cpio magic, что initramfs найден, загружен. Хотя grub точно что-то грузит, потому что с теми же параметрами в menu.lst, но без указания initrd загрузка проходит нормально, а с initrd — что я сказал, не находит init.

★★★★★
Ответ на: комментарий от ArsenShnurkov

ram0.

root=/dev/ram0 real_root=/dev/sda3

Как я и думал, не помогло. Скопировал cp -a /dev/ram0 dev/ram0, добавил опции к ядру в menu.lst.

kernel panic - not syncing: no init found. Тry passing init = option to kernel

Мой initramfs вообще не обрабатывает параметры передаваемые ядру.

Кстати, я собрал initramfs не совсем по HOWTO, там используют busybox, а я использую bash, glibc и полноценные утилиты (ls, sleep, mount...), но до них всё равно не доходит. Я так делаю не в первый раз. В этот раз вроде делаю всё как раньше, но ничего не работает :-[

Camel ★★★★★
() автор топика
Ответ на: ram0. от Camel

В этот раз вроде делаю всё как раньше

.config сравни со старым, надо было в тот раз скрипт автоматизации сборки писать, чтобы было задокументировано, как было раньше :)

ArsenShnurkov
()
Ответ на: комментарий от ArsenShnurkov

no RD.

вот там
http://www.opennet.ru/man.shtml?topic=initrd&category=4&russian=0
написано, что сначала параметры ядра и /dev/ram0 и init, а потом уже будет важно - обрабатывает или не обрабатывает.

Там написано про LiLo и initrd, а у меня GRUB и initramfs.

Еще, в Википедии есть такой абзац

http://en.wikipedia.org/wiki/Initrd

If the image is a gzip-compressed cpio archive, it will be unpacked by the kernel in an intermediate step into an initramfs (a special instance of a tmpfs available in Linux 2.6.13 onwards), which then becomes the initial root file system. It has the advantage of not requiring an intermediate file system to be compiled into the kernel.

У меня ядро поддерживает tmpfs

$ grep -i tmpfs /boot/config-2.6.31.7-n1 
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
Но что-то мне подсказывает, что ядро не хочет распознавать gzip-compressed cpio archive. Обычно при загрузке с initramfs пишет что-то про found что-то-там, cpio, checking initramfs image...it is. А у меня этого нет.

Camel ★★★★★
() автор топика
Ответ на: no RD. от Camel

Checking if image is initramfs

Вот такой фразы у меня не проскакивает при загрузке:

Checking if image is initramfs...it is

Camel ★★★★★
() автор топика
Ответ на: Checking if image is initramfs от Camel

CONFIG_RD_GZIP

Support loading of a gzip encoded initial ramdisk or cpio buffer. If unsure, say Y.


Symbol: RD_GZIP
Defined at usr/Kconfig:48
Depends on: BLK_DEV_INITRD [=y] && EMBEDDED [=y]
Location:
-> General setup
->-> Initial RAM filesystem and RAM disk (initramfs/initrd) support (BLK_DEV_INITRD [=y])
Selects: DECOMPRESS_GZIP [=y]

ArsenShnurkov
()
Ответ на: CONFIG_RD_GZIP от ArsenShnurkov

grep -i gzip

$ grep -i gzip /boot/config-2.6.31.7-n1 
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_KERNEL_GZIP=y
CONFIG_RD_GZIP=y
CONFIG_DECOMPRESS_GZIP=y

$ grep -i initrd /boot/config-2.6.31.7-n1 
CONFIG_BLK_DEV_INITRD=y

$ grep -i embedded /boot/config-2.6.31.7-n1 
# CONFIG_EMBEDDED is not set
# I2C system bus drivers (mostly embedded / system-on-chip)
# CONFIG_SQUASHFS_EMBEDDED is not set

Это оно? Я про результат последнего grep'а.

Camel ★★★★★
() автор топика
Ответ на: grep -i gzip от Camel

BLK_DEV_RAM=y ?

If RAM disk support (BLK_DEV_RAM) is also included, this also enables initial RAM disk (initrd) support and adds 15 Kbytes (more on some other architectures) to the kernel size.

Выкладывай уж и menu.lst, не стесняйся.

ArsenShnurkov
()
Ответ на: BLK_DEV_RAM=y ? от ArsenShnurkov

menu.lst

color cyan/blue white/blue

default 1
timeout 60
#splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title	Gentoo Linux 2.6.30.9-reiser4-n2
root	(hd0,0)
kernel	/boot/linux-2.6.30.9-reiser4-n2 root=/dev/sda2 #root=/dev/ram0 real_root=/dev/sda3
#initrd	/boot/initramfs-genkernel-x86-2.6.24-gentoo-r5

title	Gentoo, Linux 2.6.31.7-n1
root	(hd0,0)
kernel	/boot/linux-2.6.31.7-n1 root=/dev/sda2

title   Gentoo, Linux 2.6.31.7-n1 experimental
root    (hd0,0)
kernel	/boot/linux-2.6.31.7-n1 root=/dev/ram0 real_root=/dev/sda2
initrd	/boot/initramfs-2.6.31.7-n1.experimental.cpio.gz

title	memtest86+
root	(hd0,0)
kernel	/boot/memtest86+.bin
quiet

То что под номером 1 (отсчёт идёт от 0) это то что сейчас работает. То что experimental, это то что я пытаюсь заставить грузиться с initramfs. Ядро то же самое, только опция initrd появляется.

Camel ★★★★★
() автор топика
Ответ на: комментарий от ArsenShnurkov

BLK_DEV_RAM.

$ grep -i dev_ram /boot/config-2.6.31.7-n1 
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=65536

А какой у нас вопрос про BLK_DEV_RAM и как его вписать в параметры ядра?

Camel ★★★★★
() автор топика
Ответ на: BLK_DEV_RAM. от Camel

Не, я имею в виду, что во второй секции не хватает параметра init=

kernel /boot/linux-2.6.31.7-n1 root=/dev/ram0 real_root=/dev/sda2

ArsenShnurkov
()
Ответ на: BLK_DEV_RAM. от Camel

/init

В initramfs по умолчанию исполняется /init. Он у меня там лежит, это bash script, он исполняем, #!/bin/bash в первой строке есть, bash в bin лежит, библиотеки в lib лежат. Я имею в виду bin и lib в той директории, которую я упаковываю в cpio.gz и передаю загрузчику.

Camel ★★★★★
() автор топика
Ответ на: /init от Camel

Пиши скрипт сборки всего и выкладывай и скрипт и конфиг ядра полный на paste.org.ru, потому что у меня больше идей нет

ArsenShnurkov
()
Ответ на: Up от Camel

Кстати, ты можешь по-моему воспользоваться для сборки genkernel-ом, туда можно вроде бы передавать свой initramfs

ArsenShnurkov
()
Ответ на: /init от Camel

Пропиши все-таки init= явно, потому что есть подозрение, что это у них образное выражение и кашу маслом не испортишь:

After that the system mounts the root file system as a ramdisk instead (due to lack of better options), which apparently succeeds. It tries to execute a program 'init' (at several places like /sbin/init, /bin/init, ...), but none is found.

Does your file system contain an 'init' (maybe as a symlink to busybox) or do you want to boot into another program? You can then simply add its name as boot parameter «init=».

ArsenShnurkov
()

Все ли библиотеки положили в /lib? Если ваш образ смонтировать куда-то, потом сделать «chroot ... /bin/bash», то будет рабочий шелл? И fsck из него запустится?

mky ★★★★★
()
Ответ на: комментарий от mky

Чертовщина какая-то.

Все ли библиотеки положили в /lib? Если ваш образ смонтировать куда-то, потом сделать «chroot ... /bin/bash», то будет рабочий шелл? И fsck из него запустится?

Библиотеки все, в этом я уверен. Но вот с chroot'ом какая-то чертовщина.

initramfs собираю в /usr/src

# ls -l /usr/src/initramfs/
total 8
drwxr-xr-x 2 root root  12 Dec 12 23:23 bin
drwxr-xr-x 2 root root  15 Dec 12 14:43 dev
drwxr-xr-x 2 root root   3 Dec  8 00:38 etc
-rwxrwxrwx 1 root root 687 Dec 12 23:18 init
drwxr-xr-x 3 root root  23 Dec 11 21:43 lib
drwxr-xr-x 2 root root   2 Dec  8 00:17 mnt
drwxr-xr-x 2 root root   2 Dec  8 00:17 proc
drwxr-xr-x 2 root root   2 Dec  8 00:38 root
drwxr-xr-x 2 root root   3 Dec 12 09:49 sbin
drwxr-xr-x 2 root root   2 Dec  8 00:17 sys

bash там есть

# ls -l /usr/src/initramfs/bin/bash
-rwxr-xr-x 1 root root 732108 Nov 17 14:23 /usr/src/initramfs/bin/bash

А теперь хокус-покус

# chroot /usr/src/initramfs /bin/bash
chroot: failed to run command `/bin/bash': No such file or directory
Как это так?

Camel ★★★★★
() автор топика
Ответ на: Чертовщина какая-то. от Camel

О библиотеках.

В интернетах встречается мнение, что это может быть связано с отстутствием библиотек. Вот что у меня:

# ldd /usr/src/initramfs/bin/bash 
	linux-gate.so.1 =>  (0xb7836000)
	libncurses.so.5 => /lib/libncurses.so.5 (0xb77ea000)
	libdl.so.2 => /lib/libdl.so.2 (0xb77e6000)
	libc.so.6 => /lib/libc.so.6 (0xb76a4000)
	/lib/ld-linux.so.2 (0xb7837000)

# ls -l /usr/src/initramfs/lib/
total 2328
lrwxrwxrwx 1 root root      19 Dec  9 23:33 libaal-1.0.so.5 -> libaal-1.0.so.5.0.0
-rwxr-xr-x 1 root root   26124 Nov 17 14:21 libaal-1.0.so.5.0.0
lrwxrwxrwx 1 root root      17 Dec  9 23:33 libblkid.so.1 -> libblkid.so.1.1.0
-rwxr-xr-x 1 root root   71372 Nov 17 14:43 libblkid.so.1.1.0
-rwxr-xr-x 1 root root 1311004 Nov 17 16:58 libc-2.9.so
lrwxrwxrwx 1 root root      11 Nov 17 16:58 libc.so.6 -> libc-2.9.so
-rwxr-xr-x 1 root root    9604 Nov 17 16:58 libdl-2.9.so
lrwxrwxrwx 1 root root      12 Dec  9 23:33 libdl.so.2 -> libdl-2.9.so
lrwxrwxrwx 1 root root      17 Dec  9 23:33 libncurses.so.5 -> libncurses.so.5.6
-rwxr-xr-x 1 root root  274328 Nov 17 14:10 libncurses.so.5.6
lrwxrwxrwx 1 root root      18 Dec  9 23:33 libreadline.so.6 -> libreadline.so.6.0
-r-xr-xr-x 1 root root  201684 Nov 17 14:57 libreadline.so.6.0
lrwxrwxrwx 1 root root      23 Dec  9 23:33 libreiser4-1.0.so.6 -> libreiser4-1.0.so.6.0.0
-rwxr-xr-x 1 root root  287384 Nov 17 15:10 libreiser4-1.0.so.6.0.0
lrwxrwxrwx 1 root root      22 Dec  9 23:33 librepair-1.0.so.6 -> librepair-1.0.so.6.0.0
-rwxr-xr-x 1 root root   92344 Nov 17 15:10 librepair-1.0.so.6.0.0
lrwxrwxrwx 1 root root      16 Dec  9 23:33 libuuid.so.1 -> libuuid.so.1.3.0
-rwxr-xr-x 1 root root   13860 Nov 17 14:43 libuuid.so.1.3.0
lrwxrwxrwx 1 root root      13 Dec  9 23:33 libz.so.1 -> libz.so.1.2.3
-rwxr-xr-x 1 root root   75152 Nov 17 14:11 libz.so.1.2.3
drwxr-xr-x 3 root root       3 Dec 12 23:19 modules

Camel ★★★★★
() автор топика
Ответ на: О библиотеках. от Camel

Не все.

Хм, таки не все скопировал.

Я думал в выводе ldd то что со знаками => есть библиотеки, то что без них — какие-то непонятные (мне) штуки, которые копивать не надо. Ан нет. Скопировал ld-linux.so.2 и ls-2.9.so, и chroot заработал. Сейчас проверю весь initramfs, думаю заведётся.

Camel ★★★★★
() автор топика
Ответ на: О библиотеках. от Camel

Собери статиком хотя бы хэлловорлд и запусти его инитом. Будет хоть видно, по какую сторону косяк.

LamerOk ★★★★★
()
Ответ на: Не все. от Camel

Завелось.

Дело было не в бобине, а в ld-linux.so.2. Всё завелось и работает.

Спасибо, mky.

Camel ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.