Bug 38888

Summary: Просьба по добавлению опции установки ядра по умолчанию для систем с несколькими ядрами
Product: Sisyphus Reporter: Евгений Кухтинов <kuhtinov_ev>
Component: update-kernelAssignee: Vitaly Chikunov <vt>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: aen, antohami, asy, boyarsh, evg, kuhtinov_ev, lav, ldv, mike, ruslandh, vt
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Евгений Кухтинов 2020-09-03 17:37:39 MSK
Здравствуйте, коллеги.

Столкнулся недавно с необходимостью смены ядра загрузки по умолчанию для альтового первого пункта меню grub.
Ядра стоят оба un-def и std-def. Оба актуальные, причем un-def было установлено позже, т.е оно и было ядром по умолчанию.

В связи с этим предлагаю добавить в утилиту update-kernel "фичу", например -d, --default установка ядра по умолчанию.

К сожалению знаний не хватает сделать это самому.
Comment 1 Евгений Кухтинов 2020-09-03 17:42:31 MSK
Забыл добавить эта "фича" не должна заново качать ядра, модули, а просто устанавливать из этих двух, в моём случае, установленных ядер, одно, по умолчанию.
Comment 2 Антон Мидюков 2020-09-03 17:46:04 MSK
update-kernel -t std-def -f

Разве не оно?
Comment 3 Евгений Кухтинов 2020-09-03 18:13:31 MSK
Антон, update-kernel -f -t std-def тоже не помогло. Умолчальным осталось un-def. 
Помогло apt-get remove kernel-image-std-def и, следом update-kernel -t std-def
Но это излишние операции с удалением, установкой пакетов. Надо выделить функционал из этих манипуляций и оформить как фичу к update-kernel.
Comment 4 Vitaly Lipatov 2020-09-03 20:15:18 MSK
Управление меню grub, конечно, слабо относится к update-kernel, но вообще такая ручка для выбора очень даже интересна.
Comment 5 ruslandh 2020-09-03 20:40:28 MSK
Используйте команду 

installkernel

Например:

installkernel 5.7.19-un-def-alt1
Comment 6 Евгений Кухтинов 2020-09-04 06:01:52 MSK
installkernel конечно подходит, и пакеты вроде бы не скачивает. Но перегенеривает initrd и производит упаковку образа. Это не слишком ли для простой смены ядра по умолчанию? Я конечно не специалист в этом, но есть сомнения. Мб из скрипта installkernel пакета bootloader-utils вытянуть некую функциональность, урезать её и добавить к update-kernel фичей -d ?
Comment 7 Vitaly Chikunov 2020-09-04 06:10:13 MSK
JFYI. На разных архитектурах, на разных системах загрузки (bios/efi) есть разные варианты переключения и некоторые из них не работают. Так что задача не тривиальная.

Сколько я не пользовался использовать (там где было нужно) grub-set-default и grub-reboot ни разу они у меня не сработали как нужно (а у других людей на других системах якобы работали).
Comment 8 Евгений Кухтинов 2020-09-04 06:33:14 MSK
А может обернуть команду installkernel пока нет иного способа? На вариант наличия двух ядер. Например: update-kernel -d std-def и будет выбрано ядро std-def.
Comment 9 Vitaly Chikunov 2020-09-04 06:48:04 MSK
installkernel, на сколько я помню, выставляет симлинк vmlinuz (например, на vmlinuz-5.4.61-std-def-alt1), но если у вас в grub уже изменено умолчание с vmlinuz на что-то другое, то эта смена симлинка не окажет эффекта. Но, я не изучал эту тему глубоко - просто наблюдения с точки зрения очередного пользователя, для того кто будет это реализовывать (если будет).
Comment 10 ruslandh 2020-09-04 09:42:46 MSK
Тут много вариантов получается:
1 - какой загрузчик используется (grub, lilo, extlinux ...) Grub2 крнечно по-умолчанию, но это не единственный вариант.
2 - какой образ или какое поведение предусмотрено в конфигурационном  этого файле загрузчика.

Теоретически наверное, можно написать скрипт, который проверяет, что применяется grub2, затем устанавливает в  /etc/sysconfig/grub2 что-то типа:
...
GRUB_DEFAULT='saved'
GRUB_SAVEDEFAULT=true
....
(ну, или что-то другое)

ну и потом вызвать installkernel

А в случае, если это не grub, то просто вызвать installkernel.

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

И да - этот скрипт никак не связан по смыслу с обновлением ядра (updat-kernel)

PS IMHO перегенерить initrd всегда полезно, особенно если сменилось ядро или железо в компе ;-) А время это занимает немного.
Comment 11 ruslandh 2020-09-04 09:47:07 MSK
pps пропустил этап инициализации конфига (ggrub-mkconfig, lilo и т.п.  ) ;-)
Comment 12 Sergey Y. Afonin 2020-10-24 14:52:13 MSK
(In reply to ruslandh from comment #10)
> Тут много вариантов получается:
> 1 - какой загрузчик используется (grub, lilo, extlinux ...) Grub2 крнечно
> по-умолчанию, но это не единственный вариант.
> 2 - какой образ или какое поведение предусмотрено в конфигурационном  этого
> файле загрузчика.
> 
> Теоретически наверное, можно написать скрипт, который проверяет, что
> применяется grub2, затем устанавливает в  /etc/sysconfig/grub2 что-то типа:
> ...
> > GRUB_SAVEDEFAULT=true
> ....

Только как раз наоборот, false. Чтобы не менял. Но, вообще, у Grub уже есть готовый набор ручек в виде grub-set-default, grub-reboot, grub-entries:
https://www.altlinux.org/Grub#Как_отучить_GRUB2_запоминать_последний_выбранный_пункт?