LINUX.ORG.RU

Не обновлять grub \ Не изменять имя ядра

 ,


0

2

Всем привет. В Archlinux имеется удобное название ядра vmlinuz-linux и при обновлении ядра grub можно не обновлять,т.к. имя ядра не изменилось. Как сделать, чтобы в Debian\Fedora тоже всегда было одно и тоже имя ядра? Либо нужно использовать в grub какой либо шаблон на подобии

linux	/boot/vmlinuz-[*]



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

сделай себе кастомный core.img в grub, который будеть использовать не grub.cfg, а другое имя файла. Тогда всякие дистрибутивные обновлятели не будут ломать тебе загрузку.

А ты уж дальше как тебе надо сам будешь решать.

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

я уже не помню, помню только что ключевое слово которое надо в мане искать - embedded config. У меня он такой:

$ cat embedded.config 
insmod mdraid1x
insmod lvm
insmod ext2
insmod ext3
insmod ext4
insmod search_fs_uuid
insmod search_label
insmod echo

echo "Hello from embedded config 2017-06-11"
echo "(/boot/grub/mkimage/embedded.config was written by write.sh to"
echo "HDD:serial=WD-WCAW35634929,product=WDC WD1003FBYX-0 (lshw -C disk | grep WD))"
set uuid_value=17d1673a-1d37-4a44-9a69-da9db41b6e29
echo "searching for partition with id=${uuid_value}"

echo ""

search.fs_uuid ${uuid_value} root
set prefix=(${root})/boot/grub
echo root=${root}
echo prefix=${prefix}

echo ""

echo "Sleep will be the last command of embedded config."
set pause_timeout=120
echo "'sleep -v -i ${pause_timeout}' seconds (ESC key to avoid waiting)"
insmod sleep
sleep -v -i ${pause_timeout}

echo "@"
normal ${prefix}/grub.renamed.cfg

а записываю я его таким скриптом:

# cat write.sh
#!/bin/bash

# write.sh

DEVICE=/dev/sda

MODULES="
pci acpi scsi usb
mdraid1x lvm
biosdisk boot
 part_msdos msdospart drivemap ext2
multiboot linux elf
configfile normal echo sleep ls cat
hdparm loadenv
probe read reboot
search search_label search_fs_uuid
"

sed -i 's/${SERIAL}//' ./embedded.config

# Section 1.
# it's impossible to embed new config
# without rebuilding all binary modules into core.img file

LOC_MKIMAGE=""
if [ -f /usr/bin/grub-mkimage ]; then
    LOC_MKIMAGE=/usr/bin/grub-mkimage
fi

if [ -f /usr/bin/grub2-mkimage ]; then
    LOC_MKIMAGE=/usr/bin/grub2-mkimage
    MKIMAGE_PARAMS="-p ."
fi

if [ -z "${LOC_MKIMAGE}" ]; then
    echo "E1.${LOC_MKIMAGE}"
    echo "unable to determine mkimage location"
    exit
fi

echo "assembling core.img and embedding embedded.config..."
"${LOC_MKIMAGE}" ${MKIMAGE_PARAMS} --config=embedded.config -O i386-pc ${MODULES} -o core.img

# see http://www.davidpashley.com/articles/writing-robust-shell-scripts/#idm5413512
if [ "$?" -ne 0 ]; then echo "${LOC_MKIMAGE} command failed"; exit 1; fi

# Section 2 - embedding core.img into disk

LOC_BIOSSETUP=""
if [ -f /usr/sbin/grub-bios-setup ]; then
    LOC_BIOSSETUP=/usr/sbin/grub-bios-setup
fi

if [ -f /usr/sbin/grub2-bios-setup ]; then
    LOC_BIOSSETUP=/usr/sbin/grub2-bios-setup
fi

if [ -z "${LOC_BIOSSETUP}" ]; then
    echo "E2. ${LOC_BIOSSETUP}"
    echo "unable to determine grub-bios-setup location"
    exit
fi

echo "embedding core.img into device..."
"${LOC_BIOSSETUP}" -d . "${DEVICE}"
if [ "$?" -ne 0 ]; then echo "${LOC_BIOSSETUP} command failed"; exit 1; fi

echo "syncing..."
sync
echo "done."
Но наверное можно как-то и более стандартными способами сделать, типа прочитать man grub-install и передать ему правильные параметры.

Einstok_Fair ★★☆
()

поставь refind вместо grub. Refind сканирует ядра во время загрузки и, как следствие, вообще не нуждается ни в каких обновлениях

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

Если загрузчик на одном дистрибутиве, а ядра обновляются на всех, то ничего само не будет

Вы сами свой вопрос понимаете?

q13
()

С момента когда у меня последний раз был debian-based помню, что в /boot/ лежал симлинк на актуальное ядро и initrd. Если сейчас его нет, то хук на создание сделать не сложно должно быть.

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

хук на создание сделать не сложно должно быть.

в каждой установленной/обновляемой операционке

Einstok_Fair ★★☆
()

Refind сканирует ядра во время загрузки

Как долго проходит это сканирование?

в /boot/ лежал симлинк на актуальное ядро

Это идея конечно хорошая, но тогда возникаем необходимость не забывать делать эти линки.

ForumLiker
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.