[РЕШЕНО]FlashStick и Gentoo[ЧАСТИЧНО]
Доброго времени суток. Решил установить себе на флешку gentoo. Разбил диск на два раздела :
/dev/sdb1 1400MB- vfat
/dev/sdb2 600MB - ext2.
Через catalyst сделал свою сборку Livecd, настроил и закинул на флешку. Ядро собрал через genkernel. Вот grub.conf:
title Load Gentoo On the Flash ( GentooOF =) ) root (hd0,1) kernel /boot/kernel-genkernel-x86-2.6.27-gentoo-r10 vga=0x317 real_root=/dev/sdb2 ramdisk_size=8192 root=/dev/ram0 ro splash=verbose console=tty1 quiet initrd /boot/initramfs-genkernel-x86-2.6.27-gentoo-r10
Вкомпилил нужное в ядро(рамдиск, фс). Вот fstab, хотя он здесь не при чём:
/dev/sdb2 / ext2 noatime 0 1
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
Теперь в чём проблема. Проблема самая насущная :
Device /dev/sdb2 is not a valid root device. - Раз !(5)!
Could not find any root device in . - Следом !(5)!
Неспав пару ночей и перелопатив все возможные форумы нашёл след.:
http://eee-pc.ru/forum/viewtopic.php?id=617&p=2. На этом форуме один человек(как бы мне хотелось чем-то заменить это слово) нашёл решение. initramfs монтирует rootfs до того как ядро его определит. Он всё сделал, исправил, настроил, оно всё заработало, но решение не выложил.
Рылся в init скрипте. Нашёл то что нужно. Возможно смог бы что-то исправить да только после даже тривиальных изменений в init-скрипте при передаче его ядру через init=/linuxrc(положил его в корень /dev/sdb2) ядро никак не реагирует. Очень прошу помощи. Заранее спасибо.
Ах да : если после !(5)! ввести /dev/sdb2 всё нормально грузится.
- Для комментирования войдите или зарегистрируйтесь
Что нет никаких идей ? Никто
Что нет никаких идей ? Никто никогда не передавал ядру свой init-скрипт ?
Вообщем как всегда... По
Вообщем как всегда... По этому документу http://en.gentoo-wiki.com/wiki/Initramfs научился создавать свой образ ramfs. Взял за основу проблемный образ. Всё что нужно это правильно подправить init-скрипт(пробовал изменять - работает). Вот этот скрипт: http://pastebin.com/m1a0a37d8
Наивно конечно с моей стороны, но всё же эта секция # Determine root device
отвечает за root device. Где-то там проблема...
#Спустя какое-то время(минут15)
В том скрипте sleep 15 добавил я. Это решает проблему. Конечно надо его уменьшить до необходимого,нужного и желаемого времени. Но всё же хотелось бы решить проблему иным путём. Хотя тот факт что ядро ещё не загрузило необходимый код иным путём может решить и нельзя.
PS::.. Напишите хоть кто-то что-нибудь, а то я сомневаюсь что кто-то читает.
Выкладываю здесь содержимое init-скрипта(остальные инструкции можно получить прочитав топик):
НИКТО НИКОГДА НЕ ОСТАВЛЯЙТЕ РЕШЕННЫЕ ПРОБЛЕМЫ БЕЗ ПРИМЕРОВ ИЛИ ОТВЕТОВ(как сделал один товарищ). И даже намерения типа : "Предлагаю создать статью на вики по этой проблеме всем дружно" или "Могу прикрепить если надо" не устоят перед зыбким песком времени =). Когда кому-то будет надо - будет просто поздно уже и т.д.
Я читаю, но умного
Я читаю, но умного посоветовать не могу пока (-:Е
Разве что вот монтировать устройство по uuid или метке тома. Поможет ли проблеме, не знаю (хотя возможно), но лучше будет точно. Мало ли как устройства определятся
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Дело то не в определении
Дело то не в определении устройств. Самый первый пост: "если потом снова ввести тоже имя /dev/sdb2 всё работает..." - в этом духе.
Про uuid и label другая история. Хочу так сделать, только вот образ у меня маленький, busybox там, mdev вместо udev и диски не определяются по этим параметрам.
а если при загрузке флешка
а если при загрузке флешка определяется, как /dev/sda2, а не /dev/sdb2?.
То она не загрузится, в целом
То она не загрузится, в целом ошибка такая же, но по сути определённо другая. В 1-ом случае ядро не загрузило нужный код, во втором не верно указан раздел. Чтобы использовать UUID, LABEL и т.д., я хочу попробовать mkinitcpio из Arch'a.
Кто-нибудь его в Gentoo встречал ?
Вообще, думется, вполне можно
Вообще, думется, вполне можно написать ебилд по Арховому PKGBUILD'у.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Копания в пакетах Acrh'a,
Копания в пакетах Acrh'a, установка "eдва живого" mkinitcpio ни к чему не привели. Эх, если б как-нибудь udev засунуть в initramfs - проблема была б решена.
Вообще вроде можно. Судя по
Вообще вроде можно. Судя по тому, что гугль вываливает в ответ на "gentoo udev initramfs"
Вот тут какая-то подобная штука вроде делается: http://ru.gentoo-wiki.com/wiki/HOWTO_Multipath_boot_support
По-моему, udev в initrd на gentoo-дисках водится...
Сейчас не могу разрыть свои мысли, бежать пора, так что вывалил "в сыром виде" (-:Е
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Спасибо, находил такое. С
Спасибо, находил такое. С первого взгляда это штука немного для другого. Но теперь уж разбирусь с ней полностью, после вашего совета.
Да, конечно, для другого. Но
Да, конечно, для другого. Но мне кажется, оттуда можно почерпнуть косвенной информации.
И поразбираться, как делается initrd для MinimalCD, мне кажется, стоит.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Согласен. Так же разберу по
Согласен. Так же разберу по кусочкам mkinitcpio, там поддержка udev заявлена как одна из достоинств над initramfs. Делать initrd и initramfs не сложно. Есть соответсвующие статьи - одна на opennet.ru, вторая на en.gentoo-wiki.com. Я уже засовывал udev в initramfs, но по-быстрому в надежде на удачу. Не знаю даже как его инициализировать(вдруг кто-то подскажет как) и зависит ли он от каких-либо либ.
Всё гениальное просто
Оказалось гораздо проще. Хоть я и разобрался почти с mkinitcpio(там всё на bash'e и к тому же по модулям разбито: udev..base..etc).
Чтобы включить поддержку UUID, LABEL у genkernel, точнее у initramfs достаточно добавить опцию --disklabe genkernel'y(это включит в initramfs файл blkid, что и поможет определить LABEL, UUID) ТЧК
И теперь монтируется
И теперь монтируется правильно? Проблема, описанная в заголовке темы, решена? Я немного запутался (-:Е
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Да, теперь монтируется по
Да, теперь монтируется по real_root=LABEL={LABEL}.
Но вот проблема с init скриптом, которому нужен перед монтированием `sleep 3` решена частично, ибо думаю что должен быть более разумный способ.
initramfs
А не знаете ли, как можно включить файл blkid в самопальный initramfs?
Я не пользуюсь genkernel, а собираю ядра "вручную", в .config не
нашёл такого файла, где сие сокровище лежит? Хотелось бы в grub'е
прописать root по UUID'у. С самосборным ведром такого сделать мне
не удалось.
Вы же используете initramfs
Вы же используете initramfs или initrd ? Без них не выйдет. И нужен ещё скрипт init для initramfs или ... из genkernel'a(он его генерирует). Можно просто запустить genkernel --no-clean --disklabel initrd. Получить образ с blkid. Добавить поддержку ramfs в ядро и готово.
И разве такого монтированию по дефолту нет(не работает) ?
initramfs
Использую initramfs, который я создал сам, благодаря Вашей ссылке:
http://en.gentoo-wiki.com/wiki/Initramfs
Поддержка ramfs в ядре у меня всегда.
Вот только blkid как получить в моём initramfs - не знаю.
Подозреваю, что нужно удава запускать в образе, хотя
mini_udev в init прописан. Пока мне больше ничего сказать.
Буду пробовать методом "ненаучного тыка" ;)
Добавлено:
Вопрос снят, initramfs с mini-udev определяет диски по UUID,
система загрузилась. Виной всему была просто опечатка в init-скрипте
образа. Теперь передо мной "мрачной тенью" всаёт вопрос:
как переделать скрипт splash_geninitramfs, чтобы он создавал
вменяемые загрузочные образа, или добавить сплаш-картинку в
своё творение, для "кульной" загрузки :D
Покапайтесь в содержимом
Покапайтесь в содержимом splash_ge*. Возможно надо просто скомпоновать его с образом initramfs(так они оба образы ramfs). Вообще всё это делается командой genkernel --splash=THEME --splash-res=THEME_RES --disk-label --no-clean initrd и добавить в образ темы другие, если нужно. Поддержка будет не только LABEL, но и UUID. Ядро компилиться не будет, genkernel пакет маленький.
initramfs
Всё получилось, спасибо Вам за статью и помощь.
Добавил картинку с помощью splash_geninitramfs в свой загрузочный образ.
Загрузка теперь "кулль", root грузится по UUID, осталось скрипт наваять,
чтобы "вдрючную" это не делать каждый раз, ибо - быстро надоест и забудется ;)
Чтож, буду пробовать, хотя в bash-скриптинге я - полный НОЛЬ... почти :)
Если получится что - выложу.
А что с
А что с Arch?
http://muhas.ru/?p=2 - вот здесь все доходчиво. Я уже сделал. Правда при загрузке на что-то ругается, но быстро идет дальше.
Моя мечта:
#emerge комьютер с генту
>>А что с Arch? Классный
>>А что с Arch?
Классный вопрос. Действительно, а что с ним ?
Одна проблема в том что я не использую arch. Находил и перечитал гораздо больше материала по теме. Ставил с горем пополам arch'евский mkinitcpio - запорол x86 систему в chroot'e.
Не всё так просто как хотелось бы. И мне не нужно чтобы на что-то ругалось.
Ну как тебе сказать, просто я
Ну как тебе сказать, просто я не знаю что такое "attamping" - в общем то это даже не "ругается", а что-то пытается сказать, но я такого слова просто не знаю. А может и ругается.
Моя мечта:
#emerge комьютер с генту
Простите, вы сейчас в
Простите, вы сейчас в адекватном состоянии души и тела ? По последнему посту сложилось впечатление что ты пишешь не в тот топик.