[SOLVED]Genkernel переписывает конфиг ядра?

Здравствуйте, уважаемые форумчане!
С какого-то обновления genkernel (примерно с осени 2018) при сборке ядра стал получать такое:

early-microcode: >> Preparing...
* CONFIG_MICROCODE_INTEL=y set but no ucode available. Please install sys-firmware/intel-microcode[split-ucode]
*                  >> adding AuthenticAMD.bin
* early-microcode: >> Creating cpio...

Машина AMD, при сборке правлю/проверяю конфиг через xconfig (menuconfig для очистки совести пробовал, без разницы), естественно CONFIG_MICROCODE_INTEL отключаю. ЧСХ, после сборки в /etc/kernels он включён, как и при проверке текущего (cat /proc/config.gz).
Надеялся, что само пройдёт, машина работает, но вот прилетело свежее ядро в stable, и опять резануло глаза.
Вопрос первый, риторический: нахрена так было делать, ведь всё работало нормально?
Вопрос второй, практический: можно ли это поведение исправить, если да, то как?

Покажи конфиг genkernel'я.

Покажи конфиг genkernel'я.
Вроде бы ты не новичок, а надо азы объяснять!..

?

Danhuu написал(а):
Здравствуйте, уважаемые форумчане!
С какого-то обновления genkernel (примерно с осени 2018) при сборке ядра стал получать такое:

early-microcode: >> Preparing...
* CONFIG_MICROCODE_INTEL=y set but no ucode available. Please install sys-firmware/intel-microcode[split-ucode]
*                  >> adding AuthenticAMD.bin
* early-microcode: >> Creating cpio...

Вопрос второй, практический: можно ли это поведение исправить, если да, то как?

/etc/genkernel.conf
# Add in early microcode support
#MICROCODE="no"

SysA написал(а): Покажи

SysA написал(а):
Покажи конфиг genkernel'я.
Вроде бы ты не новичок, а надо азы объяснять!..

http://dpaste.com/3TT3825

h4e написал(а):
/etc/genkernel.conf
# Add in early microcode support
#MICROCODE="no"

Фигня в том, что для моего процессора (AMD Phenom II X4) микрокод таки нужен. И раньше прекрасно работала такая конфигурация:

$ cat /etc/kernels/kernel-config-x86_64-4.9.95-gentoo-Shu | grep -i microcod
CONFIG_MICROCODE=y
# CONFIG_MICROCODE_INTEL is not set
CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y

И genkernel мне её не ломал. А теперь при конфигурации я выставляю то же самое, но получаю после обработки genkernel-ом:

$ cat /usr/src/linux/.config | grep -i microcod
CONFIG_MICROCODE=y
CONFIG_MICROCODE_INTEL=y
CONFIG_MICROCODE_AMD=y
CONFIG_MICROCODE_OLD_INTERFACE=y

При поиске по содержимому мне, в частности попалось такое (в /usr/share/genkernel/gen_configkernel.sh)

	# Microcode setting, intended for early microcode loading
	# needs to be compiled in.
	if isTrue ${MICROCODE}
	then
		for k in \
			CONFIG_MICROCODE \
			CONFIG_MICROCODE_INTEL \
			CONFIG_MICROCODE_AMD \
			CONFIG_MICROCODE_OLD_INTERFACE \
			CONFIG_MICROCODE_INTEL_EARLY \
			CONFIG_MICROCODE_AMD_EARLY \
			CONFIG_MICROCODE_EARLY \
			; do
			cfg=$(kconfig_get_opt "${KERNEL_OUTPUTDIR}/.config" "$k")
			case "$cfg" in
				y) ;; # Do nothing
				*) cfg='y'
			esac
			kconfig_set_opt "${KERNEL_OUTPUTDIR}/.config" "$k" "${cfg}"
		done
	fi

Т.е., теперь genkernel, ничтоже сумняшеся, считает, что если уж включать микрокод, то для всего. Привет от Билли! К сожалению, у меня не сохранилось старых версий, чтобы посмотреть, как это было там. Хотя примерно представляю, как это переписать, чтобы был выбор.
Итак, задача: при сборке ядра genkernel-ом получать микрокод для своего процессора.
Варианты:

  1. Плюнуть и оставить как есть. Ругается, но работает же.
  2. В /etc/genkernel.conf поставить MICROCODE="no" и сидеть без микрокода. Хорошо ли это?
  3. Попытаться самому переправить genkernel. Стрёмно - а вдруг ошибусь и убью процессор.
  4. Запилить баг. Как бы это сформулировать по-аглицки?

