LINUX.ORG.RU

dracut vs genkernel-next

 


1

2

Ранее мне было неясно, чем genkernel-next отличается от Dracut. Сейчас я думаю, что genkernel-next недоработан, потому что почти нигде не используется. А утилита командной строки dracut используется для сборки initrd для многих операционных систем (Fedora, Debian, Gentoo - то есть все форматы пакетов - rpm, deb, ebuild). К сожалению, на википедии страница про dracut не переведена на русский язык.

Я предполагаю, что ключевая разница между этими двумя утилитами заключается в том, что dracut умеет помещать systemd внутрь initrd, а genkernel-next не умеет. Мне было непонятно, как будут уживаться два systemd, один из которых запущен их initrd, а другой запускается с корневой файловой системы. Полегчало, когда случайно в интернете увидил команду systemctl switch-root

switch-root ROOT [INIT]

    Switches to a different root directory and executes a new system manager process below it. This is intended for usage in initial RAM disks ("initrd"), and will transition from the initrd's system manager process (a.k.a. "init" process) to the main system manager process which is loaded from the actual host volume. This call takes two arguments: the directory that is to become the new root directory, and the path to the new system manager binary below it to execute as PID 1. If the latter is omitted or the empty string, a systemd binary will automatically be searched for and used as init. If the system manager path is omitted, equal to the empty string or identical to the path to the systemd binary, the state of the initrd's system manager process is passed to the main system manager, which allows later introspection of the state of the services involved in the initrd boot phase.

Я так и не понял, что происходит с тем systemd, который из initramfs - он завершается, или засыпает на время, что сработать в момент выполнения shutdown, но перестал беспокоиться на эту тему.

genkernel-next имеет плохую документацию, в частности там не написано чётко и ясно, в чём риск настройки

# Run 'make mrproper' before configuration/compilation?
MRPROPER="no"

без этой настройки сборка ядра со всеми модулями занимает много времени (примерно полчаса). Мучительно больно обнаружить, что в конце сборки не найден файл при копировании одного из скриптов udev для lvm. Таких скриптов там примерно десяток, и это приводит к потере трёх часов времени на выполнение команды touch для отсутствующего файла, и затем на запуск команды genkernel all по-новой.

Не всегда возможно воспользоваться программой qemu для тестирования загрузки (например потому что текущее ядро может быть взято со старой флешки для восстановления системы, и не поддерживать модуль kvm). Это означает, что тестировать правильность формирования initramfs надо путём перезагрузки реального железа, что выполняется гораздо дольше.

При запуске у меня возникла проблема: ядро не обнаруживает жесткие диски при запуске, не формируются устройства /dev/sd*, а затем происходит вываливание в busybox, откуда ничего сделать уже нельзя. Похоже, что initramfs при этом не выполняется, вместе с его udev. Отдельно я бы хотел заметить, что использование busybox на текущем этапе развития вычислительной техники определённо идёт во вред. Это экономия за счёт пользователя нескольких байтов пространства, которая урезает возможности пользователя и удлиняет время обучения и отладки. Было бы гораздо лучше, если бы в initramfs по-умолчанию был стандартный bash и все утилиты, которые могут понадобится для работы с дисками, и совершенно неважно, какого они размера.

Также, очень плохо во всех интернет-материалах, что они не пролинкованы между собой. При сборке initramfs очень помогли бы гиперссылки на статьи про то, как отлаживают загрузку ядра, и как отлаживают сам initrd, какие параметры запуска можно в ядро передавать (например «debug»).

Собственно суть проблемы: собранное при помощи genkernel-next ядро с initrd не стартует. С dracut тоже не собирается. Два года назад я начал копировать ядро с initramfs из дистрибутива sabayon готовое. Это быстро, удобно. Но есть трудность: при возникновении проблем с gentoo люди просят логи emerge. А там написано, что используется ядро sabayon. И gentoo-шники встают в позу «ты пользуешься sabayon, туда и иди». Хотя от сабайона там давно только одно ядро.

Так же хотел бы высказаться по поводу модерирования на LOR. Некоторые участники форума выдвигают гипотезы, например о том, что я думаю «что мне все должны». Я так не думаю. Эти участники форума ошибаются, выдвигают ошибочные гипотезы. Я думаю по-другому (но всё равно не так, как они хотели бы, чтобы я думал). Однако модераторы поддаются на влияние неправильно думающих участников и стирают темы, содержащие полезную техническую информацию о проблемах, которая могла бы помочь другим пользователям (это я про ошибку при сборке firefox). Я понимаю, что модераторы тоже имеют право быть ТАКИМИ, это же LOR.

