После каждого обновления ядра я должен запускать update-burg
вручную. Как мне сделать это автоматически?
Другой способ для вас - отредактировать /etc/kernel-img.conf
do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = update-burg
postrm_hook = update-burg
От: https://bugs.launchpad.net/burg/+bug/594431 (отчет об ошибке повторить ваш опыт)
Подобным образом можно удалить обновления, но, как и в /etc/
, вы должны (я думаю) получить запрос на сохранение существующей конфигурации, когда обновление попадет .
Как продолжают говорить люди из жучка, это все еще не идеально, поскольку есть все шансы, что кто-то захочет запустить burg и grub или, по крайней мере, синхронизировать их.
Вы можете пойти еще дальше и написать новый сценарий, подобный следующему:
#!/bin/sh
set -e
exec update-grub "$@"
exec update-burg "$@"
Сохраните его как /usr/sbin/update-bootloaders
, chmod +x
, а затем вставьте update-bootloaders
в /etc/kernel-img.conf
вместо update-grub
или update-burg
.
Я предполагаю, что в долгосрочной перспективе система alternatives
должна быть настроена для различных загрузчиков, которые существуют для java, аудио и других взаимозаменяемых подсистем.
Обычно update-grub
вызывается. Это просто то, что происходит. Система ожидает, что grub будет загрузчиком. Предполагая, что вы больше никогда не будете использовать grub, вы можете сделать это:
cd /usr/sbin/
sudo mv update-grub update-grub.backup
sudo ln -s update-burg update-grub
Это перемещает update-grub
в сторону и создает на его месте символическую ссылку, которая фактически запускается update-burg
. Поэтому, когда устанавливается новое ядро, оно вызывает update-grub
, что на самом деле update-burg
.
Хаки, но это должно сработать.
Для реверса:
cd /usr/sbin/
sudo rm update-grub # this is only a symlink
sudo mv update-grub.backup update-grub
Если у вас есть привычка выполнять sudo apt-get upgrade
для обновления ваших пакетов и ядер, следующий скрипт решит вашу проблему и на 100% устойчив к обновлениям:
#!/bin/bash
# Check what kernels are installed.
KERLST=`ls /boot | grep vmlinu`
# Do updates.
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
# Update burg if kernels changed.
if [ "$KERLST" != "`ls /boot | grep vmlinu`" ]; then
sudo update-burg
fi
Сохранить в виде текстового файла apgrade.sh и пометьте его как исполняемый. Этот скрипт выполнит все возможные обновления, проверит, не изменился ли список ядра, и обновит burg, если он это сделал. Я использую его с 10.04 (привязан к псевдониму), и до сих пор ни одно обновление не сломало его.
Если, однако, вам нравится делать обновления вручную через synaptic, то метод Оли может быть лучше.
Спасибо!
Я создал сценарий, основанный на наиболее полезной / наиболее оцененной информации, представленной здесь. Одно тонкое изменение заключается в том, что исполняемые файлы загрузчика больше не выполняются (как в случае с grub, он выходит; таким образом, скрипт завершается, а другие загрузчики не выполняются (@ Ubuntu11)).
Скрипт может быть настроен для нескольких загрузчиков .. (если исполняемый файл update-name
и в /usr/sbin
;-).
Это может быть расширено, чтобы разрешить обновление исполняемых файлов, которые не update-name
. Для этого, возможно, используйте name:exec
в качестве значений в конфигурационной переменной boot-loaders и разделите переменную var, затем измените соответствующую команду выполнения (вероятно, для элегантности потребуется использовать другой язык).
#!/bin/sh
# #################################################################
#
# Updates (multiple) bootloaders after kernel update.
#
# @shell bash
# @see http://askubuntu.com/questions/4905/how-to-automatically-update-burg-after-a-kernel-update
#
# #################################################################
#
# Install:
#
# -----------------------------------------------------------------
# * Save as: /usr/sbin/update-bootloaders
# * Then: chmod +x /usr/sbin/update-bootloaders
# * Edit /etc/kernel-img.conf and append/replace the following parameters:
# ** postinst_hook = update-bootloaders
# ** postrm_hook = update-bootloaders
#
# #################################################################
#
# Configuration:
#
# -----------------------------------------------------------------
# BOOTLOADERS: configuration variable to list bootloaders
BOOTLOADERS="grub burg"
#
# #################################################################
set -e
for BOOTLOADER in ${BOOTLOADERS}; do
EXEC="/usr/sbin/update-${BOOTLOADER}"
if [ -x ${EXEC} ]; then
echo "Updating ${BOOTLOADER}..."
${EXEC} "$@"
fi
done
# eof