Calculate🐧Forum

Жизнь без cl-kernel. Ручная сборка ядра со своим конфигом.

kernel
#1

После ночной пляски вокруг шаблонов и ядра посетило меня прозрение. Зачем мне плясать с автосборкой + своим шаблоном? У меня кто то отобрал штатные инструменты? Ключевое слово штатные, cl-kernel здорово меня избаловал, очень удобная была утилитка, светлая ей память.

Итак. Как я теперь устанавливаю и обновляю calculate kernel со своим конфигом. У меня ~amd64, FEATURES="-getbinpkg" выставлена глобально.

  • В package.use у меня: sys-kernel/calculate-sources -minimal -plymouth -themes -vmlinuz.
    _minimal_ дабы получить полное дерево исходников.
    _vmlinuz_ с целью пресечь автоматическую сборку. Предпочитаю собирать обновлённое ядро вручную, контролируя процесс.
    _plymouth_ не нужен. Мне нужно видеть ход загрузки, мне нужна возможность интерактивной загрузки, так как у меня unstable и всякое бывает. plymouth со всеми его зависимостями я из системы совсем вынес, не нужен он мне. Оставил только dracut, раз уж он теперь у нас главный по части initrd.

* Подготовка:

emerge calculate-sources
cd /usr/src/linux
make distclean       #вычищаем от самодеятельности и умолчального автоконфига.
zcat /proc/config.gz > .config
make oldconfig       #если ядро обновилось, или make menuconfig если играем настройками

* Сборка и установка

make -j40 --load-average=14 # У меня много памяти, ядер и raid0 из SSD.
make install
make modules_install
emerge @module-rebuild
dracut -H              #генерим initrd
cl-setup-boot

Собственно всё. Абсолютно стандартный процесс. Как то с cl-kernel я подзабыл как это делать руками.

После того как вы наиграетесь с параметрами и конфигурация устаканится можно будет превратить .config в шаблон и установить ядро штатным для дистрибутива Сalculate Linux методом.

zcat /proc/config.gz > /var/calculate/templates/.config
sed -i "1i # Calculate merge(sys-kernel/calculate-sources)!= ac_install_patch==on env=install cl_name==calculate-core" /var/calculate/templates/.config
USE="vmlinuz" emerge calculate-sources

Я предпочитаю держать юзфлаг vmlinuz отключенным глобально, поскольку хочу избежать автоматической сборки и установки в /boot новой версии ядра после её появления в оверлее. Поскольку мой конфиг отличается от умолчального, разумно снова сделать make oldconfig, поотвечать на вопросы и создать новый шаблон, если это необходимо.

#2

Alexander Tratsevskiy писал(а):

make -j40 --load-average=14 # У меня много памяти, ядер и raid0 из SSD.

Если это сервер и используется проверенное и настроенное под себя LTE ядро, то достаточно скопировать созданный вами .config в /var/calculate/templates/ и сконвертировать его в шаблон:

[…]

После этого можно обновляться штатным способом.

Это не сервер. Это старенькая, но мощная графическая\инженерная станция от HP. Она стоит у меня дома, я поддерживаю её в состоянии bleeding edge. Я на ней играю, моделирую сети - гоняю кучу виртуалок одновременно, вот тут она особенно хороша, иногда что нибудь рендерю.
Беда в том, что у неё слегка необычное по сравнению со стандартным офисным\домашним пк железо, специфичная архитектура и кривой БИОС с кривыми таблицами ACPI, не инициализирующий ряд мостов. Обхожу я всё это особой настройкой ядра, инжектом своих исправленных таблиц ACPI, дополнительными параметрами загрузки и т.п.
Поэтому кальковское стандартное ядро со стандартным конфигом её вешает либо сразу, либо потом… И поэтому у меня уже рефлекс, тщательно контролировать всё связанное с ядром и загрузкой.

Действительно, можно превратить конфиг в шаблон, дальше сделать USE=vmlinuz emerge calculate-kernel и поставить ядро штатно. Просто на момент написания статьи у меня это не получалось. Пост поправлю. Прописывать vmlinuz навсегда я не буду, поскольку хочу делать oldconfig на обновлённых версиях ядер руками и только потом обновлять шаблон и ставить новое ядро.

#3

В любом случае спасибо за статью.

#4

make -j40 --load-average=14 # У меня много памяти, ядер и raid0 из SSD.

Если это сервер и используется проверенное и настроенное под себя LTE ядро, то достаточно скопировать созданный вами .config в /var/calculate/templates/ и сконвертировать его в шаблон:

sed -i "1i # Calculate merge(sys-kernel/calculate-sources)!= ac_install_patch==on env=install cl_name==calculate-core" /var/calculate/templates/.config

После этого можно обновляться штатным способом.

#5

Спасибо за статью

#6

