LINUX.ORG.RU

Универсальное ядро без genkernel

 


1

2

Хочу себе на внешнем жестком диске установить Gentoo, чтобы всегда иметь рабочую лошадку под рукой, независимо от того, что установлено на конкретном компьютере. Проблема в том, что для этого нужно сделать наиболее универсальное ядро. Можно конечно воспользоваться genkernel'ом, но мне не нравится, по какому принципу он компиллит ядро (а конкретно initrd, наличие фреймбуфера, офигенной кучи модулей, половину из которых наверное можно было бы не включать, да и вообще я люблю ванильное ядро использовать, а не gentoo-sources).
Посоветуйте пожалуйста, есть ли какой-нибудь способ сгенерить универсальное ядро стандартными средствами? Для стационарной установки я всегда делаю так:

make defconfig
make localyesconfig
make menuconfig (здесь включаю всего пару галочек, вроде поддержки основных файловых систем и поддержки нужного Ethernet-контроллера - все остальное, как правило, уже проставлено)
make
make modules_install

На другом компе с другим железом оно вряд ли в таком виде загрузится.
P.S. И еще вдогонку маленький вопрос. На каком носителе система будет производительнее: на флешке, на внешнем жестком диске или вообще одинаково в этом плане?

★★★★★

Последнее исправление: Rinaldus (всего исправлений: 1)

Проблема в том, что для этого нужно сделать наиболее универсальное ядро. Можно конечно воспользоваться genkernel'ом, но мне не нравится, по какому принципу он компиллит ядро (а конкретно initrd, наличие фреймбуфера, офигенной кучи модулей, половину из которых наверное можно было бы не включать, да и вообще я люблю ванильное ядро использовать, а не gentoo-sources).

Люди, вы хоть немного гуглили что такое генкернел? При чем здесь универсальность? Какой конфиг ему сунешь такое ядро и будет

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

Хотя бы прочёл то, на что отвечаешь, человек.

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

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

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)

включаешь все модули чипсетов и все ФС в ядро жёстко (т.е. не модулями) и собираешь

ядро получится жирным, зато универсальным :)

anonymous
()

Компиляция ради компиляции? Возьми ядро с любого live-cd.

Или собери SMP ядро для i386, включи поддержку всех контроллеров жестких дисков, если нужна сеть, то и все сетевухи. Этого должно хватить для загрузки на большинстве компов в консольном режиме.

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

Можно про чипсеты поподробнее? Это все, что находится в разделе Device Drivers или в каких-то еще разделах надо? Про файловые системы я знаю, что это необходимый минимум, который надо обязательно включать, а вот по поводу всего остального, что может понадобиться...

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

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

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

Как уже посоветовали собирайте ядро с монолитным включением драйверов контроллеров жёстких дисков и файловой системы раздела переносного жёсткого диска, на котором будет установлена ваша система.

Я бы всё же посоветовал вам использовать initramfs, хоть собранного всё тем же genkernel, т.к. на разных ПК имя устройства жёсткого диска, скорее всего, будет различным, где даже /dev/sda, где /dev/sdb, где /dev/sdc. В общем, это я к чему, вам каждый раз придётся передавать ядру свой параметр root=/dev/sdXY. А это уже не хорошо. Но при использовании initramfs можно указывать вместо имени раздела идентификатор (UUID) или метку (LABEL) файловой системы.

Что бы собрать initramfs через genkernel без лишних модулей, но с поддержкой указания корневого раздела через UUID или метку файловой системы давайте такую команду:

genkernel ramdisk --disklabel --no-ramdisk-modules

Теперь корневую файловую систему системы, которая у вас будет загружаться с переносного жёсткого диска можно указывать так:

root=UUID=<UUID файловой системы>
root=LABEL=<метка файловой системы>
UUID файловой системы можно узнать с помощью команд:
blkid
ls -ls /dev/disk/by-uuid/

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

а вот по поводу всего остального, что может понадобиться...

Включайте это всё остальное модулями.

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

Главное - загрузиться в консоль, дальше проще. Можно попробовать воткнуть в ядро свободные драйвера для основных графических карт, авось заработает. Другой вариант, собрать модули для основных карт, можно закрытые (нужно учитывать, что время от времени производитель прекращает поддержку старых карт в новых драйверах, т.е. нужно будет несколько модулей с разными версиями одних и тех же драйверов). Затем нужно добавить init-скрипт, который будет определять тип и версию карточки и подгружать в ядро соответствующий модуль. Еще наверное можно попробовать воткнуть фреймбуфер, но я с ним никогда не имел дела, не знаю.

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

