LINUX.ORG.RU

Сообщения lyxnorkamel

 

Собираю свой дистр. Ядро матерится на VFS.

Форум — General

Здравствуйте. Как уважающий себя линуксоид решил наконец собрать для себя маленький дистрибутивчик, который бы возможно было записать на флешку с FAT и использовать для ремонтно-восстановительных работ. Я решил сделать дистрибутив только с необходимыми мне инструментами. Мне не нужны иксы. Состав пакетов: mc, nano, dd, cfdisk, fdisk, ntfs3g, ntfsprogs, dosfstools, fsck, ну а чтобы форматирование дисков и снос разделов не был удручающим занятием, во время убиения хардов и форматирования разделов можно сыграть в space invaders (консольный pacman я не нашёл в отдельном виде). Прочитав инструкцию от автора MoviX'а я пошёл по его пути. Скачал и собрал новое ядро (2.6.36, качал это), РабочуюКоробку (BusyBox; качал это), и разметчик диска. Всю работу делал в SlackWare 13.1. Далее создал образ памятного диска:

dd if=/dev/zero of=initrd bs=1k count=5120
далее выполнил команду:
mke2fs -F -m 0 -b 1024 /tmp/ramdisk.img 5120
и примонтировал командой:
mount /tmp/ramdisk.img /mnt/initrd -t ext2 -o loop=/dev/loop0
Создал директории: dev, mnt, etc, tmp, proc, скомпилировал РабочуюКоробку (BusyBox) как статический монолит (static), исключив из него как ненужные все сетевые утилиты и опции, и добавив поддержку кириллицы «искаропки» установив как умолчательные кодировки windows-1251/koi8-r/cp866 наместо наличевствовавших по умолчанию в соответствующих пунктах меню по make menuconfig, далее собрал рабочую коробку командой make, далее make install и скопировал на свой initrd в loop'е директории из поддиректории _install в директории с сорцами рабочей коробки, т.е. корневую ссылку linuxrc, и директории bin, sbin, usr. Привожу содержимое конфигурационных файлов:
/etc/fstab:
none /proc proc defaults 0 0
/etc/inittab:
# Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
::sysinit:/etc/rc.d/rc.S
# Login /bin/sh invocations on selected ttys.
::respawn:-/bin/sh
vc/2::askfirst:-/bin/sh
# Reboot when ctrl-alt-del keys are pressed.
::ctrlaltdel:/sbin/reboot
# Stuff to do before halting or rebooting.
::shutdown:/sbin/swapoff -a > /dev/null 2 > &1
::shutdown:/bin/umount -a -r > /dev/null 2 > &1
/etc/profile:
PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:"
LESS=-MM
TERM=linux
HOME=/root
PS='MicroLinux:\1#'
ignoreeof=10
export PATH DISPLAY LESS TERM PS HOME ignoreeof
/etc/shell:
/bin/sh[br]/bin/ash
/etc/rc.d/rs.S:

#!/bin/ash
/bin/mount -av -t nonfs

/etc/rc.d/rs.S ещё сделал исполняемым путём установки атрибутов. Далее после всего этого выполнил: umount /dev/loop0, далее gzip -9 initrd, далее полез в папку с сорцами ядра, снова make menuconfig, включил опцию поддержки loopback, ramdisk, отключил всё что связано с сетями (за ненужностью), зато включил поддержку ntfs по записи и mc/sd карт, далее собрал make, далее make bzImage, скопировал ядро в /work, переименовал bzImage в vmlinuz, прописал в lilo.conf строки:

image= /work/vmlinuz
initrd = /work/initrd.gz
root = /dev/ram0
rootfs = ext2
ramdisk = 5120
label = MicroLin
read-only
Перезагрузился. И радость... Система заработала. Появилось приглашение ash, я подмонтировал хард, полазил по нему, убедился что дистр рабочий. Перезагрузился. На этот раз собрал все пакеты и скопировал в созданную папку lib на вновь созданном initrd на сей раз размером 32 МБ, скинул все пакеты и библиотеки куда надо, делоопизиоровал образ umount'ом, сжал gzip'ом, подправил конфиг в lilo.conf, выполнил снова lilo -C /etc/lilo.conf, перезагружаюсь, и о ужас - пипец системе:
md: Waiting for all devices to be available before autodetect
md: If you don't use raid, use raid=noautodetect
md: Autodetecting RAID arrays.
md: Scanned 0 and added 0 devices.
md: autorun...
md: ... autorun DONE.
RAMDISK: gzip image found at block 0
List of all partitions:
No filesystem could mount root, tried: ext3 vfat msdos iso9660
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
Pid: 1, comm: swapper Not tainted 2.6.36 #1
Call Trace:
&#91;<c124e612>&#93; ? printk+0xf/0x11
&#91;<c124e50f>&#93; panic+0x50/0x144
&#91;<c1378c28>&#93; mount_block_root+0x1eb/0x1ff
&#91;<c10ab285>&#93; ? sys_mknod+0x13/0x15
&#91;<c1378c88>&#93; mount_root+0x4c/0x54
&#91;<c1378dd5>&#93; prepare_namespace+0x145/0x16c
&#91;<c13783e6>&#93; kernel_init+0x195/0x1a4
&#91;<c1378251>&#93; ? kernel_init+0x0/0x1a4
&#91;<c1003176>&#93; kernel_thread_helper+0x6/0x10
Возвратил я в качестве initrd.gz предыдущую свою сборку, подправил lilo.conf, перезагрузился и та же трабла. Никакие «пляски с бубном» не помогли. Заново пересоздал раздел с меньшим размером, повторил точь в точь что делал - всё равно воз там. Пожалуйста, укажите мне где я допустил оплошность. Уж очень хочу собрать свой микродистрибутив для работы. Заранее премного благодарю.

lyxnorkamel
()

RSS подписка на новые темы