Спасибо, статья помогла ядро обновил, только по ctrl+alt+1-6 перестали работать терминалы - черный экран, не подскажите в чем причина и как исправить?

#7

по ctrl+alt+1-6 перестали работать терминалы - черный экран, не подскажите в чем причина и как исправить?

Я думаю с этим лучше в форум. И не забудьте приложить содержимое .config проблемного ядра (/proc/config.gz, если вы это не отключили, или /usr/src/linux/.config) и выхлоп dmesg. Удобно будет выложить два этих текста на http://pastebin.calculate-linux.ru/ (можно воспользоваться утилитой wgetpaste из оверлея calculate) и дать ссылки в тексте поста на форуме.

#8

Спасибо за рецепт!
Воспользовался на свежеустановленной 14 версии.
После команды dracut -H получил такой выхлоп:

Will not override existing initramfs (/boot/initramfs-3.14.18-calculate.img) without --force

но после перезагрузки свежесобранное ядро загрузилось.

После еще одной пересборки ядра и команды dracut -H --force получил вот такой выхлоп:

Executing: /usr/bin/dracut -H --force
00bootchart: Could not find command '/sbin/bootchartd'!
00dash: Could not find command '/bin/dash'!
dracut module 'i18n' will not be installed, because it's in the list to be omitted!
90crypt: Could not find command 'cryptsetup'!
dracut module 'multipath' will not be installed, because it's in the list to be omitted!
95fcoe-uefi: Could not find command 'dcbtool'!
95fcoe-uefi: Could not find command 'fipvlan'!
95fcoe-uefi: Could not find command 'lldpad'!
95iscsi: Could not find command 'iscsistart'!
95iscsi: Could not find command 'iscsi-iname'!
95nbd: Could not find command 'nbd-client'!
97biosdevname: Could not find command 'biosdevname'!
00dash: Could not find command '/bin/dash'!
90crypt: Could not find command 'cryptsetup'!
95fcoe-uefi: Could not find command 'dcbtool'!
95fcoe-uefi: Could not find command 'fipvlan'!
95fcoe-uefi: Could not find command 'lldpad'!
95iscsi: Could not find command 'iscsistart'!
95iscsi: Could not find command 'iscsi-iname'!
95nbd: Could not find command 'nbd-client'!
*** Including module: bash ***
*** Including module: caps ***
*** Including module: video ***
*** Including module: network ***
*** Including module: drm ***
*** Including module: plymouth ***
*** Including module: calculate ***
*** Including module: kernel-modules ***
*** Including module: nfs ***
*** Including module: resume ***
*** Including module: rootfs-block ***
*** Including module: terminfo ***
*** Including module: tuxonice ***
dracut-install: ERROR: installing 'tuxoniceui'
/usr/libexec/dracut-install -D /var/tmp/initramfs.27zeiw tuxoniceui
*** Including module: udev-rules ***
Skipping udev rule: 91-permissions.rules
Skipping udev rule: 80-drivers-modprobe.rules
*** Including module: usrmount ***
*** Including module: base ***
*** Including module: fs-lib ***
*** Including module: shutdown ***
*** Including modules done ***
*** Installing kernel module dependencies and firmware ***
*** Installing kernel module dependencies and firmware done ***
*** Resolving executable dependencies ***
*** Resolving executable dependencies done***
*** Pre-linking files ***
*** Pre-linking files done ***
*** Stripping files ***
*** Stripping files done ***
*** Store current command line parameters ***
*** Creating image file ***
*** Creating image file done ***

И опять же ядро загрузилось.

В связи с этим вопрос: как относиться к выхлопу команды dracut?
Это у меня одного так происходит? Если это у меня одного, то как побороть или не обращать внимание.

За ранее спасибо!

#9

Андрей По писал(а):

Спасибо за рецепт!
Воспользовался на свежеустановленной 14 версии.
После команды dracut -H получил такой выхлоп:
[…]
но после перезагрузки свежесобранное ядро загрузилось.

После еще одной пересборки ядра и команды dracut -H --force получил вот такой выхлоп:
[…]
И опять же ядро загрузилось.

В связи с этим вопрос: как относиться к выхлопу команды dracut?
Это у меня одного так происходит? Если это у меня одного, то как побороть или не обращать внимание.

За ранее спасибо!

Это нормальный выхлоп. Так и должно быть. Dracut ругается на невозможность запихать в initramfs то, чего у вас в системе нет. А нет этого у вас потому что вам это не нужно. Соответственно вам это не нужно и для этапа загрузки. Если вам вдруг что то из этого станет нужно, например iSCSI или прочая экзотика, то, после того как вы это установите в систему, dracut это найдёт и запихает в образ.

#10

Добрый день!
Спасибо! От сердца отлегло!

#11

Спасибо!!!

Mastodon Mastodon