Тогда уж к init скрипту нужна база карточек. Но, по большому счёту, хорошо себя ведут и все открытые видео драйверы, если ТС не нарвётся на уж очень новую карту или откровенно совсем уж старую.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 1)

Универсальное ядро? См в {любом дистрибутиве/gentoo/sabayon/calculate} даже делать не надо только бери и юзай

init_6 ★★★★★
()

Взять конфиг из Slackware, там без initrd и как раз ваниальное. Запустить make oldconfig и профит.

raven_cler ★★
()

Возьми конфиг с любой убунты. Запихни в директорию с исходниками ядра и переименуй в .config . Прокони make oldconfig, скажи везде «да» или «М», и собирай ядро с initramfs.

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

Тогда скачай systemrescueCD и вытяни оттуда.

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

За --disklabel спасибо, я почему-то думал, что genkernel сам его добавляет по умолчанию, и система, которую я собирал аналогичным образом месяц назад не хотела взлетать с initrd. Теперь я догадываюсь, почему.

Deleted
()

добавь фс и чипсеты монолитно
укажи рут= для загрузкм ууид рутфс или собери инитрд с бизибокс. инитом на bash - дальше, дело техники)))
загрузчик - груб4дос
он умеет нтфс и фат32 в добавок к ехтфс и рейзер

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

Как у вас выставлена опция:

CONFIG_DEVTMPFS

Можете заместо genkernel использовать dracut для создания initramfs.

Сейчас нет под рукой initramfs, собранного genkernel, но для dracut достаточно указания только корневого раздела сразу, без всяких root=/dev/ram0 и realroot.

Попробуйте сделать так с genkernel:

kernel /boot/vmlinuz-<kernel_version> root=LABEL=<метка ФС корневого раздела>
initrd /boot/initramfs-<kernel_version>
или так:
kernel /boot/vmlinuz-<kernel_version> root=UUID=<UUID фС корневого раздела>
initrd /boot/initramfs-<kernel_version>

Или воспользуйтесь dracut.

Хотя я здесь не вижу ошибок.

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от kostik87

В общем, это я к чему, вам каждый раз придётся передавать ядру свой параметр root=/dev/sdXY. А это уже не хорошо. Но при использовании initramfs можно указывать вместо имени раздела идентификатор (UUID) или метку (LABEL) файловой системы.

Точно так же root=UUID=xxx... можно передавать ядру.

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

Ядро не умеет обрабатывать UUID и LABEL, этим занимается сценарий init в initramfs.

kostik87 ★★★★★
()

calculate-sources из оверлея calculate использовал я для таких целей.

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

man man;man genkernel

анонимус доставляет всё что скрыто

anonymous
()

cp, cpio в довесок к тому что уже используешь. Это если вручную стандартными средствами, но проще воспользоваться dracut, genkernel или чем подобным.

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

DEVTMPFS

# zgrep DEVTMPFS /proc/config.gz 
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y

Собственно, запускалось из grub вот так

root (hd0,0)
kernel /boot/vmlinuz-3.7.5 rootwait root=/dev/ram0 real_root=LABEL=t_root
initrd /boot/initramfs-genkernel-x86-3.7.5
Другие варианты попробую, как диск освободится.

Deleted
()

Собрал систему на флешке, все работает. Но с сетью просто беда. Тестирую на ноутбуке - вай-фай не работает. Оказывается, в конфиге ядра genkernel не включил по умолчанию поддержку моего чипсета. Хорошо,включил его сам, поставил на пересборку на всю ночь, утром не было времени проверить, но по идее должно включиться. Притащил флешку на работу, проверяю тут. Здесь обычный проводной интернет. Такая же ситуация - поддержки здешнего чипсета не включено.
Это что мне, с этим genkernel для обеспечения поддержки для каждого компа каждый раз что-то включать вручную в конфиге ядра?! Если genkernel предназначен для создания универсального ядра, то со своей задачей он не справляется вообще никак! Я хочу универсальное ядро, как в любом десктопном дистрибутиве, которое поддерживает 99% железа любого компа и чтобы не приходилось включать что-то в конфиге, когда после подключения к очередному компу что-то не взлетит «из коробки».
Взял сейчас конфиг ядра из Slackware, как тут советовали, прогнал через make oldconfig, компиллю. Но понятия не имею, что там включено, что выключено. Хотелось бы просто чтобы все работало и не заморачиваться этим.
Думал над тем, не сделать ли просто make allconfig или make allmodconfig. Но сколько такое ядро компиллиться будет и сколько оно будет загружаться, особенно на старых машинах? Может стоит попробовать, если ядро от Slackware меня не устроит?

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.