Если тебе нужно ядро собери его своими ручками. Если тебе нет житья без initrd/initramfs разберись один раз и собери его своими ручками.

Вся эта автоматизация с genkernel/genkernel-next/dracut как правило на проверку унылейшее глючнейшее говнище.

init_6 ★★★★★ ()

я думаю, что genkernel-next недоработан

Доработай! Это же опенсорс!

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

Доработай

Этот тред создан совсем для другого :) (см теги)

htower_ ★★ ()

Всё говнецо собрано в одном треде. Что systemd, что все эти initramfs, пора отказываться от лишних сущностей и пускать всё в легковесных контейнерах после загрузки ядра загрузчиком

menangen ★★★★★ ()

MRPROPER=«no»

Этим ты сохраняешь свой конфиг (и уже скомпилированные файлы) у ядра linux. ВСЁ.
Честно говоря вообще не пользовался genkernel(1..2 раза не считается, просто изучал). Когда надо было пользовался чем то сложнее запуска на одиночном диске(т.е. для raid,network, и т.д.), тогда брал «dracut» .
genkernel - вообще(если правильно помню) берет из своего конфига по умолчанию и добавляет те модули что сейчас запущены.
Т.е. на самый простой случай рассчитан.

Именно по этому вероятно и пытаются(IMHO) соорудить новую версию genkernel-next.

на 5% случаев будет достаточно genkernel.
На 94% случаев будет достаточно обычного dracut.
Остальное - это самосбор или модификация одного из предыдущих вариантов.

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

Если тебе нужно ядро собери его своими ручками.

Я раньше (до genkernel) собирал ядро руками. Таким образом, твоя гипотеза о том, что если я соберу ядро руками, то собранное ядро заработает - неверная.
Самая главная сложность там - это правильно проставить список вкомпилированных модулей. От того, что я перестану пользоваться genkernel, я не начну понимать, какие именно модули мне нужны.

Когда genkernel-вский initramfs загружается, он помимо всего прочего пишет такие строки:
Loading from virtio: virtio_scsi virtio_blk virtio_console virtio-rng virtio virtio_balloon virtio_ring virtio_pci cirtio_mmio virtio_crypto
Loading from sata: ahci libata ata_piix sata_promise sata_sil sata_sil24 sata_svw sata_via sata_nv sata_sx4 sata_sis sata_uli sata_vsc sata_qstor sata_mv sata_inic162 pdc_adma
Loading from scsi: mtpspi megraid_sas megaraid mpr2sas mpr3sas sg aic79xx aic7xxx arcmsr BusLogin initio fdomain gdth sym53c8xx dmx3181d gla1280 dc395x atp870u mptbase mptscsih mptfc mptsas 2w-sas 2w-xxxx 2e-9xxx cciss hpsa sx8 aacraid megaraid_mbox megaraid_mm gla2xxx scsi_transport_fc aic94xx
Loading from pata: libata pata_mpiix pata_pdc2027x pata_radisys pata_sil680 pata_rz1000 pata_efar pata_cmd64x pata_hpt366 pata_hpt37x pata_ns87410 pata_triflex pata_pfc202xx_old pata_netcell pata_sis pata_hpt3x2n pata_marvell pata_jmicron pata_via pata_sl82c105
Loading from usb: ehci-pci ehci-hcd xhci-hcd xhci-pci usb-storage uhci-hcd ohci-hcd sl811-hcd hid-gyration hid-loitech-dj hid-petalynx hid-pl hid-samsung hid-sony hid-sunplus
Loading from lvm: dm-mod dm-bufio dm-crypt dm-log dm-mirror dm-raid dm-region-bash dm-snapshot dm-zero dm-mod dm-snapshot dm-mirror dm-raid dm-crypt raid0 raid1 raid456 raid5 raid6 raid 10 linear multipath async_raid6_recov async_pq raid6_pq async_tx async_memcpy async_xor
Loading from mdadm: dm-mod dm-snapshot dm-mirror dm-raid dm-crypt raid0 raid1 raid456 raid5 raid6 raid10 linear multipath async_raid6_recov async_pq raid6_pq async_tx async_memcpy async_xor

Многое из этого полезное, и я бы хотел это оставить. В частности мне нужно что-то от virtio, чтобы загружать такое ядро в виртуалке qemu, что-то от USB, чтобы загружать такое ядро с флешки на реальнйо системе, что-то от mdadm и lvm, потому что без зеркала для дисков никак нельзя - данные могут потеряться при отказе диска. Остаются pata, sata и scsi. Что-то из них тоже нужно, чтобы ядро создало /dev/?da, /dev/?db и т.д.

