Решил сдуть пыль со старого нетбука eeepc900. После попытки 'по быстрому' поднять на нем последнюю ubuntu понял что ребята из каноникал делают что то сильно не то и решил заточить последнюю gentoo под него.
Немного модифицировал настройки ядра, взятые от сюда по тамошним же мануалам, только что wifi там другой..
За сборку ядра и образа initramfs отвечал genkernel (скопировал изначальный .config в папку /usr/src/linux):
genkernel all --menuconfig --oldconfig --symlink
Загрузчик grub2
Систему собирал на 'большом брате' в виртуалке (CFLAGS="-O2 -march=i686 -pipe" CHOST="i686-pc-linux-gnu" ACCEPT_KEYWORDS="~x86"...) потом переносил по сети через nfs tar-ом (я в шоке! в gentoo minimal нет netcat, но раньше он точно был).
Файловая система ext4, один раздел без выделенного /boot (поддержку вкомпилил в ядро не модулем, и отключил предварительно ext2 и ext3, так как по умолчанию система пытается монтировать раздел в ext2). В /dev проверил, есть null и console.
Так вот после grub система грузит ядро (по логу единственная ошибка - не найдена soundcart, с этим я еще по возекаюсь позже) а так же сообщения об обнаружении usb контроллера и устройств на нем (картридер, вебкамера,..) и тут же выдает приглашение шела busybox с документацией по настройки сети с помощью net-setup (кстати в образ получается по умолчанию встроен сервер sshd, и работает).
Сеть работает, корневой раздел монтируются (вручную), а если подготовить среду для chroot (mount -o bind /dev.. /proc//) все прекрасно работает, собственно так сижу и донастраиваю.
Я не понимаю что я не так сделал, если системе подсунуть ядро с образом от livecd то система нормально грузится (только, что странно, поддержки сети почему то нет, не стал разбираться почему). Не считаю это решением, потому как в ядре от livecd слишком много всего накручено, оно грузится несколько секунд, а цель сделать очень быструю загрузку системы, заточенную под конкретное железо (будет squashfs + unionfs или aufs еще не решил? а для обновлений все буду подготавливать на быстрой машине).
Проблема в образе initramfs? Потому что в /init даже нет намека на использование switch_root или теперь используется что то другое? Кстати бинарник switch_root есть но я не знаю как им нормально пользоваться.
mkdir /1
mount /dev/sda1 /1
switch_root -c /dev/console /1 /sbin/init
выдает одно и то же сообщение с документацией по его использованию:
BusyBox v1.20.2 (2012-12-13 21:01:16) multi-call binary.
Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]
Free initramfs and switch to another root fs:
chroot to NEW_ROOT, delete all /, move NEW_ROOT to /,
execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.
-c DEV Reopen stdio to DEV after switch
Если запускать:
exec switch_root -c /dev/console /1 /sbin/init
то выдает ту же документацию, а после:
Kernel panic - not syncing: Attempted to kill init! exitcode=0.00000100
Pid: 1,comm: init Not tainted 3.7.1-gentoo #1
Call Trace:
...
Как видно я совсем не понимаю что именно нужно добавить в /init чтобы заработало, не хочу использовать тяжелый готовый скрипт от livecd, чуть позже попробую подсунуть его скрипт в свой образ (но, во первых я хочу разобраться, что же именно не дает подменить корень и запустить linux, а во вторых хочется поменьше лишнего и побыстрее загрузку системы с момента включения).
1. возможно, не совсем
1. возможно, не совсем внимательно прочел (пишите лаконичнее), но все же не понял — зачем нужен initramfs? Тем более его тяжеленная версия от genkernel?
2. gentoo minimal рекомендуется сменить на sysrescuecd, там все не так почикано.
Beelzebubbie написал(а): 2.
Не пора ли поднять на горге вопрос о направлении собственного формата install media следом за инсталлятором? :)
:wq
--
Live free or die
Beelzebubbie написал(а): 1.
Извиняюсь за сумбурность, хотел в одном сообщении вместить ответы на предполагаемые вопросы, чтобы тред не затянулся на несколько суток...
Мои скилы в gentoo немного подустарели, и само собой напишу свой /init из 5 строк, если разберусь, в том то и проблема что я не понимаю, что не так. От initramfs избавляться не собираюсь, так как в планах unionfs/aufs, плюс возможно будет чуть посложнее конфигурация, плюс те же методы будут использоваться совсем для других задач, а там нужен будет lvm и снапшоты.
И я не понимаю, почему 'этот монстроуозный' genkernel вообще не добавил код продолжения загрузки с использованием switch_root в свой /init !!!
p.s. у меня появилось чувство что в ядре должно быть что то включено, чтобы работал switch_root?
/
man genkernel /--real-root?В
/etc/fstabчто прописано?:wq
--
Live free or die
real_root в опциях ядра в
real_root в опциях ядра в grub прописывал на само устройство /dev/sda1 и то же самое прописано в fstab
Мне кажется до fstab не доходит
все же любопытно, а если
все же любопытно, а если попробовать загрузиться пока без initramfs и поглядеть? чтобы исключить лишние поводы для «расстройства»?
а потом, если уж он нужен, то всегда допишете что надо самостоятельно.
(ошибся уровнем поста ;) )
Beelzebubbie написал(а):все
Да да, тоже подумал так, без initramfs все конечно грузится (правда udev не запускался без devtmpfs в ядре)...
p.s. Сейчас бодаюсь с видео, жаль времени мало разобраться с сабжем, xorg работает, mplayer видео кажет (звук еще под вопросом почему то), а вот в консоли черный экран, и где я опять что попутал, вроде kernel modesetting уже давно прекрасно работало, в т.ч. на intel.
>без devtmpfs в ядре Не в
>без devtmpfs в ядре
Не в этом ли корень как минимум некоторых проблем? Когда делал свой маленький initramfs, то без devtmpfs таки не работало, хотя не могу вспомнить, что именно.
Beelzebubbie написал(а): >без
к сожалению для работы switch_root этого недостаточно.
я как основу для собственного
я как основу для собственного initramfs использовал это: http://wiki.gentoo.org/wiki/Early_Userspace_Mounting
там есть немало ошибок, но в целом схема рабочая, и, конечно же, switch_root там используется.
Работоспособность проверена как минимум на 3х машинах совершенно различных в плане «истории» конфигов ядра, подобного Вашему эффекта не замечал.
/
Только не говори, что portage тебя об этом не предупреждал.
:wq
--
Live free or die
А есть ли возможность
А есть ли возможность получить список всех таких предупреждений?... пока у меня только глупый вариант, запустить emerge -e ... и записать вывод в лог, а то я хз где он может храниться по умолчанию.