Все просто! Делай как я! ;)

Все очень просто! Делай как я! ;)

В /etc/genkernel.conf поставить

INSTALL="yes"
OLDCONFIG="no"
MENUCONFIG="no"
NCONFIG="no"
XCONFIG="no"
CLEAN="no"
MRPROPER="no"
MOUNTBOOT="yes"
SYMLINK="yes"
SAVE_CONFIG="yes"
USECOLOR="yes"
MAKEOPTS="$(portageq envvar MAKEOPTS)"
...
#MICROCODE="no"
...
DEFAULT_KERNEL_SOURCE="/usr/src/linux"
DEFAULT_KERNEL_CONFIG="${DEFAULT_KERNEL_SOURCE}/.config"
COMPRESS_INITRD_TYPE="gzip"
...

и конфигурировать ядро вручную (отдавать это на откуп какому-либо автомату - по-любому плохая идея IMHO) :

0. cd  /usr/src/linux
1. cp PathToOLdConfig .config
2. make oldconfig
3. diff .config.old .config
4. make xconfig/nconfig
5. genkernel all

Пункт 3 нужен, чтобы посмотреть, что вы там с автоконфигуратором натворили ;). Обычно при минорных изменениях меняется только версия.
Пункт 4, если нужны изменения.

Вот и все! Теперь генкернель будет брать то, что ты наконфигуришь... Только не забудь удалить копию конфигурации из /etc/kernels/ (куда она сохраняется при успешной сборке ядра), если хочешь изменить/перекомпилировать ранее скомпилированное ядро той же версии. Иначе генкернел будет генеретить ядро, используя сохраненную копию конфигурации.

Спасибо! 1) А в чём разница с

Спасибо!
1) А в чём разница с xconfig/menuconfig, запускаемыми из-под genkernel, как я обычно делаю?
2) И как же тогда грузить микрокод?

Danhuu

Danhuu написал(а):
Спасибо!
1) А в чём разница с xconfig/menuconfig, запускаемыми из-под genkernel, как я обычно делаю?
2) И как же тогда грузить микрокод?

1) графический / псевдографический интерфейс конфигуратора параметров ядра
2) я гружу при старте ядра, к примеру

#!/bin/bash
echo "Removing old early_ucode.cpio" && rm /boot/early_ucode.cpio
iucode_tool -S --write-earlyfw=/boot/early_ucode.cpio /lib/firmware/intel-ucode/*
grub-mkconfig -o /boot/grub/grub.cfg

Всем спасибо! В итоге

Всем спасибо!
В итоге оказалось достаточно закомментить в /etc/genkernel.conf строчку про микрокод, тогда конфиг не переписывается. Ессно, в процессе ручной конфигурации (в рамках того же genkernel, в /etc/genkernel.conf стоит XCONFIG="yes") выставляю

Device Drivers  --->
    Generic Driver Options 
        (amd-ucode/microcode_amd.bin) External firmware blobs to build into the kernel binary
        (/lib/firmware) Firmware blobs root directory

Ну, в общем, как в Вики написано. При этом,

alver@hare ~ $ dmesg | grep -i microcod
[    8.466084] microcode: microcode updated early to new patch_level=0x010000db
[    8.467784] microcode: CPU0: patch_level=0x010000db
[    8.469115] microcode: CPU1: patch_level=0x010000db
[    8.470794] microcode: CPU2: patch_level=0x010000db
[    8.470806] microcode: CPU3: patch_level=0x010000db
[    8.476231] microcode: Microcode Update Driver: v2.2.

также, как и в предыдущем ядре, когда в /etc/genkernel.conf стояло MICROCODE="yes".
Похоже, эта новомодная опция и состоит в том, чтобы вбивать в ядреный конфиг положительные ответы на оба микрокода для тех, кто на бронепоезде не пользуется [x]/[n]/[menu]config.
Помечаю вопрос решённым.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".