Я не знаю, как по именам модулей угадать какую строчку надо записывать в файл /usr/src/linux/.config

Кроме того, хотелось бы точно знать какие модули нужны, глядя на команды диагностики железа (lshw, lspci, lsusb, lsscsi), это у меня тоже не получается.

Если я прочитаю руководство о том, как настраивать ядро Linux для конкретно работы с дисковой подсистемой, мне кажется, что тогда я начну понимать, какие конфигурационные константы нужны, и у меня всё получится не только «руками», но и через genkernel. Но не видел такого понятного руководства, только куцые и недостаточные попадаются.

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

Доработай! Это же опенсорс!

Плохой совет! Разработка genkernel-next заморожена, сейчас разрабатывается genkernel-4 и поэтому будущее genkernel-next туманно.

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

Этот тред создан совсем для другого

Я бы хотел отметить, что на сайте Gentoo можно скачать два готовых ядра: одно из minimal-CD, другое из Hybrid DVD.

То, которое из minimal-CD, оно не умеет mdadm и lvm. Если в строке параметров запуска ядра указать domdadm и dolvm, то ядро из minimal-cd напишет:
!! domdadm invoked but /sbin/mdadm not found: Skipping mdadm raid assembly ...
!! dolvm invoked but LVM binary not available: Skipping LVM volume group activation ...

У того ядра, которое с Hybrid DVD такой проблемы нет. Но там сам образ от 2016-го года. Из-за этого возникают другие проблемы, с запуском графического сервера.

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

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

пора отказываться от лишних сущностей и пускать всё в легковесных контейнерах после загрузки ядра загрузчиком

Вообще-то это именно то, что я хочу сделать. Я написал ebuild-ы для lxc и хочу установить, чтобы потестировать

А нужны контейнеры мне для того, чтобы в одном контейнере работал старый firefox, а в другом контейнере я установлю Firefox 75, для того чтобы поиграть «в шарики» (https://agar.io)

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

Или вот ещё: начиная с grub2 его конфигурационный файл называется grub.cfg, а не grub.conf. Но genkernel рекомендует отредактировать grub.conf. Это приводит к потере часов времени на разбирательства как сделать так, чтобы grub2 понимал имя grub.conf.

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

Плохой совет!

Хороший совет: забанься уже.

mord0d ★★★ ()

Подходящий тег характеризующий все твои треды.

xaTa ★★★ ()

не нойте

Господа гентушники, а также все страждущие. Вот вы рассуждаете о том, как же сложно сконфигурировать ядро «с нуля», как сложно то, сё... подгружаете ядра Sabayon'а (со своими патчами), и считаете такой костыль «выходом». Какие-то очень «умные» люди (видимо, не один проект уже закодили, почётные разрабы libre*, ну или по крайней мере каких-нибудь systemd или, на худой конец, postgres) предлагают доработать софт (не думаю, что такие больше одной строчки за всю жизнь на bash написали, да и ту скопиниздили). Развели срач из-за пары хороших, добрых советов. Во-первых, тема конфигурирования ядра, и правда, довольно «рвано» описана в этих ваших интернетах. Для конфигурирования ядра начинающим достаточно загрузиться с добротного live_cd (плевать какой дистр, главное — свежесть. чем ближе будет версия ядра на live_cd, тем меньше возникнет проблем с конфигурированием). После того, как все подготовлено к конфигурированию ядра, достаточно

cd /usr/src/linux
make mrproper
zcat /proc/config.gz > .config
make menuconfig
делаете косметику, (убираете то, что вам не нужно: поддержка ipv6, wifi, bloetooth, etc...), настраиваете тонкости по желанию (processor type and features). Все, конфиг готов. Если, правда, не знаете, что включать и выключать в ядре — пропускайте menuconfig, ядро соберётся и будет работать с вероятностью 99,9%

следующий шаг:

make && make modules_install && make install && make modules_prepare
genkernel --no-clean initramfs
grub-mkconfig -o /boot/grub/grub.cfg

не забудьте задать пароль passwd, и можете загрузиться в новую систему!

Почему я не собираю ядро с помощью genkernel? не знаю. так повелось. мне, наверное, лень менять свои привычки. Учитывая мою любовь к jfs, и нежелание зашивать поддержку jfs монолитно, я пользуюсь initramfs, и мне удобнее и быстрее использовать genkernel. Новичкам проще использовать готовый, универсальный, рабочий конфиг. Из него проще исключить то, что тебе не нужно, чем с «пустым» вспоминать и искать — а что же тебе может понадобиться. Надеюсь, советы полезны и кому-нибудь помогут решить проблемы сборки собственного ядра!

kuazaar ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей